外部から AWS のバックエンドサービス利用を実現する仕組みをグラレコで解説

2020-04-01
AWS 最新ドキュメント紹介

Author : 安田 茂樹

本連載では、様々な AWS サービスをグラフィックレコーディングで紹介する awsgeek.com を、日本語に翻訳し、図の解説をしていきます。

※ awsgeek.com は Amazon Web Services, Inc. プリンシパル・テクニカル・エバンジェリスト、ジェリー・ハーグローブが運営しているサイトです。

AWS では、「Amazon API Gateway」という、誰でも簡単に API の作成、公開、保守、モニタリング、保護が行えるフルマネージド型サービスを提供しています。
今回は、「Amazon API Gateway でできる事」と、「動作する仕組み」を図とともに見ていきましょう。

API とは ? ~ Amazon API Gateway でできること ~

API とは、 「Application Programming Interface」の略で、サービスの提供者が自身のサービスを外部の利用者が使えるようにするために提供するインタフェース(外部との窓口)のことです。アプリケーションの開発者は、既存の API を利用することにより、同じ機能を 1 から自身で開発する必要がないため、開発コスト・期間を減らすことができます。

AWS が提供するフルマネージド型サービスの Amazon API Gateway (以降、API Gatewayと略) を使うと、外部から AWS のバックエンドサービスや AWS 以外の HTTP ベースのサービスを利用するための窓口となる API を作成できます。
※API Gateway で作成できる API は、Web からアクセスできる「Web API」となります。本記事では、「API」と略します。

API Gateway では、以下の 3 つの種類の API を作成できます。作成する API の種類によって、外部からのリクエストを転送できるバックエンドサービスが異なります。

  • REST API :
    リクエストを転送できるバックエンドサービスは、Lambda 関数、AWS サービス、Mock、HTTP、VPC リンク。コネクション状態は保持しません (1 回きりのリクエストとレスポンス)。
  • HTTP API :
    リクエストを転送できるバックエンドサービスは、Lambda 関数、HTTP、プライベートリソース (ALB / NLB、Cloud Map)。コネクション状態は保持しません (1 回きりのリクエストとレスポンス)。
  • WebSocket API :
    リクエストを転送できるバックエンドサービスは、Lambda 関数、AWS サービス、Mock、HTTP、VPC リンク。コネクション状態を保持します (チャットなど、継続した双方向通信に適しています)。
     

API の設定を完了し、デプロイ (※APIを公開する事) すると、以下の形式で固有の呼び出し用 URL (エンドポイント URL と呼びます) が発行されます。

https://<api-id>.execute-api.<region-id>.amazonaws.com/<stage-name>/...

ユーザー側のアプリケーションがこのエンドポイント URL にリクエストを送ると、API Gateway はリクエストを受信した後、事前に設定されたバックエンドサービスにリクエストを転送します。作成した API の種類が「REST API」の場合、リクエストの転送先のバックエンドサービスは以下の中から事前に設定します。

  • Lambda関数 :
    特定のLambda関数を起動させて処理を行わせます。
  • AWSサービス (Amazon S3 / Amazon SNS / その他の AWS サービス) :
    Lambda関数以外のその他の対応する AWS サービスにリクエストを転送し、処理を行わせます。図では、Amazon S3 や Amazon SNS が例として挙げられています。
  • Mock (テスト用の API) :
    API Gateway に送られたリクエストに対し、バックエンドのサービスに接続せず、単純にレスポンスのみ返すダミーの API です。テスト目的で使います。
  • HTTP (AWS Elastic Beanstalk / Amazon EC2 / その他あらゆる HTTP エンドポイント) :
    HTTPSリクエストを受け付ける AWS および AWS 以外のサービスにリクエストを転送します。 

※なお、図には描かれていませんが、この他に、VPC リンクも選択可能です。

img_awsgeek_apigateway_01

「REST API」を作成する場合、Swagger (OpenAPI) ファイルと呼ばれる API 定義ファイルをインポートし、API を作成することもできます。

また、上の図にある、AWS SAM (サーバーレスアプリケーションモデル) とは、CloudFormation のサーバーレス向け拡張機能のことです。

「SAM テンプレート」を使って、AWS Lambda、Amazon DynamoDB、Amazon API Gatewayといった AWS のサービスから構成されるサーバーレスアプリケーションを、容易に構築/更新/削除することができます。手作業ではなく、SAM テンプレートから AWS リソースを作成することで、手作業だと起こりうるミスを減らすことができます。

SAM テンプレートはサーバーレスに特化した記述方法となっており、CloudFormation と比べてよりシンプルに記述できます。

