AWS
lambda

【初心者向け】AWS Lambdaの超基礎

注意

公式サイトやいろんなサイト見て、自分なりにまとめたり、言い換えたりしたものです。
AWSは、EC2,S3,CloudFront,CloudWatch,コピペLambda関数の使用経験があります。
がっつりLambdaを触る上で、理解が必要になったので知識の整理のためにまとめます。

Lambdaとは

サーバーの準備・管理をしなくても、コードを実行できるサービス。
Lambdaは必要に応じてコードを実行して、その使用時間に対して料金を払う。だから使い方によってはすごく安い。
現在のサポート言語は、Node.js、Java、C#、Go および Pythonです。
コンピューティングリソースはLambdaが管理するので、実行するコードにだけ集中することができる。
逆に言えば、コンピューティングしているインスタンスにログインしたり、言語のランタイムをカスタマイズする、といった細かいことが出来ない。

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のプログラミングモデル

Lambdaのユースケース

AWS Lambdaの使用方法の例は以下から確認できます。
参考:AWS Lambda の使用方法の例