AWS Lambda で Python プログラミング~Boto3 サンプル集S3編~

概要~個人的によく使う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オブジェクトと同じように操作できます。

それぞれで出来ること、やりたいことを理解して使い分けましょう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です