API Gateway が動作する仕組み

次に、API Gateway の動作フローを見ていきましょう。

img_awsgeek_apigateway_02

API Gateway で「REST API」を作成する場合、エンドポイントタイプを以下の種類から選択します。

  • リージョン :
    デフォルトで選択されています。現在のリージョンを利用します。
  • エッジ最適化 :
    最も近い CloudFront のエッジサーバーを利用します。
  • プライベート :
    VPC からのみアクセスできるエンドポイントです。


エンドポイントタイプに、上記のうち「エッジ最適化」を選択した場合の API の動作フローは以下のようになります。

  1. .エンドユーザーのアプリケーションは、最も近い CloudFront のエッジサーバーにリクエストを送信します。
  2.  CloudFront から API Gateway にリクエストが転送されます。
  3. API Gateway がキャッシュを利用している場合は、キャッシュから取得、レスポンスします。
  4. キャッシュに無い場合は、事前に設定されたバックエンドサービスに転送します。その際に、スロットリングと呼ばれる流量制御を行います。詳しくは後ほどご説明します。
  5. スロットリングを無事通過したリクエストは、Lambda やその他の事前設定されたバックエンドサービスに届けられます。

スロットリングとは ?

「スロットリング」とは、流量制御のことです。

エンドポイントURLに対するリクエスト数が多すぎる場合、制限をかけることで、トラフィックの急増に対しバックエンドサービスを守ることができます。

Amazon API Gateway のスロットリングに関連する設定には、2 つの基本的なタイプがあります。

  • サーバー側のスロットリング制限 :
    全てのクライアントに適用されます。この制限設定は、リクエストが多すぎるために バックエンドサービスが処理しきれなくなることを防ぎます。
  • クライアントあたりのスロットリング制限 :
    クライアントごとに「使用量プラン」に応じて制限を行います。
img_awsgeek_apigateway_03
こちらの図は、「REST API」を利用する場合のスロットリングの例を示しています。
スロットリングは、以下の段階ごとに実施されます。
 
  • AWS アカウントレベルのスロットリング :
    デフォルトでは、API Gateway はリクエストのレート (1 秒あたりのリクエスト数上限)を 10,000 リクエスト / 秒に制限しています。また、バースト (1 ミリ秒あたりのアクセス数上限) を AWS アカウント内のすべての API にわたって 5,000 リクエストに制限しています。リクエストやバーストの上限数を超えた場合には、HTTP ステータス 429 (Too Many Requests) エラーが返されます。
  • ステージ/メソッド :
    特定のステージまたは API の個別のメソッドで、AWS アカウントレベルのスロットリング制限をオーバーライド (上書き) し、上限値を設定できます。ただし、AWS アカウントレベルのスロットリングの上限値を超えることはできません。
  • API キー :
    クライアントの API キーごとに「使用量プラン」に基づいて、スロットリング制限を実施できます。
  • キー/メソッド :
    クライアントの「使用量プラン」に基づいて、メソッドレベルでの追加のスロットリング制限を実施できます。
 
 
クライアントの「使用量プラン」は、リクエストヘッダに入っている API キーによって判定します。使用量プランでは、以下のスロットリング制限を設定できます。
 
  • レート制限 :
    1 秒あたりのアクセス数上限
  • クオータ :
    1 日あたり、週あたり、または月あたりに可能なリクエストの数
  • API ステージ:
    アクセス可能な API と API のステージ

バックエンドサービスの変遷について

img_awsgeek_apigateway_04

料金体系について

img_awsgeek_apigateway_05
img_awsgeek_apigateway_06

Amazon API Gateway の概要がなんとなくお分かりいただけましたでしょうか ?

バックエンドサービスへの窓口として使えるとても便利なサービスですので、興味を持たれた方は、この機会にぜひお試しください。

photo_yasuda

筆者紹介

安田 茂樹

アマゾン ウェブ サービス ジャパン株式会社 テクニカルコンテンツマネージャー。
2014 年にアマゾンジャパン合同会社に入社後、デバイス試験部門にて発売前の数多くの Amazon デバイスの試験に携わる。2019 年より現職。
趣味は新しいガジェットを試すこと、旅行、食べ歩き。

AWS のベストプラクティスを毎月無料でお試しいただけます

さらに最新記事・デベロッパー向けイベントを検索

記事カテゴリー別に表示
フィルターをリセット
フィルタ
1

AWS を無料でお試しいただけます

AWS 無料利用枠の詳細はこちら ≫
5 ステップでアカウント作成できます
無料サインアップ ≫
ご不明な点がおありですか?
日本担当チームへ相談する