チュートリアル: REST API を Amazon Kinesis のプロキシとして作成する - Amazon API Gateway

チュートリアル: REST API を Amazon Kinesis のプロキシとして作成する

ここでは、AWS との統合のタイプで REST API を作成および設定して、Kinesis にアクセスする方法について説明します。

注記

API Gateway の API を Kinesis と統合するには、API Gateway と Kinesis の両方のサービスが利用できるリージョンを選択する必要があります。利用できるリージョンについては、「サービスエンドポイントとクォータ」を参照してください。

この図では、サンプル API を作成して、クライアントが次の操作を行うことができるようにします。

  1. ユーザーが Kinesis にあるストリームを一覧表示する

  2. 指定されたストリームを作成、説明、または削除する

  3. 指定されたストリームからデータレコードを読み取る、または書き込む

前述のタスクを完了するため、API はさまざまなリソースでメソッドを公開し、それぞれ次のものを呼び出します。

  1. Kinesis の ListStreams アクション

  2. CreateStreamDescribeStream、または DeleteStream アクション

  3. Kinesis の GetRecords または PutRecords (PutRecord を含む) アクション

具体的には、次のように API を作成します。

  • API の /streams リソースに対する HTTP GET メソッドを公開し、そのメソッドを Kinesis の ListStreams アクションと統合して、呼び出し元のアカウントでストリームを一覧表示します。

  • API の /streams/{stream-name} リソースに対する HTTP POST メソッドを公開し、そのメソッドを Kinesis の CreateStream アクションと統合して、呼び出し元のアカウントで指定したストリームを作成します。

  • API の /streams/{stream-name} リソースに対する HTTP GET メソッドを公開し、そのメソッドを Kinesis の DescribeStream アクションと統合して、呼び出し元のアカウントで指定したストリームを表示します。

  • API の /streams/{stream-name} リソースに対する HTTP DELETE メソッドを公開し、そのメソッドを Kinesis の DeleteStream アクションと統合して、呼び出し元のアカウントでストリームを削除します。

  • API の /streams/{stream-name}/record リソースに対する HTTP PUT メソッドを公開し、そのメソッドを Kinesis の PutRecord アクションと統合します。これにより、クライアントは名前付きストリームに 1 つのデータレコードを追加できます。

  • API の /streams/{stream-name}/records リソースに対する HTTP PUT メソッドを公開し、そのメソッドを Kinesis の PutRecords アクションと統合します。これにより、クライアントは名前付きストリームにデータレコードのリストを追加できます。

  • API の /streams/{stream-name}/records リソースに対する HTTP GET メソッドを公開し、そのメソッドを Kinesis の GetRecords アクションと統合します。これにより、クライアントは名前付きストリームで指定されたシャードイテレーターとともにデータレコードを一覧表示できます。シャードイテレーターは、データレコードの逐次読み取りを開始する、シャードの位置を指定します。

  • API の /streams/{stream-name}/sharditerator リソースに対する HTTP GET メソッドを公開し、そのメソッドを Kinesis の GetShardIterator アクションと統合します。このヘルパーメソッドは、Kinesis の ListStreams アクションに提供する必要があります。

ここに示す手順は、Kinesis の他のアクションにも適用できます。Kinesis のアクションの一覧については、Amazon Kinesis API Reference を参照してください。

API Gateway コンソールを使用してサンプルの API を作成する代わりに、API Gateway のインポート API を使用してサンプルの API を API Gateway にインポートできます。API のインポート機能の使用方法の詳細については、「API Gateway で OpenAPI を使用して REST API を開発する」を参照してください。

API が Kinesis にアクセスするための IAM ロールと IAM ポリシーを作成する

Kinesis のアクションを呼び出すことを API に許可するには、IAM ロールに適切な IAM ポリシーをアタッチする必要があります。

