Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3
このチュートリアルは、Cloud Composer 環境を Amazon Web Services に接続して、そこに格納されているデータを利用する方法を説明している、Google Cloud でデータ分析 DAG を実行するの修正版です。Cloud Composer を使用して Apache Airflow DAG を作成する方法について説明します。DAG は、BigQuery 一般公開データセットと Amazon Web Services(AWS)S3 バケットに保存されている CSV ファイルのデータを結合してから、Dataproc サーバーレス バッチジョブを実行して結合されたデータを処理します。
このチュートリアルの BigQuery 一般公開データセットは、世界中の気候統合データベースである ghcn_d です。CSV ファイルには、1997 年から 2021 年までの米国の祝日の日付と名前に関する情報が含まれています。
DAG を使用して答えを得たい質問は、「この 25 年間で感謝祭のシカゴはどのくらい温かかったか」というものです。
目標
- デフォルト構成で Cloud Composer 環境を作成する
- AWS S3 にバケットを作成する
- 空の BigQuery データセットを作成する
- Cloud Storage バケットを新規作成する
- 次のタスクを含む DAG を作成、実行します。
- 外部データセットを S3 から Cloud Storage に読み込む
- 外部データセットを Cloud Storage から BigQuery に読み込む
- BigQuery で 2 つのデータセットを結合する
- データ分析 PySpark ジョブを実行する
準備
AWS で権限を管理する
IAM ポリシー作成の AWS チュートリアルの「ビジュアル エディタでのポリシーの作成」セクションに従って、次の構成で AWS S3 用にカスタマイズされた IAM ポリシーを作成します。
- サービス: S3
- ListAllMyBuckets(
s3:ListAllMyBuckets
)、S3 バケット表示のため - CreateBucket(
s3:CreateBucket
)、バケット作成のため - PutBucketPersistenceControls(
s3:PutBucketOwnershipControls
)、バケット作成のため - ListBucket(
s3:ListBucket
)、S3 バケット内のオブジェクトを一覧表示する権限を付与するため - PutObject(
s3:PutObject
): バケットにファイルをアップロードするため - GetBucketVersioning(
s3:GetBucketVersioning
)、バケット内のオブジェクトを削除するため - DeleteObject(
s3:DeleteObject
): バケット内のオブジェクトを削除するため - ListBucketVersions(
s3:ListBucketVersions
)、バケット削除のため - DeleteBucket(
s3:DeleteBucket
)、バケット削除のため - リソース: [バケット] と [オブジェクト] の横にある [Any] を選択して、そのタイプのすべてのリソースに対する権限を付与します。
- タグ: なし
- 名前: TutorialPolicy
上記の各構成の詳細については、Amazon S3 でサポートされているアクションのリストをご覧ください。
API を有効にする
次の API を有効にします。
コンソール
Enable the Dataproc, Cloud Composer, BigQuery, Cloud Storage APIs.
gcloud
Enable the Dataproc, Cloud Composer, BigQuery, Cloud Storage APIs:
gcloud services enable dataproc.googleapis.comcomposer.googleapis.com bigquery.googleapis.com storage.googleapis.com
権限を付与する
ユーザー アカウントに次のロールと権限を付与します。
BigQuery データオーナー(
roles/bigquery.dataOwner
)のロールを付与して、BigQuery データセットを作成します。ストレージ管理者(
roles/storage.admin
)のロールを付与して、Cloud Storage バケットを作成します。
Cloud Composer 環境の作成と準備
デフォルト パラメータを使用して Cloud Composer 環境を作成します。
- 米国のリージョンを選択します。
- 最新の Cloud Composer バージョンを選択します。
Airflow ワーカーが DAG タスクを正常に実行するために、Cloud Composer 環境で使用されるサービス アカウントに次のロールを付与します。
- BigQuery ユーザー(
roles/bigquery.user
) - BigQuery データオーナー(
roles/bigquery.dataOwner
) - サービス アカウント ユーザー(
roles/iam.serviceAccountUser
) - Dataproc 編集者(
roles/dataproc.editor
) - Dataproc ワーカー(
roles/dataproc.worker
)
- BigQuery ユーザー(
Google Cloud で関連リソースを作成して変更する
Cloud Composer 環境に
apache-airflow-providers-amazon
PyPI パッケージをインストールします。次のパラメータを使用して空の BigQuery データセットを作成します。
- 名前:
holiday_weather
- リージョン:
US
- 名前:
US
マルチリージョンで新しい Cloud Storage バケットを作成します。次のコマンドを実行して、ネットワーキングの要件を満たすために Dataproc サーバーレスを実行するリージョン内のデフォルト サブネットで限定公開の Google アクセスを有効にします。Cloud Composer 環境と同じリージョンを使用することをおすすめします。
gcloud compute networks subnets update default \ --region DATAPROC_SERVERLESS_REGION \ --enable-private-ip-google-access
AWS で関連リソースを作成する
目的のリージョンにデフォルト設定でS3 バケットを作成します。
Cloud Composer から AWS に接続する
- AWS アクセスキー ID とシークレット アクセスキーを取得する
Airflow UI を使用して AWS S3 接続を追加する
- [管理者] > [接続] に移動します。
次の構成で新しい接続を作成します。
- 接続 ID:
aws_s3_connection
- 接続タイプ:
Amazon S3
- 補足:
{"aws_access_key_id":"your_aws_access_key_id", "aws_secret_access_key": "your_aws_secret_access_key"}
- 接続 ID:
Dataproc サーバーレスを使用したデータ処理
サンプル PySpark のジョブを確認する
次のコードは、温度を摂氏 10 分の 1 の度数から摂氏度数に変換する PySpark ジョブの例です。このジョブは、データセットの温度データを別の形式に変換します。
PySpark ファイルを Cloud Storage にアップロードします。
PySpark ファイルを Cloud Storage にアップロードします。
data_analytics_process.py をローカルマシンに保存します。
Google Cloud コンソールで、Cloud Storage ブラウザページに移動します。
前の手順で作成したバケットの名前をクリックします。
バケットの [オブジェクト] タブで、[ファイルをアップロード] ボタンをクリックし、表示されたダイアログで
data_analytics_process.py
を選択し、[開く] をクリックします。
CSV ファイルを AWS S3 にアップロードする
holidays.csv
ファイルをアップロードするには:
- ローカルマシンに
holidays.csv
を保存する。 - AWS ガイドに沿って、ファイルをバケットにアップロードします。
データ分析 DAG
DAG の例を確認する
DAG は複数の演算子を使用してデータを変換し、統合します。
S3ToGCSOperator
は、holidays.csv ファイルを AWS S3 バケットから Cloud Storage バケットに転送します。GCSToBigQueryOperator
は、Cloud Storage からの holidays.csv ファイルを、前の手順で作成した BigQueryholidays_weather
データセット内の新しいテーブルに取り込みます。DataprocCreateBatchOperator
は、Dataproc Serverless を使用して PySpark バッチジョブを作成して実行します。BigQueryInsertJobOperator
は、[日付] 列の holidays.csv のデータを BigQuery 一般公開データセット ghcn_d の気象データと結合します。BigQueryInsertJobOperator
タスクは for ループを使用して動的に生成されます。また、これらのタスクはTaskGroup
にあるため、Airflow UI のグラフビューで読みやすくなります。
Airflow UI を使用して変数を追加する
Airflow における変数は、任意の設定や構成をシンプルな Key-Value ストアとして保存および取得するためのユニバーサルな方法です。この DAG は Airflow 変数を使用して共通値を保存します。これらの変数を環境に追加するには、次のようにします。
[管理] > [変数] に移動します。
次の変数を追加します。
s3_bucket
: 前に作成した S3 バケットの名前。gcp_project
: プロジェクト ID。gcs_bucket
: 前の手順で作成したバケットの名前(gs://
接頭辞は付けない)。gce_region
: Dataproc サーバーレス ネットワーキングの要件を満たす Dataproc ジョブを配置するリージョン。 これは、以前の手順で限定公開の Google アクセスを有効にしたリージョンです。dataproc_service_account
: Cloud Composer 環境のサービス アカウント。このサービス アカウントは、Cloud Composer 環境の [環境の構成] タブで確認できます。
DAG ファイルを環境のバケットにアップロードする
Cloud Composer がスケジュールを設定するのは、環境のバケット内の /dags
フォルダにある DAG です。Google Cloud コンソールを使用して DAG をアップロードするには:
ローカルマシンに s3togcsoperator_tutorial.py を保存します。
Google Cloud Console で [環境] ページに移動します。
環境のリストで、[DAG フォルダ] 列の [DAG] リンクをクリックします。環境の DAG フォルダが開きます。
[ファイルをアップロード] をクリックします。
ローカルマシン上の
s3togcsoperator_tutorial.py
を選択して、[開く] をクリックします。
DAG をトリガーする
Cloud Composer 環境で [DAG] タブをクリックします。
DAG ID
s3_to_gcs_dag
をクリックします。[DAG をトリガー] をクリックします。
タスクが正常に完了したことを示す緑色のチェックマークが表示されるまで、5~10 分待ちます。
DAG の成功を確認する
Google Cloud コンソールで [BigQuery] ページに移動します。
[エクスプローラ] パネルでプロジェクト名をクリックします。
[
holidays_weather_joined
] をクリックします。プレビューをクリックして、結果のテーブルを確認します。値列の数値は、10 分の 1 の摂氏度数です。
[
holidays_weather_normalized
] をクリックします。プレビューをクリックして、結果のテーブルを確認します。値列の数値は、摂氏度数です。
クリーンアップ
このチュートリアル用に作成した個々のリソースを削除します。
AWS S3 バケット内の
holidays.csv
ファイルを削除します。作成した AWS S3 バケットを削除します。
このチュートリアル用に作成した Cloud Storage バケットを削除します。
Cloud Composer 環境を削除します(環境のバケットを手動で削除します)。