当我简单地运行下面的代码时,我总是得到这个错误。

s3 = boto3.resource('s3')
bucket_name = "python-sdk-sample-%s" % uuid.uuid4()
print("Creating new bucket with name:", bucket_name)
s3.create_bucket(Bucket=bucket_name)

我已将我的证书文件保存在

C:\Users\myname\.aws\证书,从那里Boto应该读我的证书。

我的设置错了吗?

下面是boto3的输出。set_stream_logger (botocore,级别=“调试”)。

2015-10-24 14:22:28,761 botocore.credentials [DEBUG] Skipping environment variable credential check because profile name was explicitly set.
2015-10-24 14:22:28,761 botocore.credentials [DEBUG] Looking for credentials via: env
2015-10-24 14:22:28,773 botocore.credentials [DEBUG] Looking for credentials via: shared-credentials-file
2015-10-24 14:22:28,774 botocore.credentials [DEBUG] Looking for credentials via: config-file
2015-10-24 14:22:28,774 botocore.credentials [DEBUG] Looking for credentials via: ec2-credentials-file
2015-10-24 14:22:28,774 botocore.credentials [DEBUG] Looking for credentials via: boto-config
2015-10-24 14:22:28,774 botocore.credentials [DEBUG] Looking for credentials via: iam-role

当前回答

终端类型:-

aws configure

然后填写密钥和区域。

这之后做下一步使用任何环境。你可以有多个钥匙,这取决于你的帐户。能否管理多个环境或密钥

import boto3
aws_session = boto3.Session(profile_name="prod")
# Create an S3 client
s3 = aws_session.client('s3')

其他回答

确保你的~/。Unix中的aws/credentials文件是这样的:

[MyProfile1]
aws_access_key_id = yourAccessId
aws_secret_access_key = yourSecretKey

[MyProfile2]
aws_access_key_id = yourAccessId
aws_secret_access_key = yourSecretKey

你的Python脚本应该是这样的,它可以工作:

from __future__ import print_function
import boto3
import os

os.environ['AWS_PROFILE'] = "MyProfile1"
os.environ['AWS_DEFAULT_REGION'] = "us-east-1"

ec2 = boto3.client('ec2')

# Retrieves all regions/endpoints that work with EC2
response = ec2.describe_regions()
print('Regions:', response['Regions'])

来源:https://boto3.readthedocs.io/en/latest/guide/configuration.html交互性配置。

我只是遇到了这个问题。这对我来说很管用:

pip install botocore==1.13.20

来源:https://github.com/boto/botocore/issues/1892

我有同样的问题,并发现我的~/。Aws /凭证文件错误。

它处理了一个包含以下内容的文件:

[default]
aws_access_key_id=XXXXXXXXXXXXXX
aws_secret_access_key=YYYYYYYYYYYYYYYYYYYYYYYYYYY

注意,必须有一个配置文件名称“[default]”。一些官方文件提到了一个名为“[凭证]”的配置文件,这对我来说并不适用。

这些指令适用于具有AWS单一用户配置文件的windows机器。确保你的~/。Aws /凭证文件如下所示

[profile_name]
aws_access_key_id = yourAccessId
aws_secret_access_key = yourSecretKey

我必须将AWS_DEFAULT_PROFILEenvironment变量设置为在凭据中找到的profile_name。 然后我的蟒蛇就能连接了。从这里开始

import boto3

# Let's use Amazon S3
s3 = boto3.resource('s3')

# Print out bucket names
for bucket in s3.buckets.all():
    print(bucket.name)

对于MLflow,如果不能写入AWS3/MinIO数据湖,则调用MLflow .log_artifact()将引发此错误。

原因是没有在你的python env中设置凭据(就像这两个env变量一样):

os.environ['DATA_AWS_ACCESS_KEY_ID'] = 'login'
os.environ['DATA_AWS_SECRET_ACCESS_KEY'] = 'password'

注意,您也可以使用minio客户端直接访问MLflow构件(除了MLflow的连接外,还需要一个到数据湖的单独连接)。这个客户端可以像这样启动:

minio_client_mlflow = minio.Minio(os.environ['MLFLOW_S3_ENDPOINT_URL'].split('://')[1],
                    access_key=os.environ['AWS_ACCESS_KEY_ID'],
                    secret_key=os.environ['AWS_SECRET_ACCESS_KEY'],
                    secure=False)