メニュー
Amazon API Gateway
開発者ガイド

Amazon SNS の AWS サービスプロキシを作成する

Lambda 関数または HTTP エンドポイントの公開に加え、AWS サービス (Amazon SNS、Amazon S3、Kinesis) のプロキシとして API Gateway API を作成し、クライアントがその API を通じてバックエンドの AWS サービスにアクセスできるようにすることもできます。このウォークスルーでは、Amazon SNS を公開するための API を作成します。API を他の AWS サービスと統合する例については、「サンプルおよびチュートリアル」を参照してください。

AWS サービスプロキシは AWS サービスのアクションのみを呼び出すことができ、そのアクションは通常、変更できません。より高い柔軟性が必要な場合は、代わりに Lambda 関数を呼び出す必要があります。

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

このチュートリアルは「Lambda 関数を公開するための API を作成する」の手順や概念に基づいています。そのチュートリアルでは、API Gateway を使用して、カスタム API を作成し、一連の AWS Lambda 関数に接続した後に、API から Lambda 関数を呼び出す方法を示しています。そのチュートリアルをまだ完了していない場合は、まず完了してから、このチュートリアルに進むことをお勧めします。

前提条件

この演習を開始する前に、以下の操作を完了している必要があります。

  1. API Gateway を使用する準備を整える」の各ステップを実行します。

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

  3. 少なくとも、API Gateway コンソールを開き、MyDemoAPI という名前の新しい API を作成します。詳細については、「HTTP エンドポイントを公開するための API Gateway API を作成する」を参照してください。

  4. test という名前のステージに少なくとも 1 回 API をデプロイします。詳細については、「Lambda 関数を公開するための API を作成する」の「API のデプロイ」を参照してください。

  5. Lambda 関数を公開するための 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. [Resources] ペインで、1 つのスラッシュ (/) で表されるリソースのルートを選択し、[Create Resource] を選択します。

  4. [Resource Name] に「MyDemoAWSProxy」と入力し、[Create Resource] を選択します。

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

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

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

  1. [Resources] ペインで、[/mydemoawsproxy] を選択してから [Create Method] を選択します。

  2. [HTTP method] で、[GET] を選択し、選択内容を保存します。

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

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

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

  1. AWS マネジメントコンソール にサインインし、IAM コンソール(https://console.aws.amazon.com/iam/)を開きます。

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

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

    • [Welcome to Managed Policies] ページが表示された場合は、[Get Started] を選択してから、[Create Policy] を選択します。

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

  4. [Create Your Own Policy] の横の [Select] を選択します。

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

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

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

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

    注記

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

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

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

  10. [Role Name] ボックスに、実行ロール名 (APIGatewayAWSProxyExecRole など) を入力し、[Next Step] を選択します。

  11. [Amazon EC2] の横で、[Select] を選択します。

    注記

    ここで [Select] を選択するのは、続行する前に、標準の AWS サービスロールステートメントを選択する必要があるためです。現在、標準の API Gateway サービスロールステートメントを選択することはできません。このステップで後ほど、API Gateway で使用するために標準の Amazon EC2 サービスロールステートメントを変更します。

  12. ポリシーのリストで、[APIGatewayAWSProxyExecPolicy] を選択してから、[Next Step] を選択します。

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

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

    IAM で先ほど作成した呼び出しロールにより、Amazon EC2 は AWS アカウントの Amazon SNS トピックのリストを取得できるようになります。代わりに、API Gateway が AWS アカウントの Amazon SNS トピックのリストを取得できるように、このロールを変更します。

  15. ロールのリストで、[APIGatewayAWSProxyExecRole] を選択します。

  16. [Trust Relationships] エリアで、[Edit Trust Relationship] を選択します。

  17. [Policy Document] で、ec2.amazonaws.comapigateway.amazonaws.com に置き換えます。これで、アクセスコントロールポリシードキュメントは以下のようになります。

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

    このポリシードキュメントにより、API Gateway はお客様の AWS アカウントに代わってアクションを実行できるようになります。

  18. [Update Trust Policy] を選択します。

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

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

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

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

  2. [Setup] ペインの [Integration type] で、[Show advanced] を選択してから、[AWS Service Proxy] を選択します。

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

  4. [AWS Service] で、[SNS] を選択します。

  5. [HTTP method] で、[GET] を選択します。

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

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

  8. [Path Override] を空白のままにします。

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

  10. [Method Execution] ペインの [Client] ボックスで、[TEST] を選択してから、[Test] を選択します。正常に終了すると、[Response Body] に以下のような応答が表示されます。

    Copy
    { "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. [Resources] ペインで、[Deploy API] を選択します。

  2. [Deployment stage] で、[test] を選択します。

  3. [Deployment description] に、「Calling AWS service proxy walkthrough」と入力します。

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

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

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

  1. [Stage Editor] ペインの [Invoke URL] の横で、URL をクリップボードにコピーします。以下のようになります。

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

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

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

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

    Copy
    {"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. [Details] エリアで、[Roles] をクリックします。

  3. [APIGatewayAWSProxyExecRole]、[Role Actions]、[Delete Role] の順に選択します。プロンプトが表示されたら、[Yes, Delete] を選択します。

  4. [Details] エリアで、[Policies] を選択します。

  5. [APIGatewayAWSProxyExecPolicy]、[Policy Actions]、[Delete] の順に選択します。プロンプトが表示されたら、[Delete] を選択します。

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