Amazon CloudSearch
開発者ガイド (API バージョン 2013-01-01)

Amazon CloudSearch と API Gateway の統合

この章では、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 開発者ガイド を参照してください。

前提条件

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

前提条件 説明
Amazon CloudSearch ドメイン

テスト用に、ドメインには検索可能なデータをいくつか用意してください。IMDb ムービーデータなどが最適です。

ドメインには次のアクセスポリシーが必要です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/my-api-gateway-role" }, "Action": [ "cloudsearch:search", "cloudsearch:suggest" ] } ] }

このポリシーは、API Gateway (および場合によってはアカウント所有者) のみが Amazon CloudSearch ドメインにアクセスできるようにドメインを設定します。詳細については、「Amazon CloudSearch ドメインの作成」および「Amazon CloudSearch のアクセス設定」を参照してください。

ヒント

アカウント所有者のアクセスを制限するには、AWS General Reference の「AWS アクセスキーを管理するためのベストプラクティス」を参照してください。

IAM ロール

このロールは API Gateway にアクセス権限を委任し、Amazon CloudSearch に対してリクエストを行うことを許可します。この章では、このロールは my-api-gateway-role と呼ばれ、次のアクセス権限を持っている必要があります。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:PutLogEvents", "logs:GetLogEvents", "logs:FilterLogEvents" ], "Resource": "*" }] }

ロールにはまた、次の信頼関係が必要です。

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

詳しくは、IAM ユーザーガイド の「ロールの作成」を参照してください。

API の作成と設定 (コンソール)

API の作成に関するステップは、リクエストがパラメータを使用するか、リクエストボディを必要とするか、特定のヘッダーが必要か、およびその他多くの要素のいずれかによって異なります。次の手順では、1 つの関数を持つ API を作成します。これは Amazon CloudSearch ドメインの検索を実行します。API の設定に関する詳細については、「Amazon API Gateway での API の作成」を参照してください。

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

  1. https://aws.amazon.com にアクセスし、[Sign In to the Console] を選択します。

  2. [ネットワーキング & コンテンツ配信] の中にある [API Gateway] を選択します。

  3. [Create API] を選択します。

    API Gateway を初めて使用する場合は、[使用を開始] を選択します。

  4. [New API (新しい API)] を選択し、API に名前をつけ必要に応じて説明を入力します。[Endpoint Type (エンドポイントタイプ)] で [Regional (リージョン)] を選択してから、[Create API (API の作成)] を選択します。

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

  6. [Integration type (統合タイプ)] で、[AWS Service (AWS サービス)] を選択します。

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

  8. [AWS Service (AWS サービス)] で、[CloudSearch] を選択します。

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

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

  10. [HTTP Method] で [GET] を選択します。

  11. [Action Type (アクションの種類)] で、[Use path override (パス上書きの使用)] を選択し、/2013-01-01/search と指定します。

  12. [Execution role (実行ロール)] で、my-api-gateway-role の ARN (例: arn:aws:iam::123456789012:role/my-api-gateway-role) を指定します。

  13. [Content Handling (コンテンツの処理)] で、[Passthrough (パススルー)] を選択し、デフォルトのタイムアウトを使用して [Save (保存)] を選択します。

  14. 新しいメソッドを選択し、[Method Request (メソッドリクエスト)] を選択します。

  15. [URL Query String Parameters (URL クエリ文字列パラメータ)] で、[Add query string (クエリ文字列の追加)] を選択します。文字列に q と名前を付け、必須のマークを付けて、確定します。

  16. [Request Validator (リクエストの検証)] で、[Validate query string parameters and headers (クエリ文字列パラメーターおよびヘッダーの検証)] を選択して、確定します。

  17. [Method Execution (メソッドの実行)] を選択して、メソッドの要約に戻ります。

  18. [Integration Request] を選択します。

  19. [URL Query String Parameters (URL クエリ文字列パラメータ)] で、[Add query string (クエリ文字列の追加)] を選択します。文字列に q と名前を付け、method.request.querystring.q のマッピングを指定して、確定します。

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

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

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

  1. [Method Execution (メソッドの実行)] ページに移動します。

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

  3. [q] フィールドに、Amazon CloudSearch ドメインの一部のデータに一致するクエリ文字列を入力します。IMDb ムービーデータを使用している場合は、thor を試してみてください。

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

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

    { "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 開発者ガイド』を参照してください。