Amazon MSK Serverless で始めるイベントストリーミング - 運用ゼロの Kafka 環境構築
クラスタ管理不要の Kafka 環境を IAM 認証で構築し、EventBridge Pipes との統合でイベントストリーミングを簡素化する手法を紹介します。
MSK Serverless の特徴
MSK Serverless はクラスタのプロビジョニング、スケーリング、パッチ適用が完全に不要な Kafka 環境です。クラスタを作成するとエンドポイントが即座に提供され、Kafka クライアントからトピックの作成とデータの送受信を開始できます。ブローカーのインスタンスタイプやノード数を指定する必要がなく、パーティション単位で最大 200 MB/s のスループットが自動スケールします。プロビジョンドクラスタでは Kafka の設定パラメータ (retention.ms、max.message.bytes など) を細かくカスタマイズできますが、Serverless ではこれらの設定が自動管理されます。
IAM 認証とアクセス制御
MSK Serverless は IAM 認証を標準で使用します。Kafka クライアントは AWS の認証情報 (IAM ロール) で MSK に接続し、IAM ポリシーでトピックレベルのアクセス制御を設定します。特定の IAM ロールに対して特定のトピックへの読み書きのみを許可するきめ細かい制御が可能です。プロビジョンドクラスタで使用する SASL/SCRAM 認証のようなユーザー名・パスワードの管理が不要になり、認証情報のローテーションも IAM が自動的に処理します。Lambda 関数や ECS タスクからの接続では、実行ロールに MSK へのアクセス権限を付与するだけで認証が完了します。
EventBridge Pipes との統合
EventBridge Pipes は MSK のトピックをソースとして、 Lambda 、 Step Functions 、 SQS 、 Kinesis Data Streams などのターゲットに直接接続するサービスです。従来は Kafka コンシューマーアプリケーションを自前で開発・運用する必要がありましたが、 Pipes を使用するとコンシューマーコードの記述が不要になります。フィルタリングでイベントの条件に基づく選択的な処理が可能で、エンリッチメントで Lambda 関数によるデータ変換を挟むこともできます。 MSK Serverless + EventBridge Pipes + Lambda の組み合わせで、完全にサーバーレスなイベントストリーミングパイプラインを構築できます。 MSK の活用事例を知るうえで関連書籍 (Amazon)が参考になります。
MSK Serverless の料金
MSK Serverless の料金はクラスタ時間、パーティション時間、ストレージ、データ転送で構成されます。クラスタは 1 時間あたり約 0.75 ドル、パーティションは 1 パーティション時間あたり約 0.0015 ドルです。ストレージは 1 GB あたり月額約 0.10 ドルで、データ転送はリージョン内の受信が無料、送信は標準のデータ転送料金が適用されます。プロビジョンドクラスタ (kafka.m5.large で月額約 150 ドル) と比較すると、トラフィックが断続的なワークロードでは Serverless の方が低コストですが、24 時間高スループットで稼働する環境ではプロビジョンドの方が有利です。
Serverless とプロビジョンドの使い分け
MSK には Serverless とプロビジョンドの 2 つの形態があり、ワークロードの性質で選びます。トラフィックが断続的で需要の予測が難しい、運用の手間を最小化したい、急なスケールに自動で追従したい、といった場合は Serverless が適します。一方、24 時間安定して高いスループットが続く、Kafka の細かな設定を制御したい、コストを使用量で最適化したい、という場合はプロビジョンドが向きます。まず Serverless で素早く始め、負荷特性が見えてきた段階でプロビジョンドへの移行を検討する、という進め方も合理的です。
トピック設計とパーティション
Kafka の性能と順序保証は、トピックとパーティションの設計で決まります。パーティション内ではメッセージの順序が保たれるため、順序が重要なデータは適切なキーで同じパーティションに集約します。パーティション数を増やすと並列処理でスループットを高められますが、コンシューマー側の構成とのバランスが必要です。コンシューマーグループを使えば、複数の処理プロセスでパーティションを分担して並列消費できます。キー設計が偏ると特定パーティションに負荷が集中するため、データが均等に分散するキーを選ぶことが、安定した処理の前提になります。
プロデューサーとコンシューマーの実装
MSK は Kafka 互換のため、既存の Kafka クライアントライブラリをそのまま利用できます。サーバーレス志向の構成では、Lambda のイベントソースマッピングで MSK のトピックを直接購読し、コンシューマーアプリケーションの運用を省けます。メッセージの構造を組織で統一したい場合は、Glue のスキーマレジストリと組み合わせ、スキーマの整合性を保ちながら互換性を管理します。プロデューサー側では、メッセージのバッチ送信や圧縮を設定してスループットと効率を高めます。認証は IAM ロールで完結するため、接続情報の管理が簡潔になります。
監視と運用
イベントストリーミングの健全性は、コンシューマーのラグ (未処理メッセージの滞留量) で測ります。ラグが増え続ける場合、消費側が生産側に追いついていないため、コンシューマーの並列度やパーティション数を見直します。CloudWatch のメトリクスでスループット、パーティションの状態、エラーを監視し、異常をアラートで検知します。Serverless ではスループットやパーティション数に上限があるため、設計時に想定負荷が収まるかを確認します。メッセージの保持期間や、処理失敗時の扱いも事前に決めておくと、運用が安定します。
まとめ
MSK Serverless は Kafka の運用管理を完全に排除し、イベントストリーミングの構築に集中できるサービスです。IAM 認証で認証情報の管理を簡素化し、EventBridge Pipes でコンシューマーの開発を削減します。Kafka エコシステムの互換性を維持しつつ、サーバーレスの運用効率を実現できます。