AWS のサービスプロキシの実行ロールを作成するには
  1. AWS Management Console にサインインして、IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

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

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

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

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

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

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

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

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

  10. 検索バーに「AmazonKinesisFullAccess」と入力し、[アクセス許可を追加] を選択します。

    注記

    このチュートリアルでは、わかりやすくするために管理ポリシーを使用しますが、独自の IAM ポリシーを作成して、必要な最小限のアクセス許可を付与するのがベストプラクティスです。

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

API を Kinesis のプロキシとして作成する

以下の手順に従って、API Gateway コンソールで API を作成します。

API を Kinesis の AWS サービスプロキシとして作成するには
  1. https://console.aws.amazon.com/apigateway で API Gateway コンソールにサインインします。

  2. API Gateway を初めて使用する場合は、サービスの特徴を紹介するページが表示されます。[REST API] で、[構築] を選択します。[Create Example API (サンプル API の作成)] がポップアップ表示されたら、[OK] を選択します。

    API Gateway を使用するのが初めてではない場合、[Create API] (API を作成)を選択します。[REST API] で、[構築] を選択します。

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

  4. [API name (API 名)] に「KinesisProxy」と入力します。他のすべてのフィールドでは、デフォルト値をそのまま使用します。

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

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

API が作成されると、API Gateway コンソールに API のルート (/) リソースのみを含む [Resources (リソース)] ページが表示されます。

Kinesis のストリームを一覧表示する

Kinesis では、次の REST API コールによる ListStreams アクションがサポートされています。

POST /?Action=ListStreams HTTP/1.1 Host: kinesis.<region>.<domain> Content-Length: <PayloadSizeBytes> User-Agent: <UserAgentString> Content-Type: application/x-amz-json-1.1 Authorization: <AuthParams> X-Amz-Date: <Date> { ... }

上記の REST API リクエストでは、このアクションは、Action クエリパラメータで指定されます。または、代わりに、X-Amz-Target ヘッダーでこのアクションを指定することもできます。

POST / HTTP/1.1 Host: kinesis.<region>.<domain> Content-Length: <PayloadSizeBytes> User-Agent: <UserAgentString> Content-Type: application/x-amz-json-1.1 Authorization: <AuthParams> X-Amz-Date: <Date> X-Amz-Target: Kinesis_20131202.ListStreams { ... }

このチュートリアルでは、クエリパラメータを使用してアクションを指定します。

API で Kinesis のアクションを公開するには、API のルートに /streams リソースを追加します。次に、そのリソースに対する GET メソッドを設定し、そのメソッドを Kinesis の ListStreams アクションと統合します。

以下の手順では、API Gateway コンソールを使用して Kinesis のストリームを一覧表示する方法について説明します。

