【AWS Lambdaの基本コードその3】 S3への圧縮ファイルの保存

Pocket

大柳です。

「AWS Lambdaの基本コード」シリーズ、第3回目はLambdaでファイルを圧縮してS3に保存してみます。

前回記事
【AWS Lambdaの基本コードその2】 S3へのファイル保存

今回の構成

Lambdaが起動されると、テキストの内容をS3にgz形式で圧縮して保存します。


ローカルの/tmpディレクトリへテキストファイルを一時保存、gz形式に圧縮してからS3にファイルを保存します。

コード

コードは以下のようになります。

コードの説明

コードの内容は以下の通りです。

①ライブラリのimport…今回の処理に必要なライブラリを指定してインポートする。
②Functionのロードをログに出力…Lambdaのコードがロードされたことが分かるようにログにメッセージを出力する。
③S3オブジェクトを取得…boto3ライブラリからS3にアクセスできるようにするおまじない。
④Lambdaのメイン関数…S3にファイルが格納されると、この関数が実行される。
⑤バケット名を指定…ファイルを保存するバケット名を指定する。
⑥保存するファイルのprefixを指定…ファイル名の頭に付ける文字を指定する。
⑦保存するテキストファイル名…/tmpに一時保存するファイルの名前を設定する。
⑧保存するgzファイル名…/tmpに一時保存するgzファイルの名前を設定する。
⑨ファイルに保存するテキストの内容…出力する内容です。今回はテキスト「Lambda test」を出力させます。
⑩/tmpにtxtファイルを出力…test_日時(YYYY-mm-dd-HH-MM-SS).txtに「Lambda test」を出力する。
⑪/tmpにgzファイルを作成…test_日時(YYYY-mm-dd-HH-MM-SS).txt.gzに圧縮ファイルを出力する。
⑫バケット名とパスを指定…保存先のバケットとパスを設定する。
⑬gzファイルをS3に出力…/tmpにあるgzファイルをS3にアップロードする。

実行結果

Lambdaのコードエディタの上部にある[保存してテスト]をクリックすると、テスト実行されます。
指定したS3バケットを確認すると、test_日時(YYYY-mm-dd-HH-MM-SS).txt.gz が出力されていることが確認できました。

ダウンロードしてLhaplusなどで解凍すると、「Lambda test」が保存されたテキストファイルを確認できます。

まとめ

S3上にあるファイルを圧縮して容量を節約したい、といった要件があった時に、サーバを構築しなくても今回のようにLambdaを使ってファイル圧縮することができます。今流行りのサーバレス構成を簡単に実現することができます。

次回はS3のバケット一覧、バケット内のオブジェクト一覧を取得してみます。

次回記事
【AWS Lambdaの基本コードその4】 S3のバケット、オブジェクト一覧を取得する