

# チュートリアル: AWS 統合を使用して REST API を作成する
<a name="getting-started-aws-proxy"></a>

 [チュートリアル: Lambda プロキシ統合を使用して REST API を作成する](api-gateway-create-api-as-simple-proxy-for-lambda.md) と [チュートリアル: Lambda 非プロキシ統合を使用して REST API を作成する](getting-started-lambda-non-proxy-integration.md) のトピックではいずれも、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 のチュートリアルとワークショップ](api-gateway-tutorials.md)」を参照してください。

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

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

 この演習は、「[チュートリアル: Lambda 非プロキシ統合を使用して REST API を作成する](getting-started-lambda-non-proxy-integration.md)」の手順と概念に基づいています。この演習を完了していない場合は、先に完了することを推奨します。



**Topics**
+ [前提条件](#getting-started-aws-proxy-prerequisites)
+ [ステップ 1: AWS のサービスプロキシの実行ロールを作成する](#getting-started-aws-proxy-add-roles)
+ [ステップ 2: リソースを作成する](#getting-started-aws-proxy-add-resources)
+ [ステップ 3: GET メソッドを作成する](#getting-started-aws-proxy-add-methods)
+ [ステップ 4: メソッドの設定を指定してメソッドをテストする](#getting-started-aws-proxy-set-methods)
+ [ステップ 5: API をデプロイする](#getting-started-aws-proxy-deploy)
+ [ステップ 6: API をテストする](#getting-started-aws-proxy-test)
+ [ステップ 7: クリーンアップ](#getting-started-aws-proxy-clean-up)

## 前提条件
<a name="getting-started-aws-proxy-prerequisites"></a>

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

1. 「[API Gateway を使用するようにセットアップする](setting-up.md)」の各ステップを実行します。

1.  `MyDemoAPI` という名前の新しい API を作成します。詳細については、「[チュートリアル: HTTP 非プロキシ統合を使用して REST API を作成する](api-gateway-create-api-step-by-step.md)」を参照してください。

1. `test` という名前のステージに少なくとも 1 回 API をデプロイします。詳細については、『[』の「](getting-started-lambda-non-proxy-integration.md#getting-started-deploy-api)API のデプロイ[AWS Lambda 統合を選択するチュートリアル](getting-started-with-lambda-integration.md)」を参照してください。

1. 「」の残りの設定ステップを完了します[AWS Lambda 統合を選択するチュートリアル](getting-started-with-lambda-integration.md)

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

## ステップ 1: AWS のサービスプロキシの実行ロールを作成する
<a name="getting-started-aws-proxy-add-roles"></a>

 Amazon SNS のアクションを呼び出すことを API に許可するには、IAM ロールに適切な IAM ポリシーをアタッチする必要があります。このステップでは、新しい IAM ロールを作成します。

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

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

1. **[ロール]** を選択します。

1. [**ロールの作成**] を選択します。

1.  **[信頼されたエンティティの種類を選択]** で **[AWS のサービス]** を選択し、**[API Gateway]**、**[API Gateway が CloudWatch Logs にログをプッシュすることを許可]** の順に選択します。

1.  **[次へ]** を選択し、さらに **[次へ]** を選択します。

1. [**ロール名**] に「**APIGatewaySNSProxyPolicy**」と入力し、[**ロールの作成**] を選択します。

1. [**ロール**] リストで、作成したロールを選択します。ロールを検索するには、必要に応じてスクロールするか、検索バーを使用します。

1. 選択したロールの **[アクセス許可を追加]** タブを選択します。

1. ドロップダウンリストから **[ポリシーをアタッチ]** を選択します。

1. 検索バーに「**AmazonSNSReadOnlyAccess**」と入力し、**[アクセス許可を追加]** を選択します。
**注記**  
このチュートリアルでは、わかりやすくするために管理ポリシーを使用しますが、独自の IAM ポリシーを作成して、必要な最小限のアクセス許可を付与するのがベストプラクティスです。

1. 新しく作成した**ロール ARN** をメモしておきます。これは後で使用します。

## ステップ 2: リソースを作成する
<a name="getting-started-aws-proxy-add-resources"></a>

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

**リソースを作成するには**

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

1. API を選択します。

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

1. **[プロキシのリソース]** はオフのままにします。

1. **[リソースパス]** は `/` のままにします。

1. **[リソース名]** に「**mydemoawsproxy**」と入力します。

1. **[CORS (Cross Origin Resource Sharing)]** はオフのままにします。

1. **[リソースの作成]** を選択します。

## ステップ 3: GET メソッドを作成する
<a name="getting-started-aws-proxy-add-methods"></a>

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

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

1. **/mydemoawsproxy** リソースを選択し、**[メソッドを作成]** を選択します。

1. メソッドタイプとして、**[GET]** を選択します。

1. **[統合タイプ]** で、**[AWS のサービス]** を選択します。

1. **[AWS リージョン]** で、作成した Amazon SNS トピックを作成した AWS リージョンを選択します。

1. **[AWS のサービス]** で、**[Amazon SNS]** を選択します。

1. **[AWS サブドメイン]** は空白のままにします。

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

1. **[アクションタイプ]** で、**[アクション名を使用]** を選択します。

1. **[アクション名]** に「**ListTopics**」と入力します。

1. **[実行ロール]** に、**APIGatewaySNSProxyPolicy** のロール ARN を入力します。

1. **[メソッドの作成]** を選択します。

## ステップ 4: メソッドの設定を指定してメソッドをテストする
<a name="getting-started-aws-proxy-set-methods"></a>

これで、`GET` メソッドをテストし、メソッドが Amazon SNS トピックを一覧表示するように適切に設定されていることを確認できます。

**`GET` メソッドをテストするには**

1. **[テスト]** タブを選択します。タブを表示するには、右矢印ボタンを選択する必要がある場合があります。

1. **[テスト]** を選択します。

   結果には、次のようなレスポンスが表示されます。

   ```
   {
     "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 をデプロイする
<a name="getting-started-aws-proxy-deploy"></a>

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

**API をデプロイする**

1. [**API のデプロイ**] を選択します。

1. **[ステージ]** で **[新規ステージ]** を選択します。

1. [**Stage name (ステージ名)**] に **test** と入力します。

1. (オプション) **[説明]** に説明を入力します。

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

## ステップ 6: API をテストする
<a name="getting-started-aws-proxy-test"></a>

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

1. メインナビゲーションペインで、**[ステージ]** を選択します。

1. **[ステージの詳細]** で、コピーアイコンを選択して API の呼び出し URL をコピーします。

   プリンシパルは以下のようになります。

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

1. ブラウザの新しいタブのアドレスボックスに URL を入力します。

1. `/mydemoawsproxy` を追加し、URL が次のように表示されるようにします。

   ```
   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: クリーンアップ
<a name="getting-started-aws-proxy-clean-up"></a>

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

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

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

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

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

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

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

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

 このチュートリアルはこれで終了です。AWS サービスプロキシとしての API 作成の詳細な説明については、「[チュートリアル: REST API を Amazon S3 のプロキシとして作成する](integrating-api-with-aws-services-s3.md)」、「[チュートリアル: 2 つの AWS サービス統合と 1 つの Lambda 非プロキシ統合を使用して計算ツールの REST API を作成する](integrating-api-with-aws-services-lambda.md)」、または「[チュートリアル: REST API を Amazon Kinesis のプロキシとして作成する](integrating-api-with-aws-services-kinesis.md)」を参照してください。