预期的 str 实例,设置在使用 Boto3 时找到

expected str instance, set found when using Boto3

我正在使用 boto3 并像这样输入我的凭据:

dynamodb_client = boto3.client('dynamodb', region_name='us-west-2', aws_access_key_id={access_key}, aws_secret_access_key={secret_key})

我收到此错误,从在线搜索看来,这是因为我也没有包含我的会话令牌。有没有更好的方法来输入我的访问密钥和会话令牌?

对于上下文,当 运行 在本地运行我的程序时(因为我是通过 aws cli 登录到我的帐户),我没有这个问题。我正在创建一个 docker 图像,当我 运行 出现身份验证错误的 docker 图像时,我添加了我的凭据,现在我收到了这个错误,我' m 假设与会话密钥相关。我很好奇是否还有其他方法,或者我是否必须创建一个临时会话令牌并将其添加到我的环境变量文件夹中

File "/usr/local/lib/python3.8/site-packages/botocore/auth.py", line 424, in _inject_signature_to_request
    auth_str = ['AWS4-HMAC-SHA256 Credential=%s' % self.scope(request)]
  File "/usr/local/lib/python3.8/site-packages/botocore/auth.py", line 373, in scope
    return '/'.join(scope)
TypeError: sequence item 0: expected str instance, set found

问题不在于您没有会话令牌。

问题是您将访问密钥 ID 和秘密访问密钥包装在字典中,但 Boto3 需要 2 个字符串值。

提示在:

expected str instance, set found

替换:

dynamodb_client = boto3.client(
  'dynamodb',
  region_name='us-west-2',
  aws_access_key_id={access_key},
  aws_secret_access_key={secret_key}
)

有:

dynamodb_client = boto3.client(
  'dynamodb',
  region_name='us-west-2',
  aws_access_key_id=access_key,
  aws_secret_access_key=secret_key
)

请注意缺少大括号 create & initialise a dictionary for you