Google Cloud での Apache Airflow ETL
Jaeyeon Baek
Google Cloud Champion Innovator
Max Saltonstall
Developer Advocate
※この投稿は米国時間 2024 年 9 月 19 日に、Google Cloud blog に投稿されたものの抄訳です。
Google Cloud での Apache Airflow の実行を検討中ですか?これは、抽出、変換、読み込み(ETL)やデータ分析パイプラインなど、複雑なタスク群を実行する際によく採用される人気の選択肢です。Apache Airflow は、有向非巡回グラフ(DAG)使用して、ワークフローの複数のタスクに対する順序付け、関連付けを行います。これには、指定された時間に目的のタスクを実行するスケジュール設定も含まれ、スケジュール設定と依存関係のグラフ化を実行する優れた方法を提供します。
では、Google Cloud で Apache Airflow を実行するにはどのような方法があるのでしょうか?間違った選択をすると、インフラストラクチャに障害が発生する、あるいは開発環境、ステージング環境、本番環境など、多くの環境を作成する必要が生じるなど、可用性が低下したり、費用が増大したりする可能性があります。この投稿では、Google Cloud 上で Apache Airflow を実行する 3 つの方法を紹介し、各アプローチの長所と短所について説明します。それぞれのアプローチについて、GitHub にある Terraform コードを記載しているので、ぜひご自分で試してみてください。
注: この記事で使用されている Terraform はディレクトリ構造になっています。modules 配下のファイルは、Terraform が提供するデフォルトのコードと形式は変わりません。開発者の方は、modules ディレクトリを一種のライブラリとしてお考えください。main.tf ファイルには実際のビジネスコードが配置されます。開発を行っているところをイメージしてください。main.tf から始め、共通して使用するコードを modules や library などのディレクトリに配置します。
では、Apache Airflow を実行する 3 つの方法を見ていきましょう。
1: Compute Engine
Google Cloud で Airflow を実行する一般的な方法は、Compute Engine VM インスタンスに Airflow を直接インストールして実行するというものです。この方法には次のような利点があります。
-
他の方法よりも低コスト。
-
仮想マシンの知識しか必要ない。
一方で、次のような欠点もあります。
-
仮想マシンのメンテナンスが必要。
-
可用性がより低い。
欠点が大きくなる可能性もありますが、Airflow の導入を検討している場合は Compute Engine を使用することで手っ取り早く概念実証を行えます。
まず、次の Terraform コードを使用して Compute Engine インスタンスを作成します(簡潔にするために、一部コードを省略しています)。allow はファイアウォールの設定です。8080 は Airflow ウェブが使用するデフォルトのポートなので、開いておく必要があります。他の設定は自由に変更してください。
上記の main.tf で source
として呼び出している google_compute_engine
ディレクトリには次のファイルと、先ほど渡した値を受け取って実際にインスタンスを生成するコードがあります。machine_type
をどのように取得しているかに注目してください。
上で記述したコードを Terraform で実行します。
しばらくすると、Compute Engine にインスタンスが作成されます。次に、インスタンスに接続して Airflow をインストールする必要があります。手順については、公式ドキュメントを参照してください。インストールが完了したら、Airflow を実行します。
これでブラウザから Airflow にアクセスできるようになりました。Compute Engine で Airflow を実行する場合は、ファイアウォールの設定に特に注意が必要です。パスワードが侵害されても、承認済みのユーザーのみがアクセスできるようにする必要があります。今回はデモなので、最小限のファイアウォール設定でアクセスできるようにしています。
ログインすると、以下のような画面が表示されます。Airflow が提供する DAG のサンプルも表示されます。画面を確認してみてください。


2: GKE Autopilot
Google Cloud で Apache Airflow を実行する 2 つ目の方法は Kubernetes を使用することです。Google のマネージド Kubernetes サービスである Google Kubernetes Engine(GKE)を使用すると、非常に簡単に実行できます。また、GKE Autopilot の運用モードを使用することもでき、コンピューティング リソースの枯渇を回避し、ニーズに応じてクラスタを自動的にスケーリングできます。GKE Autopilot はサーバーレスなので、独自の Kubernetes ノードを管理する必要はありません。


