チュートリアル: AWS 統合を使用して API Gateway REST API を構築する - Amazon API Gateway

チュートリアル: AWS 統合を使用して API Gateway REST API を構築する

チュートリアル: Lambda プロキシ統合を使用した Hello World REST API の構築Lambda 統合で API Gateway REST API を構築する のトピックではいずれも、API Gateway API を作成して、統合された Lambda 関数を公開する方法について説明します。さらに、Amazon SNS、Amazon S3、Amazon Kinesis、AWS Lambda などの AWS のその他サービスを公開する API Gateway API を作成することもできます。このステップは、AWS 統合で行うことができます。Lambda 統合または Lambda プロキシ統合は、特殊なケースです。ここで、Lambda 関数の呼び出しは、API Gateway API から公開されます。

すべての AWS サービスで、これらの機能を公開するための専用 API がサポートされています。ただし、アプリケーションプロトコルやプログラミングインターフェイスは、サービスによって異なる場合があります。AWS を統合した API Gateway API には、クライアントがさまざまな AWS のサービスにアクセスできるように、一貫したアプリケーションプロトコルが使用されているという利点があります。

このチュートリアルでは、Amazon SNS を公開するための API を作成します。API を他の AWS サービスと統合するその他の例については、「Amazon API Gateway のチュートリアルとワークショップ」を参照してください。

Lambda プロキシ統合とは異なり、AWS の他のサービスに対応するプロキシ統合はありません。そのため、API メソッドは単一の AWS アクションと統合されます。柔軟性を高めるために、プロキシ統合と同様、Lambda プロキシ統合をセットアップできます。その後、Lambda 関数が AWS のその他のアクションのリクエストを解析して処理します。

エンドポイントがタイムアウトになると、API Gateway は再試行しません。API 発信者は、エンドポイントのタイムアウトを処理するよう再試行ロジックを実行する必要があります。

このウォークスルーでは、「Lambda 統合で API Gateway REST API を構築する」の手順とコンセプトに基づいて構築します。このウォークスルーを完了していない場合は、先に完了してから、このチュートリアルに進むことをお勧めします。

Prerequisites

このウォークスルーを開始する前に、次を行う必要があります。

  1. API Gateway の開始方法の前提条件」の各ステップを実行します。

  2. IAM でポリシーとロールを作成するためのアクセス許可が IAM ユーザーに付与されていることを確認します。IAM のポリシーとロールは、このチュートリアルで作成する必要があります。

  3. MyDemoAPI という名前の新しい API を作成します。詳細については、「チュートリアル: HTTP 非プロキシ統合を使用して REST API をビルドする」を参照してください。

  4. test という名前のステージに少なくとも 1 回 API をデプロイします。詳細については、『』の「API のデプロイLambda 統合で API Gateway REST API を構築する」を参照してください。

  5. 「」の残りの設定ステップを完了しますLambda 統合で API Gateway REST API を構築する

  6. Amazon Simple Notification Service (Amazon SNS) で少なくとも 1 つのトピックを作成します。デプロイした API を使用して、AWS アカウントに関連付けられている Amazon SNS のトピックのリストを取得します。Amazon SNS でトピックを作成する方法については、「トピックの作成」を参照してください (ステップ 5 で説明しているトピック ARN をコピーする必要はありません)。

ステップ 1: リソースを作成する

このステップでは、AWS サービスプロキシと AWS サービスのやり取りを可能にするリソースを作成します。

リソースを作成するには

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

  2. [MyDemoAPI] を選択します。

  3. [リソース] ペインで、1 つのスラッシュ (/) で表されるリソースのルートを選択し、[リソースの作成] を選択します。

  4. [リソース名] に「MyDemoAWSProxy」と入力し、[リソースの作成] を選択します。

ステップ 2: GET メソッドを作成する

このステップでは、AWS サービスプロキシと AWS サービスのやり取りを可能にする GET メソッドを作成します。

