S3にファイルが作成されたことを検知してLambda関数でファイルを読み込む( `aws-cli` で構築)
はじめに
「S3にファイルがSFTPアップロードされたことを検知してLambdaを起動する( aws-cli
で構築)」で、S3にファイルがアップロードされたことをフック条件にしてLambdaファンクションを実行させてみました。
ただ、上記のエントリではLambdaファンクションがCloudWatchLogにログを出力させるまでの実装にとどまっていました。
フック条件となったS3のファイルを読み込むロジックは作成していません。
そこで、今回はフック条件となったS3内のファイル読み込みを試してみました。
ゴールとする構成
- ファイルがアップロードされる
- アップロードを検知してLambdaファンクションを呼び出し
- S3のファイルを読み込む
- CloudWatchLogにログ出力
必要なもの
検証環境
作業開始
以下のエントリから今回必要な部分のみピックアップして検証していきます。
設定パラメータの整理
今回は以下の3つのパラメータ設定が必要です。
以下のような名前で設定しておきます。コマンドラインに流し込み、変数を作成しておきます。
「S3バケット」の作成
「Lambdaファンクションに割り当てるIAMロール」の作成
作成されたLambdaファンクション用のロールにポリシー(権限)を追加で割り当てます。
今回はLambdaファンクションから「CloudWatchLog」、「S3」にアクセスするため、2つのポリシーを追加しています。
(ここでは「CloudWatchLog」、「S3」ともに フルアクセス 可能としていますが、この部分はできる限り限定した権限に抑えましょう。)
「Lambdaファンクション」の作成
Lambdaファンクションを作成します。
LambdaからS3のファイルを読み込むためには、 Node.js で利用可能な AWS SDK を使います。
次にプログラムコードを作成します。
好きなエディタで index.js
というファイルを作成します。
以下のロジックを記述します。event
変数から通知を上げたS3バケット名、S3ファイル名(キー名)が取得できます。
これを使ってファイルの中身を読み込み、 console.log
を使って「CloudWatchLog」に出力しています。
ファイルをアップロードします。
以下の2点がポイントです。
- ファイルの権限としてオーナー以外も読めるようにしておく
npm
でインストールしたライブラリも同梱しておく
「S3」に「Lambdaファンクション」を呼び出すためのイベント設定
最後に「S3」にファイルが作成されたときのイベント設定を行います。
テスト
テストをしてみます。
アップロード用のS3ファイルを作成し、S3にアップロードします。
「CloudWatchLog」のログページを確認すると、無事出力されていることがわかります。
ゴミ掃除
検証が終わったのでゴミ掃除。
ひとこと
手順になれてきたので、ここまで5分程度で設定できました。
Terraform というツールを教えてもらったのでこちらを勉強中。
ディスカッション
コメント一覧
まだ、コメントがありません