S3にデータ準備
事前に以下のデータを用意しておきます。s3に任意の名前のバケットを作って以下データをアップロードしておきます。(今回は適当に「lamda-test-fajiga」という名前を付けました 笑)
a.json
1 2 3 4 5 |
{ "filename": "a.json", "author": "太郎", "age": 36 } |

pythonのプログラム例
下記はs3バケットにアップロードしてあるa.jsonをb.jsonに変更する処理です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
import boto3 import json from collections import OrderedDict def handler(event, context): BUCKET_NAME = event["bucket_name"] BUCKET_KEY = event["bucket_key"] UPLOAD_BUCKET_KEY = "b.json" s3 = boto3.resource('s3') bucket = s3.Bucket(BUCKET_NAME) obj = bucket.Object(BUCKET_KEY) data = json.loads(obj.get()['Body'].read().decode('utf-8')) print(f"{BUCKET_KEY}の内容: {data}") s3 = boto3.resource("s3") obj = s3.Bucket(BUCKET_NAME).Object(UPLOAD_BUCKET_KEY) print("data",data) data = OrderedDict( file_name=UPLOAD_BUCKET_KEY, author=data["author"], age=(data["age"] + 1) ) res = obj.put(Body=json.dumps(data)) if res["ResponseMetadata"]["HTTPStatusCode"] == 200: print(f"[SUCCESS] upload {UPLOAD_BUCKET_KEY}") |
boto3
PythonからAWSのリソースを取り扱うのが簡単にできるライブラリです。
def 関数名(event,context):
lambdaでは関数を定義する必要があります。
event
lambdaを実行する際にjson形式で色々な値を渡すことができるオブジェクトです。サンプルコードの中で「bucket_name」と「bucket_key」をプログラムに渡しています。lambda側のテストイベントに変数を設定するとプログラムから呼び出せるようになります。
context
これもlamdaが用意してくれる引数です。
lamdaに関数を定義する。(アップロード)
1.まずは作成したPythonファイルをfunction.zipという名前のzipファイルに圧縮します。

2.lamdaの設定
まずは作成するのでほとんどデフォルトの設定でよいでしょう。(言語とPythonのバージョンは注意です。)以下の設定で「関数の作成」をクリックします。


デフォルト実行ロールの変更で「基本的なLamdaアクセス権限で新しいロールを作成」
下には記載がありますが、ログを勝手にcloudwatch logsにアップロードする権限を持つ「s3-json-test-role-fxfcjuuo」という実行ロールを自動で作ります。基本的には実行ログは出した方が良い(エラーが発生した際にデバッグできるように)と思うのでこれを選択するのが無難です。
3.ハンドラを編集

作成されたlambdaのハンドラの内容を変えたいので「編集」をクリックします。

main.pyの中の「handler」という関数を呼び出したいので「main.handler」という記述にハンドラを変更します。
4.ソースコードをアップロードする。

先ほど作成したzipファイルをアップロードします。

アップロードすると以下のようにコードが反映されます。

s3にアクセスするロールの設定

設定→アクセス権限→ロール名(画像でいえば「s3-json-test-role-fxfcjuuo」)をクリックします。

「許可を追加」→「ポリシーをアタッチ」をクリックします。

「AmazonS3FullAccess」を追加します。
テスト
Testを選択します。

イベントの作成
以下のように設定をして「保存」します。

イベントJSON
これがPython側のeventのキーとして渡ります。
以下のようにテストイベントが作成されます。

実行結果
s3上に変換後のファイルが生成されています。

この記事へのコメントはありません。