AWSのLambdaファンクションの作成、実行、削除をコマンドラインから操作する
S3にファイルがアップロードされたことを検知して、処理を行うような仕組みを作り必要がありました。
処理の部分のロジックはまだ未決定事項が多いため、とりあえずは
Lambdaファンクション呼び出しからCloudWatchLogへログを吐き出すところまでの仕組みを作成してみることにしました。
※作成したLambdaファンクションをS3へのファイルアップロードのつなぎこみは次回調査
aws-cli
(AWSコマンドの利用可能な環境づくり)
AWSコマンドを使うための環境をDockerを使って構築(Mac/Linux/WindowsでもPythonなしで動くよ) | ゲンゾウ用ポストイット で環境構築済み。
AWS Lambdaファンクションの作成
AWS Lambda については以下の記事がわかりやすかった。
Lambda作成にあたってやらないといけないことは以下の2つ。
- Lambdaファンクションの実行ロールを作成する
- Lambdaファンクションを作成する
実行ロールの作成
まずは初期ポリシーファイルを作成します。
Lambdaファンクションの実行に関するフル権限を与えました。
作成したポリシーファイルを元に、ロールを作成。
--role-name
オプションに今回作成するロール名を指定します。--assume-role-policy-document
オプションに先ほど作成したポリシーファイルを指定します。 file://
プロトコルの指定は必須。これなしだとエラーになってしまうので注意しましょう。
実行時に出力されたJSONメッセージのうち、 Arn
の部分 ( arn:aws:iam::642942901536:role/logging-function-role
) は後々必要となるためメモしておきます 。
実行結果を CloudWatch Log
として保存したいので、以下の既存ポリシーを追加で付与します。
関数を作成
CloudWatch Logs にログを記録するLambdaファンクションのサンプルコードがあったので、そちらを流用させてもらいましょう。
例) index.js
このjsファイルを使ってLambdaファンクションを作成。
実行してみる
コマンドラインから実行してみます。(通常通り、マネージメントコンソールページから実行してもよいか、コマンドラインの世界が好きなので。)
正常に動作している用に見える。
※(余談)僕は、初回に index.js
の読み取り可能権限の付与をしておらず、 index.js
の権限がないよ!と起こられてしまった。
ハマった人は chmod
の実行をお忘れなく。
CloudWatchLogが正しく書き出されているかを確認
以下のページにログインしてみて、ログが出力されているかを確認してみたところ、無事書き出しされていました。
https://ap-northeast-1.console.aws.amazon.com/cloudwatch/home?region=ap-northeast-1#logs:
ゴミ掃除
検証が終わったらゴミ掃除。
ひとこと
次回 はようやくS3へファイルをアップロードした際のイベントとLambdaを紐付ける設定をしてみます。
ディスカッション
コメント一覧
まだ、コメントがありません