diff --git a/gems/aws-sdk-sqs/CHANGELOG.md b/gems/aws-sdk-sqs/CHANGELOG.md index 750c0f6ddef..4a1ad06a755 100644 --- a/gems/aws-sdk-sqs/CHANGELOG.md +++ b/gems/aws-sdk-sqs/CHANGELOG.md @@ -1,6 +1,8 @@ Unreleased Changes ------------------ +* Feature - Support disabling queue url region detection through `disable_queue_url_region_detection`. + 1.110.0 (2026-01-16) ------------------ diff --git a/gems/aws-sdk-sqs/lib/aws-sdk-sqs/client.rb b/gems/aws-sdk-sqs/lib/aws-sdk-sqs/client.rb index b545b9edd1f..176b83479a9 100644 --- a/gems/aws-sdk-sqs/lib/aws-sdk-sqs/client.rb +++ b/gems/aws-sdk-sqs/lib/aws-sdk-sqs/client.rb @@ -213,6 +213,9 @@ class Client < Seahorse::Client::Base # @option options [Boolean] :disable_host_prefix_injection (false) # When `true`, the SDK will not prepend the modeled host prefix to the endpoint. # + # @option options [Boolean] :disable_queue_url_region_detection (false) + # When set to `true`, the region will not be extracted from a provided queue url. Defaults to `false`. + # # @option options [Boolean] :disable_request_compression (false) # When set to 'true' the request body will not be compressed # for supported operations. 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 5c8696d26b0..53ae871461c 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 @@ -5,6 +5,19 @@ module SQS module Plugins # @api private class QueueUrls < Seahorse::Client::Plugin + # When set to `true`, the signing region will not be modified if the configured + # region does not match the region extracted from a provided queue url. + # + # When set to 'false', the signing region will be modified to use the region + # extracted from a provided queue url if it differs from the configured region. + option( + :disable_queue_url_region_detection, + default: false, + doc_type: 'Boolean', + docstring: <<~DOCS) + When set to `true`, the region will not be extracted from a provided queue url. Defaults to `false`. + DOCS + # Extract region from a provided queue_url class Handler < Seahorse::Client::Handler def call(context) @@ -22,6 +35,8 @@ def update_endpoint(context, url) # If the region in the queue url is not the configured # region, then we will modify signing to use it def update_region(context, queue_url) + return if context.config.disable_queue_url_region_detection + if (queue_region = parse_region(queue_url)) && queue_region != context.config.region context[:auth_scheme]['signingRegion'] = queue_region diff --git a/gems/aws-sdk-sqs/sig/client.rbs b/gems/aws-sdk-sqs/sig/client.rbs index 1ada83baf19..61c448fc128 100644 --- a/gems/aws-sdk-sqs/sig/client.rbs +++ b/gems/aws-sdk-sqs/sig/client.rbs @@ -28,6 +28,7 @@ module Aws ?correct_clock_skew: bool, ?defaults_mode: String, ?disable_host_prefix_injection: bool, + ?disable_queue_url_region_detection: bool, ?disable_request_compression: bool, ?endpoint: String, ?endpoint_cache_max_entries: Integer, diff --git a/gems/aws-sdk-sqs/sig/resource.rbs b/gems/aws-sdk-sqs/sig/resource.rbs index 1ff334c2a2e..8967dace810 100644 --- a/gems/aws-sdk-sqs/sig/resource.rbs +++ b/gems/aws-sdk-sqs/sig/resource.rbs @@ -28,6 +28,7 @@ module Aws ?correct_clock_skew: bool, ?defaults_mode: String, ?disable_host_prefix_injection: bool, + ?disable_queue_url_region_detection: bool, ?disable_request_compression: bool, ?endpoint: String, ?endpoint_cache_max_entries: Integer, 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 c39b9c8fbf3..de530806694 100644 --- a/gems/aws-sdk-sqs/spec/client/queue_urls_spec.rb +++ b/gems/aws-sdk-sqs/spec/client/queue_urls_spec.rb @@ -81,6 +81,32 @@ module SQS expect(resp.context.http_request.headers['authorization']) .to include('us-west-2') end + + it 'disables region detection when disable_queue_url_region_detection is true' do + url = 'https://sqs.us-west-2.amazonaws.com/1234567890/demo' + client = Client.new( + stub_responses: true, + region: 'us-east-1', + disable_queue_url_region_detection: true + ) + resp = client.send(method, params.merge(queue_url: url)) + expect(resp.context.http_request.headers['authorization']) + .to include('us-east-1') + expect(resp.context.http_request.headers['authorization']) + .not_to include('us-west-2') + end + + it 'uses configured region for custom endpoints when detection disabled' do + url = 'https://sqs.elb-proxy.elb-gamma.us-east-1.amazonaws.com/1234567890/demo' + client = Client.new( + stub_responses: true, + region: 'us-east-1', + disable_queue_url_region_detection: true + ) + resp = client.send(method, params.merge(queue_url: url)) + expect(resp.context.http_request.headers['authorization']) + .to include('us-east-1') + end end end end