Search code examples
amazon-web-servicesgoamazon-sqsaws-regions

Is it okay to fetch AWS region from SQS url?


I have an SQS URL which includes region as well. I am using official Go SDK to perform operations on this SQS which require AWS region to initialize the session. Currently, I have written a utility function to parse the URL and return AWS region.

Sample URL: https://sqs.us-east-1.amazonaws.com/774557911234/my_sqs_name

Sample Initialization code:

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

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

Sample function to get region from URL

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

Just wondering if this is the correct approach.

Would there be any case where SQS URL will have a different region in URL than the region in which SQS exists?

Should I just add one more environment variable to be set in the service?


Solution

  • Cited from here: https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-queue-message-identifiers.html

    Important

    In your system, always store the entire queue URL exactly as Amazon SQS returns it to you when you create the queue (for example, http://sqs.us-east-2.amazonaws.com/123456789012/queue2). Don't build the queue URL from its separate components each time you need to specify the queue URL in a request because Amazon SQS can change the components that make up the queue URL.

    As explained, they can change the structure of the URL sometimes in the future for whatever reason. Queue region will probably still stay somewhere in the url, but not necessarily in the spot that you expect it to be.

    So, all thinks considered, I think that introducing new environment variable is the right way to go.