目次
概要~個人的によく使うLambda(Python Boto3)のサンプル集~
Lambdaプログラミングしていて良く使うコードサンプルをまとめていきます。
随時更新予定です(^^)
公式APIリファレンス
AWS公式のAPIリファレンスは以下のURLで何かあったら参照して正しく使いましょう。
https://boto3.amazonaws.com/v1/documentation/api/latest/index.html
S3サンプル
S3ファイルダウンロード
ダウンロードするS3のバケット名、オブジェクト名、Lambdaのローカル環境に保存するファイル名を指定します。
ローカル環境上に同名のファイルがあった場合は上書きされます。
import boto3
s3 = boto3.client('s3')
# バケット名、ダウンロードオブジェクト名、ダウンロードファイル名
S3_BUCKET_NAME = 'sample-bucket'
S3_OBJECT_DOWNLOAD_FILE_NAME = 'sample.jpg'
LOCAL_SAVE_FILE_NAME = '/tmp/sample.jpg'
def lambda_handler(event, context):
# S3ダウンロード
s3.download_file(S3_BUCKET_NAME, S3_OBJECT_DOWNLOAD_FILE_NAME, LOCAL_SAVE_FILE_NAME)
return
S3ファイルアップロード
アップロード先のS3のバケット名、オブジェクト名、Lambdaのローカル環境にあるアップロード対象のファイル名を指定します。
Lambdaのローカル環境にアップロードファイルがある前提のため、事前にアップロードファイルは作成しておく必要があります。
S3上に同名のオブジェクトがあった場合は上書きされます。
import boto3
s3 = boto3.client('s3')
# バケット名、オブジェクト名、アップロード対象ファイル名
S3_BUCKET_NAME = 'sample-bucket'
S3_OBJECT_UPLOAD_FILE_NAME = 'S3sample.jpg'
LOCAL_UPLOAD_FILE_NAME = '/tmp/sample.jpg'
def lambda_handler(event, context):
# TODOアップロード対象ファイル作成処理
# S3アップロード
s3.upload_file(LOCAL_UPLOAD_FILE_NAME, S3_BUCKET_NAME, S3_OBJECT_UPLOAD_FILE_NAME)
return
S3ファイルダウンロード(メモリ上で扱う場合)
ローカル環境に保存せず、そのままメモリ上でバイトデータとして扱う場合は以下になります。
import boto3
s3 = boto3.resource('s3')
# バケット名、ダウンロードオブジェクト名
S3_BUCKET_NAME = 'sample-bucket'
S3_OBJECT_DOWNLOAD_FILE_NAME = 'sample.jpg'
def lambda_handler(event, context):
# S3ダウンロード
bucket = s3.Bucket(S3_BUCKET_NAME)
obj = bucket.Object(S3_OBJECT_DOWNLOAD_FILE_NAME)
response = obj.get()
body = response['Body'].read()
# 別のBotoクライアントにバイトのまま渡す場合
# response = client.xxxxxx(Image={'Bytes': body})
# ダウンロードファイルが画像ではなくJSONファイルの場合
# print(json.loads(body.decode('utf-8')))
S3ファイルのリスト表示
ファイルのリスト表示するS3のバケット名を指定します。
import boto3
s3 = boto3.client('s3')
# バケット名
S3_BUCKET_NAME = 'sample-bucket'
def lambda_handler(event, context):
# オブジェクトのリスト表示
response = s3.list_objects_v2(Bucket=S3_BUCKET_NAME)
for obj in response['Contents']:
print(obj['Key'])
return
S3事前署名付きURL発行
S3に保存してあるファイルを一時的に公開するときに使用する事前署名付きURLを発行するサンプルです。
事前署名付きURLを発行するS3のバケット名、オブジェクト名、URLの有効期限(秒)を指定します。
import boto3
s3 = boto3.client('s3')
# バケット名、事前署名URL発行オブジェクト名、有効期限(秒)
S3_BUCKET_NAME = 'ai-sample-bucket'
S3_OBJECT_PRESIGNES_FILE_NAME = 'sample.jpg'
EXPIRATION = 3600
def lambda_handler(event, context):
# 事前署名URL発行
response = s3.generate_presigned_url('get_object',
Params={'Bucket': S3_BUCKET_NAME,
'Key': S3_OBJECT_PRESIGNES_FILE_NAME},
ExpiresIn=EXPIRATION)
print(response)
return
参考
Boto3ライブラリは、boto3.clientとboto3.resourceの2つの主要なクラスがあります。
boto3.clientは、AWSサービスのAPIアクションを呼び出すためのクライアントを提供します。例えば、s3クライアントを作成して、S3バケットを作成したり、オブジェクトを取得したり、削除したりすることができます。これは低レベルのAPIであり、AWSリソースとのやり取りがJSONデータで行われます。
一方、boto3.resourceは、AWSリソースを表すPythonオブジェクトを提供します。これは、より高レベルのAPIであり、AWSリソースとPythonオブジェクトのやり取りが可能です。例えば、s3リソースを使用して、バケットを作成したり、オブジェクトを取得したり、削除したりすることができます。また、オブジェクトにはファイルの内容にアクセスするためのread()メソッドがあり、オブジェクトに対してPythonオブジェクトと同じように操作できます。
それぞれで出来ること、やりたいことを理解して使い分けましょう。