Можно ли получить регион AWS из URL SQS?

У меня есть SQS URL который включает в себя регион, а также. Я использую официальный GO SDK выполнять операции на этом SQS которые требуют AWS region инициализировать сессию. В настоящее время я написал служебную функцию для анализа URL и возврата AWS region,

Пример URL: https://sqs.us-east-1.amazonaws.com/774557911234/my_sqs_name

Пример кода инициализации:

sess, err := session.NewSession()
if err != nil {
    return
}

s := sqs.New(sess, aws.NewConfig().WithRegion(getRegionFromSQSURL(config.SQSURL))

Пример функции для получения региона из URL

func getRegionFromSQSURL(url string) string {
    return strings.Split(url, ".")[1]
}

Просто интересно, если это правильный подход.

Был бы какой-нибудь случай, когда SQS URL будет иметь другой регион в URL, чем регион, в котором SQS существует?

Должен ли я просто добавить еще одну переменную среды для установки в службе?

3 ответа

Решение

Цитируется здесь: https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-queue-message-identifiers.html

Важный

В вашей системе всегда храните весь URL-адрес очереди в точности так, как Amazon SQS возвращает его вам при создании очереди (например, http://sqs.us-east-2.amazonaws.com/123456789012/queue2). Не создавайте URL-адрес очереди из его отдельных компонентов каждый раз, когда вам нужно указать URL-адрес очереди в запросе, поскольку Amazon SQS может изменять компоненты, составляющие URL-адрес очереди.

Как объяснено, они могут изменить структуру URL иногда в будущем по любой причине. Регион очереди, вероятно, все еще останется где-то в URL, но не обязательно в том месте, где вы ожидаете.

Итак, все думают, я думаю, что введение новой переменной среды - правильный путь.

Да, это должно быть совершенно безопасно, чтобы извлечь регион из URL-адреса очереди.

Документированная рекомендация, цитируемая в другом месте , не говорит о том, что небезопасно деконструировать URL-адрес очереди в ее компоненты, а скорее рекомендует не создавать URL-адрес очереди из его компонентов. Предостережение - хранить весь URL. Нет никакой рекомендации не разбирать это вообще.

В вашей системе всегда сохраняйте весь URL-адрес очереди точно так же, как Amazon SQS возвращает его вам при создании очереди

Часть имени хоста в URL является довольно детерминированной, и региональные конечные точки для SQS очень непротиворечивы sqs.${region}.amazonaws.com,

Нет очевидных причин не полагаться на имя хоста для определения региона. AWS редко меняет имена хостов конечных точек, и в тех немногих случаях, которые у них есть, они делают их более предсказуемыми. Между тем старые все еще тихо там - например, оригинальные конечные точки, такие как queue.amazonaws.com а также us-west-1.queue.amazonaws.com все еще активны и кажутся полностью функциональными, даже если они были официально заменены sqs.us-[east | west]-1.amazonaws.com, В последнее время AWS стал более последовательным и иерархичным с соглашениями о конечных точках, но при этом они не сломали старых клиентов, где эти значения жестко закодированы.

Если я правильно понимаю, возникает вопрос, можно ли извлечь регион AWS из URL SQS...

Простой ответ будет ДА. Но я НЕ РЕКОМЕНДУЮ этого.

Во-первых, извлечение Region из фиксированного URL SQS, который сохраняется в файле конфигурации, является просто дополнительной обработкой. Поскольку он уже хранится в файле конфигурации, мы также можем указать AWS-регион в файле конфигурации, потому что регион, в котором мы работаем, не изменится динамически, если мы не решим изменить его вручную. Если вы посмотрите на эту документацию, регион AWS обычно сохраняется в файле конфигурации для лучшей управляемости.

Во-вторых, использование разделения для извлечения области из строки недопустимо. Это все равно что пытаться взломать вещи, чтобы получить то, что вам нужно. Это не хорошая практика кодирования.

В-третьих, выше вы указали конечную точку AWS SQS для конкретной очереди. Прочтите эту документацию и поймите структуру конечных точек AWS. Конечные точки AWS не всегда содержат регион внутри него, в структуре Sting. Всегда рекомендуется поддерживать отдельный параметр в файле конфигурации для региона AWS.

Некоторые службы, такие как IAM, не поддерживают регионы; следовательно, их конечные точки не включают регион. Некоторые сервисы, такие как Amazon EC2, позволяют указывать конечную точку, которая не включает конкретный регион, например, https://ec2.amazonaws.com/. В этом случае AWS направляет конечную точку на us-east-1.

Другие вопросы по тегам