diff --git a/gems/aws-sdk-sqs/CHANGELOG.md b/gems/aws-sdk-sqs/CHANGELOG.md index c7838a217af..d0001ffc461 100644 --- a/gems/aws-sdk-sqs/CHANGELOG.md +++ b/gems/aws-sdk-sqs/CHANGELOG.md @@ -1,6 +1,8 @@ Unreleased Changes ------------------ +* Issue - Support VPC Endpoint pattern in Aws::SQS::Plugins::QueueUrl (Github #2114) + 1.23.0 (2019-10-23) ------------------ diff --git a/gems/aws-sdk-sqs/lib/aws-sdk-sqs/plugins/queue_urls.rb b/gems/aws-sdk-sqs/lib/aws-sdk-sqs/plugins/queue_urls.rb index 743790a6a04..f120933bd6a 100644 --- a/gems/aws-sdk-sqs/lib/aws-sdk-sqs/plugins/queue_urls.rb +++ b/gems/aws-sdk-sqs/lib/aws-sdk-sqs/plugins/queue_urls.rb @@ -22,7 +22,7 @@ def update_endpoint(context, url) # region, then we will modify the request to have # a sigv4 signer for the proper region. def update_region(context, queue_url) - if queue_region = queue_url.to_s.split('.')[1] + if queue_region = parse_region(queue_url) if queue_region != context.config.region config = context.config.dup config.region = queue_region @@ -33,6 +33,16 @@ def update_region(context, queue_url) end end + private + + # take the first component after service delimiter + # https://sqs.us-east-1.amazonaws.com/1234567890/demo + # https://vpce-x-y.sqs.us-east-1.vpce.amazonaws.com/1234567890/demo + def parse_region(url) + parts = url.split('sqs.') + parts[1].split('.').first if parts.size > 1 + end + end handler(Handler) diff --git a/gems/aws-sdk-sqs/spec/client/queue_urls_spec.rb b/gems/aws-sdk-sqs/spec/client/queue_urls_spec.rb index 863c07a2f63..f5a4049d35f 100644 --- a/gems/aws-sdk-sqs/spec/client/queue_urls_spec.rb +++ b/gems/aws-sdk-sqs/spec/client/queue_urls_spec.rb @@ -45,6 +45,15 @@ module SQS expect(resp.context.http_request.headers['authorization']).to include('cn-north-1') end + it 'supports vpc endpoint queue URL' do + url = "https://vpce-xxxx-yyyy.sqs.us-east-1.vpce."\ + "amazonaws.com/1234567890/demo" + client = Client.new(stub_responses:true, region: 'cn-north-1') + resp = client.send(method, params.merge(queue_url: url)) + expect(resp.context.http_request.headers['authorization']) + .to include('us-east-1') + end + it 'raises an error for a badly formatted queue url' do expect { client = Client.new(stub_responses:true)