Edited at

【初心者向け】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 の使用方法の例