API Gateway コンソールを使用して Kinesis のストリームを一覧表示するには
  1. / リソースを選択し、[リソースを作成] を選択します。

  2. [リソース名] に「streams」と入力します。

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

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

  5. /streams リソースを選択し、[メソッドを作成] を選択して、次の操作を行います。

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

      注記

      クライアントによって呼び出されるメソッドの HTTP 動詞は、バックエンド統合が必要な場合の HTTP 動詞とは異なる場合があります。ストリームの一覧表示は、直感的に、読み取りオペレーションであるため、ここでは GET を選択します。

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

    3. [AWS リージョン] で、Kinesis ストリームを作成した AWS リージョンを選択します。

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

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

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

      注記

      ここで POST を選択したのは、Kinesis では POST を使用して ListStreams アクションを実行する必要があるためです。

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

    8. [アクション名] に「ListStreams」と入力します。

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

    10. [コンテンツの処理][パススルー] はデフォルトのままにします。

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

  6. [統合リクエスト] タブの [統合リクエストの設定] で、[編集] を選択します。

  7. [リクエスト本文のパススルー] で、[テンプレートが定義されていない場合 (推奨)] を選択します。

  8. [URL リクエストヘッダーのパラメータ] を選択し、次の操作を行います。

    1. [リクエストヘッダーのパラメータを追加] を選択します。

    2. [名前] にContent-Typeと入力します。

    3. [マッピング元] として「'application/x-amz-json-1.1'」と入力します。

    リクエストパラメータマッピングを使用して Content-Type ヘッダーを静的な値の 'application/x-amz-json-1.1' に設定することで、入力が特定のバージョンの JSON であることを Kinesis に知らせます。

  9. [マッピングテンプレート][マッピングテンプレートの追加] の順に選択し、次の操作を行います。

    1. [コンテンツタイプ] に「application/json」と入力します。

    2. [テンプレート本文] に「{}」と入力します。

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

    ListStreams のリクエストのペイロードは、次の形式の JSON です。

    { "ExclusiveStartStreamName": "string", "Limit": number }

    ただし、プロパティはオプションです。デフォルト値を使用するため、ここでは空の JSON ペイロードを選択しました。

  10. Kinesis で ListStreams アクションを呼び出す GET メソッドを /streams リソースでテストします。

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

    [テスト] を選択してメソッドをテストします。

    既に Kinesis で「myStream」と「yourStream」という 2 つのストリームが作成されている場合、テストが成功すると次のペイロードが含まれる 200 OK レスポンスが返されます。

    { "HasMoreStreams": false, "StreamNames": [ "myStream", "yourStream" ] }

Kinesis でストリームを作成、表示、削除する

Kinesis でストリームを作成、表示、削除するには、それぞれ次の Kinesis の REST API へのリクエストを作成する必要があります。

POST /?Action=CreateStream HTTP/1.1 Host: kinesis.region.domain ... Content-Type: application/x-amz-json-1.1 Content-Length: PayloadSizeBytes { "ShardCount": number, "StreamName": "string" }
POST /?Action=DescribeStream HTTP/1.1 Host: kinesis.region.domain ... Content-Type: application/x-amz-json-1.1 Content-Length: PayloadSizeBytes { "StreamName": "string" }
POST /?Action=DeleteStream HTTP/1.1 Host: kinesis.region.domain ... Content-Type: application/x-amz-json-1.1 Content-Length: PayloadSizeBytes { "StreamName":"string" }

API を作成して、必要な入力をメソッドリクエストの JSON ペイロードとして受け取り、ペイロードを統合リクエストに渡すことができます。ただし、メソッドリクエストと統合リクエスト、およびメソッドレスポンスと統合レスポンスの間のデータマッピングの例を詳細に示すため、API は少し異なる方法で作成します。

これから名前を付ける GET リソースの HTTP メソッド (POSTDeleteStream) を公開します。{stream-name} パス変数をこのストリームリソースのプレースホルダーとして使用して、これらの API のメソッドを Kinesis の DescribeStreamCreateStreamDeleteStream アクションとそれぞれ統合します。クライアントは、他の入力データをメソッドリクエストのヘッダー、クエリパラメータ、またはペイロードとして渡す必要があります。必要な統合リクエストペイロードにデータを変換するためのマッピングテンプレートが用意されています。

{stream-name} リソースを作成するには
  1. [/streams] リソースを選択し、[リソースを作成] を選択します。

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

  3. [リソースパス] で、[/streams] を選択します。

  4. [リソース名] に「{stream-name}」と入力します。

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

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

