"TypeError: expected string, tuple found" when passing aws credentials to amazon client constructor
"TypeError: expected string, tuple found" when passing aws credentials to amazon client constructor
我有一个 python 脚本,它使用 boto3 调用 Amazon SES api。当我像这样创建客户端 client = boto3.client('ses')
并允许 aws 凭据来自 ~/.aws/credentials
时,它会起作用,但我想以某种方式将 aws_access_key_id
和 aws_secret_access_key
传递到构造函数中。
我以为我找到了某个地方说做这样的事情是可以接受的
client = boto3.client(
'ses',
aws_access_key_id=kwargs['aws_access_key_id'],
aws_secret_access_key=kwargs['aws_secret_access_key'],
region_name=kwargs['region_name']
)
但是当我尝试发送电子邮件时,它告诉我在 botocore/auth.py (line 276)
中尝试 return '/'.join(scope)
时有一个 TypeError: sequence item 0: expected string, tuple found
。
我知道这有点遥不可及,但我希望有人知道如何将这些凭据从 aws 凭据文件以外的其他地方传递给客户端。我还有错误的完整堆栈跟踪,如果这有帮助,我也可以 post。我只是不想一开始就把问题弄得一团糟。
您需要在别处配置连接信息,然后使用以下方式连接:
client = boto3.client('ses', AWS_REGION)
另一种方法,使用 Session
可以像这样完成:
from boto3.session import Session
# create boto session
session = Session(
aws_access_key_id=settings.AWS_ACCESS_KEY_ID,
aws_secret_access_key=settings.AWS_SECRET_ACCESS_KEY,
region_name=settings.AWS_REGION
)
# make connection
client =session.client('s3')
我有一个 python 脚本,它使用 boto3 调用 Amazon SES api。当我像这样创建客户端 client = boto3.client('ses')
并允许 aws 凭据来自 ~/.aws/credentials
时,它会起作用,但我想以某种方式将 aws_access_key_id
和 aws_secret_access_key
传递到构造函数中。
我以为我找到了某个地方说做这样的事情是可以接受的
client = boto3.client(
'ses',
aws_access_key_id=kwargs['aws_access_key_id'],
aws_secret_access_key=kwargs['aws_secret_access_key'],
region_name=kwargs['region_name']
)
但是当我尝试发送电子邮件时,它告诉我在 botocore/auth.py (line 276)
中尝试 return '/'.join(scope)
时有一个 TypeError: sequence item 0: expected string, tuple found
。
我知道这有点遥不可及,但我希望有人知道如何将这些凭据从 aws 凭据文件以外的其他地方传递给客户端。我还有错误的完整堆栈跟踪,如果这有帮助,我也可以 post。我只是不想一开始就把问题弄得一团糟。
您需要在别处配置连接信息,然后使用以下方式连接:
client = boto3.client('ses', AWS_REGION)
另一种方法,使用 Session
可以像这样完成:
from boto3.session import Session
# create boto session
session = Session(
aws_access_key_id=settings.AWS_ACCESS_KEY_ID,
aws_secret_access_key=settings.AWS_SECRET_ACCESS_KEY,
region_name=settings.AWS_REGION
)
# make connection
client =session.client('s3')