Можно ли получить регион 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.