ストリームリソースで GET メソッドを設定し、テストするには
  1. [/{stream-name}] リソースを選択し、[メソッドを作成] を選択します。

  2. [メソッドタイプ] には、GET を選択します。

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

  4. [AWS リージョン] で、Kinesis ストリームを作成した AWS リージョンを選択します。

  5. [AWS のサービス] で、[Kinesis] を選択します。

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

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

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

  9. [アクション名] に「DescribeStream」と入力します。

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

  11. [コンテンツの処理][パススルー] はデフォルトのままにします。

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

  13. [統合リクエスト] セクションで、以下の URL リクエストヘッダーのパラメータを追加します。

    Content-Type: 'x-amz-json-1.1'

    このタスクでは、同じ手順を使用して GET /streams メソッドのリクエストパラメータマッピングを設定します。

  14. 次の本文マッピングテンプレートを追加して、GET /streams/{stream-name} メソッドリクエストから POST /?Action=DescribeStream 統合リクエストにデータをマッピングします。

    { "StreamName": "$input.params('stream-name')" }

    このマッピングテンプレートでは、Kinesis の DescribeStream アクションに必要な統合リクエストのペイロードをメソッドリクエストの stream-name パスパラメータ値から生成します。

  15. Kinesis で DescribeStream アクションを呼び出す GET /stream/{stream-name} メソッドをテストするには、[テスト] タブを選択します。

  16. [パス][stream-name] に、既存の Kinesis ストリームの名前を入力します。

  17. [テスト] を選択します。テストに成功すると、200 OK レスポンスが、次のようなペイロードとともに返されます。

    { "StreamDescription": { "HasMoreShards": false, "RetentionPeriodHours": 24, "Shards": [ { "HashKeyRange": { "EndingHashKey": "68056473384187692692674921486353642290", "StartingHashKey": "0" }, "SequenceNumberRange": { "StartingSequenceNumber": "49559266461454070523309915164834022007924120923395850242" }, "ShardId": "shardId-000000000000" }, ... { "HashKeyRange": { "EndingHashKey": "340282366920938463463374607431768211455", "StartingHashKey": "272225893536750770770699685945414569164" }, "SequenceNumberRange": { "StartingSequenceNumber": "49559266461543273504104037657400164881014714369419771970" }, "ShardId": "shardId-000000000004" } ], "StreamARN": "arn:aws:kinesis:us-east-1:12345678901:stream/myStream", "StreamName": "myStream", "StreamStatus": "ACTIVE" } }

    API をデプロイした後は、この API メソッドに対して REST リクエストを行うことができます。

    GET https://your-api-id.execute-api.region.amazonaws.com/stage/streams/myStream HTTP/1.1 Host: your-api-id.execute-api.region.amazonaws.com Content-Type: application/json Authorization: ... X-Amz-Date: 20160323T194451Z
ストリームリソースで POST メソッドを設定し、テストするには
  1. [/{stream-name}] リソースを選択し、[メソッドを作成] を選択します。

  2. [メソッドタイプ] では、POST を選択します。

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

  4. [AWS リージョン] で、Kinesis ストリームを作成した AWS リージョンを選択します。

  5. [AWS のサービス] で、[Kinesis] を選択します。

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

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

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

  9. [アクション名] に「CreateStream」と入力します。

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

  11. [コンテンツの処理][パススルー] はデフォルトのままにします。

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

  13. [統合リクエスト] セクションで、以下の URL リクエストヘッダーのパラメータを追加します。

    Content-Type: 'x-amz-json-1.1'

    このタスクでは、同じ手順を使用して GET /streams メソッドのリクエストパラメータマッピングを設定します。

  14. 次の本文マッピングテンプレートを追加して、POST /streams/{stream-name} メソッドリクエストから POST /?Action=CreateStream 統合リクエストにデータをマッピングします。

    { "ShardCount": #if($input.path('$.ShardCount') == '') 5 #else $input.path('$.ShardCount') #end, "StreamName": "$input.params('stream-name')" }

    前述のマッピングテンプレートで、クライアントがメソッドリクエストペイロードで値を指定しなかった場合は、ShardCount を固定値 5 に設定します。

  15. Kinesis で CreateStream アクションを呼び出す POST /stream/{stream-name} メソッドをテストするには、[テスト]] タブを選択します。

  16. [パス][stream-name] に、新しい Kinesis ストリームの名前を入力します。

  17. [テスト] を選択します。テストが完了すると、データなしで 200 OK レスポンスが返されます。

    API をデプロイしたら、ストリームリソースの POST メソッドに対する REST API リクエストを行って、Kinesis で CreateStream アクションを呼び出すこともできます。

    POST https://your-api-id.execute-api.region.amazonaws.com/stage/streams/yourStream HTTP/1.1 Host: your-api-id.execute-api.region.amazonaws.com Content-Type: application/json Authorization: ... X-Amz-Date: 20160323T194451Z { "ShardCount": 5 }
