Managed Airflow(Gen 3) | Managed Airflow(Gen 2) | Managed Airflow(レガシー Gen 1)
このページでは、Managed Airflow で保存されたデータを指定したロケーション内に保持するように リソース ロケーションの制限 を構成する方法について説明します。
ロケーション制限の仕組み
マネージド Airflow のロケーション制限は、マネージド Airflow 環境が作成されたプロジェクトに適用される組織のポリシーに基づいて決定されます。このポリシーは、プロジェクト内で割り当てられるか、組織から継承されます。
ロケーション制限を有効にすると、ポリシーで禁止されているリージョンに環境を作成できなくなります。リージョンが拒否リストに含まれている場合、またはリージョンが許可リストに含まれていない場合、このリージョンに環境を作成することはできません。
環境の作成を有効にするには、このリージョン内の特定のゾーンではなく、リージョン全体をポリシーで許可する必要があります。たとえば、europe-west3 リージョンで Managed Airflow 環境を作成するには、ポリシーでこのリージョンを許可する必要があります。
Managed Airflow は、次のタイミングでロケーションの制限を確認します。
- 環境の作成時。
- 環境のアップグレード時、オペレーション中に追加のリソースが作成された場合。
- 環境のアップデート時、Managed Airflow の依存関係にロケーション制限を適用しない古い環境の場合。
Managed Airflow は、ロケーションの制限を確認するだけでなく、次の処理も行います。
- ユーザーがカスタマイズした Airflow イメージをリージョンの Artifact Registry リポジトリに保存する。たとえば、環境にカスタム PyPI イメージをインストールすると、このようなイメージが作成されます。
- ポリシーで
USマルチリージョン が明示的に禁止されている場合、Cloud Build の使用を無効にする。この場合、ユーザーがカスタマイズした Airflow イメージは、環境のクラスタ内に構築されます。
リソース ロケーションの制限を有するプライベート IP 環境に Python 依存関係をインストールする
プロジェクトにリソース ロケーションの制限を設定している場合、Cloud Build を使用して Python パッケージをインストールすることはできません。その結果、公共のインターネット上のリポジトリへの直接アクセスは無効になります。
ロケーションの制限で
US マルチリージョンが許可されていない場合にプライベート IP 環境に Python 依存関係をインストールするには、
次に挙げる選択肢のいずれかを使用します。
VPC ネットワークにホストされている非公開の PyPI リポジトリを使用する。
VPC ネットワーク内のプロキシ サーバーを使用して、公共のインターネット上の PyPI リポジトリに接続する。プロキシのアドレスは、Cloud Storage バケットの
/config/pip/pip.confファイルで指定します。セキュリティ ポリシーで外部 IP アドレスからの VPC ネットワークへのアクセスが許可されている場合は、Cloud NAT を構成できます。
ローカル ライブラリとしてインストールするために、Python の依存関係を Cloud Storage バケットの
dagsフォルダに保存します。 依存関係ツリーが大規模な場合は、この方法は適していません。
Managed Airflow ログに対してロケーションを制限する
Managed Airflow ログにセンシティブ データが含まれている場合は、Managed Airflow ログをリージョンの Cloud Storage バケットにリダイレクトすることをおすすめします。そうするには、 a ログシンクを使用します。ログを Cloud Storage バケットにリダイレクトすると、ログは Cloud Logging に送信されません。
gcloud
Cloud Storage バケットを新規作成する
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION以下のように置き換えます。
LOCATIONは、環境が配置されているリージョン。BUCKET_NAMEをバケット名に置き換えます。例:composer-logs-us-central1-example-environment
ログシンクを新規作成します。
gcloud logging sinks create \ composer-log-sink-ENVIRONMENT_NAME \ storage.googleapis.com/BUCKET_NAME \ --log-filter "resource.type=cloud_composer_environment AND \ resource.labels.environment_name=ENVIRONMENT_NAME AND \ resource.labels.location=LOCATION"以下のように置き換えます。
ENVIRONMENT_NAMEを環境の名前にする。BUCKET_NAMEをバケット名に置き換えます。LOCATIONは、環境が配置されているリージョン。
上記のコマンドの出力には、サービス アカウント番号が含まれます。このサービス アカウントに Storage オブジェクト作成者のロールを付与します。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SA_NUMBER@gcp-sa-logging.iam.gserviceaccount.com" \ --role='roles/storage.objectCreator' \ --condition=None以下のように置き換えます。
PROJECT_IDは、プロジェクト ID に置き換えます。SA_NUMBERは、前のステップのgcloud logging sinks createコマンドによって指定されたサービス アカウント番号に置き換えます。
環境のログをロギングから除外します。
gcloud logging sinks update _Default \ --add-exclusion name=ENVIRONMENT_NAME-exclusion,filter=\ "resource.type=cloud_composer_environment AND \ resource.labels.environment_name=ENVIRONMENT_NAME AND \ resource.labels.location=LOCATION"以下のように置き換えます。
ENVIRONMENT_NAMEを環境の名前に置き換えます。LOCATIONは、環境が配置されているリージョン。