MSKをCloudFormationで運用する際の注意点2

Amazon MSKクラスターのKafkaに関する構成は「クラスター構成」として管理されます。  
クラスター構成の設定変更には2段階の適用が必要となるため、その手順を理解しておくことが重要です。

前提条件

本記事で触れている内容は、以下の構成を前提としています。
  • ブローカータイプ:標準ブローカー(kafka.m5.large など)
  • クラスタタイプ:プロビジョンドクラスタ
  • メタデータ管理:Apache Zookeeper モード

あくまで参考資料となります。環境によって最適解は変わるため、必要に応じて検討してください。

MSKクラスター構成

MSKクラスター構成には下記のようなプロパティを設定することができます。

  • default.replication.factor
  • min.insync.replicas
  • auto.create.topics.enable

デフォルトで設定されるプロパティのほかに、利用者側でカスタムすることが可能です。プロパティの一覧は公式ドキュメントをご覧ください。

変更手順

変更する手順は大きく下記のような流れとなります。

  1. `AWS::MSK::Configuration`の `ServerProperties` を編集して新リビジョンを作成
  2. `AWS::MSK::Cluster` の `ConfigurationInfo` を最新リビジョンに切り替え
  3. クラスタが `ACTIVE` になるまで待機し、設定反映を確認

1段階目:`MSKClusterConfig`を変更

1. `AWS::MSK::Configuration`リソースにある対象のKafka設定(`server.properties`)を確認
2. 任意のプロパティを追加もしくは、既存のプロパティを変更
3. CloudFormationスタックを更新すると、`AWS::MSK::Configuration`の新しいリビジョンが作成される。(もし最新のリビジョンが1の場合、スタック更新後に2が作成される)
変更前のClusterConfigを下記例として、説明します。
MSKClusterConfig:
  Type: AWS::MSK::Configuration
  Properties:
    Name: msk-demo-config
    ServerProperties: |
      default.replication.factor=3
      min.insync.replicas=2
      auto.create.topics.enable=false
      log.retention.hours=168
コンソール上で確認すると、それぞれ下記の通りです。
・MSK Configuration 変更前のリビジョン

・MSK Configuration の現行設定

・クラスターに適用されている現行設定(現行リビジョン)

今回は、下記の通り変更してみます。
MSKClusterConfig:
  Type: AWS::MSK::Configuration
  Properties:
    Name: msk-demo-config
    ServerProperties: |
      default.replication.factor=3
      min.insync.replicas=2
      auto.create.topics.enable=true
      log.retention.hours=72
1. 変更セット作成
2. MSK Configuration 変更後のリビジョン

変更セットによる変更が完了すると、上記の通りリビジョンがインクリメントされて最新が追加されます。
3. 変更後のリビジョン確認画面

インクリメントされた最新リビジョンを確認すると、変更したパラメータが適用されていることがわかります。
ポイント
  • 更新時は常に新しいリビジョンが作成される
  • リビジョン番号は自動的にインクリメントされるため、1つ前のリビジョンは保持される(ロールバック時に有用)

2段階目:クラスターに新リビジョンを適用

1. `AWS::MSK::Cluster` の `ConfigurationInfo` に、作成済みの `AWS::MSK::Configuration` リソースの最新リビジョンを指定
2. CloudFormationスタックを更新
3. クラスタの `Cluster Operation` タブで `UPDATE` 完了を確認
MSKCluster:
  Type: 'AWS::MSK::Cluster'
  DependsOn: MSKClusterConfig
  Properties:
    BrokerNodeGroupInfo:
    NumberOfBrokerNodes: 3
    InstanceType: kafka.t3.small
    ClientAuthentication:
    ConfigurationInfo:
      Arn: !GetAtt MSKClusterConfig.Arn
      Revision: 2
1. 変更セット作成(クラスタリビジョンを最新に指定)
2. 変更セットの内容確認
リビジョンを最新のバージョンに設定し。変更セットを作成します。
3. 変更セット実行

変更セットが実行されると、MSKクラスターの「クラスターオペレーション」タブにて更新が開始されていることが確認できます。
更新が完了するまで、一定時間待機します。
4. クラスターオペレーションの完了

ブローカーやトピックによって所要時間は前後しますが、一定時間が経過するとクラスターオペレーションが完了します。
この時点で最新のリビジョンが適用されました。
5. 変更反映後のクラスタ状態

クラスターの詳細を見ると、リビジョンが変更されていることが確認できます。これで作業は完了となります。
押さえるポイント
  • `AWS::MSK::Configuration`更新後も、クラスタ側の `ConfigurationInfo` を切り替えるまで新設定は適用されない
  • ロールバックに備え、古いリビジョンは保持されていることを確認しておく
`ConfigurationRevision` がインクリメントされた後、明示的にMSKクラスターが参照するリビジョンを切り替えないと反映されません。

まとめ

MSKクラスタ設定の変更は、CloudFormation上で「設定リビジョン作成」と「クラスタ設定切替」の2段階処理になることを前提に運用します。もし最新のリビジョンで問題が発生した場合、古いリビジョンへ切り替えることも可能です。
タイトルとURLをコピーしました