サイトアイコン 知的好奇心

PythonでAmazon S3の操作を行う方法(接続編)

PythonでAmazon S3の操作を行う方法(接続編)をご紹介します。
Python向けのAWS SDKである「Boto3」を使用します。

条件

インストール

以下のコマンドでインストールを行います。

pip install boto3

バージョン指定でインストールを行いたい場合、以下のようにします。

pip install boto3==1.0.0

認証資格情報

まずはawsのセキュリティ資格情報を取得する必要があります。
取得手順は、以下の記事の「セキュリティ資格情報」をご参照ください。

CyberduckでAmazon S3の操作を行う方法

認証/構成ファイルに記述する方法

AWS CLIを使用する方法もあるようですが、ここでは認証/構成ファイルに記述する方法で実施します。

WindowsでPythonを実行する場合

ホームドライブとホームパスを確認します。

>echo %HOMEDRIVE%
C:

>echo %HOMEPATH%
\Users\user

credential file

以下のようなパスにファイルを作成します。

~/.aws/credentials

Windowsの場合は以下のパスに作成します。

C:\Users\user\.aws\credentials

記述する内容は以下の通りです。
セキュリティ資格情報で取得した「ACCESS_KEY」および「SECRET_KEY」を記述します。

[default]
aws_access_key_id = YOUR_ACCESS_KEY
aws_secret_access_key = YOUR_SECRET_KEY

configuration file

以下のようなパスにファイルを作成します。

~/.aws/config

Windowsの場合は以下のパスに作成します。

C:\Users\user\.aws\config

記述する内容は以下の通りです。

[default]
region=ap-northeast-1

clientパラメータに渡す方法

clientパラメータに認証資格情報を渡して接続する方法もあります。
以下のようにパラメータで渡しますが、認証情報をプログラムに記述することは推奨されません。

# Do not hard code credentials
client = boto3.client(
    's3',
    region_name=ap-northeast-1,
    # Hard coded strings as credentials, not recommended.
    aws_access_key_id='AKIAIO5FODNN7EXAMPLE',
    aws_secret_access_key='ABCDEF+c2L7yXeGvUyrPgYsDnWRRC1AYEXAMPLE'
)

PythonによるS3の情報取得

認証/構成ファイルに記述する方法

サンプルソース

以下のようなPythonファイルを作成し、実行します。
S3に接続してバケット一覧を取得しています。

# s3test.py
import boto3

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

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

実行結果

バケット名が出力されていることがわかります。

C:\test>python s3test.py
1sample1

C:\test>

clientパラメータに渡す方法

サンプルソース

import logging
import boto3
from botocore.exceptions import ClientError


try:
    # Do not hard code credentials
    client = boto3.client(
        's3',
        region_name='ap-northeast-1',
        # Hard coded strings as credentials, not recommended.
        aws_access_key_id='AKIAIO5FODNN7EXAMPLE',
        aws_secret_access_key='ABCDEF+c2L7yXeGvUyrPgYsDnWRRC1AYEXAMPLE'
    )
except ClientError as e:
        logging.error(e)
        
# Retrieve the list of existing buckets
response = client.list_buckets()

# Output the bucket names
print('Existing buckets:')
for bucket in response['Buckets']:
    print(f'  {bucket["Name"]}')

実行結果

バケット名が出力されていることがわかります。

C:\test>python s3test2.py
Existing buckets:
  1sample1

C:\test>

参考

AWS SDK for Python (Boto3)

https://aws.amazon.com/jp/sdk-for-python/

Boto 3 Documentation

https://boto3.amazonaws.com/v1/documentation/api/latest/index.html

Qiita:AWS リージョン一覧

https://qiita.com/neet244/items/98d408b65134e8ed3918

コマンドプロンプト/ホームドライブとホームパスを確認する方法

https://win.just4fun.biz/?%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88/%E3%83%9B%E3%83%BC%E3%83%A0%E3%83%89%E3%83%A9%E3%82%A4%E3%83%96%E3%81%A8%E3%83%9B%E3%83%BC%E3%83%A0%E3%83%91%E3%82%B9%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95

モバイルバージョンを終了