• Lambda関数(ファンクション)とは
  • ネイティブライブラリ
  • コンテナのライフサイクル

Lambda関数とは

AWS Lambda で実行するコードは「Lambda 関数」としてアップロードします。基盤となるコンピューティングインフラストラクチャに依存しないように、コードは必ず「ステートレス」なスタイルで書く必要があります。永続的な状態はすべて Amazon S3、Amazon DynamoDB、その他のインターネットが利用可能なストレージサービスに保存されるようにします。ネイティブライブラリも含めて、Lambda 関数ではライブラリを利用できます。

コードはZip形式にしてアップロードあるいはコンソール上で直接記述
各種ライブラリをZipファイルに含めることが可能

メモリ容量はデフォルトで128MB。1.5GBまで64MBごとに設定可能
メモリ容量を指定することにより、そのメモリ容量に応じてCPUパワーは自動的に割り当てられる

実行時間のタイムアウトはデフォルトで3秒、最大60秒まで設定可能

Lambda関数の起動・実行それぞれに対するIAM Roleを設定

 

ネイティブライブラリ

Lambda関数(ファンクション)で使うネイティブライブラリをビルドしてパッケージにしてプロジェクトに取り込むことも可能です。ただし、AWS lambdaの実行環境は、パブリックAmazon Linux AMIバージョンに基づいていますので、コードにネイティブバイナリを使用している場合には、この環境でコンパイルする必要があります。

また、ライブラリおよび依存関係はスタティックにコンパイルするかダイナミックリンクを指定してコンパイルする必要があります。

下記、LambdaにネイティブライブラリとしてOpenCVを導入する手順です。スライド下の▶︎を押して順に手順をご覧ください。

 

 

コンテナのライフサイクル

Lambda関数(ファンクション)の作成後、もしくはコードや設定更新後の初回実行時には、新たなコンテナが作成されて、Lambda関数用のコードがコンテナ内にロードされます。Node.js側では、ハンドラが最初に呼び出される前に、初期化コードがコンテナの作成ごとに一度だけ十うされます。

一方で、Lambdaのコンテナの終了タイミングとしては、下記の四つの場合があります。

Timeout
ユーザが指定した実行時間を超えた場合には、その際にどのような処理が行われているかとは無関係に即時に実行は停止されます。

Controlled termination
コールバックの一つがcontext.done()を呼び出して終了した場合には、他のコールバッグが実行されていても即時に処理が終了します。

Default termination
全てのコールバックが終了してファンクションが終了した場合には、context.done()を実行していなくとも終了します。

クラッシュもしくはprocess.exit()呼び出し
セグメンテーション違反等を起こした場合にはコンテナはその時点で実行終了となります。

※実行からある程度の時間が経過したのちに、再度実行される場合には初回実行時と同様に新たにコンテナが作成されます。コードの変更がなく前回の実行から時間がたっていない場合には、以前のコンテナを再利用します。

 

 

 

本サイト上に掲載されているまとめ記事が、毎週ステップメールで受け取ることもできます。

 

参考文献