コンテンツに移動
データ分析

Google Cloud での Apache Airflow ETL

2024年10月3日
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 を直接インストールして実行するというものです。この方法には次のような利点があります。

  1. 他の方法よりも低コスト。

  2. 仮想マシンの知識しか必要ない。

一方で、次のような欠点もあります。

  1. 仮想マシンのメンテナンスが必要。

  2. 可用性がより低い。

欠点が大きくなる可能性もありますが、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 のサンプルも表示されます。画面を確認してみてください。

https://storage.googleapis.com/gweb-cloudblog-publish/images/image-1_Sb5hX9I.max-1600x1600.png

2: GKE Autopilot

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

https://storage.googleapis.com/gweb-cloudblog-publish/images/image-2_QgOFYoJ.max-1200x1200.png

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 メニューを確認すると、作成したばかりのリソースが表示されます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/image-3_43FATK2.max-1100x1100.png

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

https://storage.googleapis.com/gweb-cloudblog-publish/images/image-4_ExrZF7D.max-1600x1600.png

まとめ

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

投稿先