チュートリアル: Amazon ECS サービスへのプライベート統合を使用した HTTP API の構築 - Amazon API Gateway

チュートリアル: Amazon ECS サービスへのプライベート統合を使用した HTTP API の構築

このチュートリアルでは、Amazon VPC で実行される Amazon ECS サービスに接続するサーバーレス API を作成します。Amazon VPC 外のクライアントは、API を使用して Amazon ECS サービスにアクセスできます。

チュートリアルの所要時間は約 1 時間です。まず、AWS CloudFormation テンプレートを使用して Amazon VPC と Amazon ECS サービスを作成します。次に、API Gateway コンソールを使用して VPC リンクを作成します。VPC リンクは、API Gateway が Amazon VPC で実行されている Amazon ECS サービスにアクセスすることを許可します。次に、VPC リンクを使用して Amazon ECS サービスに接続する HTTP API を作成します。最後に、API をテストします。

HTTP API を呼び出すと、API Gateway は VPC リンクを介して Amazon ECS サービスにリクエストをルーティングし、サービスからの応答を返します。

このチュートリアルで作成する HTTP API の概要。

このチュートリアルを完了するには、AWS アカウントと、コンソールへのアクセス権がある AWS Identity and Access Management ユーザーが必要です。詳細については、「API Gateway の開始方法の前提条件」を参照してください。

このチュートリアルでは、 を使用しますAWS Management Console この API とすべての関連リソースを作成する ‭AWS CloudFormation テンプレートについては、‭template.yaml を参照してください。

ステップ 1: Amazon ECS サービスを作成する

Amazon ECS は、クラスターで Docker コンテナを簡単に実行、停止、管理できるようにするコンテナ管理サービスです。このチュートリアルでは、Amazon ECS によって管理されるサーバーレスインフラストラクチャでクラスターを実行します。

この AWS CloudFormation テンプレートをダウンロードして解凍すると、Amazon VPC を含むサービスのすべての依存関係が作成されます。テンプレートを使用して、Application Load Balancer を使用する Amazon ECS サービスを作成します。

AWS CloudFormation スタックを作成するには
  1. https://console.aws.amazon.com/cloudformation で AWS CloudFormation コンソール を開きます。

  2. [スタックの作成] を選択し、[With new resources (standard) 新しいリソースを使用 (標準)] を選択します。

  3. [Specify template (テンプレートの指定)] で、[Upload a template file (テンプレートファイルのアップロード)] を選択します。

  4. ダウンロードしたテンプレートを選択します。

  5. [Next (次へ)] を選択します。

  6. [Stack name] (スタックの名前) で、http-api-private-integrations-tutorial と入力し、[Next] (次へ) を選択します。

  7. [Configure stack options] (スタックオプションの設定) で、[Next] (次へ) を選択します。

  8. [Capabilities] (機能) で、AWS CloudFormation がアカウントに IAM リソースを作成できることを承認します。

  9. 送信 を選択します。

AWS CloudFormation は ECS サービスをプロビジョニングします。これには数分かかる場合があります。AWS CloudFormation スタックのステータスが CREATE_COMPLETE の場合は、次のステップに進む準備ができています。

VPC リンクは、API Gateway が Amazon VPC 内のプライベートリソースにアクセスすることを許可します。VPC リンクを使用して、クライアントが HTTP API を介して Amazon ECS サービスにアクセスできるようにします。

VPC リンクを作成するには
  1. https://console.aws.amazon.com/apigateway で API Gateway コンソールにサインインします。

  2. メインナビゲーションペインで、[VPC リンク][作成] の順に選択します。

    メインナビゲーションペインを開くには、必要に応じて、メニューアイコンを選択します。

  3. [Choose a VPC link version] (VPC リンクバージョンを選択) で、[VPC link for HTTP APIs] (HTTP API の VPC リンク) を選択します。

  4. [名前] に「private-integrations-tutorial」と入力します。

  5. [VPC] で、ステップ 1 で作成した VPC を選択します。名前は、PrivateIntegrationsStack で始まる必要があります。

  6. [Subnets] (サブネット) で、VPC 内の 2 つのプライベートサブネットを選択します。名前の末尾は PrivateSubnet です。

  7. [Create] を選択します。

VPC リンクを作成すると、API Gateway は、VPC にアクセスするために Elastic Network Interface をプロビジョニングします。プロセスには数分かかることがあります。その間、API を作成できます。

ステップ 3: HTTP API を作成する

HTTP API は、Amazon ECS サービスの HTTP エンドポイントを提供します。このステップでは、空の API を作成します。ステップ 4 と 5 では、API と Amazon ECS サービスを接続するためのルートと統合を設定します。

