注意
公式サイトやいろんなサイト見て、自分なりにまとめたり、言い換えたりしたものです。
AWSは、EC2,S3,CloudFront,CloudWatch,コピペLambda関数の使用経験があります。
がっつりLambdaを触る上で、理解が必要になったので知識の整理のためにまとめます。
Lambdaとは
サーバーの準備・管理をしなくても、コードを実行できるサービス。
Lambdaは必要に応じてコードを実行して、その使用時間に対して料金を払う。だから使い方によってはすごく安い。
現在のサポート言語は、Node.js、Java、C#、Go および Pythonです。
コンピューティングリソースはLambdaが管理するので、実行するコードにだけ集中することができる。
逆に言えば、コンピューティングしているインスタンスにログインしたり、言語のランタイムをカスタマイズする、といった細かいことが出来ない。
Lambda関数
Lambda関数のビルド
Lambdaに関数をアップロードするだけ。こうすると、僕らの代わりにLambdaが関数を実行してくれる。
ライフサイクル
Lambda関数のライフサイクルは以下。
- コードの作成
- コードをデプロイしてLambda関数を作成
- 監視とトラブルシューティング
コードの作成
サポートされている言語で書くことができる。
コードの作成はLambdaのコンソール画面か、IDEが使える。
ただし、使用できるIDEや各種ツール・オプションなどは、言語とコードで使用するライブラリに依存する。
言語によらず言えること
Lambdaで記述するコードにはパターンがある。
長くなるので、別途後述する。
コードをデプロイしてLambda関数を作成
デプロイパッケージを作成して、それをLambdaにアップロードするとLambda関数を作成できる。
デプロイパッケージの作成について
コードとその依存関係を特定方法で組織化してデプロイパッケージを作成できる。手順は言語によって異なる。
自分で作成するか、Lambdaのコンソールで作成できる。
Lambdaコンソールでコードを直接記述すると、コンソールによってデプロイパッケージの作成とアップロードが行われ、Lambda関数が作成される。
参考:デプロイパッケージの作成(Node.js)
Lambda関数のテスト
サンプルデータを利用してテストできる。
Lambdaコンソールでも、AWS CLIでも可能。
監視とトラブルシューティング
CloudWatchを通じてメトリクスをレポートすると、監視できる。
ログに関しても、CloudWathc Logsに自動的に保存される。
プログラミングモデル
参考:プログラミングモデル
前述で割愛した内容をここに書きます。
使用する言語に関わらず、パターンがある。
- Handler
- contextオブジェクトと実行時のLambdaの動作
- ログ記録
- 例外
Handler
Handlerは関数です。
どんな関数かというと、AWS LambdaがLambda関数の実行を開始するために呼び出す関数です。
僕らがLambda関数を作成するときは、Handlerを識別する。
Lambda関数が呼び出されると、AWS LambdaはHandler関数を呼び出してコードの実行を開始する。
AWS LambdaはこのHandlerに、最初のパラメータとしてイベントデータを渡す。
Handlerは渡されたデータを処理する必要があるし、コード内の他の関数も呼び出せる。
contextオブジェクトと実行時のLambdaの動作
Handlerに渡す2番目のパラメータは、contextオブジェクトです。
ちなみにcontextの言葉の意味は、プログラムの置かれた状況という意味である。
参考:IT時点
このcontextオブジェクトにより、AWS Lambdaとやり取りができる。
例えば、Lambda関数終了させるまでの実行時間とかを確認できる。
さらに、追加のメソッドも提供されている。
ログ記録
Lambda関数にログ記録の状態を含めることができる。
そのログを、CloudWatch Logsに書き込む。
例外
Lambda関数は、その関数の実行結果をAWS Lambdaに伝える必要がある。
記述する言語に応じて、リクエストを正常に終了する方法や、発生したエラーをAWS Lambdaに通知する方法は変わる。
Node.jsのプログラミングモデル
- 参考:Node.jsのプログラミングモデル
- 参考:Lambda 関数ハンドラー (Node.js)
- 参考:Context オブジェクト (Node.js)
- 参考:ログ作成 (Node.js)
- 参考:関数エラー (Node.js)
Lambdaのユースケース
AWS Lambdaの使用方法の例は以下から確認できます。
参考:AWS Lambda の使用方法の例