Cloud Service
Cloud Composer
Apache Airflow をマネージドで提供し、DAG でワークフローのスケジュール実行と依存関係管理を行う GCP のオーケストレーション基盤。AWS の MWAA に相当。
- 1.Apache Airflow をマネージド提供。DAG でタスクの依存と再試行を制御。
- 2.環境のスケール・パッチ・スケジューラ運用を肩代わりし、Python で記述。
- 3.AWS の MWAA 相当。GCP 各サービスへの連携オペレータが豊富。
解決する課題
- 複数ステップから成るデータパイプラインを、依存関係・順序・再試行つきで確実に実行したい
- BigQuery、Dataflow、Dataproc、Cloud Storage など複数サービスをまたぐ処理を一元的にオーケストレーションしたい
- cron や自前スクリプトで散在したバッチ処理の運用を、可視化・履歴・アラートとともに集中管理したい
- Airflow を使いたいが、スケジューラやワーカーのインフラ運用・パッチ・スケールから解放されたい
主要概念と用語
- DAG(有向非巡回グラフ): ワークフローの定義単位。複数のタスクとその依存関係を Python コードで表現する。循環しない(後戻りしない)順序を持つ
- タスク / オペレータ: DAG を構成する個々の処理がタスクで、その実体がオペレータ。
BigQueryInsertJobOperatorやDataflowTemplatedJobStartOperatorなど、GCP 連携用が多数用意されている - スケジューラ / ワーカー / Web サーバー: DAG を解析して実行時刻を判定するスケジューラ、タスクを実際に動かすワーカー、UI を提供する Web サーバー。Composer はこれらをマネージドで構成する
- 環境(Environment): Composer がプロビジョニングする Airflow 一式。GKE クラスタや Cloud Storage バケットなどの裏側リソースを含む管理単位
- DAG バケット: DAG ファイルを配置する Cloud Storage バケット。ここに Python ファイルを置くと環境へ同期される
- 接続(Connection)/ 変数(Variable): 外部システムの認証情報やエンドポイントをまとめた接続、DAG 間で共有する設定値の変数。コードに直書きせず管理する
- XCom: タスク間で小さな値を受け渡す仕組み。大きなデータの受け渡しには使わず、参照(パスやジョブID)を渡すのが定石
仕様・制限・クォータ
- Composer にはメジャーバージョンの世代があり、新しい世代ではスケジューラやワーカーのスケーリングがより自律的になる。新規構築では原則として最新世代を選ぶ
- 環境は内部で GKE とマネージドな Airflow コンポーネントから構成され、ワーカー数や CPU・メモリを設定で調整できる。世代によっては負荷に応じた自動スケールに対応する
- DAG の解析間隔やタスクの最大同時実行数などは Airflow 構成(
airflow.cfg相当の上書き)で調整する。DAG 解析が重いと反映が遅延するため、ファイル先頭での重い処理は避ける - Airflow のバージョンや Python パッケージは環境ごとに固定され、依存ライブラリは PyPI からの追加インストールで管理する。値が変動するクォータ・上限は公式ドキュメントで最新を確認する
内部の仕組み
Composer 環境を作成すると、裏側で GKE クラスタ上に Airflow のスケジューラ・ワーカー・Web サーバーなどがデプロイされ、メタデータを保持するデータベースと、DAG・ログ・プラグインを置く Cloud Storage バケットがセットで構成されます。利用者はこのバケットへ DAG の Python ファイルを置くだけでよく、クラスタの管理は Composer が担います。
スケジューラはバケット内の DAG を定期的に解析し、各 DAG のスケジュールに基づいて実行(DAG Run)を生成します。生成されたタスクはキューを介してワーカーへ割り当てられ、オペレータが実際の処理を実行します。GCP 連携オペレータは内部で各サービスの API を呼び出し、ジョブの完了をポーリングしながら成否を判定します。失敗時はタスク単位で再試行され、依存タスクは前段の成功を待ってから走ります。
重い変換や集計そのものは Composer 上で回すのではなく、BigQuery や Dataflow / Dataproc に委譲するのが基本です。Composer は「いつ・どの順で・どのサービスに投げるか」を司る指揮者であり、ワーカーで大量データを直接処理すると環境が逼迫します。
設計パターン / ベストプラクティス
- DAG は冪等に設計する。同じ実行日(論理日付)で再実行しても結果が二重にならないよう、出力先をパーティションや実行日で分離する
- 重い処理は Composer のワーカーで行わず、BigQuery / Dataflow / Dataproc へ委譲し、Composer は起動と完了監視に徹する
- タスク間の値の受け渡しは XCom で参照のみにとどめ、実データはオブジェクトストレージや BigQuery を経由させる
- 認証情報は DAG にハードコードせず、接続 / 変数または Secret Manager で管理する
- DAG ファイル冒頭での重い import・API 呼び出しを避け、解析を軽量に保つ。タスク本体の処理は実行時に行う
- 再試行回数・再試行間隔・タイムアウトをタスクに明示し、失敗時の挙動を制御する
運用・監視
- Airflow UI で DAG の実行状況、タスクのリトライ、失敗箇所、所要時間を可視化する。ツリービューやグラフビューで依存と進捗を確認する
- メトリクスとログは Cloud Monitoring / Cloud Logging に統合され、スケジューラの健全性、ワーカーのリソース使用率、DAG の実行失敗をアラート化できる
- スケジューラのハートビートが滞る、DAG 解析時間が長い、タスクがキューで滞留するといった兆候はワーカー不足や解析過負荷のサイン。ワーカー数・並列度・解析間隔を見直す
- DAG・ログは Cloud Storage バケットに蓄積されるため、古いログの保持とコストのバランスを管理する
コスト
| コスト要素 | 課金の考え方 | 抑え方 |
|---|---|---|
| 環境の常時稼働 | スケジューラ・Webサーバー等が動き続ける基盤費用 | 用途が近いDAGを集約し環境数を絞る |
| ワーカー | 割り当てたvCPU・メモリ・台数に応じた費用 | 自動スケール対応世代で需要に追従させる |
| 裏側のGKE / ストレージ | クラスタやバケット等のインフラ費用 | 不要環境を削除しログ保持期間を最適化 |
| 委譲先サービス | BigQueryやDataflow側で別途発生 | 処理本体は委譲先で最適化する |
Composer 環境は常駐コンポーネントを持つため、DAG を実行していなくても起動している限り基盤費用が発生します。開発・検証用の環境は使わないときに削除し、本番では複数チームの DAG を少数の環境に集約してアイドルコストを抑えるのが定石です。
セキュリティ
- 環境とワーカーにはサービスアカウントを割り当て、最小権限の IAM ロールで連携先サービスへのアクセスを制御する(AWS の IAM ロール相当)。鍵の埋め込みは避ける
- 機密情報は DAG に直書きせず、Airflow の接続 / 変数または Secret Manager で管理する
- ネットワークはプライベート IP 環境を選び、必要に応じて承認済みネットワークや VPC Service Controls で外部到達・データ流出を制限する
- Airflow UI へのアクセスは IAM と Identity-Aware Proxy で認可し、誰がどの環境を操作できるかを制御する
サービスアカウントキー(JSON)や DB パスワードを DAG ファイルに直書きして DAG バケットへ置くのは NG。バケットの閲覧権限を持つ全員に漏れます。認証はワークロードに紐づくサービスアカウントへ寄せ、秘密値は Secret Manager 経由で参照してください。
Well-Architected の観点
- 運用上の優秀性(operational): ワークフローをコード(DAG)として管理することで、レビュー・バージョン管理・再現性が得られる。実行履歴・ログ・アラートが標準で揃い、障害時の原因追跡と再試行が容易になる。スケジューラやインフラの運用を Composer が肩代わりするため、チームはパイプラインのロジックに集中できる
試験で問われるポイント
- 「複数の GCP サービスをまたぐバッチ処理をスケジュール・依存管理したい」→ Cloud Composer(マネージド Airflow)。単一の単純なトリガなら Cloud Scheduler や Workflows も検討
- Composer はオーケストレータであり、重い処理は BigQuery / Dataflow / Dataproc に委譲するのが正解パターン
- ワークフローは DAG(有向非巡回グラフ) として Python で記述し、オペレータで各サービスを呼び出す
- 環境は常時稼働で課金される点、機密情報は接続 / 変数 / Secret Manager で管理する点が問われやすい
- AWS との対応は Cloud Composer = Amazon MWAA(マネージド Airflow)。サーバーレスなステップ実行は AWS Step Functions が近い
関連サービス・比較
| 観点 | GCP(Cloud Composer) | AWS(MWAA / Step Functions) |
|---|---|---|
| 実体 | マネージド Apache Airflow | MWAAがマネージドAirflow |
| 記述方法 | DAG(Python) | MWAAはDAG、Step FunctionsはステートマシンJSON |
| 向く用途 | 複数サービス連携のデータパイプライン | 同様のワークフロー / サーバーレス連携 |
| 課金モデル | 環境の常時稼働+ワーカー | MWAAは環境稼働、Step Functionsは実行回数 |
| 軽量な代替 | Workflows / Cloud Scheduler | Step Functions / EventBridge Scheduler |
| 権限付与 | サービスアカウント + IAM | IAMロール |
Composer は Airflow 由来の豊富なオペレータと複雑な依存・再試行に強く、データエンジニアリングの定番。一方、軽量でサーバーレスな API オーケストレーションなら Workflows、単純な定時起動だけなら Cloud Scheduler が低コストです。常駐コストを避けたい小規模用途で Composer を選ぶ必要はありません。
ハンズオン / CLI例
# 1) Composer 環境を作成(世代やリージョンは要件に合わせる)
gcloud composer environments create my-env \
--location=asia-northeast1 \
--image-version=composer-2-airflow-2
# 2) DAG の同期先バケットを確認
gcloud composer environments describe my-env \
--location=asia-northeast1 \
--format="value(config.dagGcsPrefix)"
# 3) ローカルの DAG ファイルを環境へアップロード(バケットに同期される)
gcloud composer environments storage dags import \
--environment=my-env \
--location=asia-northeast1 \
--source=./my_pipeline.py
# 4) 環境内で Airflow CLI を実行して DAG 一覧を確認
gcloud composer environments run my-env \
--location=asia-northeast1 \
dags list
Google Cloud Service
Cloud Composerを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
分析
比較で見る軸
クラウド: Google Cloud / カテゴリ: 分析 / 難易度: intermediate
導入後に効く点
環境のスケール・パッチ・スケジューラ運用を肩代わりし、Python で記述。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- Google Cloud
- カテゴリ
- 分析
- 難易度
- intermediate
- 関連資格
- —
- 設計柱
- operational
判断チェックリスト
- 自社の用途が「分析 / operational」に近いか確認する。
- 強みである「Apache Airflow をマネージド提供。DAG でタスクの依存と再試行を制御。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。