ストリームリソースで DELETE メソッドを設定し、テストする
  1. [/{stream-name}] リソースを選択し、[メソッドを作成] を選択します。

  2. [メソッドタイプ] で、[DELETE] を選択します。

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

  4. [AWS リージョン] で、Kinesis ストリームを作成した AWS リージョンを選択します。

  5. [AWS のサービス] で、[Kinesis] を選択します。

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

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

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

  9. [アクション名] に「DeleteStream」と入力します。

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

  11. [コンテンツの処理][パススルー] はデフォルトのままにします。

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

  13. [統合リクエスト] セクションで、以下の URL リクエストヘッダーのパラメータを追加します。

    Content-Type: 'x-amz-json-1.1'

    このタスクでは、同じ手順を使用して GET /streams メソッドのリクエストパラメータマッピングを設定します。

  14. 次の本文マッピングテンプレートを追加して、DELETE /streams/{stream-name} メソッドリクエストから POST /?Action=DeleteStream の該当する統合リクエストにデータをマッピングします。

    { "StreamName": "$input.params('stream-name')" }

    このマッピングテンプレートでは、DELETE /streams/{stream-name} のクライアントが指定した URL パス名値から stream-name アクションに必要な入力が生成されます。

  15. Kinesis で DeleteStream アクションを呼び出す DELETE /stream/{stream-name} メソッドをテストするには、[テスト]] タブを選択します。

  16. [パス][stream-name] に、既存の Kinesis ストリームの名前を入力します。

  17. [テスト] を選択します。テストが完了すると、データなしで 200 OK レスポンスが返されます。

    API をデプロイしたら、ストリームリソースの DELETE メソッドに対する以下の REST API リクエストを行って、Kinesis で DeleteStream アクションを呼び出すこともできます。

    DELETE https://your-api-id.execute-api.region.amazonaws.com/stage/streams/yourStream HTTP/1.1 Host: your-api-id.execute-api.region.amazonaws.com Content-Type: application/json Authorization: ... X-Amz-Date: 20160323T194451Z {}

Kinesis のストリームに対してレコードの取得や追加を行う

Kinesis でストリームを作成すると、ストリームにデータレコードを追加したり、ストリームからデータを読み取ったりすることができます。データレコードを追加するには、Kinesis で PutRecords アクションまたは PutRecord アクションを呼び出す必要があります。前者は複数のレコードを追加し、後者は 1 つのレコードをストリームに追加します。

POST /?Action=PutRecords HTTP/1.1 Host: kinesis.region.domain Authorization: AWS4-HMAC-SHA256 Credential=..., ... ... Content-Type: application/x-amz-json-1.1 Content-Length: PayloadSizeBytes { "Records": [ { "Data": blob, "ExplicitHashKey": "string", "PartitionKey": "string" } ], "StreamName": "string" }

または

POST /?Action=PutRecord HTTP/1.1 Host: kinesis.region.domain Authorization: AWS4-HMAC-SHA256 Credential=..., ... ... Content-Type: application/x-amz-json-1.1 Content-Length: PayloadSizeBytes { "Data": blob, "ExplicitHashKey": "string", "PartitionKey": "string", "SequenceNumberForOrdering": "string", "StreamName": "string" }

ここで、StreamName はレコードを追加するターゲットストリームを識別します。StreamNameData、および PartitionKey は必須の入力データです。この例では、すべてのオプション入力データにデフォルト値を使用し、メソッドリクエストへの入力ではそれらの値を明示的に指定しません。

