AWS S3は、世界中で使用されているストレージサービスであり、ファイルのアップロードやダウンロード、ストレージ管理を行うことができます。Pythonを使用してAWS S3にファイルをアップロードする方法を説明します。
まずは、PythonのAWS SDKであるboto3をインストールします。以下のコマンドを実行してください。
pip install boto3
次に、AWS S3のアクセスキーとシークレットキーを取得します。これらは、AWSのマネジメントコンソールから取得できます。
取得したアクセスキーとシークレットキーを使用して、boto3でAWS S3にアクセスします。以下のコードを使用して、AWS S3に接続し、アップロードするファイルのバケット名とファイル名を指定します。
import boto3 # AWS S3のアクセスキーとシークレットキーを設定 s3 = boto3.resource('s3', aws_access_key_id='ACCESS_KEY', aws_secret_access_key='SECRET_KEY') # アップロードするファイルのバケット名とファイル名を指定 bucket_name = 'my-bucket' file_name = 'file.txt'
AWS S3にファイルをアップロードするには、バケットオブジェクトを取得し、そのオブジェクトのput_objectメソッドを使用します。以下のコードを使用して、ファイルをアップロードします。
# バケットオブジェクトを取得 bucket = s3.Bucket(bucket_name) # ファイルをアップロード bucket.put_object( Key=file_name, Body=open(file_name, 'rb') )
上記のコードでは、put_objectメソッドにKeyとBodyを指定しています。Keyにはアップロードするファイルの名前を指定し、Bodyにはアップロードするファイルの内容を指定しています。ここでは、open関数を使用してファイルを読み込み、その内容をBodyに指定しています。
以上のコードをまとめると、以下のようになります。
import boto3 # AWS S3のアクセスキーとシークレットキーを設定 s3 = boto3.resource('s3', aws_access_key_id='ACCESS_KEY', aws_secret_access_key='SECRET_KEY') # アップロードするファイルのバケット名とファイル名を指定 bucket_name = 'my-bucket' file_name = 'file.txt' # バケットオブジェクトを取得 bucket = s3.Bucket(bucket_name) # ファイルをアップロード bucket.put_object( Key=file_name, Body=open(file_name, 'rb') )
このように、Pythonのboto3ライブラリを使用することで、AWS S3にファイルをアップロードすることができます。
なお、上記のコードでは、ファイルをアップロードする際に、ファイルの内容をメモリに一時的に展開しています。このため、大きなファイルをアップロードする場合は、メモリ不足になる可能性があります。その場合は、以下のように、ファイルを一時的にディスクに保存する方法を使用することができます。
import boto3 import os # AWS S3のアクセスキーとシークレットキーを設定 s3 = boto3.resource('s3', aws_access_key_id='ACCESS_KEY', aws_secret_access_key='SECRET_KEY') # アップロードするファイルのバケット名とファイル名を指定 bucket_name = 'my-bucket' file_name = 'file.txt' # バケットオブジェクトを取得 bucket = s3.Bucket(bucket_name) # ファイルを一時的にディスクに保存 with open(file_name, 'rb') as f: tmp_file_path = '/tmp/' + file_name with open(tmp_file_path, 'wb') as tmp: tmp.write(f.read()) # ファイルをアップロード with open(tmp_file_path, 'rb') as f: bucket.put_object( Key=file_name, Body=f ) # 一時ファイルを削除 os.remove(tmp_file_path)
このように、一時的にディスクに保存することで、メモリ不足の問題を回避することができます。また、一時ファイルは使用後に削除することが重要です。
まとめ
ここでは、boto3を使用してAWS S3にアクセスし、バケットオブジェクトを取得してput_objectメソッドを使用してファイルをアップロードする方法を紹介しました。
このコードを応用することで、AWS S3にファイルをアップロードするだけでなく、ダウンロードや削除などの操作も同様に実行することができます。また、複数のファイルをまとめてアップロードする場合は、put_objectメソッドをループ処理で繰り返すことで実現することができます。
以上のように、Pythonを使用してAWS S3にファイルをアップロードする方法を身につけることで、AWSをより効率的に活用することができます。是非、実際に手を動かして試してみてください。また、S3からファイルをダウンロードする方法については下記の記事に解説しています。