GKE Autopilot は高い可用性とスケーラビリティを提供します。また、強力な Kubernetes エコシステムも活用できます。たとえば、kubectl コマンドを使用してワークロードをきめ細かく管理し、クラスタ内の他のビジネス サービスと一緒にモニタリングできます。ただし、Kubernetes の知識にあまり精通していない場合、このアプローチでは Airflow に集中するのではなく、Kubernetes の管理に多くの時間を費やすことになります。
では、まず GKE Autopilot クラスタを作成します。Terraform モジュールが最小限のセットアップを実行してくれます。
modules/google_kubernetes_engine.tf ファイルは次のように構成されています。enable_autopilot
設定が True になっており、ネットワークを作成するコードがあることに注目してください。完全なコードは GitHub で確認できます。
さあ、もう終わりました。次に、生成されたコードを実行して GKE Autopilot クラスタを作成します。
次に、kubectl コマンドを使用して GKE Autopilot のステータスを確認できるように、クラスタ アクセスを構成する必要があります。関連する構成については、公式ドキュメントのリンクを参照してください。
では、作成した GKE Autopilot クラスタに Helm 経由で Airflow をデプロイします。
Terraform 経由で再度デプロイします。
ここで、kubectl コマンドを実行すると、次のような結果が表示されます。
Pod が稼働していることを確認したら、Airflow ウェブアクセスにポート転送します。
次に、ブラウザで localhost:8080 に接続してみます。
Airflow 設定をカスタマイズする場合は、Helm チャートを変更する必要があります。これを行うには、Airflow manifests.yaml ファイルをダウンロードして管理します。以下のように、values
設定で値を設定できます。yaml ファイルに repo
、branch
などの変数が設定されていることを確認してください。
3: Cloud Composer
3 つ目の方法は、Google Cloud のフルマネージド データ ワークフロー オーケストレーション サービスである、Cloud Composer を使用することです。マネージド サービスである Cloud Composer を使用することで Airflow を非常に簡単に実行でき、Airflow が実行されるインフラストラクチャについて心配する必要がなくなります。ただし、選択肢は少なくなります。たとえば、まれな状況として、DAG 間でストレージを共有できない場合があります。また、CPU とメモリの使用量をカスタマイズする機能が高くないため、これらの使用量のバランスをとる必要が生じるかもしれません。
以下のコードをご覧ください。
modules ディレクトリに保存されているファイルを見てみると、environment_size
が引き継がれ、使用されていることがわかります。
ちなみに、以下のように validation
に条件を設定することで、値を渡すときに有効な値をあらかじめ設定しておくこともできます。
Cloud Composer はカスタムモードもサポートしていることに注意してください。このモードは、他のクラウド サービス プロバイダのマネージド Airflow サービスとは異なります。ENVIRONMENT_SIZE_SMALL、ENVIRONMENT_SIZE_MEDIUM、ENVIRONMENT_SIZE_LARGE といった標準的な環境を指定するだけでなく、CPU やメモリを直接制御することもできます。
それでは、Terraform にデプロイしてみましょう。
ここで、Google Cloud コンソールに移動して Composer メニューを確認すると、作成したばかりのリソースが表示されます。


最後に、上の Airflow ウェブサーバー エントリへのリンクをクリックして、Airflow に接続します。適切な IAM 権限がある場合は、次のような画面が表示されます。


まとめ
Airflow を本番環境で実行する場合は、費用、パフォーマンス、可用性の 3 点を考慮する必要があります。この記事では、Google Cloud で Apache Airflow を実行する 3 つの異なる方法について説明しました。それぞれの方法には個性、長所、短所があります。
なお、これらは Airflow 環境を選択するための最小基準です。Airflow でサイド プロジェクトを実行している場合は、Python でコーディングして DAG を作成するだけで十分かもしれません。ただし、Airflow を本番環境で実行する場合は、Airflow のコア(同時実行性、並列処理、SQL プールのサイズなど)、エグゼキュータ(LocalExecutor、CeleryExecutor、KubernetesExecutor、…)なども適切に構成する必要があります。この記事が Airflow 環境の選択を検討している方の参考になれば幸いです。完全なコードを GitHub でぜひ確認してみてください。
ー Google Cloud Champion Innovator 担当 Jaeyeon Baek
ー Google Cloud、デベロッパー リレーション エンジニア Max Saltonstall