Kinesis のデータを読み取るには、GetRecords アクションを呼び出します。

POST /?Action=GetRecords HTTP/1.1 Host: kinesis.region.domain Authorization: AWS4-HMAC-SHA256 Credential=..., ... ... Content-Type: application/x-amz-json-1.1 Content-Length: PayloadSizeBytes { "ShardIterator": "string", "Limit": number }

レコードを取得するソースのストリームは、必須の ShardIterator の値で指定します。シャードイテレーターは、次の Kinesis のアクションで取得します。

POST /?Action=GetShardIterator HTTP/1.1 Host: kinesis.region.domain Authorization: AWS4-HMAC-SHA256 Credential=..., ... ... Content-Type: application/x-amz-json-1.1 Content-Length: PayloadSizeBytes { "ShardId": "string", "ShardIteratorType": "string", "StartingSequenceNumber": "string", "StreamName": "string" }

GetRecords および PutRecords アクションでは、それぞれ GET および PUT メソッドを、名前付きストリームリソース (/records) に追加される /{stream-name} リソースで公開します。同様に、PutRecord アクションは PUT リソースで /record メソッドとして公開します。

GetRecords アクションは、ShardIterator ヘルパーアクションを呼び出して取得される GetShardIterator 値を入力として受け取るため、GET リソース (ShardIterator) で /sharditerator ヘルパーメソッドを公開します。

/record、/records、および /sharditerator リソースを作成するには
  1. [/{stream-name}] リソースを選択し、[リソースを作成] を選択します。

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

  3. [リソースパス] で、[/{stream-name}] を選択します。

  4. [リソース名] に「record」と入力します。

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

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

  7. 前の手順を繰り返して /records リソースと /sharditerator リソースを作成します。最終的な API は次のようになります。

    レコードの作成: API の GET|PUT|PUT|GET メソッド

次の 4 つの手順では、各メソッドの設定方法、メソッドリクエストから統合リクエストにデータをマッピングする方法、およびメソッドをテストする方法について説明します。

Kinesis で PutRecord を呼び出すように PUT /streams/{stream-name}/record メソッドを設定してテストするには
  1. [/record] を選択し、[メソッドを作成] を選択します。

  2. [メソッドタイプ] で、[PUT] を選択します。

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

  4. [AWS リージョン] で、Kinesis ストリームを作成した AWS リージョンを選択します。

  5. [AWS のサービス] で、[Kinesis] を選択します。

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

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

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

  9. [アクション名] に「PutRecord」と入力します。

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

  11. [コンテンツの処理][パススルー] はデフォルトのままにします。

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

  13. [統合リクエスト] セクションで、以下の URL リクエストヘッダーのパラメータを追加します。

    Content-Type: 'x-amz-json-1.1'

    このタスクでは、同じ手順を使用して GET /streams メソッドのリクエストパラメータマッピングを設定します。

  14. 次の本文マッピングテンプレートを追加して、PUT /streams/{stream-name}/record メソッドリクエストから POST /?Action=PutRecord の該当する統合リクエストにデータをマッピングします。

    { "StreamName": "$input.params('stream-name')", "Data": "$util.base64Encode($input.json('$.Data'))", "PartitionKey": "$input.path('$.PartitionKey')" }

    このマッピングテンプレートでは、メソッドリクエストのペイロードが次の形式であることを想定しています。

    { "Data": "some data", "PartitionKey": "some key" }

    このデータは、次の JSON スキーマでモデル化することができます。

    { "$schema": "http://json-schema.org/draft-04/schema#", "title": "PutRecord proxy single-record payload", "type": "object", "properties": { "Data": { "type": "string" }, "PartitionKey": { "type": "string" } } }

    モデルを作成してこのスキーマを含め、このモデルを使用してマッピングテンプレートを生成を容易にすることができます。ただし、モデルを使用せずにマッピングテンプレートを生成することができます。

  15. PUT /streams/{stream-name}/record メソッドをテストするには、stream-name パス変数を既存のストリームの名前に設定し、必要な形式のペイロードを指定して、メソッドリクエストを送信します。成功した場合の結果は 200 OK レスポンスと、次の形式のペイロードとなります。

    { "SequenceNumber": "49559409944537880850133345460169886593573102115167928386", "ShardId": "shardId-000000000004" }
