1616from taskiq .exceptions import BrokerError
1717from taskiq .message import BrokerMessage
1818
19+ from taskiq_sqs .aws import get_container_credentials
20+
1921if TYPE_CHECKING :
2022 from mypy_boto3_sqs .service_resource import Queue , SQSServiceResource
2123
@@ -37,15 +39,28 @@ def __init__(
3739 result_backend : Optional [AsyncResultBackend ] = None ,
3840 task_id_generator : Optional [Callable [[], str ]] = None ,
3941 sqs_region_override : str | None = None ,
42+ force_ecs_container_credentials = False ,
4043 ) -> None :
4144 super ().__init__ (result_backend , task_id_generator )
4245
4346 if not sqs_queue_url or not sqs_queue_url .startswith ("http" ):
4447 raise BrokerError ("A valid SQS Queue URL is required" )
4548
49+ creds = dict ()
50+ # NOTE: This bypasses the normal order of operations for boto3 auth and
51+ # goes straight to using the ECS role creds from the metadata
52+ # service. This can be useful in edge cases where there are higher
53+ # priority credentials you do not want to use for this service.
54+ if force_ecs_container_credentials :
55+ creds = get_container_credentials ()
56+
4657 self .sqs_queue_url = sqs_queue_url
4758 self ._sqs : SQSServiceResource = boto3 .resource (
48- "sqs" , region_name = sqs_region_override
59+ "sqs" ,
60+ region_name = sqs_region_override ,
61+ aws_access_key_id = creds .get ("AccessKeyId" ),
62+ aws_secret_access_key = creds .get ("SecretAccessKey" ),
63+ aws_session_token = creds .get ("Token" ),
4964 )
5065 self ._sqs_queue : Optional [Queue ] = None
5166
0 commit comments