あまぶろぐ

インフラと趣味のゆるいブログ

S3のイベントをトリガーにS3にファイルをアップロードする

GWで時間も取れたので、初心者レベルから少しでもレベルアップを目指してコードの練習をした。今回のお題は以下。

・S3のイベントをトリガーとする

・Lambdaを起動して、S3にファイルを作成する

最終系のLambda関数

import boto3

client = boto3.client('s3')

def lambda_handler(event,context):
    input_event_name = event["Records"][0]["eventName"]
    input_event_object = event["Records"][0]["s3"]["object"]["key"]
    
    response = client.put_object(
    Body = input_event_name,
    Bucket = 'xxxxx-xxxxx-output',
    Key = input_event_object+'.txt'
    )

 

はまったこと

  1. 無駄に「,」を入れてしまった
    不要なところに「,」を入れてしまったので、エラーとなった。ログを見てもそれが原因とはすぐにわからず切り分けに時間がかかった。
  2. 変数の使い方
    Body、Key をS3から受け取ったイベントの内容に合わせて変化させたかった(ハードコードしたくなかった)。それを実現する記載方法を試行錯誤した。上記が正解とは言えないかもしれないが適切に動いたから、一応「OK」とする。
    「response ~」の記載を lambda_handler 関数に含めず、別の関数で考えていた。しかし、参考にしたサイトではまとめていた。シンプルでよいなと思い真似た。本当に助かりました。
  3. イベントからの情報取得
    AWSのサイトに「event['Records'][0]['s3']['bucket']['name']」と記載があった。過去にも似たような記載を見たことがあったがコピペしていたので、今回はせっかくの機会なのでその意味を深掘りしてみた。
    私の理解は以下である。
    ・リストと辞書の組み合わせ
    ・[0]はリストの番号である
    ・[0]以降は取得したいデータの階層を辿っていく

 

コード書くことが仕事のメインではないので、時間があるときに少しでもやらないと忘れてしまう。

 

(参考サイト)

qiita.com

 

docs.aws.amazon.com

 

hibiki-press.tech