チュートリアル: REST API を Amazon Kinesis のプロキシとして作成する
ここでは、AWS
との統合のタイプで REST API を作成および設定して、Kinesis にアクセスする方法について説明します。
注記
API Gateway の API を Kinesis と統合するには、API Gateway と Kinesis の両方のサービスが利用できるリージョンを選択する必要があります。利用できるリージョンについては、「サービスエンドポイントとクォータ」を参照してください。
この図では、サンプル API を作成して、クライアントが次の操作を行うことができるようにします。
-
ユーザーが Kinesis にあるストリームを一覧表示する
-
指定されたストリームを作成、説明、または削除する
-
指定されたストリームからデータレコードを読み取る、または書き込む
前述のタスクを完了するため、API はさまざまなリソースでメソッドを公開し、それぞれ次のものを呼び出します。
-
Kinesis の
ListStreams
アクション -
CreateStream
、DescribeStream
、またはDeleteStream
アクション -
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 のサービスプロキシの実行ロールを作成するには
AWS Management Console にサインインして、IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
[ロール] を選択します。
-
[ロールの作成] を選択します。
-
[信頼されたエンティティの種類を選択] で [AWS のサービス] を選択し、[API Gateway]、[API Gateway が CloudWatch Logs にログをプッシュすることを許可] の順に選択します。
-
[次へ] を選択し、さらに [次へ] を選択します。
-
[ロール名] に「
APIGatewayKinesisProxyPolicy
」と入力し、[ロールの作成] を選択します。 -
[ロール] リストで、作成したロールを選択します。ロールを検索するには、必要に応じてスクロールするか、検索バーを使用します。
-
選択したロールの [アクセス許可を追加] タブを選択します。
-
ドロップダウンリストから [ポリシーをアタッチ] を選択します。
-
検索バーに「
AmazonKinesisFullAccess
」と入力し、[アクセス許可を追加] を選択します。注記
このチュートリアルでは、わかりやすくするために管理ポリシーを使用しますが、独自の IAM ポリシーを作成して、必要な最小限のアクセス許可を付与するのがベストプラクティスです。
-
新しく作成したロール ARN をメモしておきます。これは後で使用します。
API を Kinesis のプロキシとして作成する
以下の手順に従って、API Gateway コンソールで API を作成します。
API を Kinesis の AWS サービスプロキシとして作成するには
-
https://console.aws.amazon.com/apigateway
で API Gateway コンソールにサインインします。 -
API Gateway を初めて使用する場合は、サービスの特徴を紹介するページが表示されます。[REST API] で、[構築] を選択します。[Create Example API (サンプル API の作成)] がポップアップ表示されたら、[OK] を選択します。
API Gateway を使用するのが初めてではない場合、[Create API] (API を作成)を選択します。[REST API] で、[構築] を選択します。
-
[新しい API] を選択します。
-
[API name (API 名)] に「
KinesisProxy
」と入力します。他のすべてのフィールドでは、デフォルト値をそのまま使用します。 -
(オプション) [説明] に説明を入力します。
-
[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 のストリームを一覧表示するには
-
/
リソースを選択し、[リソースを作成] を選択します。 [リソース名] に「
streams
」と入力します。[CORS (Cross Origin Resource Sharing)] はオフのままにします。
[リソースの作成] を選択します。
-
/streams
リソースを選択し、[メソッドを作成] を選択して、次の操作を行います。[メソッドタイプ] には、GET を選択します。
注記
クライアントによって呼び出されるメソッドの HTTP 動詞は、バックエンド統合が必要な場合の HTTP 動詞とは異なる場合があります。ストリームの一覧表示は、直感的に、読み取りオペレーションであるため、ここでは
GET
を選択します。[統合タイプ] で、[AWS のサービス] を選択します。
[AWS リージョン] で、Kinesis ストリームを作成した AWS リージョンを選択します。
[AWS のサービス] で、[Kinesis] を選択します。
-
[AWS サブドメイン] は空白のままにします。
-
[HTTP メソッド] で、[POST] を選択します。
注記
ここで
POST
を選択したのは、Kinesis では POST を使用してListStreams
アクションを実行する必要があるためです。 -
[アクションタイプ] で、[アクション名を使用] を選択します。
-
[アクション名] に「
ListStreams
」と入力します。 -
[実行ロール] に、実行ロールの ARN を入力します。
-
[コンテンツの処理] の [パススルー] はデフォルトのままにします。
-
[メソッドの作成] を選択します。
-
[統合リクエスト] タブの [統合リクエストの設定] で、[編集] を選択します。
[リクエスト本文のパススルー] で、[テンプレートが定義されていない場合 (推奨)] を選択します。
-
[URL リクエストヘッダーのパラメータ] を選択し、次の操作を行います。
-
[リクエストヘッダーのパラメータを追加] を選択します。
-
[名前] に
Content-Type
と入力します。 -
[マッピング元] として「
'application/x-amz-json-1.1'
」と入力します。
リクエストパラメータマッピングを使用して
Content-Type
ヘッダーを静的な値の'application/x-amz-json-1.1'
に設定することで、入力が特定のバージョンの JSON であることを Kinesis に知らせます。 -
-
[マッピングテンプレート]、[マッピングテンプレートの追加] の順に選択し、次の操作を行います。
-
[コンテンツタイプ] に「
application/json
」と入力します。 -
[テンプレート本文] に「
{}
」と入力します。 -
[Save] を選択します。
ListStreams のリクエストのペイロードは、次の形式の JSON です。
{ "ExclusiveStartStreamName": "string", "Limit": number }
ただし、プロパティはオプションです。デフォルト値を使用するため、ここでは空の JSON ペイロードを選択しました。
-
-
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 メソッド (POST
、Delete
、Stream
) を公開します。{stream-name}
パス変数をこのストリームリソースのプレースホルダーとして使用して、これらの API のメソッドを Kinesis の DescribeStream
、CreateStream
、DeleteStream
アクションとそれぞれ統合します。クライアントは、他の入力データをメソッドリクエストのヘッダー、クエリパラメータ、またはペイロードとして渡す必要があります。必要な統合リクエストペイロードにデータを変換するためのマッピングテンプレートが用意されています。
{stream-name} リソースを作成するには
-
[/streams] リソースを選択し、[リソースを作成] を選択します。
[プロキシのリソース] はオフのままにします。
[リソースパス] で、[
/streams
] を選択します。[リソース名] に「
{stream-name}
」と入力します。[CORS (Cross Origin Resource Sharing)] はオフのままにします。
[リソースの作成] を選択します。
ストリームリソースで GET メソッドを設定し、テストするには
-
[/{stream-name}] リソースを選択し、[メソッドを作成] を選択します。
[メソッドタイプ] には、GET を選択します。
[統合タイプ] で、[AWS のサービス] を選択します。
[AWS リージョン] で、Kinesis ストリームを作成した AWS リージョンを選択します。
[AWS のサービス] で、[Kinesis] を選択します。
-
[AWS サブドメイン] は空白のままにします。
-
[HTTP メソッド] で、[POST] を選択します。
-
[アクションタイプ] で、[アクション名を使用] を選択します。
-
[アクション名] に「
DescribeStream
」と入力します。 -
[実行ロール] に、実行ロールの ARN を入力します。
-
[コンテンツの処理] の [パススルー] はデフォルトのままにします。
-
[メソッドの作成] を選択します。
-
[統合リクエスト] セクションで、以下の URL リクエストヘッダーのパラメータを追加します。
Content-Type: 'x-amz-json-1.1'
このタスクでは、同じ手順を使用して
GET /streams
メソッドのリクエストパラメータマッピングを設定します。 -
次の本文マッピングテンプレートを追加して、
GET /streams/{stream-name}
メソッドリクエストからPOST /?Action=DescribeStream
統合リクエストにデータをマッピングします。{ "StreamName": "$input.params('stream-name')" }
このマッピングテンプレートでは、Kinesis の
DescribeStream
アクションに必要な統合リクエストのペイロードをメソッドリクエストのstream-name
パスパラメータ値から生成します。 -
Kinesis で
DescribeStream
アクションを呼び出すGET /stream/{stream-name}
メソッドをテストするには、[テスト] タブを選択します。 -
[パス] の [stream-name] に、既存の Kinesis ストリームの名前を入力します。
-
[テスト] を選択します。テストに成功すると、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 メソッドを設定し、テストするには
-
[/{stream-name}] リソースを選択し、[メソッドを作成] を選択します。
[メソッドタイプ] では、POST を選択します。
[統合タイプ] で、[AWS のサービス] を選択します。
[AWS リージョン] で、Kinesis ストリームを作成した AWS リージョンを選択します。
[AWS のサービス] で、[Kinesis] を選択します。
-
[AWS サブドメイン] は空白のままにします。
-
[HTTP メソッド] で、[POST] を選択します。
-
[アクションタイプ] で、[アクション名を使用] を選択します。
-
[アクション名] に「
CreateStream
」と入力します。 -
[実行ロール] に、実行ロールの ARN を入力します。
-
[コンテンツの処理] の [パススルー] はデフォルトのままにします。
-
[メソッドの作成] を選択します。
-
[統合リクエスト] セクションで、以下の URL リクエストヘッダーのパラメータを追加します。
Content-Type: 'x-amz-json-1.1'
このタスクでは、同じ手順を使用して
GET /streams
メソッドのリクエストパラメータマッピングを設定します。 -
次の本文マッピングテンプレートを追加して、
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 に設定します。 -
Kinesis で
CreateStream
アクションを呼び出すPOST /stream/{stream-name}
メソッドをテストするには、[テスト]] タブを選択します。 -
[パス] の [stream-name] に、新しい Kinesis ストリームの名前を入力します。
-
[テスト] を選択します。テストが完了すると、データなしで 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 メソッドを設定し、テストする
-
[/{stream-name}] リソースを選択し、[メソッドを作成] を選択します。
[メソッドタイプ] で、[DELETE] を選択します。
[統合タイプ] で、[AWS のサービス] を選択します。
[AWS リージョン] で、Kinesis ストリームを作成した AWS リージョンを選択します。
[AWS のサービス] で、[Kinesis] を選択します。
-
[AWS サブドメイン] は空白のままにします。
-
[HTTP メソッド] で、[POST] を選択します。
-
[アクションタイプ] で、[アクション名を使用] を選択します。
-
[アクション名] に「
DeleteStream
」と入力します。 -
[実行ロール] に、実行ロールの ARN を入力します。
-
[コンテンツの処理] の [パススルー] はデフォルトのままにします。
-
[メソッドの作成] を選択します。
-
[統合リクエスト] セクションで、以下の URL リクエストヘッダーのパラメータを追加します。
Content-Type: 'x-amz-json-1.1'
このタスクでは、同じ手順を使用して
GET /streams
メソッドのリクエストパラメータマッピングを設定します。 -
次の本文マッピングテンプレートを追加して、
DELETE /streams/{stream-name}
メソッドリクエストからPOST /?Action=DeleteStream
の該当する統合リクエストにデータをマッピングします。{ "StreamName": "$input.params('stream-name')" }
このマッピングテンプレートでは、
DELETE /streams/{stream-name}
のクライアントが指定した URL パス名値からstream-name
アクションに必要な入力が生成されます。 -
Kinesis で
DeleteStream
アクションを呼び出すDELETE /stream/{stream-name}
メソッドをテストするには、[テスト]] タブを選択します。 -
[パス] の [stream-name] に、既存の Kinesis ストリームの名前を入力します。
-
[テスト] を選択します。テストが完了すると、データなしで 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
はレコードを追加するターゲットストリームを識別します。StreamName
、Data
、および 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 リソースを作成するには
-
[/{stream-name}] リソースを選択し、[リソースを作成] を選択します。
[プロキシのリソース] はオフのままにします。
[リソースパス] で、[
/{stream-name}
] を選択します。[リソース名] に「
record
」と入力します。[CORS (Cross Origin Resource Sharing)] はオフのままにします。
[リソースの作成] を選択します。
前の手順を繰り返して /records リソースと /sharditerator リソースを作成します。最終的な API は次のようになります。
次の 4 つの手順では、各メソッドの設定方法、メソッドリクエストから統合リクエストにデータをマッピングする方法、およびメソッドをテストする方法について説明します。
Kinesis で PutRecord
を呼び出すように PUT /streams/{stream-name}/record
メソッドを設定してテストするには
-
[/record] を選択し、[メソッドを作成] を選択します。
[メソッドタイプ] で、[PUT] を選択します。
[統合タイプ] で、[AWS のサービス] を選択します。
[AWS リージョン] で、Kinesis ストリームを作成した AWS リージョンを選択します。
[AWS のサービス] で、[Kinesis] を選択します。
-
[AWS サブドメイン] は空白のままにします。
-
[HTTP メソッド] で、[POST] を選択します。
-
[アクションタイプ] で、[アクション名を使用] を選択します。
-
[アクション名] に「
PutRecord
」と入力します。 -
[実行ロール] に、実行ロールの ARN を入力します。
-
[コンテンツの処理] の [パススルー] はデフォルトのままにします。
-
[メソッドの作成] を選択します。
-
[統合リクエスト] セクションで、以下の URL リクエストヘッダーのパラメータを追加します。
Content-Type: 'x-amz-json-1.1'
このタスクでは、同じ手順を使用して
GET /streams
メソッドのリクエストパラメータマッピングを設定します。 -
次の本文マッピングテンプレートを追加して、
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" } } }
モデルを作成してこのスキーマを含め、このモデルを使用してマッピングテンプレートを生成を容易にすることができます。ただし、モデルを使用せずにマッピングテンプレートを生成することができます。
-
PUT /streams/{stream-name}/record
メソッドをテストするには、stream-name
パス変数を既存のストリームの名前に設定し、必要な形式のペイロードを指定して、メソッドリクエストを送信します。成功した場合の結果は200 OK
レスポンスと、次の形式のペイロードとなります。{ "SequenceNumber": "49559409944537880850133345460169886593573102115167928386", "ShardId": "shardId-000000000004" }
Kinesis で PUT /streams/{stream-name}/records
を呼び出すように PutRecords
メソッドを設定してテストするには
-
[/records] リソースを選択し、[メソッドを作成] を選択します。
[メソッドタイプ] で、[PUT] を選択します。
[統合タイプ] で、[AWS のサービス] を選択します。
[AWS リージョン] で、Kinesis ストリームを作成した AWS リージョンを選択します。
[AWS のサービス] で、[Kinesis] を選択します。
-
[AWS サブドメイン] は空白のままにします。
-
[HTTP メソッド] で、[POST] を選択します。
-
[アクションタイプ] で、[アクション名を使用] を選択します。
-
[アクション名] に「
PutRecords
」と入力します。 -
[実行ロール] に、実行ロールの ARN を入力します。
-
[コンテンツの処理] の [パススルー] はデフォルトのままにします。
-
[メソッドの作成] を選択します。
-
[統合リクエスト] セクションで、以下の URL リクエストヘッダーのパラメータを追加します。
Content-Type: 'x-amz-json-1.1'
このタスクでは、同じ手順を使用して
GET /streams
メソッドのリクエストパラメータマッピングを設定します。 -
次の本文マッピングテンプレートを追加して、
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
メソッド (前の手順) 用の形式です。実稼働環境では、両方の形式の一貫性を保ってください。 -
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
メソッドを呼び出す前に必須のシャードイテレーターを取得するためのヘルパーメソッドです。
-
[/sharditerator] リソースを選択し、[メソッドを作成] を選択します。
[メソッドタイプ] には、GET を選択します。
[統合タイプ] で、[AWS のサービス] を選択します。
[AWS リージョン] で、Kinesis ストリームを作成した AWS リージョンを選択します。
[AWS のサービス] で、[Kinesis] を選択します。
-
[AWS サブドメイン] は空白のままにします。
-
[HTTP メソッド] で、[POST] を選択します。
-
[アクションタイプ] で、[アクション名を使用] を選択します。
-
[アクション名] に「
GetShardIterator
」と入力します。 -
[実行ロール] に、実行ロールの ARN を入力します。
-
[コンテンツの処理] の [パススルー] はデフォルトのままにします。
-
[URL クエリ文字列パラメータ] を選択します。
GetShardIterator
アクションでは、ShardId 値を入力する必要があります。クライアントが指定したShardId
値を渡すには、次のステップに示すように、shard-id
クエリパラメータをメソッドリクエストに追加します。 [クエリ文字列の追加] を選択します。
[名前] に
shard-id
と入力します。[必須] と [キャッシュ] はオフのままにしておきます。
-
[メソッドの作成] を選択します。
-
[統合リクエスト] セクションで、次のマッピングテンプレートを追加して、メソッドリクエストの
shard-id
パラメータとstream-name
パラメータのGetShardIterator
アクションに必要な入力 (ShardId
およびStreamName
) を生成します。また、マッピングテンプレートでも、ShardIteratorType
は、デフォルトとしてTRIM_HORIZON
に設定されます。{ "ShardId": "$input.params('shard-id')", "ShardIteratorType": "TRIM_HORIZON", "StreamName": "$input.params('stream-name')" }
-
API Gateway コンソールの [Test (テスト)] オプションを使用して、既存のストリームの名前を
stream-name
の [Path (パス)] 変数値に入力し、shard-id
の [Query string (クエリ文字列)] を既存のShardId
値 (例:shard-000000000004
) に設定して、[Test (テスト)] を選択します。成功のレスポンスペイロードは以下の出力例のようになります。
{ "ShardIterator": "AAAAAAAAAAFYVN3VlFy..." }
ShardIterator
の値をメモしておきます。これは、ストリームからレコードを取得するために必要です。
Kinesis で GET /streams/{stream-name}/records
アクションを呼び出すように GetRecords
メソッドを設定してテストするには
-
[/records] リソースを選択し、[メソッドを作成] を選択します。
[メソッドタイプ] には、GET を選択します。
[統合タイプ] で、[AWS のサービス] を選択します。
[AWS リージョン] で、Kinesis ストリームを作成した AWS リージョンを選択します。
[AWS のサービス] で、[Kinesis] を選択します。
-
[AWS サブドメイン] は空白のままにします。
-
[HTTP メソッド] で、[POST] を選択します。
-
[アクションタイプ] で、[アクション名を使用] を選択します。
-
[アクション名] に「
GetRecords
」と入力します。 -
[実行ロール] に、実行ロールの ARN を入力します。
-
[コンテンツの処理] の [パススルー] はデフォルトのままにします。
-
[HTTP リクエストヘッダー] を選択します。
GetRecords
オペレーションでは、ShardIterator
の値の入力が必要です。クライアントが指定したShardIterator
値を渡すには、Shard-Iterator
ヘッダーパラメータをメソッドリクエストに追加します。 [ヘッダーの追加] を選択します。
[名前] に
Shard-Iterator
と入力します。[必須] と [キャッシュ] はオフのままにしておきます。
[メソッドの作成] を選択します。
-
[統合リクエスト] セクションで、次の本文マッピングテンプレートを追加して、
Shard-Iterator
ヘッダーパラメータ値を Kinesis のGetRecords
アクションの JSON ペイロードのShardIterator
プロパティ値にマッピングします。{ "ShardIterator": "$input.params('Shard-Iterator')" }
-
API Gateway コンソールの [テスト] オプションを使用して、既存のストリームの名前を
stream-name
の [パス] 変数値として入力し、Shard-Iterator
の [ヘッダー] をGET /streams/{stream-name}/sharditerator
メソッド (上記) のテスト実行で取得したShardIterator
値に設定して、[テスト] を選択します。成功のレスポンスペイロードは以下の出力例のようになります。
{ "MillisBehindLatest": 0, "NextShardIterator": "AAAAAAAAAAF...", "Records": [ ... ] }