

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon CloudSearch と API Gateway の統合
<a name="api-gateway"></a>

この章では、Amazon CloudSearch と Amazon API Gateway の統合に関する情報を提供します。API Gateway を使用すると、他のサービスの呼び出しを行う REST API を作成し、ホストできます。Amazon CloudSearch の API Gateway を使用したユースケースには、以下のようなものがあります:
+ API キーや Amazon Cognito ユーザープールを使用して Amazon CloudSearch 検索エンドポイントの安全性を強化する
+ CloudWatchを使用して Amazon CloudSearch ドメインに対する検索呼び出しをモニタリングおよびログする
+ ユーザーをより限られた Amazon CloudSearch API サブセットに制限する
+ リクエスト数にレート制限を適用する

API Gateway の利点の詳細については、[「API Gateway デベロッパーガイド」](https://docs.aws.amazon.com/apigateway/latest/developerguide/)を参照してください。

**Topics**
+ [前提条件](#api-gateway-pre)
+ [API の作成と設定 (コンソール)](#api-gateway-create)
+ [API をテストする (コンソール)](#api-gateway-test)

## 前提条件
<a name="api-gateway-pre"></a>

Amazon CloudSearch と API Gateway を統合する前に、次のリソースが必要です。


****  

| 前提条件  | 説明 | 
| --- | --- | 
| Amazon CloudSearch ドメイン | テスト用に、ドメインには検索可能なデータをいくつか用意してください。IMDb 映画データなどが最適です。<br />ドメインには次のアクセスポリシーが必要です。<br />このポリシーは、Amazon CloudSearch ドメインを設定し、API Gateway のみ (場合によってはアカウント所有者) がアクセスできます。詳細については、「[Amazon CloudSearch ドメインの作成](creating-domains.md)」および「[Amazon CloudSearch のアクセス設定](configuring-access.md)」を参照してください。 | 
| IAM ロール | このロールは API Gateway にアクセス許可を委任し、Amazon CloudSearch に対してリクエストを行うことを許可します。この章では、このロールは `{{my-api-gateway-role}}` と呼ばれ、次のアクセス許可があります:  JSON   

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [{
    "Effect": "Allow",
    "Action": [
      "logs:CreateLogGroup",
      "logs:CreateLogStream",
      "logs:DescribeLogGroups",
      "logs:DescribeLogStreams",
      "logs:PutLogEvents",
      "logs:GetLogEvents",
      "logs:FilterLogEvents"
    ],
    "Resource": "*"
  }]
}
```    <br />ロールにはまた、次の信頼関係が必要です:  JSON   

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [{
    "Sid": "",
    "Effect": "Allow",
    "Principal": {
      "Service": "apigateway.amazonaws.com"
    },
    "Action": "sts:AssumeRole"
  }]
}
```    <br />詳細については、*「IAM ユーザーガイド」*の[「ロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)」を参照してください。 | 

## API の作成と設定 (コンソール)
<a name="api-gateway-create"></a>

API の作成に関するステップは、リクエストがパラメータを使用するか、リクエストボディを必要とするか、特定のヘッダーが必要か、およびその他多くの要素によって異なります。次の手順では、1 つの関数を持つ API を作成します。これは Amazon CloudSearch ドメインの検索を実行します。API の設定の詳細については、「[Amazon API Gateway での API の作成](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-create-api.html)」を参照してください。

**API を作成するには (コンソール)**

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

1. **[API を作成]** を選択するか、API Gateway を初めて使用する場合は **[開始する]** を選択します。

1. **[REST API]** (プライベートではない) で、**[構築]** を選択します。

1. 名前と、必要に応じて説明を入力した後、**[API を作成]** をクリックします。

1. **[アクション]**、[**メソッドを作成**] の順に選択します。ドロップダウンメニューから **GET** を選択して確定します。

1. [**Integration Type**] で､[**AWS Service**] を選択します｡

1. **AWS [リージョン]** で、Amazon CloudSearch ドメインが置かれているリージョンを選択します。

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

1. **AWS [サブドメイン]** で、Amazon CloudSearch ドメインの検索エンドポイントのサブドメインを指定します。

   例えば、ドメインの検索エンドポイントが `search-my-test-asdf5asdfasdfasdfasd5asdfg.us-west-1.cloudsearch.amazonaws.com` の場合、`search-my-test-asdf5ambgebbgmmodhhq5asdfg` を指定します。

1. **HTTP Method** で **GET** を選択します。

1. **[アクションの種類]** で、**[パス上書きの使用]** を選択し、`/2013-01-01/search` を入力します。

1. **実行ロール** で、`{{my-api-gateway-role}}` の ARN (例: `arn:aws:iam::{{123456789012}}:role/{{my-api-gateway-role}}`) を指定します。

1. **コンテンツの処理**で、**パススルー** を選択し、デフォルトのタイムアウトを使用して**保存**を選択します。

1. **[メソッドリクエスト]** を選択します。

1. **リクエストの検証**で、**クエリ文字列パラメータおよびヘッダーの検証**を選択して、確定します。

1. [**URL クエリ文字列パラメータ**] を展開します。**[クエリ文字列を追加]** を選択し、文字列に `q` と名前を付けて確定します。必要に応じてクエリ文字列をマークします。

1. **メソッドの実行**を選択して、メソッドの要約に戻ります。

1. **統合リクエスト**を選択します。

1. [**URL クエリ文字列パラメータ**] を展開します。**[クエリ文字列を追加]** を選択します。文字列に `q` と名前を付け、`method.request.querystring.q` のマッピングを指定して、確定します。

## API をテストする (コンソール)
<a name="api-gateway-test"></a>

この時点で、メソッドが 1 つある API が作成されています。API をデプロイする前に、テストする必要があります。

**API をテストするには (コンソール)**

1. **メソッドの実行**ページに移動します。

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

1. **[クエリ文字列]** で、Amazon CloudSearch ドメインの一部のデータに一致するクエリ文字列を入力します。IMDb 映画データを使用している場合は、`q=thor` を試してみてください。

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

1. レスポンス本文に、次のように検索結果が含まれていることを検証します。

   ```
   {
     "status": {
       "rid": "rcWTo8IsviEK+own",
       "time-ms": 1
     },
     "hits": {
       "found": 7,
       "start": 0,
       "hit": [
         {
           "id": "tt0800369",
           "fields": {
             "rating": "7.0",
             "genres": [
               "Action",
               "Adventure",
               "Fantasy"
             ],
             "title": "Thor",
             "release_date": "2011-04-21T00:00:00Z",
             "plot": "The powerful but arrogant god Thor is cast out of Asgard to live amongst humans in Midgard (Earth), where he soon becomes one of their finest defenders.",
             "rank": "135",
             "running_time_secs": "6900",
             "directors": [
               "Kenneth Branagh",
               "Joss Whedon"
             ],
             "image_url": "http://ia.media-imdb.com/images/M/MV5BMTYxMjA5NDMzNV5BMl5BanBnXkFtZTcwOTk2Mjk3NA@@._V1_SX400_.jpg",
             "year": "2011",
             "actors": [
               "Chris Hemsworth",
               "Anthony Hopkins",
               "Natalie Portman"
             ]
           }
         },
         {{...}}
       ]
     }
   }
   ```

この時点で、機能する API ができています。メソッドを追加して、より堅牢な検索リクエスト、API のデプロイとレート制限の設定、API キーの作成と使用の指定、Amazon Cognito ユーザープール 認証の追加などを行うことができます。詳細については、[「API Gateway デベロッパーガイド」](https://docs.aws.amazon.com/apigateway/latest/developerguide/)を参照してください。