
AWS Lambdaとは?
AWS Lambda はサーバーをプロビジョニングしたり管理する必要なくコードを実行できるコンピューティングサービスです。
AWS Lambda は必要時にのみコードを実行し、1 日あたり数個のリクエストから 1 秒あたり数千のリクエストまで自動的にスケーリングします。
Lambda関数を利用してDynamoDBから一定の間隔でデータを取得してログ解析を実施した上で、解析結果をS3サーバーに格納する仕組みコードを組みことが可能です。
Lambdaの仕様
Lambda関数は実行数と応じて支払いが発生するため、 Lambda関数が無期限に実行されないようにタイムアウト設定がなされています。
指定されたタイムアウトに達するとLambda関数は実行を終了します。
そのため、予想される実行時間に基づいてタイムアウト時間を設定することが必要となります。
デフォルトのタイムアウトは3秒で、AWS Lambdaのリクエストあたりの最大実行時間は900秒です。
これは15分に相当します。よって、15分を超過した処理が発生すると計算処理が途中で終了してしまいます
Lambdaの制限事項
- Lambdaの/tmp ディレクトリ
- 設定、デプロイ、実行に利用される
- ストレージは512MBまで
- 同時実行数は1000まで
- 関数とレイヤーストレージ75GBまで
監視
Lambdaの設定方法
Lambdaファンクションを作成するときにIAMロールを指定します。
このロールに付与したアクセス権限によって、そのロールを引き受けたときにLambdaが操作できる対象の実行範囲が決まります。
Lambdaファンクションを使用するときに他のリソースにアクセスする必要がある場合は、Lambdaが利用するサービスに対するアクセス権限を付与するIAMロールが設定されている必要があります
Lambda API やリソース (関数やレイヤーなど) へのアクセスを管理するにはIAMを使用します。
Lambda を使用したアカウントのユーザーやアプリケーションのアクセス許可は、IAM ユーザー、グループ、またはロールに適用できるアクセス許可ポリシーで管理します。
Lambda リソースを使用する他のアカウントや AWS のサービスにアクセス許可を付与するには、リソース自体に適用するポリシーを使用します。
詳細は以下のサイトを参照ください。
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-sqs-example.html
どのような機能があるか?
LambdaではC#プログラミング言語でコードを実行する機能があります。Lambda はサーバーをプロビジョニングしたり管理する必要なくコードを実行できるコンピューティングサービスです。AWS Lambdaは必要時にのみコードを実行し、1 日あたり数個のリクエストから 1 秒あたり数千のリクエストまで自動的にスケーリングします
RDSでの使い方
RDS プロキシはアプリケーションとRDSデータベースの間の仲介役として機能します。RDS プロキシは、必要となるデータベースへのコネクションプールを確立および管理し、アプリケーションからのデータベース接続を少なく抑える機能です。RDS プロキシは、Lambda関数からデータベースに直接流れるすべてのデータベーストラフィックを処理します。
Lambda関数はデータベースインスタンスではなくRDSプロキシを利用して接続することが求められます。RDSプロキシは、Lambda関数の同時実行によって作成された大量の同時接続をスケーリングするために必要なコネクションをプーリングします。これにより、Lambdaアプリケーションは、Lambda関数呼び出しごとに新しいコネクションを作成するのではなく、既存のコネクションを再利用できます
Lambda関数をRDSに直接つなげることは可能ですが、同時実行されることでコネクションを多数確立することになり、プロキシを利用しないとデータセッションが効率的に継続させることができません
Lambda Layer
Lambda Layerは複数のLambda関数でライブラリを共有できる仕組みであり、一定の機能をLayerとしてまとめて利用することができます。これまでは同じライブラリを利用する関数が複数あった場合、全ての関数に対してライブラリを含めてパッケージングすることが必要でした。それを、ライブラリをLayerとしてアップロードしておくことで、個々の関数はLayerを使用することができます。今回のシナリオでは、Lambda関数を利用したアプリケーションを複数実行していますが、その処理の一部分が重複しています。これをLambda Layerを利用することで、重複部分も共有化することができます。
Lambdaエッジ
Lambdaエッジ を使用すると、サーバー管理を行わなくても、ウェブアプリケーションをグローバルに分散させ、パフォーマンスを向上させることができます。