この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
いわさです。
MSKでCloudFormationにて作成出来るリソースの範囲が広がりました。
しかし、そもそもCloudFormationで作成する記事がなかったので本日はベーシックなMSKクラスターを作成してみました。
動作確認用のKafkaクライアント(EC2)も作成します。
テンプレート
以下のリポジトリにテンプレートはおいておきます。
クラスター作成
おそらく最小構成のクラスターです。
ブローカーインスタンスは2以上にする必要があります。
MSKクラスターの作成は時間がかかります。15~20分ほど。
MSKCluster:
Type: 'AWS::MSK::Cluster'
Properties:
BrokerNodeGroupInfo:
ClientSubnets:
- !Ref PrivateSubnetOne
- !Ref PrivateSubnetTwo
InstanceType: !Ref BrokerInstanceType
SecurityGroups:
- !Ref MSKSecurityGroup
StorageInfo:
EBSStorageInfo:
VolumeSize: !Ref BrokerStorageSize
ClusterName: HogeCluster
KafkaVersion: 2.6.2
EncryptionInfo:
EncryptionInTransit:
ClientBroker: TLS
InCluster: true
NumberOfBrokerNodes: !Ref BrokerNum
クライアント作成
EC2クライアントはユーザーデータでKafkaクライアントをセットアップしています。
ユーザーデーター付近だけ抜粋します。
MSKのCloudFromationにクライアント実装のサンプルがあり、そちらをベースに少し記述方法を変更したりしています。
KafkaClientEC2Instance:
Type: 'AWS::EC2::Instance'
Properties:
InstanceType: t3.small
KeyName: !Ref KeyPairVM
IamInstanceProfile: !Ref EC2InstanceProfile
SubnetId: !Ref PrivateSubnetOne
ImageId: !Ref ClientAMI
UserData:
Fn::Base64: |
#cloud-config
package_update: true
package_upgrade: true
runcmd:
- amazon-linux-extras enable corretto8
- yum update -y
- yum install python3.7 -y
- yum install java-1.8.0-amazon-corretto -y
- yum erase awscli -y
- cd /home/ec2-user
- echo "export PATH=.local/bin:$PATH" >> .bash_profile
- mkdir kafka
- mkdir mm
- cd kafka
- wget https://archive.apache.org/dist/kafka/2.6.2/kafka_2.12-2.6.2.tgz
- tar -xzf kafka_2.12-2.6.2.tgz
- cd /home/ec2-user
- wget https://bootstrap.pypa.io/get-pip.py
- su -c "python3.7 get-pip.py --user" -s /bin/sh ec2-user
- su -c "/home/ec2-user/.local/bin/pip3 install boto3 --user" -s /bin/sh ec2-user
- su -c "/home/ec2-user/.local/bin/pip3 install awscli --user" -s /bin/sh ec2-user
- chown -R ec2-user ./kafka
- chgrp -R ec2-user ./kafka
- chown -R ec2-user ./mm
- chgrp -R ec2-user ./mm
スタック作成
スタック作成後はMSKクラスターが作成されます。
また、EC2はMSKクライアントをセットアップ済みなので、すぐにトピックへの送信を試すことが可能になっています。
sh-4.2$ sudo su ec2-user
[ec2-user@ip-172-31-36-114 bin]$ cd ~/kafka/kafka_2.12-2.6.2/bin
[ec2-user@ip-172-31-41-236 bin]$ vi client.properties
[ec2-user@ip-172-31-41-236 bin]$ ./kafka-console-producer.sh --broker-list b-1.hogecluster.mss7x7.c3.kafka.ap-northeast-1.amazonaws.com:9094,b-2.hogecluster.mss7x7.c3.kafka.ap-northeast-1.amazonaws.com:9094 --producer.config client.properties --topic HogeTopic
>aaa
bbb
ccc
ddd
eee
さいごに
クライアントとクラスターのテンプレートを用意しておいて、作成と削除をすぐ出来るようにしておくと、MSKの動作をちょっと確認したいときなどに便利です。
今後MSKを検証するときは、このテンプレートを使おうと思います。