Kinesis で PUT /streams/{stream-name}/records を呼び出すように PutRecords メソッドを設定してテストするには
  1. [/records] リソースを選択し、[メソッドを作成] を選択します。

  2. [メソッドタイプ] で、[PUT] を選択します。

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

  4. [AWS リージョン] で、Kinesis ストリームを作成した AWS リージョンを選択します。

  5. [AWS のサービス] で、[Kinesis] を選択します。

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

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

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

  9. [アクション名] に「PutRecords」と入力します。

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

  11. [コンテンツの処理][パススルー] はデフォルトのままにします。

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

  13. [統合リクエスト] セクションで、以下の URL リクエストヘッダーのパラメータを追加します。

    Content-Type: 'x-amz-json-1.1'

    このタスクでは、同じ手順を使用して GET /streams メソッドのリクエストパラメータマッピングを設定します。

  14. 次の本文マッピングテンプレートを追加して、PUT /streams/{stream-name}/records メソッドリクエストから、POST /?Action=PutRecords の対応する統合リクエストにデータをマッピングします。

    { "StreamName": "$input.params('stream-name')", "Records": [ #foreach($elem in $input.path('$.records')) { "Data": "$util.base64Encode($elem.data)", "PartitionKey": "$elem.partition-key" }#if($foreach.hasNext),#end #end ] }

    このマッピングテンプレートでは、メソッドリクエストのペイロードが次の JSON スキーマでモデル化できることを想定しています。

    { "$schema": "http://json-schema.org/draft-04/schema#", "title": "PutRecords proxy payload data", "type": "object", "properties": { "records": { "type": "array", "items": { "type": "object", "properties": { "data": { "type": "string" }, "partition-key": { "type": "string" } } } } } }

    モデルを作成してこのスキーマを含め、このモデルを使用してマッピングテンプレートを生成を容易にすることができます。ただし、モデルを使用せずにマッピングテンプレートを生成することができます。

    このチュートリアルでは、API デベロッパーがバックエンドデータ形式をクライアントに開示するか、クライアントから見えないようにするかを選択できることを示すため、わずかに異なる 2 つのペイロード形式を使用しました。1 つは PUT /streams/{stream-name}/records メソッド (上記) 用の形式、もう 1 つは PUT /streams/{stream-name}/record メソッド (前の手順) 用の形式です。実稼働環境では、両方の形式の一貫性を保ってください。

  15. PUT /streams/{stream-name}/records メソッドをテストするには、stream-name パス変数を既存のストリームに設定し、前に示したように次のペイロードを指定して、メソッドリクエストを送信します。

    { "records": [ { "data": "some data", "partition-key": "some key" }, { "data": "some other data", "partition-key": "some key" } ] }

    成功した場合の結果は 200 OK レスポンスと、以下の出力例のようになります。

    { "FailedRecordCount": 0, "Records": [ { "SequenceNumber": "49559409944537880850133345460167468741933742152373764162", "ShardId": "shardId-000000000004" }, { "SequenceNumber": "49559409944537880850133345460168677667753356781548470338", "ShardId": "shardId-000000000004" } ] }
Kinesis で GET /streams/{stream-name}/sharditerator を呼び出すように GetShardIterator メソッドを設定してテストするには

GET /streams/{stream-name}/sharditerator メソッドは、GET /streams/{stream-name}/records メソッドを呼び出す前に必須のシャードイテレーターを取得するためのヘルパーメソッドです。

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

  2. [メソッドタイプ] には、GET を選択します。

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

  4. [AWS リージョン] で、Kinesis ストリームを作成した AWS リージョンを選択します。

  5. [AWS のサービス] で、[Kinesis] を選択します。

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

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

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

  9. [アクション名] に「GetShardIterator」と入力します。

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

  11. [コンテンツの処理][パススルー] はデフォルトのままにします。

  12. [URL クエリ文字列パラメータ] を選択します。

    GetShardIterator アクションでは、ShardId 値を入力する必要があります。クライアントが指定した ShardId 値を渡すには、次のステップに示すように、shard-id クエリパラメータをメソッドリクエストに追加します。

  13. [クエリ文字列の追加] を選択します。

  14. [名前] にshard-idと入力します。

  15. [必須][キャッシュ] はオフのままにしておきます。

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

  17. [統合リクエスト] セクションで、次のマッピングテンプレートを追加して、メソッドリクエストの shard-id パラメータと stream-name パラメータの GetShardIterator アクションに必要な入力 (ShardId および StreamName) を生成します。また、マッピングテンプレートでも、ShardIteratorType は、デフォルトとして TRIM_HORIZON に設定されます。

    { "ShardId": "$input.params('shard-id')", "ShardIteratorType": "TRIM_HORIZON", "StreamName": "$input.params('stream-name')" }
  18. API Gateway コンソールの [Test (テスト)] オプションを使用して、既存のストリームの名前を stream-name の [Path (パス)] 変数値に入力し、shard-id の [Query string (クエリ文字列)] を既存の ShardId 値 (例: shard-000000000004) に設定して、[Test (テスト)] を選択します。

    成功のレスポンスペイロードは以下の出力例のようになります。

    { "ShardIterator": "AAAAAAAAAAFYVN3VlFy..." }

    ShardIterator の値をメモしておきます。これは、ストリームからレコードを取得するために必要です。

Kinesis で GET /streams/{stream-name}/records アクションを呼び出すように GetRecords メソッドを設定してテストするには
  1. [/records] リソースを選択し、[メソッドを作成] を選択します。

  2. [メソッドタイプ] には、GET を選択します。

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

  4. [AWS リージョン] で、Kinesis ストリームを作成した AWS リージョンを選択します。

  5. [AWS のサービス] で、[Kinesis] を選択します。

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

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

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

  9. [アクション名] に「GetRecords」と入力します。

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

  11. [コンテンツの処理][パススルー] はデフォルトのままにします。

  12. [HTTP リクエストヘッダー] を選択します。

    GetRecords オペレーションでは、ShardIterator の値の入力が必要です。クライアントが指定した ShardIterator 値を渡すには、Shard-Iterator ヘッダーパラメータをメソッドリクエストに追加します。

  13. [ヘッダーの追加] を選択します。

  14. [名前] にShard-Iteratorと入力します。

  15. [必須][キャッシュ] はオフのままにしておきます。

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

  17. [統合リクエスト] セクションで、次の本文マッピングテンプレートを追加して、Shard-Iterator ヘッダーパラメータ値を Kinesis の GetRecords アクションの JSON ペイロードの ShardIterator プロパティ値にマッピングします。

    { "ShardIterator": "$input.params('Shard-Iterator')" }
  18. API Gateway コンソールの [テスト] オプションを使用して、既存のストリームの名前を stream-name[パス] 変数値として入力し、Shard-Iterator[ヘッダー]GET /streams/{stream-name}/sharditerator メソッド (上記) のテスト実行で取得した ShardIterator 値に設定して、[テスト] を選択します。

    成功のレスポンスペイロードは以下の出力例のようになります。

    { "MillisBehindLatest": 0, "NextShardIterator": "AAAAAAAAAAF...", "Records": [ ... ] }