GET メソッドを作成するには

  1. [リソース] ペインで、[/mydemoawsproxy] を選択し、[メソッドの作成] を選択します。

  2. [HTTP メソッド] で、[GET] を選択し、選択内容を保存します。

ステップ 3: AWS サービスプロキシの実行ロールを作成する

このステップでは、AWS サービスプロキシが AWS のサービスとのやり取りするために使用する IAM ロールを作成します。この IAM ロールは AWS サービスプロキシの実行ロールと呼ばれています。このロールがないと、API Gateway は AWS のサービスとやり取りすることはできません。以降の手順で、先ほど作成した GET メソッドの設定でこのロールを指定します。

AWS サービスプロキシの実行ロールとそのポリシーを作成するには

  1. AWS Management Console にサインインして、IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. [ポリシー] を選択します。

  3. 次のいずれかを行ってください。

    • [管理ポリシーにようこそ] ページが表示された場合は、[ご利用開始にあたって] を選択してから、[ポリシーの作成] を選択します。

    • ポリシーのリストが表示された場合は、[Create Policy (ポリシーの作成)] を選択します。

  4. [JSON] を選択し、以下のテキストを入力します。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Resource": [ "*" ], "Action": [ "sns:ListTopics" ] } ] }
  5. [ポリシーの確認] を選択します。

  6. ポリシーの名前と説明を入力します。

  7. [ポリシーの作成] を選択します。

  8. [Roles (ロール)] を選択します。

  9. [Create Role] を選択します。

  10. [Select type of trusted entity] (信頼されたエンティティの種類を選択) で、[AWS Service] (AWS のサービス) を選択してから、[API Gateway] を選択します。

  11. [Next: Permissions (次へ: アクセス許可)] を選択します。

  12. [次へ: タグ] を選択します。

  13. [Next: Review] を選択します。

  14. [ロール名] ボックスに、実行ロール名 (APIGatewayAWSProxyExecRole など) を入力後、必要に応じてこのロールの説明を入力し、[ロールの作成] を選択します。

  15. [ロール] リストで、作成したロールを選択します。リストを下にスクロールする必要がある場合があります。

  16. 選択したロールで、[ポリシーのアタッチ] を選択します。

  17. 前に作成したポリシー (例: APIGatewayAWSProxyExecPolicy) の横にあるチェックボックスをオンにし、[ポリシーのアタッチ] を選択します。

  18. 先ほど作成したロールには、次の信頼関係があり、アタッチされたポリシーによって許可される任意のアクションのロールを API Gateway で引き受けることができます。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "apigateway.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

    [ロール ARN] で、実行ロールの Amazon リソース名 (ARN) をメモします。これは、後で必要になります。ARN は arn:aws:iam::123456789012:role/APIGatewayAWSProxyExecRole のようになります。ここで、123456789012 はお客様の AWS アカウント ID です。

ステップ 4: メソッドの設定を指定してメソッドをテストする

このステップでは、GET メソッドが AWS サービスプロキシ経由で AWS サービスとやり取りできるように、GET メソッドの設定を指定します。その後、メソッドをテストします。

