APIs を使用してストリームを作成する - Amazon Kinesis Data Streams

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

APIs を使用してストリームを作成する

次の手順で Kinesis Data Streams を作成します。

Kinesis Data Streams クライアントの構築

Kinesis Data Streams を使用する前に、クライアントオブジェクトを構築する必要があります。次の Java コードは、クライアントビルダーをインスタンス化し、それを使用してリージョン、認証情報、およびクライアント設定を指定します。次に、クライアントオブジェクトを構築します。

AmazonKinesisClientBuilder clientBuilder = AmazonKinesisClientBuilder.standard(); clientBuilder.setRegion(regionName); clientBuilder.setCredentials(credentialsProvider); clientBuilder.setClientConfiguration(config); AmazonKinesis client = clientBuilder.build();

詳細については、「AWS 全般のリファレンス」で「Kinesis Data Streams のリージョンとエンドポイント」を参照してください。

ストリームを作成する

Kinesis Data Streams クライアントを作成したら、コンソールまたはプログラムでストリームを作成できます。プログラムでストリームを作成するには、CreateStreamRequest オブジェクトをインスタンス化し、ストリームの名前を指定します。プロビジョンドモードを使用する場合は、使用するデータストリームのシャード数を指定する必要があります。

  • オンデマンド:

    CreateStreamRequest createStreamRequest = new CreateStreamRequest(); createStreamRequest.setStreamName( myStreamName );
  • プロビジョンド:

    CreateStreamRequest createStreamRequest = new CreateStreamRequest(); createStreamRequest.setStreamName( myStreamName ); createStreamRequest.setShardCount( myStreamSize );

ストリーム名はストリームを識別するために使用されます。名前は、アプリケーションで使用される AWS アカウントに限定されます。また、リージョンにも限定されます。つまり、2 つの異なる AWS アカウントの 2 つのストリームは同じ名前を持つことができ、2 つの異なるリージョンの AWS 2 つのストリームは同じ名前を持つことができますが、同じアカウントと同じリージョンの 2 つのストリームを持つことはできません。

ストリームのスループットはシャードの数の関数です。プロビジョニングされたスループットを向上させるには、より多くのシャードが必要です。シャードが増えると、 がストリームに AWS 請求するコストも増加します。アプリケーションに適切なシャードの数の計算の詳細については、データストリーム容量モードを選択するを参照してください。

createStreamRequest オブジェクトを設定した後、クライアントの createStream メソッドを呼び出すことで、ストリームを作成します。createStream の呼び出し後、ストリームに対してさらにオペレーションを実行するには、ストリームが ACTIVE 状態になるまで待機します。ストリームの状態を確認するには、describeStream メソッドを呼び出します。ただし、ストリームが存在しない場合、describeStream は例外をスローします。そのために、describeStream の呼び出しは try/catch ブロックで囲みます。

client.createStream( createStreamRequest ); DescribeStreamRequest describeStreamRequest = new DescribeStreamRequest(); describeStreamRequest.setStreamName( myStreamName ); long startTime = System.currentTimeMillis(); long endTime = startTime + ( 10 * 60 * 1000 ); while ( System.currentTimeMillis() < endTime ) { try { Thread.sleep(20 * 1000); } catch ( Exception e ) {} try { DescribeStreamResult describeStreamResponse = client.describeStream( describeStreamRequest ); String streamStatus = describeStreamResponse.getStreamDescription().getStreamStatus(); if ( streamStatus.equals( "ACTIVE" ) ) { break; } // // sleep for one second // try { Thread.sleep( 1000 ); } catch ( Exception e ) {} } catch ( ResourceNotFoundException e ) {} } if ( System.currentTimeMillis() >= endTime ) { throw new RuntimeException( "Stream " + myStreamName + " never went active" ); }