HTTP API を作成するには
  1. https://console.aws.amazon.com/apigateway で API Gateway コンソールにサインインします。

  2. [API を作成] を選択し、[HTTP API] で [構築] を選択します。

  3. [API 名] に「http-private-integrations-tutorial」と入力します。

  4. [Next (次へ)] を選択します。

  5. [ルートの設定] で、[次へ] を選択してルートの作成をスキップします。ルートは後で作成します。

  6. API Gateway が作成するステージを確認します。API Gateway は、自動デプロイを有効にした $default ステージを作成します。これは、このチュートリアルでは最適な選択肢です。[Next (次へ)] を選択します。

  7. [Create] を選択します。

ステップ 4: ルートを作成する

ルートは、着信 API リクエストをバックエンドリソースに送信する方法です。ルートは、HTTP メソッドとリソースパスという 2 つの部分で構成されます (例: GET /items)。この例の API では、1 つのルートを作成します。

ルートを作成するには
  1. https://console.aws.amazon.com/apigateway で API Gateway コンソールにサインインします。

  2. API を選択します。

  3. [ルート] をクリックします。

  4. [Create] を選択します。

  5. [Method] (メソッド) で、[ANY] を選択します。

  6. パスには、「/{proxy+}」と入力します。パスの最後の {proxy+} は、最大一致のパス変数です。API Gateway は、API へのすべてのリクエストをこのルートに送信します。

  7. [Create] を選択します。

ステップ 5: 統合を作成する

ルートをバックエンドリソースに接続するための統合を作成します。

統合を作成するには
  1. https://console.aws.amazon.com/apigateway で API Gateway コンソールにサインインします。

  2. API を選択します。

  3. [統合] を選択します。

  4. [統合を管理] を選択し、[作成] をクリックします。

  5. [Attach this integration to a route] (この統合をルートにアタッチする) で、前に作成した ANY /{proxy+} ルートを選択します。

  6. [Integration type] (統合タイプ) で、[Private resource] (プライベートリソース) を選択します。

  7. [Integration details] (統合の詳細) で、[Select manually] (手動での選択) を選択します。

  8. [Target service] (ターゲットサービス) で、[ALB/NLB] を選択します。

  9. [Load Balancer] (ロードバランサー) には、ステップ 1 で AWS CloudFormation テンプレートを使用して作成したロードバランサーを選択します。名前は http-Priva で始まる必要があります。

  10. [Listener] (リスナー) で、HTTP 80 を選択します。

  11. [VPC link] (VPC リンク) で、ステップ 2 で作成した VPC リンクを選択します。名前は private-integrations-tutorial である必要があります。

  12. [Create] を選択します。

ルートと統合が正しく設定されていることを確認するには、[Attach integrations to routes] (統合をルートにアタッチする) を選択します。コンソールには、VPC ロードバランサーへの統合を含む ANY /{proxy+} ルートがあることが示されます。

コンソールには、VPC 内のロードバランサーへの統合を含む /{proxy+} ルートがあることが示されます。

これで、API をテストする準備ができました。

ステップ 6: API をテストする

次に、API をテストして作動していることを確認します。シンプルにテストをするため、ウェブブラウザを使用して API を呼び出します。

API をテストするために
  1. API Gateway コンソール (https://console.aws.amazon.com/apigateway) にサインインします。

  2. API を選択します。

  3. API の呼び出し URL を書き留めます。

    APIを作成すると、コンソールに API の呼び出し URL が表示されます。
  4. ウェブブラウザで、API の呼び出し URL にアクセスします。

    URL は次のようになります。https://abcdef123.execute-api.us-east-2.amazonaws.com

    ブラウザが API にGETリクエストを送信します。

  5. API の応答が、アプリケーションが Amazon ECS で実行されていることを示すウェルカムメッセージであることを確認します。

    Amazon VPC で実行される Amazon ECS サービスを正常に作成し、VPC リンクを持つ API Gateway HTTP API を使用して Amazon ECS サービスにアクセスすると、ウェルカムメッセージが表示されます。

ステップ 7: クリーンアップ

不要なコストを回避するには、このチュートリアルで作成したリソースを削除します。次の手順では、VPC リンク、AWS CloudFormation スタック、および HTTP API を削除します。

HTTP API を削除するには
  1. https://console.aws.amazon.com/apigateway で API Gateway コンソールにサインインします。

  2. [API] ページで API を選択します。[Actions] (アクション)、[Delete] (削除) の順に選択し、選択を確定します。

VPC リンクを削除するには
  1. https://console.aws.amazon.com/apigateway で API Gateway コンソールにサインインします。

  2. [VPC link] (VPC リンク) を選択します。

  3. VPC リンクを選択し、[Delete] (削除) を選択して、選択を確定します。

AWS CloudFormation スタックを削除するには
  1. AWS CloudFormation コンソール (https://console.aws.amazon.com/cloudformation) を開きます。

  2. AWS CloudFormation スタックを選択します。

  3. [Delete] (削除) を選択し、選択を確定します。

次のステップ: AWS CloudFormation を使用して自動化する

このチュートリアルで使用するすべての AWS リソースの作成とクリーンアップを自動化できます。AWS CloudFormation テンプレートの完全な例については、template.yaml を参照してください。