日々精進

新しく学んだことを書き留めていきます

boto3でS3にアクセスすると「botocore.exceptions.NoCredentialsError: Unable to locate credentials」エラー

権限の問題。 以下のようにアクセスキーとシークレットアクセスキーを引数に含めればよい。 アクセスキーなど人ごとに異なるものは環境変数から持ってくるようにする。

# 各自のアクセスキー、シークレットアクセスキーを環境変数より取得
ACCESS_KEY = os.environ["ACCESS_KEY"]
SECRET_ACCESS_KEY = os.environ["SECRET_ACCESS_KEY"]
BUCKET = "バケット名"


def upload_to_s3(remote_path: str, content: Union[bytes, IO, None]):
    """ファイル・オブジェクトをS3にアップロードする
    Args:
        remote_path (str): アップロード先のS3のパス
        content (Union[bytes, IO, None]): アップロードするファイルまたはオブジェクト
    """
    s3: ServiceResource = boto3.resource('s3',
                                         aws_access_key_id=ACCESS_KEY,
                                         aws_secret_access_key=SECRET_ACCESS_KEY)
    s3.Bucket(BUCKET).put_object(Key=remote_path, Body=content)

IAMロールを使った方がいいんだろうけど。。

参考:

stackoverflow.com