GET メソッドの設定を指定してそのメソッドをテストするには

  1. API Gateway console コンソールで、MyDemoAPI という名前の API の [リソース] ペイン、[/mydemoawsproxy] の順に移動し、[GET] を選択します。

  2. [Integration Request (統合リクエスト)]、[AWS のサービス] の順に選択します。

  3. [AWS Region] (AWS リージョン) で、Amazon SNS トピックを取得する AWS リージョンの名前を選択します。

  4. [AWS サービス] で、[SNS] を選択します。

  5. [HTTP メソッド] で、[GET] を選択します。

  6. [Action (アクション)] に「ListTopics」と入力します。

  7. [Execution Role (実行ロール)] に、実行ロールの ARN を入力します。

  8. [Path Override (パスのオーバーライド)] を空白のままにします。

  9. [Save] を選択します。

  10. [メソッドの実行] ペインの [クライアント] ボックスで、[テスト] を選択してから、[テスト] を選択します。正常に終了すると、[レスポンスボディ] に以下のようなレスポンスが表示されます。

    { "ListTopicsResponse": { "ListTopicsResult": { "NextToken": null, "Topics": [ { "TopicArn": "arn:aws:sns:us-east-1:80398EXAMPLE:MySNSTopic-1" }, { "TopicArn": "arn:aws:sns:us-east-1:80398EXAMPLE:MySNSTopic-2" }, ... { "TopicArn": "arn:aws:sns:us-east-1:80398EXAMPLE:MySNSTopic-N" } ] }, "ResponseMetadata": { "RequestId": "abc1de23-45fa-6789-b0c1-d2e345fa6b78" } } }

ステップ 5: API をデプロイする

このステップでは、API をデプロイして、API Gateway コンソール外で呼び出せるようにします。

API をデプロイする

  1. [リソース] ペインで、[API のデプロイ] を選択します。

  2. [デプロイされるステージ] で、[test] を選択します。

  3. [Deployment description] (デプロイの説明) で、Calling AWS service proxy walkthrough と入力します。

  4. [デプロイ] を選択します。

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

このステップでは、API Gateway コンソール外で AWS サービスプロキシを使用して、Amazon SNS サービスとやり取りします。

  1. [ステージエディター] ペインの [呼び出し URL] の横で、URL をクリップボードにコピーします。以下のようになります。

    https://my-api-id.execute-api.region-id.amazonaws.com/test
  2. ブラウザーの新しいタブのアドレスボックスにその URL を貼り付けます。

  3. 次のように /mydemoawsproxy を追加します。

    https://my-api-id.execute-api.region-id.amazonaws.com/test/mydemoawsproxy

    URL を参照します。以下のような情報が表示されます。

    {"ListTopicsResponse":{"ListTopicsResult":{"NextToken": null,"Topics":[{"TopicArn": "arn:aws:sns:us-east-1:80398EXAMPLE:MySNSTopic-1"},{"TopicArn": "arn:aws:sns:us-east-1:80398EXAMPLE:MySNSTopic-2"},...{"TopicArn": "arn:aws:sns:us-east-1:80398EXAMPLE:MySNSTopic-N}]},"ResponseMetadata":{"RequestId":"abc1de23-45fa-6789-b0c1-d2e345fa6b78}}}

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

AWS サービスプロキシの動作に必要な IAM リソースを削除できます。

警告

AWS サービスプロキシが依存している IAM リソースを削除した場合、そのリソースに依存している AWS サービスプロキシと API はいずれも機能しなくなります。IAM リソースの削除は元に戻すことができません。その IAM リソースを再び使用する場合は、作成し直す必要があります。

関連付けられた IAM リソースを削除する

  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. [詳細] エリアで、[ロール] を選択します。

  3. [APIGatewayAWSProxyExecRole] を選択し、[ロールアクション]、[ロールの削除] の順に選択します。プロンプトが表示されたら、[Yes, Delete (はい、削除します)] を選択します。

  4. [詳細] エリアで、[ポリシー] を選択します。

  5. [APIGatewayAWSProxyExecPolicy] を選択し、[Policy Actions (ポリシーアクション)]、[Delete (削除)] の順に選択します。プロンプトが表示されたら、[削除] を選択します。

このチュートリアルはこれで終了です。AWS サービスプロキシとしての API 作成の詳細な説明については、「チュートリアル: API Gateway で REST API を Amazon S3 のプロキシとして作成する」、「チュートリアル: 2 つの Calc のサービス統合と 1 つの Lambda 非プロキシ統合を使用して AWS REST API を作成する」、または「チュートリアル: API Gateway で REST API を Amazon Kinesis のプロキシとして作成する」を参照してください。