Amazon API Gateway
開発者ガイド

チュートリアル: AWS 統合で API Gateway API をビルドする

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

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

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

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

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

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

前提条件

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

  1. 前提条件: API Gateway で API を構築する準備を整える」の各ステップを実行します。

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

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

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

  5. Lambda 統合で API Gateway API をビルドする」の残りの設定ステップを完了します。

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

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

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

リソースを作成するには

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

  2. [MyDemoAPI] が表示されている場合は、[Resources] を選択します。

  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 マネジメントコンソール にサインインし、IAM コンソール(https://console.aws.amazon.com/iam/)を開きます。

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

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

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

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

  4. [独自のポリシーを作成] の横で、[選択] を選択します。

  5. [ポリシー名] に、ポリシーの名前 (APIGatewayAWSProxyExecPolicy など) を入力します。

  6. [説明] に「Enables API Gateway to call AWS services」と入力します。

  7. [Policy Document] に、以下のように入力し、[Create Policy] を選択します。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Resource": [ "*" ], "Action": [ "sns:ListTopics" ] } ] }

    このポリシードキュメントでは、呼び出し元に対して AWS アカウントの Amazon SNS トピックのリストの取得を許可します。

  8. [Roles] を選択します。

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

  10. [ロールタイプの選択] で、[AWS サービス] を選択し、続いて [API Gateway] を選択します。

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

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

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

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

  15. 選択したロールの場合は、[ポリシーのアタッチ] を選択します。

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

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

    { "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 コンソールで、MyDemoAPI という名前の API の [リソース] ペイン、[mydemoawsproxy] の順に移動し、[GET] を選択します。

  2. [設定] ペインの [統合タイプ] で、[詳細表示] を選択してから、[AWS サービスプロキシ] を選択します。

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

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

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

  6. [Action] に ListTopics と入力します。

  7. [実行ロール] に、実行ロールの 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. [デプロイメントの説明] に「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. https://console.aws.amazon.com/iam/ にある IAM コンソールを開きます。

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

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

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

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

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