Lambda サーバレス
EC2インスタンスの代わりにコードを実行することで、効率的なアーキテクチャを実現する。
利用者は、ソースコードだけを準備すればすぐに実行できるようになり、自動的にスケール等をおこなてくれる。
Lambdaの特徴
・実行基盤は全てAWSが管理
・AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実行可能
・Node.js/javaで書かれたコードを実行可能
・100ミリ秒単位でコード実行時間に対しての課金でありコスト効率が非常に高い
・オートスケール
Lambdaがサポートしている言語
・Node.js
・Ruby
・PowerShell
・Python
・C#
・Java
・Go
Lambda関数
Lambdaを利用するには、Lambda関数という単位で、実行プログラムとその実行トリガーとなるイベントを事前に定義します。
実行数に応じて支払いが発生するため、 Lambda関数が無期限に実行されないようにタイムアウト設定がなされています。 指定されたタイムアウトに達するとLambda関数は実行を終了します。そのため、予想される実行時間に基づいてタイムアウト時間を設定することが必要となります。 デフォルトのタイムアウトは3秒で、AWS Lambdaのリクエストあたりの最大実行時間は900秒。これは15分に相当します。よって、15分を超過した処理が発生すると計算処理が途中で終了してしまいます。
Lambda関数は最大512MBまでのデータ容量を扱うことができます。
Lambdaの仕組み
・画像のアップロードをトリガー
・アピりケーション内の実行処理をトリガー
・ウェブサイトのクリックをトリガー
・接続デバイスからの出力をトリガー など
lambdaの起動
・Pushモデル
S3/Cognito/SNSなどのAWSサービスとカスタムが直接実行することにより起動するLambdaファンクション
ーサービスもしくはアプリが直接実行する
ー順不同
ー3回までリトライ
・Pullモデル
DynamoDBとKinesisなどのデータ処理は、Lambdaに対して直接的にイベント発行を行われないため、Lambdaがそれらへポーリングを行い自らイベントを取得
ーストリームに入ってきた順に処理される
ーイベントソースとして登録したストリー ムに対してLambdaが自動的にデータ取 得などのファンクションを実行する
ーイベントごとに複数レコードを取得可能
ーデータが期限切れになるまでリトライ
APIゲートウェイ (API Gateway)
APIを介してバックエンドサービスへのHTTPからのアクセスを提供します。APIゲートウェイはLambdaと一体となって利用できるサービスであり、APIゲートウェイをLambdaファンクションと統合する設定を実施することで、HTTPからLambdaファンクションへのアクセスが可能となります。
グローバルおよびサービスコールを含むさまざまなレベルでスロットルを提供します。スロットリング制限設定はリクエストが多すぎるために バックエンドサービスが処理しきれなくなることを防ぎます。たとえば、API所有者は自分のREST APIの特定のメソッドに対して毎秒1,000リクエストのレート制限を設定し、数秒間で毎秒2,000リクエストのバーストを処理するようにAmazon API Gatewayを設定することもできます。 Amazon API Gatewayは1秒あたりのリクエスト数を追跡 し、制限を超えたリクエストは429 HTTPレスポンスを受け取ります。
API Gatewayキャッシュ
プロビジョニングして、そのサイズをギガバイトで指定することで、API呼び出しにキャッシュを追加できます。キャッシュは、APIの特定の段階用にプロビジョニングされています。これによりパフォーマンスが向上し、バックエンドに送信されるトラフィックが減少します。キャッシュ設定を使用すると、キャッシュキーの作成方法と各メソッドに保存されるデータの有効期間(TTL)を制御できます。
DynamoDBとの連携
DynamoDBへのデータ登録後、自動でLambda関数を起動してメタデータを登録することが望ましい構成です。そのためには、DynamoDBストリームという仕組みを使うことで、DynamoDBテーブルへのデータ登録をトリガーにしてLambda関数を起動することができます。
RDSプロキシ
アプリケーションとRDSデータベースの間の仲介役として機能します。RDSプロキシは必要となるデータベースへのコネクションプールを確立および管理し、アプリケーションからのデータベース接続を少なく抑える機能です。
Lambda関数はRDSエンドポイントではなく、RDSプロキシを利用して接続することが求められます。RDSプロキシはLambda関数の同時実行によって作成された大量の同時接続をスケーリングするために必要なコネクションをプーリングします。これにより、Lambdaアプリケーションは、Lambda関数呼び出しごとに新しいコネクションを作成するのではなく、既存のコネクションを再利用できます。 RDSプロキシを利用せず、エンドポイントを利用するとLambda関数によってコネクションが多数発生して処理が上手くいかなくなってしまいます。
AWS SAM
サーバーレスアプリケーション構築用のデプロイツールです。YAMLを使用して、サーバレスアプリケーションのLambda関数、API、データベース、イベントソースマッピングをモデリングします。AWS SAMはCloudFormationと連携してサーバレスアプリケーションを展開します。その際は、SAM が SAM 構文を AWS CloudFormation 構文に変換および拡張することで、サーバーレスアプリケーションの構築を高速化することができます。