Kinesis Data StreamsをCloudFormationで作ってみた
AWSのフルマネージド型ストリームサービスAmazon Kinesis Data StreamをCloudFormationで作成する機会があったので、テンプレートを共有します。
本記事で紹介するテンプレートでは、Kinesis Dataストリームだけを構築します。ストリームデータを処理するEventBridge Pipes/Lambda等のコンシューマー・パイプライン一式も含めてAWS SAMで構築したい場合は、次の記事を参照ください。
CloudFormation スタック作成方法
- ストリーム名(
KinesisDataStreamName
) - タグで付与する環境情報(
Environment
)- prd/stg/dev から選択可能
をパラメーターで渡すようにしています。
コンソール
AWS CLI
$ aws cloudformation create-stack \ --stack-name mystack \ --template-body file://cfn_kinesis.yaml \ --parameters \ ParameterKey=KinesisDataStreamName,ParameterValue=test \ ParameterKey=Environment,ParameterValue=dev { "StackId": "arn:aws:cloudformation:eu-central-1:123456789012:stack/myteststack/e4d49440-f4dd-11ed-900b-061284b8120e" }
CloudFormationテンプレート
Kinesis Data Streamsは設定項目がごく少数のため、CloudFormationテンプレートもシンプルです。
- 保存時の暗号化(
StreamEncryption
) - データ保持期間(省略すると24時間)(
RetentionPeriodHours
)
は要件に合わせてカスタマイズしてください。
残念ながら、シャード単位の拡張モニタリングはCloudFormationに対応していないため、ストリーム作成後、ストリーム詳細ページのConfiguration→Enhanced (shard-level) metricsから手動で有効化してください。
- プロビジョンド(シャード数指定型)
- オンデマンド(キャパシティオートスケール型)
それぞれのCloudFormationテンプレートを用意しています。
※ 作成されたストリーム
プロビジョンド(シャード数指定型)
プロビジョンド(シャード数指定型)では、シャード数を明示的に指定してキャパシティ管理します。
ShardCount: 1 StreamModeDetails: StreamMode: PROVISIONED
AWSTemplateFormatVersion: "2010-09-09" Description: Kinesis Data Stream Parameters: KinesisDataStreamName: Type: String Environment: Description: Environment Type: String Default: dev AllowedValues: - prd - stg - dev Resources: KinesisDataStream: Type: AWS::Kinesis::Stream Properties: Name: !Ref KinesisDataStreamName RetentionPeriodHours: 24 ShardCount: 1 StreamModeDetails: StreamMode: PROVISIONED StreamEncryption: EncryptionType: KMS KeyId: alias/aws/kinesis Tags: - Key: Name Value: !Ref KinesisDataStreamName - Key: Env Value: !Ref Environment Outputs: KinesisDataStream: Value: !Ref KinesisDataStream Description: Kinesis Data Stream Name
オンデマンド(キャパシティオートスケール型)
オンデマンド(キャパシティオートスケール型)では、キャパシティに応じてオンデマンドでスケールします。
シャード数を指定しない代わりに、StreamMode: ON_DEMAND
としています。
AWSTemplateFormatVersion: "2010-09-09" Description: Kinesis Data Stream Parameters: KinesisDataStreamName: Type: String Environment: Description: Environment Type: String Default: dev AllowedValues: - prd - stg - dev Resources: KinesisDataStream: Type: AWS::Kinesis::Stream Properties: Name: !Ref KinesisDataStreamName RetentionPeriodHours: 24 StreamModeDetails: StreamMode: ON_DEMAND StreamEncryption: EncryptionType: KMS KeyId: alias/aws/kinesis Tags: - Key: Name Value: !Ref KinesisDataStreamName - Key: Env Value: !Ref Environment Outputs: KinesisDataStream: Value: !Ref KinesisDataStream Description: Kinesis Data Stream Name KinesisDataStreamArn: Value: !GetAtt KinesisDataStream.Arn Description: Kinesis Data Stream Arn
最後に
Amazon Kinesis Data StreamをCloudFormationで作成する方法を紹介しました。
- メッセージブローカー
- プロデューサー
- コンシューマー
を境界にIaC管理したい場合に利用しやすいかと思います。
現状、CloudFormation単体ではシャード単位のメトリクスを可能にする拡張モニタリングを設定できないため、次のGitHubイシューで改善要望があがっています。
同機能がリリースされてから7年も経過している機能のため、そろそろ対応してほしいところです。
それでは。