"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_idaws_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')