この記事では、PythonとAWS Lambdaを使用してS3にファイルをアップロードする方法について説明します。このプロセスは、サーバーレスアーキテクチャでのファイル管理に非常に役立ちます。
AWS Lambda関数の作成
まず、AWS Lambda関数を作成します。LambdaのコンソールでLambdaを選択し、関数の作成から新しいLambda関数を作成します。ランタイムにはPython 3.8を選択します。
import json
import boto3
import base64
import io
from datetime import datetime
import cgi
BUCKET_NAME = 'your-bucket-name'
DIRECTORY = 'uploaded_files/'
s3 = boto3.resource('s3')
def lambda_handler(event, context):
bucket = s3.Bucket(BUCKET_NAME)
body = base64.b64decode(event['body-json'])
fp = io.BytesIO(body)
environ = {'REQUEST_METHOD': 'POST'}
headers = {
'content-type': event['params']['header']['content-type'],
'content-length': len(body)
}
fs = cgi.FieldStorage(fp=fp, environ=environ, headers=headers)
for f in fs.list:
print("filename=" + f.filename)
bucket.put_object(Body=f.value, Key=DIRECTORY+f.filename)
return {
'statusCode': 200,
'body': json.dumps('アップロード完了')
}
このコードは、multipart/form-dataで複数のファイルをアップロードできるようにしています。ただし、Lambdaのペイロードサイズ上限は6MBであるため、事前に要件の確認が必要です。
API Gatewayでインタフェースを作成
次に、API Gatewayでインタフェースを作成します。トリガーの追加から、API Gatewayを選択します。API Gatewayのコンソール画面でリソースを設定します。今回はmultipart/form-dataでファイルを送信するために、アクション→メソッドの作成→POSTを選択してPOSTメソッドを受け付けるようにします。
ファイルをアップロードする
最後に、ファイルをアップロードします。Chrome拡張のTalend API Testerを使用してファイルをアップロードします。
以上が、PythonとAWS Lambdaを使用してS3にファイルをアップロードする方法です。この方法は、サーバーレスアーキテクチャでのファイル管理に非常に役立ちます。.