Lambdaとは
サーバーの準備・管理をすることなく、Lambda関数と呼ばれるコードを実行出来るコンピューティングサービス
FaaS(Function as a Service):イベントが発生したときに起動させる機能(Function)だけを利用者が開発し、それ以外のサービスはすべてAWSなどのクラウドサービス企業が責任を持つ形態
メリット
- トランザクション量に応じて自動でスケーリングする
- 起動時点で高可用性が保証されている
- Lambda関数の実行中のみが課金対象で、アイドル時間については利用料がかからない
Lambda関数
Lambdaの中心となる構成要素としてプログラミング言語で記述された機能
- イベントソースでのイベントをトリガーとして実行される
- 詳細 → 【Lambda】Lambda関数①、【Lambda】Lambda関数②
- Lambda関数を初めて実行する場合、実行用のコンテナ作成やコードのダウンロードなどの準備が行われるため、実行までに時間を要する
・コールドスタート:コンテナやENIが新しく作成された後でLambda関数が実行されること
・ウォームスタート:既存のコンテナやENIを利用してLambda関数が実行されること
→ 不要なコード・ライブラリの削除、適切なVPCアクセス設定の付与をすることで、コールドスタートの実行にかかる時間を短縮出来る
コーディング方法
Lambda関数のコーディング方法は以下の3つ
- マネージメントコンソールのLambdaの画面上で直接入力する
- マネージメントコンソールのLambdaの画面上でzipファイルをアップロードする
- S3にアップロードしたzipファイルを参照させる
対応言語
Lambda関数が標準でサポートしているプログラミング言語とバージョン
Node.js | Python | Ruby | Java | Go | .NET |
---|---|---|---|---|---|
Node.js 8.10 Node.js 6.10 |
Python 3.6 Python 3.7 Python 2.7 |
Ruby 2.5 | Java 8 | Go 1.x | .NET Core 2.1 .NET Core 2.0 .NET Core 1.0 |
※ Lambda関数には、カスタムランタイムの利用も可能
カスタムランタイム:標準ではサポートしていないプログラミング言語でもLambda関数の開発を可能にする仕組み(利用者自身で用意するか、AWSが提供しているものを利用する)
イベントソース
Lambdaによってサポートされているイベントソース
同期呼び出し(プッシュ型) | 非同期呼び出し(プッシュ型) | ストリームベース(プル型) | キューベース(プル型) |
---|---|---|---|
・ALB ・API Gateway ・Cognito ・CloudFront ・Kinesis Data Firehose ・Alexa ・Lex |
・S3 ・SNS ・SES ・CloudWatch Events ・CloudWatch Logs ・Cloud Formation ・CodeCommit ・AWS Config ・AWS IoT ボタン |
・DynamoDB ・Kinesis Data Streams |
・SQS |
プッシュ型
イベントソースがLambdaを呼び出しLambda関数を実行する
- サービスもしくはアプリケーションが直接実行する
- 順不同で実行される
- 3回までリトライする
同期呼び出しタイプ:Lambdaの処理が完了するのを待ってから処理結果をレスポンスとして受け取る
非同期呼び出しタイプ:Lambdaに実行命令だけ送り、処理の完了を待たない
プル型
Lambdaがイベントソースのストリームやキューをポーリングし、新たなイベントが存在した場合にLambda関数を実行する
- ストリームに入ってきた順で処理される
- データが期限切れになるまでリトライする
ストリームベース:DynamoDBやKinesisのストリームをトリガーとする
キューベース:SQSのキューをトリガーとする
外部ライブラリの利用
Lambdaの標準的な実行環境に含まれているライブラリは AWS SDK for JavaScript や AWS SDK for Python などの一部ライブラリのみで、開発に利用する殆どの外部ライブラリは含まれていない
- 外部ライブラリを使用する際は、Lambda関数のコードとコード内で使用するライブラリを合わせてzip化し、Lambdaにアップロードする
- Lambda関数のコードは必ずzipファイルのルートに配置する
モニタリング
Lambdaの稼働状況を確認するためには、以下2つのサービスでモニタリングを行う
Amazon CloudWatch
マネージメントコンソールから、アカウントレベルまたは関数レベルで実行数・エラー数などのCloudWatchメトリクスを可視化して確認可能
- CloudWatch Logsを利用することで、より詳細な情報を得ることも可能
- Lambda関数にCloudWatch Logsへのアクセス権限を付与することで情報が収集される
AWS X-Ray
アプリケーションのパフォーマンス分析及びエラー原因特定のためのサービス
- CloudWatchよりも詳細なパフォーマンス分析が可能(Lambda関数の準備時間、処理実行時間、他サービスの呼び出しに要した時間など)
- X-Rayによるモニタリングは以下の準備が必要
1. トレースモードをアクティブにする(Lambda関数の実行ロールに、X-Rayへの書き込みに必要な権限が自動的に付与される)
2. AWSサービスの呼び出しをモニタリングする場合は、Lambda関数のコード内でサブセグメントを発行し、トレースを有効化する - 利用する場合、収集したデータをX-Rayに送信するためのX-RayデーモンというアプリケーションがLambdaの実行環境で動作する
- X-Rayデーモンの動作にはLambda関数に割り当てられたメモリが消費されるため、十分なメモリを確保する必要が生じる