大柳です。
「AWS Lambdaの基本コード」シリーズ、第2回目はLambdaからS3へのファイル保存を行います。
前回記事
【AWS Lambdaの基本コード その1】 S3からのファイル取得とローカル保存 | ナレコムAWSレシピ
今回の構成
Lambdaが起動されると、テキストの内容をS3にファイルに保存します。
ローカルの/tmpディレクトリへのファイル保存なしで、直接S3にコンテンツを出力します。
コード
コードは以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# ①ライブラリのimport import boto3 from datetime import datetime print('Loading function') # ②Functionのロードをログに出力 s3 = boto3.resource('s3') # ③S3オブジェクトを取得 # ④Lambdaのメイン関数 def lambda_handler(event, context): bucket = 'your_backet_name' # ⑤バケット名を指定 key = 'test_' + datetime.now().strftime('%Y-%m-%d-%H-%M-%S') + '.txt' # ⑥オブジェクトのキー情報を指定 file_contents = 'Lambda test' # ⑦ファイルの内容 obj = s3.Object(bucket,key) # ⑧バケット名とパスを指定 obj.put( Body=file_contents ) # ⑨バケットにファイルを出力 return |
コードの説明
コードの内容は以下の通りです。
①ライブラリのimport…今回の処理に必要なライブラリを指定してインポートする。
②Functionのロードをログに出力…Lambdaのコードがロードされたことが分かるようにログにメッセージを出力する。
③S3オブジェクトを取得…boto3ライブラリからS3にアクセスできるようにするおまじない。
④Lambdaのメイン関数…S3にファイルが格納されると、この関数が実行される。
⑤バケット名を指定…ファイルを保存するバケット名を指定します
⑥オブジェクトのキー情報を取得…バケット以下のディレクトリとファイル名を指定する。今回は指定したバケットにtest__日時(YYYY-mm-dd-HH-MM-SS).txt というファイル名で保存します。
⑦ファイルの内容…出力する内容です。今回はテキスト「Lambda test」を出力させます。
⑧バケット名とパスを指定…保存するバケットとパスをS3オブジェクトに設定します。
⑨バケットにファイルを出力…file_contentsの内容(Lambda test)をS3に出力しています。
実行結果
Lambdaのコードエディタの上部にある[保存してテスト]をクリックすると、テスト実行されます。
指定したS3バケットを確認すると、test_日時(YYYY-mm-dd-HH-MM-SS).txt が出力されていることが確認できました。
まとめ
S3へのファイル保存もLambdaでよく使うパターンです。保存の前に様々な加工を行い、その結果をS3に出力できるようになります。
次回はファイルを圧縮して、S3にアップロードするコードを紹介します。
【12月4日(金)15:00~】【AWS AI/MLオンラインセミナー】ABEJA様/ブレインズテクノロジー様/dotData Japan様との共同登壇!視聴無料!まだ申し込み可能です。
申し込みはこちら