AWS Lambda で API バックエンド処理をする

AWS Lambda の Lambda 関数を使ってサーバーレスに API バックエンド処理をしてみます。

Amazon API Gateway

Amazon API Gateway により HTTPS 経由で AWS Lambda 関数を呼び出します。

特徴

  • API に対する呼び出しと、送出されるデータに対してのみ料金が発生
  • 最低料金や前払いの義務は発生なし
  • Amazon CloudFront と統合した API Gateway でレスポンスをレイテンシーを低くすることも可能
  • API 呼び出しに対する出力をキャッシュして、API のパフォーマンスを向上させることも可能
  • Amazon CloudWatch によってモニタリング可能
  • バージョン管理可能

料金

アジアパシフィック (東京)の場合

 API 呼び出し

100 万回の API 呼び出しの受信につき 4.25 USD のレート + データの送出の費用がギガバイト単位で加算

データ転送費用

  • 最初の 10 TB につき、0.14 USD/GB
  • 次の 40 TB につき、0.135 USD/GB
  • 次の 100 TB につき、0.13 USD/GB
  • 次の 350 TB につき、0.12 USD/GB
キャッシュ

オプションで API の各ステージに専用のキャッシュをプロビジョニングすることが可能

キャッシュメモリサイズ (GB) 時間あたりの料金

  • 0.5 GB につき、0.028 USD / h
  • 1.6 GB につき、 0.054 USD / h
  • 6.1 GB につき、 0.245 USD / h
  • 13.5 GB につき、 0.290 USD / h
  • 28.4 GB につき、 0.560 USD / h
  • 58.2 GB につき、 1.10 USD / h
  • 118.0 GB につき、 2.20 USD / h
  • 237.0 GB につき、 4.40 USD / h

APIバックエンドの実装

Amazon DynamoDB を作成して、Amazon API Gateway から Lambda 関数を呼び出し、操作する APIバックエンドの実装を行ってみます。

DynamoDB テーブルを作成

Amazon DynamoDB のコンソールから「テーブルの作成」を行います。

「テーブル名」と「プライマリーキー」を設定して作成します。

次に、IAM ロールの作成を行います。「AWS Lambda」を選択して DynamoDB の権限をアタッチし、ロール名を設定したら「ロールの作成」を行います。

次に、作成したロールで「ポリシーのアタッチ」で CloudWatch の権限もアタッチしておきます。

デプロイパッケージを作成

Lambda 関数デプロイパッケージを作成します。

  1. Lambda 関数用の js ファイルを作成
  2. zip で圧縮

実行ロール (IAM ロール) を作成

IAM コンソールの左ペインの項目から「ロール」を選択して「ロールの作成」からエンティティの種類を「AWS サービス」にして、許可するサービスを選択します。

今回は「API Gateway」を選択します。

次に、ロールにアタッチするアクセス権限ポリシーを選択します。

次に、ロール名を決めて作成します。

いったん作成だけして後に「インラインポリシーの追加」から JSON でも追加可能です。

Lambda 関数を作成

デプロイパッケージをアップロードして、Lambda 関数を作成

DynamoDB を操作する内容で試してみます。

ロールは DynamoDB と CloudWatch Logs のアクセス権限ポリシーを設定したロールを使います。

テスト

Lambda 関数に圧縮した zip ファイルをアップロードして手動でテスト

テンプレートから中身を Lambda 関数に合わせた json 形式に変更して実行します。

Amazon API Gateway を使用して API を作成

HTTPS リクエストが API メソッドに送信されたら、Amazon API Gateway から Lambda 関数を呼び出すようにします。Amazon API Gateway で API を作成し、その中にリソースに、「GET」「POST」などの HTTP メソッドを用意します。

まず、Amazon API Gateway を使用して、POST メソッドを Lambda 関数に関連付けます。

手順は下記となります。

  1. API 作成
  2. API のリソース作成 (DynamoDBManager)
  3. リソースに対するメソッド作成 (POST)
  4. Lambda 関数を POST メソッドの送信先に設定
  5. API をデプロイ
  6. Amazon API Gateway が Lambda 関数を呼び出すためのアクセス権限を付与

新しい API の作成を行っていきます。

まず、「Amazon API Gateway」コンソールから「新しい API」を選択し、「API 名」を設定します。

次に、「アクション」から「リソースの作成」を選択し「リソース名」を設定して「リソースの作成」を行います。

次に、メソッドで「アクション」から「メソッドの作成」を選択し「PUT」と「GET」の設定をします。

セットアップで「統合タイプ」「Lambda プロキシ統合の使用」「Lambda リージョン」「Lambda 関数」「デフォルトタイムアウトの使用」を設定して保存をします。

次に、メソッドの実行で「統合リクエスト」をクリックして「本文マッピングテンプレート」の「マッピングテンプレートの追加」から「Content-Type」に「application/json」を設定します。

次に、「application/json」を選択しマッピングテンプレートを設定します。

次に、作成した API を「アクション」から「API のデプロイ」で「デプロイ先のステージ」選択と「ステージ名」を入力してデプロイします。

すると、「URL の呼び出し」が表示されます。

これが API のエンドポイントになります。

テスト

HTTPS リクエストの送信テスト

curl や REST client などで、json 形式で送信して正常レスポンスか確認します。

PUT メソッドで、DynamoDB にレコードが追加されているか確認

GET メソッドで、追加されたレコードの取得を確認

正常に API 送信ができ、追加と取得ともに確認できました。

まとめ

Amazon API Gateway + AWS Lambda で構成することでサーバーレスにサービスを構築することが可能となります。安定したサービスでなく負荷が急に増減したりするようなサービスや複雑な構成でないサービスではインフラの心配や管理コストを抑えられそうです。

参考

AWS Lambda とは

AWS Lambda (サーバーレスでコードを実行・自動管理)

Amazon API Gateway での AWS Lambda の使用 (オンデマンド HTTPS 経由)

Lambda と API Gateway を使用してシンプルなマイクロサービスを作成する

Amazon CloudWatch を使用した AWS Lambda 関数のトラブルシューティングとモニタリング

料金 – Amazon API Gateway

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA