今回も、Professional Cloud Data Engineer認定取得するために、私が勉強した内容をアウトプットしていきます。
今回は、AlloyDB for PostgreSQL、Dataflow のウォーターマーク、Dataflow の権限ガイドについて説明します!
ぜひ、最後までご覧いただけると嬉しいです!
AlloyDB for PostgreSQL
AlloyDB for PostgreSQL は、Google Cloud が提供するフルマネージドのデータベース サービスです。オープンソースとして広く使われている PostgreSQL と 100% の互換性を持ちながら、Google Cloud のインフラストラクチャ上で性能、可用性、スケーラビリティを大幅に強化しています。
特に、要求の厳しいエンタープライズのトランザクション処理と、高速な分析処理の両方に適応するよう設計されており、さらに AI/ML アプリケーションのための機能も統合しています。
AlloyDB の主な特徴
1. PostgreSQL との 100% 互換性
AlloyDB は PostgreSQL と完全に互換性があるため、既存の PostgreSQL アプリケーションをコード変更なしで簡単に移行(リフト&シフト)できます。使い慣れた psql クライアントや各種言語コネクタもそのまま利用可能です。
2. 圧倒的なパフォーマンスを実現するアーキテクチャ
AlloyDB の最大の特徴は、標準の PostgreSQL とは異なる独自のアーキテクチャにあります。
- コンピュート(計算)とストレージ(保存)の分離:データベースの計算処理を行うインスタンス(コンピュート)と、データを実際に保存するインテリジェントなストレージレイヤーを分離しています。これにより、ストレージの I/O に律速されず、読み取り/書き込み性能が大幅に向上します。
- 高速な分析(OLAP)を実現する「カラム型エンジン」: 内蔵された「カラム型エンジン」が、大量データの分析クエリを高速化します。これにより、トランザクション処理と分析処理を 1 つのデータベースで同時に行うハイブリッドワークロードに対応できます。
3. AlloyDB AI による AI/ML アプリケーション開発
AlloyDB は、最新の AI アプリケーション開発をデータベース内で直接サポートします。
- ベクトル検索:非構造化データ(テキスト、画像など)を「ベクトルエンベディング」として保存し、高速な類似性検索を実行できます。これにより、セマンティック検索や推薦システム、生成 AI アプリケーションの構築が容易になります。
- Vertex AI との統合:SQL クエリから直接 Google Cloud の Vertex AI モデルを呼び出し、予測の実行や「自然言語から SQL を生成する」といった操作が可能です。
4. 高可用性と自動管理
フルマネージド サービスとして、AlloyDB はインフラ管理の負担を大幅に軽減します。
- 99.99% の高可用性 (SLA):自動フェイルオーバー、障害を許容するストレージ設計により、メンテナンス中でもダウンタイムを最小限に抑えます。
- 自動化された管理:バックアップと復元(PITR:ポイントインタイム リカバリ対応)、パッチ適用、メンテナンス、ストレージのスケーリングなどを自動で管理します。
移行(マイグレーション)
AlloyDB は、Cloud SQL for PostgreSQL や、オンプレミス、他のクラウドで稼働する PostgreSQL からの移行をサポートしており、Google Cloud の Database Migration Service (DMS) などを利用してシームレスに移行を進めることができます。
AlloyDB for PostgreSQLのまとめ
AlloyDB for PostgreSQL は、PostgreSQL の完全互換性を維持しつつ、Google Cloud のインフラを活かして圧倒的な性能・可用性・スケーラビリティを実現する次世代データベースです。
OLTP と OLAP の両方を高速処理できる独自アーキテクチャを備え、AI/ML 機能もデータベース内で直接活用できます。
また、Vertex AI との統合により、生成 AI やベクトル検索などの最新アプリケーション開発にも対応しています。フルマネージドサービスとして自動バックアップやフェイルオーバーも提供し、運用負担を大幅に軽減します。既存の PostgreSQL 環境からも容易に移行でき、エンタープライズの高度な要件に応えるクラウドデータベースです。
Dataflow のウォーターマーク
Dataflow のようなストリーミング(リアルタイム)データ処理では、データは無限に流れ込み続けます。しかし、データは生成された順序通りに、あるいは予測可能な間隔でパイプラインに到着するとは限りません。ネットワークの遅延などにより、古いデータが新しいデータより後に到着することが頻繁に発生します。
この「時間のずれ」を正しく処理し、いつデータが集計処理の「完了」とみなせるかを判断するために、Dataflow では「ウォーターマーク」という重要な概念が使われます。
ウォーターマークとは何か?
ウォーターマークとは、Dataflow が「この時刻(イベント時間)までのデータは、すべてパイプラインに到着したとみなす」と判断する進捗状況を示すタイムスタンプです。
これは、システムがどれだけデータの処理を進めたかを示す「動くチェックポイント」のようなものだと考えることができます。
「イベント時間」と「処理時間」
ウォーターマークを理解するには、ストリーム処理における 2 種類の「時間」を区別する必要があります。
- イベント時間 (Event Time):データが実際に発生した時刻です。例えば、ユーザーがモバイルアプリでボタンをタップした時刻や、センサーが温度を記録した時刻を指します。
- 処理時間 (Processing Time):そのデータが Dataflow パイプラインのシステムに到着し、処理された時刻です。
Dataflow は原則として、システムに到着した順(処理時間)ではなく、データが実際に発生した順(イベント時間)に基づいてデータを処理しようとします。ウォーターマークは、この「イベント時間」の進捗を追跡します。
ウォーターマークの主な役割:ウィンドウ処理
ストリーミング処理では、「5分ごと」や「1時間ごと」のようにデータを時間的な区間(ウィンドウ)に区切って集計することが一般的です。
ウォーターマークの主な役割は、このウィンドウ処理において「いつ集計を確定すべきか」を決定することです。
例えば、「10:00~10:05」の 5 分間のウィンドウでデータを集計しているとします。Dataflow は、ウォーターマークの時刻が「10:05」を通過するまで待ちます。ウォーターマークが 10:05 を通過すると、Dataflow は「10:05 までのデータはすべて揃ったはずだ」と判断し、このウィンドウの集計結果を確定させて下流に送ります。
「遅延データ」の扱い
Dataflow がウォーターマークに基づいて「完了」と判断した後(例:ウォーターマークが 10:05 を通過した後)に、10:03 のような古いイベント時間のデータが到着することがあります。
このデータは「遅延データ (Late Data)」と呼ばれます。
Dataflow (Apache Beam SDK) では、トリガー (Triggers) という仕組みと組み合わせて、この遅RTPデータをどのように扱うか(破棄するのか、あるいは集計結果を修正するために再度処理するのか)を柔軟に定義することができます。
Dataflow のウォーターマークのまとめ
Dataflow のウォーターマークは、ストリーミング処理において「どの時点までのデータを受け取ったか」を示す重要な指標です。イベント時間と処理時間のずれを吸収し、データの順序が乱れても正確な集計を可能にします。
特にウィンドウ処理では、ウォーターマークが特定時刻を通過した時点で集計を確定し、結果を出力します。
遅れて届いたデータ(遅延データ)は、トリガー設定により再集計や破棄など柔軟に制御できます。
これにより Dataflow は、リアルタイムデータの正確性と一貫性を両立した高精度なストリーム処理を実現します。
Dataflow の権限ガイド
Dataflow でデータパイプラインを安全かつ確実に実行するには、IAM (Identity and Access Management) による適切な権限設定が不可欠です。
Dataflow の権限管理は、主に 3 種類の ID(プリンシパル)と、それぞれに割り当てられるロール(役割)によって構成されます。
1. ユーザー アカウント(ジョブの管理者)
これは、Dataflow ジョブの作成、実行、モニタリング、キャンセルといった操作を行う開発者や管理者のアカウント、あるいは CI/CD パイプラインが使用するサービス アカウントを指します。
必要な主なロール
roles/dataflow.developer(Dataflow 開発者):ジョブの実行と操作に必要な権限を提供します。ジョブの作成、キャンセル、更新、モニタリングが可能です。roles/dataflow.admin(Dataflow 管理者):developer の全権限に加え、テンプレートの作成など、より広範な管理権限を持ちます。roles/iam.serviceAccountUser(サービス アカウント ユーザー):(後述の)ワーカー サービス アカウントとしてジョブを実行するために、多くの場合このロールが追加で必要になります。
2. Dataflow サービス エージェント(Dataflow サービス自体)
これは、Dataflow サービス自体がユーザーのプロジェクト内でリソースを管理するために使用する、Google が管理する特別なサービス アカウントです。
- ID の例:service-<プロジェクト番号>@dataflow-service-producer-prod.iam.gserviceaccount.com
- 必要なロール:roles/dataflow.serviceAgent
このロールは、Dataflow が Compute Engine のワーカー VM を起動したり、ネットワーク設定を構成したりするために必要です。通常、Dataflow API を有効にすると自動的にプロジェクトに付与されます。
3. ワーカー サービス アカウント(ジョブの実行者)
これは、Dataflow の権限設定において最も重要かつ、ユーザーによるカスタマイズが最も必要なアカウントです。
このサービス アカウントは、Dataflow ジョブを実行するために起動される Compute Engine ワーカー (VM) の ID として機能します。ワーカーがパイプラインの処理(データの読み書き)を行うために必要なすべての権限を持つ必要があります。
必要なロール(最小構成)
- roles/dataflow.worker (Dataflow ワーカー):ワーカー VM が Dataflow サービスと通信し、作業単位(タスク)を受け取ったり、ステータスを報告したりするために必須のロールです。
<注意点>
roles/dataflow.worker ロールだけでは、パイプラインが Cloud Storage、BigQuery、Pub/Sub などの他の Google Cloud サービスからデータを読み書きする権限は含まれていません。
<必要な追加ロール(一般的な例)>
ワーカー サービス アカウントには、パイプラインがアクセスするすべてのリソースに対する権限を明示的に付与する必要があります。
- Cloud Storage へのアクセス
- roles/storage.objectAdmin (オブジェクトの読み取り、書き込み、削除)
- または roles/storage.objectViewer (読み取りのみ)
- BigQuery へのアクセス
- roles/bigquery.dataEditor (データの読み取りと書き込み)
- または roles/bigquery.dataViewer (読み取りのみ)
- Pub/Sub へのアクセス
- roles/pubsub.subscriber (トピックからの読み取り)
- または roles/pubsub.publisher (トピックへの書き込み)
Dataflow の権限ガイドのまとめ
Dataflow の権限設定は、安全で信頼性の高いデータパイプラインを構築するための基盤です。
権限は主に「ユーザーアカウント」「Dataflow サービスエージェント」「ワーカーサービスアカウント」の3種類の ID によって管理されます。
特にワーカーサービスアカウントは、パイプライン実行時にリソースへアクセスするための中心的な役割を担います。
roles/dataflow.worker に加えて、Cloud Storage や BigQuery、Pub/Sub などの各サービスに必要なロールを明示的に付与することが重要です。
適切な IAM 設計により、Dataflow ジョブのセキュリティと運用の安定性を確保できます。
まとめ
今回は、下記3点について説明しました。
- AlloyDB for PostgreSQL
- Dataflow のウォーターマーク
- Dataflow の権限ガイド
AlloyDB for PostgreSQL は、高性能かつクラウドネイティブな次世代データベースとして、AI 活用や大規模処理に強みを発揮します。一方、Dataflow ではウォーターマークにより、リアルタイムデータの正確な集計と一貫性を維持したストリーミング処理が可能となります。さらに IAM 設計では、サービスアカウントごとの役割を正しく設定することで、安全かつ安定したデータパイプライン運用が実現します。
これらの技術を組み合わせることで、モダンなクラウドデータアーキテクチャをより堅牢かつ柔軟に構築できます。
これからも、Macのシステムエンジニアとして、日々、習得した知識や経験を発信していきますので、是非、ブックマーク登録してくれると嬉しいです!
それでは、次回のブログで!
