使用 boto 连接到 Amazon SQS
Connecting to Amazon SQS using boto
我正在尝试通过 python boto 库连接到 Amazon SQS。
import boto3
sqs= boto3.resource('sqs')
for queue in sqs.queues.all():
print(queue.url)
我已将我的凭据存储在 ~/.aws/credentials 文件中
[default]
aws_access_key_id=XXX
aws_secret_access_key=YYY
region=us-west-2
但是当我执行代码时出现错误
botocore.exceptions.ClientError: An error occurred (AccessDenied) when
calling the ListQueues operation: Access to the resource
https://us-west-2.queue.amazonaws.com/ is denied.
我尝试直接连接到队列。
LCqueue = sqs.get_queue_by_name(QueueName='myQueue')
但是它告诉我没有这样的队列。即使我可以在 AWS 管理控制台上看到它。有什么想法吗?
我的 IAS 管理控制台也出现错误。我无法列出任何用户。
您确定您的用户已获得 SQS
许可吗?
转到 IAM 服务,select 您的用户(您从 CLI 使用的用户)并检查附加到您的用户的 group/permission。
如果没有,可以在 "Search IAM" 框(左上角)中搜索 SQS
Select "Attach entities to AmazonSQSReadOnlyAccess (or AmazonSQSFullAccess)" 并为您的用户附加预定义策略
我最终使用了之前版本的 Boto (2)
我知道这是旧的,但如果有人首先访问 SO:这可能是因为您尝试连接到的区域。
我可以通过 aws Web 控制台访问 us-east-1 中的 SQS,但是尝试从 us-east-1 中的队列中检索消息导致 python 客户端拒绝访问。
谢天谢地,根据 github 讨论:https://github.com/aws/aws-sdk-php/issues/188#issuecomment-258880267,我尝试将区域更改为我应该拥有权限的区域,并且我能够从其中创建的队列接收消息区域。
虽然其他答案也有它们的用处,但我的问题最终只是我需要明确地将 aws_access_key_id
和 aws_secret_access_key
参数传递给 boto3.client() 调用。 (在 ~/.aws/credentials 中使用 [default] 配置是不够的。)
import boto3
from django.conf import settings
sqs = boto3.client('sqs',
region_name=settings.AWS_DEFAULT_REGION,
aws_access_key_id=settings.AWS_ACCESS_KEY_ID,
aws_secret_access_key=settings.AWS_SECRET_ACCESS_KEY)
虽然我从 settings
中提取这些值,但 settings
中的值最终是从环境变量中提取的,即 不要[=22] =] 只需将 AWS_ACCESS_KEY_ID
和 AWS_SECRET_ACCESS_KEY
保存到您的设置文件并提交 Git。它们是敏感数据,您还希望能够即时更新它们,而不是重新提交等。
我正在尝试通过 python boto 库连接到 Amazon SQS。
import boto3
sqs= boto3.resource('sqs')
for queue in sqs.queues.all():
print(queue.url)
我已将我的凭据存储在 ~/.aws/credentials 文件中
[default]
aws_access_key_id=XXX
aws_secret_access_key=YYY
region=us-west-2
但是当我执行代码时出现错误
botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the ListQueues operation: Access to the resource https://us-west-2.queue.amazonaws.com/ is denied.
我尝试直接连接到队列。 LCqueue = sqs.get_queue_by_name(QueueName='myQueue')
但是它告诉我没有这样的队列。即使我可以在 AWS 管理控制台上看到它。有什么想法吗?
我的 IAS 管理控制台也出现错误。我无法列出任何用户。
您确定您的用户已获得 SQS
许可吗?
转到 IAM 服务,select 您的用户(您从 CLI 使用的用户)并检查附加到您的用户的 group/permission。
如果没有,可以在 "Search IAM" 框(左上角)中搜索 SQS
Select "Attach entities to AmazonSQSReadOnlyAccess (or AmazonSQSFullAccess)" 并为您的用户附加预定义策略
我最终使用了之前版本的 Boto (2)
我知道这是旧的,但如果有人首先访问 SO:这可能是因为您尝试连接到的区域。
我可以通过 aws Web 控制台访问 us-east-1 中的 SQS,但是尝试从 us-east-1 中的队列中检索消息导致 python 客户端拒绝访问。
谢天谢地,根据 github 讨论:https://github.com/aws/aws-sdk-php/issues/188#issuecomment-258880267,我尝试将区域更改为我应该拥有权限的区域,并且我能够从其中创建的队列接收消息区域。
虽然其他答案也有它们的用处,但我的问题最终只是我需要明确地将 aws_access_key_id
和 aws_secret_access_key
参数传递给 boto3.client() 调用。 (在 ~/.aws/credentials 中使用 [default] 配置是不够的。)
import boto3
from django.conf import settings
sqs = boto3.client('sqs',
region_name=settings.AWS_DEFAULT_REGION,
aws_access_key_id=settings.AWS_ACCESS_KEY_ID,
aws_secret_access_key=settings.AWS_SECRET_ACCESS_KEY)
虽然我从 settings
中提取这些值,但 settings
中的值最终是从环境变量中提取的,即 不要[=22] =] 只需将 AWS_ACCESS_KEY_ID
和 AWS_SECRET_ACCESS_KEY
保存到您的设置文件并提交 Git。它们是敏感数据,您还希望能够即时更新它们,而不是重新提交等。