Cloud Composer 1 | Cloud Composer 2
Apache Airflow には REST API インターフェースがあり、DAG 実行とタスクに関する情報の取得、DAG の更新、Airflow 構成の取得、接続の追加と削除、ユーザーの一覧表示などのタスクを実行に使用できます。
Cloud Functions で Airflow REST API を使用する例については、Cloud Functions を使用した DAG のトリガーをご覧ください。
Airflow REST API のバージョン
Cloud Composer 1 では次の Airflow REST API バージョンを使用できます。
- Airflow 1 は、試験運用版の REST API を使用します。
Airflow 2 は、安定版の REST API を使用します。試験運用版の REST API の Airflow によるサポートは終了しました。
Airflow 構成のオーバーライド経由で有効にすると、試験運用版の REST API を引き続き Airflow 2 で使用できます。詳細については、以下をご覧ください。
始める前に
Cloud Composer API を有効にします。
安定版の Airflow REST API を有効にする
Airflow 2
安定版の REST API は、Airflow 2 でデフォルトですでに有効になっています。
Cloud Composer では、Identity-Aware Proxy と統合された独自の API 認証バックエンドが使用されます。認可は、Airflow が提供する標準の方法で機能します。新しいユーザーが API を使用して認可すると、デフォルトで、ユーザーのアカウントに Op
ロールが付与されます。
以下の Airflow 構成オプションをオーバーライドすることで、安定版の REST API を有効または無効にできます。また、デフォルトのユーザーロールを変更することもできます。
セクション | キー | 値 | 注 |
---|---|---|---|
api |
auth_backend |
airflow.composer.api.backend.composer_auth |
安定版の REST API を無効にするには、airflow.api.auth.backend.deny_all に変更します。 |
api |
composer_auth_user_registration_role |
Op |
その他のロールも指定できます。 |
Airflow 1
安定した REST API は、Airflow 1 では使用できません。代わりに、試験運用版の REST API を使用できます。
試験運用版の Airflow REST API を有効にする
Airflow 2
試験運用版 API では、API 認証機能はデフォルトで無効になっています。Airflow ウェブサーバーは、すべてのリクエストを拒否します。
API 認証機能と Airflow 2 試験運用版 API を有効にするには、次の Airflow 構成オプションをオーバーライドします。
セクション | キー | 値 | 注 |
---|---|---|---|
api |
auth_backend |
airflow.api.auth.backend.default |
デフォルトは airflow.composer.api.backend.composer_auth です。 |
api |
enable_experimental_api |
True |
デフォルト値は False です。 |
Airflow 1
Airflow 1.10.11 以降のバージョンでは API 認証機能がデフォルトで無効になっています。 Airflow ウェブサーバーは、すべてのリクエストを拒否します。リクエストを使用して DAG をトリガーするため、この機能を有効にします。
Airflow 1 で API 認証機能を有効にするには、次の Airflow 構成オプションをオーバーライドします。
セクション | キー | 値 | 注 |
---|---|---|---|
api |
auth_backend |
airflow.api.auth.backend.default |
デフォルト値は airflow.api.auth.backend.deny_all です。 |
api-auth_backend
構成オプションを airflow.api.auth.backend.default
に設定すると、Airflow ウェブサーバーは認証を行うことなくすべての API リクエストを受け入れます。Airflow ウェブサーバー自体は認証を必要としませんが、独自の認証レイヤを備える Identity-Aware Proxy によって保護されます。
Airflow REST API を呼び出す
IAM プロキシの client_id を取得する
Airflow REST API エンドポイントにリクエストを送信するには、Airflow ウェブサーバーを保護する IAM プロキシのクライアント ID が関数に必要です。
Cloud Composer は、この情報を直接提供しません。代わりに、認証されていないリクエストを Airflow ウェブサーバーに送信し、リダイレクト URL からクライアント ID を取得します。
cURL
curl -v AIRFLOW_URL 2>&1 >/dev/null | grep -o "client_id\=[A-Za-z0-9-]*\.apps\.googleusercontent\.com"
AIRFLOW_URL
を Airflow ウェブ インターフェースの URL に置き換えます。
出力で、client_id
に続く文字列を検索します。次に例を示します。
client_id=836436932391-16q2c5f5dcsfnel77va9bvf4j280t35c.apps.googleusercontent.com
Python
次のコードを get_client_id.py
というファイルに保存します。project_id
、location
、composer_environment
に値を入力してから、Cloud Shell またはローカル環境でコードを実行します。
client_id を使用して Airflow REST API を呼び出す
次の項目を置き換えます。
client_id
変数の値を、前の手順で取得したclient_id
の値に置き換えます。webserver_id
変数の値をテナント プロジェクト ID に置き換えます。これは、.appspot.com
より前の Airflow ウェブ インターフェース URL の一部です。前のステップで Airflow ウェブ インターフェース URL を取得しました。使用する Airflow REST API のバージョンを指定します。
- 安定版の Airflow REST API を使用する場合は、
USE_EXPERIMENTAL_API
変数をFalse
に設定します。 - 試験運用版の Airflow REST API を使用する場合、変更は必要ありません。
USE_EXPERIMENTAL_API
変数はすでにTrue
に設定されています。
- 安定版の Airflow REST API を使用する場合は、
サービス アカウントを使用して Airflow REST API にアクセスする
Airflow データベースでは、メール フィールドの長さが 64 文字に制限されています。サービス アカウントのメールアドレスが 64 文字を超える場合があります。通常の方法で、このようなサービス アカウントの Airflow ユーザーを作成することはできません。
回避策として、Airflow ユーザーをサービス アカウントに事前登録できます。それには、accounts.google.com:NUMERIC_USER_ID
をユーザー名として使用し、一意の文字列をメールとして使用します。
サービス アカウントの
NUMERIC_USER_ID
を取得するには、次のコマンドを実行します。gcloud iam service-accounts describe \ SA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --format="value(oauth2ClientId)"
次のように置き換えます。
SA_NAME
は、サービス アカウント名に置き換えます。PROJECT_ID
は、プロジェクト ID に置き換えます。
サービス アカウントの
Op
ロールを持つ Airflow ユーザーを作成します。Airflow UI
Airflow UI に移動します。Airflow ユーザーには
Admin
のロールが必要です。[管理者] > [ユーザー] に移動し、[作成] をクリックします。
ユーザー名として
accounts.google.com:NUMERIC_USER_ID
を指定します。NUMERIC_USER_ID
は、前の手順で取得したユーザー ID に置き換えます。メールアドレスとして一意の識別子を指定します。任意の一意の文字列を使用できます。
ユーザーのロールを指定します。例:
Op
ユーザーの姓と名を指定します。任意の文字列を使用できます。
[保存] をクリックします。
gcloud
Airflow 2 で、Airflow CLI コマンドを実行します。
gcloud composer environments run ENVIRONMENT_NAME \ --location LOCATION \ users create -- \ -u accounts.google.com:NUMERIC_USER_ID \ -e UNIQUE_ID \ -f UNIQUE_ID \ -l - -r Op --use-random-password
次のように置き換えます。
ENVIRONMENT_NAME
を環境の名前にする。LOCATION
は、環境が配置されているリージョン。NUMERIC_USER_ID
は、前のステップで取得したユーザー ID に置き換えます。UNIQUE_ID
は Airflow ユーザーの識別子に置き換えます。任意の一意の文字列を使用できます。
サービス アカウントに Airflow ユーザーを作成すると、サービス アカウントとして認証された呼び出し元が事前登録ユーザーとして認識され、Airflow にログインします。