[AWS]Lambdaを使ってS3にアップロードされたファイルを圧縮してみる

posted in: AWS | 0

こんにちは、オカザキです。
今回はAWSのLambdaを使ってS3にアップロードされたファイルを圧縮(zip化)したいと思います。

処理の流れ

・処理の流れは以下のとおりです

処理の流れ

Lambda 関数作成

さっそくLambdaの関数を作っていきたいと思います

関数の基本情報

関数名:s3_zip_function1(なんでもOKです)
ランタイム:Python 3.7
アクセス権限の実行ロールとして「AmazonS3FullAccess」を付与したロールを使用しています
関数の基本情報

トリガーの設定

今回はS3バケットの「input」フォルダ内にアップロードされたファイルのzip化を行いますので、
プレフィックスに「input/」を指定しています

※注意点※
すでに同一バケットにファイルアップロードを検知するLambda関数が作成されている場合、トリガーとして設定できないため注意が必要です
トリガーの設定

サンプルソース

inputフォルダにアップロードされたファイルをzip化してoutputフォルダにアップロードしています

※注意点※
/tmp フォルダ内に格納するファイルは起動のたびに異なるファイル名とする必要があります。
LambdaではAWSのコンテナで動作して同一関数でそのコンテナを使い回す場合があるため、毎回同一ファイル名だとエラーが発生してしまう可能性があります

動作確認

・S3にファイルをinputフォルダにアップロードしてみましょう

ファイルアップロード1

アップロードされました

ファイルアップロード2

・outputフォルダを確認してみましょう

output

zipファイルが格納されました
zipファイル名に使われている現在時刻がJSTでなくUTCとなっていますが、今回は見なかったことにしておきます(汗

・CloudWatchのログを確認してみましょう

ログ

ダウンロードして展開すると問題なくアップロードしたファイルが格納されています

ダウンロード

(S3上では見た目上はサイズが変わっていませんが、ダウンロードすると少しだけ圧縮されていることが確認できますね)

おわりに

「圧縮してからアップロードしろよ!」と言われるかもしれませんが、要件によってはできないこともあるかもしれませんので記事を書きました。
使い道がないかもしれないプログラムに時間が割けるのはプライベートでの開発ならではですね。

実際に実装してみてLambdaのコード編集はAWSのコンソールのみで完結できるため改めて便利だなぁと感じました。
ぜひ皆様もLambdaを活用してみてください!!

以上です。

LINEで送る
Pocket