Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3
このページでは、環境スナップショットを使用して環境の状態の保存と、読み込みの方法について説明します。
スナップショットを自動的に保存するように環境を構成できます。詳細については、スケジュール設定されたスナップショットを構成するをご覧ください。
環境のスナップショットについて
環境スナップショットは、環境の状態を保存します。環境のスナップショットは、オンデマンドでの保存と読み込みができます。
スナップショットを使用すると、次のことを行うことができます。
- Cloud Composer または Airflow の新しいメジャー バージョンに環境を移行します。
スナップショットの保存方法
環境のスナップショットは、環境の状態を記述し、環境データのバックアップを保存する一連のファイルです。
環境スナップショットは複数作成できます。環境スナップショットは増分ではありません。任意のスナップショットを、他のスナップショットとは別に使用できます。
環境を削除しても、Cloud Composer ではスナップショットは削除されません。
デフォルトでは、Cloud Composer により環境のバケット内の snapshots/
フォルダにスナップショットが保存されます。スナップショットを作成するときに、独自の場所を指定することもできます。
Cloud Storage UI では便宜上、フォルダとしてデータが表示されますが、バケットはフラット ファイル構造で機能します。これは、Google Cloud コンソールでのスナップショットの保存と読み込みの方法を変更するものではありませんが、バケット内のファイルに対してオペレーションを直接実行する際には注意が必要です。詳細については、オブジェクトの名前空間をご覧ください。
スナップショットのセキュリティ上の考慮事項
このセキュリティ リスクを軽減するために、Airflow DAG で使用される機密情報(キーやパスワードなど)を Secret Manager に格納できます。詳細については、環境に Secret Manager を構成するをご覧ください。
環境のバケットのセキュリティ権限を確認してください。環境のスナップショットをカスタム バケットに保存する場合は、そのバケットに対するアクセス権限がプロジェクト内で正しく構成されていることを確認してください。権限を割り当てるときは、環境のサービス アカウントに、バケットからスナップショットの保存と読み込みを行うための十分な権限があることを確認してください。
スナップショットに保存されるデータ
Cloud Composer では、次のデータをスナップショットに保存します。
- Airflow 構成のオーバーライド。
- 環境変数。
- 要件に応じたカスタム PyPI パッケージのリスト。
- 実行されたタスクの状態や DAG の実行履歴など、Airflow データベースのバックアップ。
- 環境のバケットの
/dags
、/data
、/plugins
フォルダのバックアップ。 - 環境の Fernet 鍵。
- 環境のスケーリングやパフォーマンス パラメータなど、環境の構成に関するその他の情報。Cloud Composer は、スナップショットの読み込み時にこの情報を使用しません。
スナップショットから読み込まれるデータ
Cloud Composer では、スナップショットから次のデータが読み込まれます。
- Airflow 構成のオーバーライド。
- 環境変数。
カスタムの PyPI パッケージ(インストールのスキップを選択した場合を除く)。
実行されたタスクの状態や DAG の実行履歴などを含む Airflow データベースのコンテンツ。
スナップショットの
/dags
、/data
、/plugins
フォルダの内容が環境のバケットに読み込まれます。スナップショットの Fernet 鍵は、スナップショットのデータを環境独自の Fernet 鍵で再暗号化するために使用されます。環境の Fernet 鍵は変更されません。
Cloud Composer は、環境の構成に関する情報をスナップショットに保存しますが、スナップショットの読み込み時にその情報は使用されません。スナップショットを読み込んでも、次の環境のパラメータは変更されません。
- 環境の構成(環境のスケーリングとパフォーマンスのパラメータなど)。
- 環境のネットワーキング構成。
/dags
、/data
、/plugins
フォルダ外部の環境のバケットの内容。- 環境ラベル。
スナップショットを読み込む際に、Cloud Composer API を使用せずに Cloud Composer インフラストラクチャで適用した設定が失われる可能性があります。
部分的に完了したオペレーションについて
スナップショットを読み込む際に、オペレーションは成功、失敗、または部分的に完了する可能性があります。
- 成功したオペレーションでは、スナップショットからすべてのデータが読み込まれます。
- オペレーションが失敗した場合、変更は行われません。
- 部分的に完了したオペレーションでは、スナップショットからデータのサブセットが読み込まれます。このようなオペレーションは失敗として報告されますが、エラー メッセージでは正常に読み込まれたデータを示しています。たとえば、PyPI パッケージがインストールされているものの、Airflow 構成オプションのオーバーライドが正常に完了しなかった場合、エラー メッセージではこの内容が示されています。
部分的に完了したオペレーションについては、同じスナップショットの再度の読み込みを試すことができます。Cloud Composer により、前回の試行で成功したステップがスキップされます。たとえば、タイムアウトでオペレーションが失敗したものの、データベースは正常に読み込まれた場合、次回の試行では、データベースが再度読み込まれることはありません。
始める前に
- Cloud Composer 1 では、スナップショットの保存のみが可能で、読み込みはできません。スナップショットは、Cloud Composer 1 環境から Cloud Composer 2 環境に読み込むことができます。
スナップショットは、Cloud Composer 2 バージョン 2.0.9 以降でサポートされています。Cloud Composer 1 では、1.18.5 以降のバージョンで環境スナップショットの保存がサポートされています。
スナップショットでは環境は作成されません。ある環境から別の環境にスナップショットを読み込む場合は、まず新しい環境を作成し、その環境にスナップショットを読み込む必要があります。
エラー状態にある環境にスナップショットを読み込むことはできません。スナップショットを読み込んでも、このような環境の修正はできません。既存のスナップショットを新しい環境に読み込むことはできます。
スナップショットをサポートする Airflow データベースの最大サイズは 20 GB です。環境のデータベースが 20 GB を超える場合は、スナップショットを保存する前に Airflow データベースのサイズを小さくします。
スナップショットを作成するには、環境のバケット内の
/dags
、/plugins
、/data
フォルダ内のオブジェクトの合計数が 100,000 未満にする必要があります。XCom メカニズムを使用してファイルを転送する場合は、[Airflow のガイドラインに従って使用][ext-airflow-xcom-backend]するようにしてください。XCom を使用して大きなファイルや大量のファイルを転送すると、Airflow データベースのパフォーマンスに影響し、スナップショットの読み込みや環境のアップグレード時に障害が発生する可能性があります。大量のデータを転送するには、Cloud Storage などの代替手段の使用を検討してください。
環境のバケット内のオブジェクト名の長さは、1,024 文字以下にする必要があります。そうでない場合は、スナップショットを作成できません。
環境のバケット外の場所にスナップショットを保存する場合は、環境のサービス アカウントに、指定した場所に対する読み取りおよび書き込み権限が付与されている必要があります。たとえば、ストレージ オブジェクト管理者のロールにはそのような権限があります。プロジェクトまたは特定のバケットにそのロールを適用できます。
スナップショットの作成と保存には、Cloud Storage に関連する追加費用が発生します。詳細については、料金をご覧ください。
環境のスナップショットを保存する
Cloud Composer は、指定したフォルダを基準としたサブフォルダに環境のスナップショットを保存します。フォルダ名には、プロジェクト ID、環境の場所、環境の名前、スナップショットが保存された時点のタイムスタンプが含まれます。例: /snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00
。
コンソール
環境のスナップショットを作成するには:
Google Cloud Console で [環境] ページに移動します。
環境のリストで、ご利用の環境の名前をクリックします。[環境の詳細] ページが開きます。
[スナップショットを保存] をクリックします。
[スナップショットを保存] ダイアログで、スナップショットを保存する場所を選択します。
スナップショットを環境のバケットの
/snapshots
フォルダに保存するには、[環境バケット内のスナップショット フォルダを使用する(デフォルト)] を選択します。スナップショットをカスタム フォルダに保存するには、[別のバケットでカスタム フォルダを使用する] を選択してから、場所を指定します。
[保存] をクリックします。
gcloud
gcloud composer environments snapshots save
コマンドは、環境のスナップショットを保存します。
snapshot-location
引数で、スナップショットが保存されるフォルダを指定します。デフォルトでは、スナップショットは環境のバケット内の/snapshots
フォルダに保存されます。例:gs://us-central1-example-916807e1-bucket/snapshots
他のフォルダを指定することもできます。
環境のスナップショットを保存するには、次のコマンドを実行します。
gcloud composer environments snapshots save \
ENVIRONMENT_NAME \
--location LOCATION \
--snapshot-location "SNAPSHOTS_FOLDER"
以下のように置き換えます。
ENVIRONMENT_NAME
を環境の名前にする。LOCATION
は、環境が配置されているリージョン。- (省略可)
SNAPSHOTS_FOLDER
は、スナップショットを保存するバケット フォルダの URI に置き換えます。この引数を省略すると、Cloud Composer では、スナップショットが環境のバケット内の/snapshots
フォルダに保存されます。
次の例では、デフォルトの場所を使用します。
gcloud composer environments snapshots save \
example-environment \
--location us-central1
次の例では、カスタム フォルダに保存します。
gcloud composer environments snapshots save \
example-environment \
--location us-central1 \
--snapshot-location "gs://example-bucket/environment_snapshots"
API
environments.saveSnapshot
API リクエストを作成します。リクエスト本文の
snapshotLocation
フィールドに、スナップショットを保存するフォルダを指定します。
{
"snapshotLocation": "SNAPSHOTS_FOLDER"
}
以下のように置き換えます。
SNAPSHOTS_FOLDER
は、スナップショットを保存するバケット フォルダの URI に置き換えます。
例:
// POST https://composer.googleapis.com/v1/projects/example-project/
// locations/us-central1/environments/example-environment:saveSnapshot
{
"snapshotLocation": "gs://us-central1-example-916807e1-bucket/snapshots"
}
Terraform
Terraform から環境のスナップショットの保存と読み込みを行うことはできません。
スナップショットの保存と読み込みは、環境に対して実施されるアクションであり、生成されるスナップショットは環境の定義の部分ではありません。Terraform は Cloud Composer 環境の構成のみを管理するため、そこから環境スナップショットの保存と読み込みを行うことはできません。
環境のスナップショットを読み込む
Cloud Composer 1 では、スナップショットの保存のみが可能で、読み込みはできません。スナップショットは、Cloud Composer 1 環境から Cloud Composer 2 環境に読み込むことができます。 たとえば、環境を Cloud Composer 2 に移行する場合などです。