第3章 AWS Lambda関数のプログラミング
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
この章では、Lambda関数を構築するとはどういうことなのか、Lambda関数がどのように見えるのか、Lambda関数の実行方法をどのように設定するのか、独自の環境設定をどのように指定するのかを掘り下げていく。 Lambdaの実行環境、入力と出力、タイムアウト、メモリとCPU、そして最後に、Lambdaがアプリケーション設定のために環境変数をどのように使用するのか、といった核となる概念を検討することで、これらのトピックについて学んでいく。
手始めに、Lambda関数がどのように実行されるかを見てみよう。ハイキング・ブーツを手に、探検の時間だ。
核となる概念:ランタイムモデル、呼び出し
第2章で、あなたは 、Javaクラスを作成し、それを漠然とした「クラウド」のどこかにあるLambdaサービスにアップロードし、魔法のようにそのコードを実行することができた。 あなたは、オペレーティングシステム、コンテナ、スタートアップスクリプト、実際のホストへのコードのデプロイ、JVMの設定などを考慮する必要はなかった。 また、厄介な「サーバ」のことも考えなかった。では、あなたのコードはどのように実行されたのか?
これを理解するには、図3-1に示すように、まずLambda実行環境の基本を理解する必要がある。
図3-1. Lambdaの実行環境
ラムダの実行環境
第2章(「AWS CLIのインストール」参照)で触れたように、AWSの管理も関数の演算子(それぞれコントロールプレーン、データプレーンと呼ばれることが多い)も、APIを多用している。Lambdaも同様で、関数の管理と関数の実行の両方にAPIを提供している。
AWS Lambda APIのinvoke コマンドが呼び出されるたびに、 関数が実行、つまり呼び出しされる。 これは以下のタイミングで発生する:
-
関数がイベントソースによってトリガーされた場合
-
ウェブ・コンソールでテスト・ハーネスを使用する場合
-
Lambda API
invokeコマンドを自分のコードやスクリプトから自分で呼び出す場合、通常はCLIやSDKを使用する。
関数を初めて呼び出すと、次のような一連の動作が始まり、最終的にあなたのコードが実行される。
まず、LambdaサービスはホストLinux環境(軽量なマイクロ仮想マシン)を作成する。通常、どのような環境なのか(どのカーネルなのか、どのディストリビューションなのか、など)の正確な性質を気にする必要はないが、気にするのであれば、Amazonはその情報を公開している。Amazonは、Lambda関数のOSに頻繁に変更を加えることができ、また実際に行っている。
ホスト環境が作成されると、Lambdaはその中で言語ランタイム(ここではJava仮想マシン)を起動する。この記事を書いている時点では、JVMのバージョンは常にJava 8かJava 11だ。 Lambdaには、選択したJavaのバージョンと互換性のあるコードを提供しなければならない。 JVMは、変更できない環境フラグのセットで起動する。