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
cfn_kinesis.yaml
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
としています。
cfn_kinesis.yaml
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年も経過している機能のため、そろそろ対応してほしいところです。
それでは。