環境のスナップショットの保存と読み込み

Cloud Composer 1 | Cloud Composer 2

このページでは、環境スナップショットを使用して環境の状態を保存し、読み込む方法について説明します。

Cloud Scheduler でスナップショットを使用すると、環境のスナップショットを自動的に保存できます。詳細については、スケジュールされたスナップショットを構成するをご覧ください。

環境のスナップショットについて

環境スナップショットには、環境の状態が保存されます。環境のスナップショットは、オンデマンドで保存および読み込むことができます。

スナップショットを使用すると、次のことができます。

  • 環境を以前の状態に復元します。スナップショットを使用して環境のバックアップを作成してから、スナップショットの一つを読み込んで環境を復元します。たとえば、環境が正常に更新された後でも、PyPI パッケージをインストールする、または Airflow 構成オプションをオーバーライドする更新オペレーションをロールバックできます。

  • 並列アップグレードと環境のコピーを行います。既存の環境のスナップショットを作成し、Cloud Composer の同じまたは後続のバージョンを使用する新しい環境を作成して、新しい環境にスナップショットを適用します。この手順は、移行と同様です。スナップショットの作成前に DAG を一時停止して、DAG が重複して実行されないようにしてください。

スナップショットの保存方法

環境スナップショットは、環境の状態を記述し、環境データのバックアップを保存する一連のファイルです。

環境の複数のスナップショットを作成できます。環境のスナップショットは増分ではありません。任意のスナップショットを他のスナップショットとは独立して使用できます。

環境を削除しても、Cloud Composer はスナップショットを削除しません。

デフォルトでは、Cloud Composer は環境のバケット内の snapshots/ フォルダにスナップショットを保存します。スナップショットを作成するときに、カスタムの場所を指定することもできます。

スナップショットのセキュリティに関する考慮事項

このセキュリティ リスクを軽減するために、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 2 バージョン 2.0.9 以降でサポートされています。Cloud Composer 1 は、1.18.5 での環境スナップショットの保存に対応しています。

  • スナップショットは環境を作成しません。ある環境から別の環境にスナップショットを読み込む場合は、まず新しい環境を作成してから、作成した環境にスナップショットを読み込む必要があります。

  • エラー状態の環境にスナップショットを読み込むことはできません。このような環境は、スナップショットの読み込みで解決することはできません。既存のスナップショットを新しい環境に読み込むことは可能です。

  • スナップショットの読み込みは、Cloud Composer または Airflow と同じバージョンか後続のバージョンに限定できます。たとえば、Cloud Composer 2.0.2 から Cloud Composer 2.0.1 の環境にスナップショットを読み込むことはできません。別の例として、Airflow 2.2.3 から Airflow 2.1.4 にスナップショットを読み込むことはできません。

  • スナップショットは Cloud Composer のバージョンを変更しません。環境を新しいバージョンの Cloud Composer にアップグレードして、以前のバージョンからスナップショットを読み込んだ場合でも、環境の Cloud Composer では現在のバージョンが保持されます。たとえば、Cloud Composer 2.0.1 から Cloud Composer 2.0.2 にスナップショットを読み込んでも、環境は Cloud Composer 2.0.1 には戻りません。

  • スナップショットをサポートする Airflow データベースの最大サイズは 20 GB です。環境のデータベースが 20 GB を超える場合は、スナップショットを保存する前に、Airflow データベースのサイズを縮小してください

  • 環境のバケット外部の場所にスナップショットを保存する場合は、環境のサービス アカウントに指定した場所に対する読み取りおよび書き込み権限が付与されている必要があります。たとえば、ストレージ オブジェクト管理者のロールにはこのような権限があります。プロジェクトまたは特定のバケットに適用できます。

環境のスナップショットを保存する

Cloud Composer は、指定したフォルダを基準としたサブフォルダに環境スナップショットを保存します。フォルダ名には、プロジェクト ID、環境の場所と名前、スナップショット保存時のタイムスタンプが含まれます。例: /snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00

Console

環境のスナップショットを作成するには:

  1. Google Cloud Console で [環境] ページに移動します。

    [環境] に移動

  2. 環境のリストで、ご利用の環境の名前をクリックします。[環境の詳細] ページが開きます。

  3. [スナップショットを保存] をクリックします。

  4. [スナップショットの保存] ダイアログで、スナップショットを保存する場所を選択します。

    • 環境のバケット内の /snapshots フォルダにスナップショットを保存するには、[環境バケットでスナップショット フォルダを使用する(デフォルト)] を選択します。

    • スナップショットをカスタム フォルダに保存するには、[別のバケットでカスタム フォルダを使用する] を選択してから、場所を指定します。

  5. [保存] をクリックします。

gcloud

gcloud beta composer environments snapshots save コマンドは、環境のスナップショットを保存します。

  • snapshot-location 引数で、スナップショットを保存するフォルダを指定します。デフォルトでは、スナップショットは環境のバケット内の /snapshots フォルダに保存されます。例: gs://us-central1-example-916807e1-bucket/snapshots他のフォルダを指定することもできます。

環境のスナップショットを保存するには、次のコマンドを実行します。

gcloud beta composer environments snapshots save \
  ENVIRONMENT_NAME \
  --location LOCATION \
  -–snapshot-location "SNAPSHOTS_FOLDER"

次のように置き換えます。

  • ENVIRONMENT_NAME を環境の名前にする。
  • LOCATION は、環境が配置されているリージョン。
  • (省略可)SNAPSHOTS_FOLDER は、スナップショットを保存するバケット フォルダの URI に置き換えます。この引数を省略すると、Cloud Composer によって、スナップショットは環境のバケット内の /snapshots フォルダに保存されます。

次の例では、デフォルトの場所を使用しています。

gcloud beta composer environments snapshots save \
  example-environment \
  --location us-central1

次の例では、カスタム フォルダに保存します。

gcloud beta composer environments snapshots save \
  example-environment \
  --location us-central1 \
  -–snapshot-location "gs://example-bucket/environment_snapshots"

API

  1. environments.SaveSnapshot API リクエストを作成します。

  2. リクエスト本文の snapshotLocation フィールドで、スナップショットを保存するフォルダを指定します。

{
  "snapshotLocation": "SNAPSHOTS_FOLDER"
}

次のように置き換えます。

  • SNAPSHOTS_FOLDER は、スナップショットを保存するバケット フォルダの URI に置き換えます。

例:

// POST https://composer.googleapis.com/v1beta1/projects/example-project/
// locations/us-central1/environments/example-environment:saveSnapshot

{
  "snapshotLocation": "gs://us-central1-example-916807e1-bucket/snapshots"
}

Terraform

Terraform から環境のスナップショットを保存して読み込むことはできません。

スナップショットの保存と読み込みは、環境に対して実行されるアクションです。生成されるスナップショットは環境の定義には含まれません。Terraform は Cloud Composer 環境の構成のみを管理するため、そこから環境スナップショットを保存または読み込むことはできません。

環境のスナップショットを読み込む

次のような状況が考えられます。たとえば、キャッチアップが有効になっていて、スナップショットが作成されてから読み込まれるまでの間に DAG が実行されます。この場合、スナップショットを読み込んだ後、Airflow は発生した DAG 実行に関する情報がないため、Airflow は同じ時刻とデータに対して DAG を再度実行します。

別の例として、毎日実行される DAG について考えてみましょう。スナップショットを作成すると、Airflow によってこの DAG が実行され、その後同じ日にスナップショットが読み込まれます。この場合、キャッチアップが無効になっていても Airflow は DAG を再度実行します。

Console

スナップショットを Cloud Composer 2 環境に読み込むには:

  1. Google Cloud Console で [環境] ページに移動します。

    [環境] に移動

  2. 環境のリストで、ご利用の環境の名前をクリックします。[環境の詳細] ページが開きます。

  3. [スナップショットを読み込む] をクリックします。

  4. [スナップショットの読み込み] ダイアログで、[参照] をクリックします。

  5. スナップショットを保存するフォルダを選択します。フォルダ名には、プロジェクトの ID、環境の場所、スナップショットが保存された時点のタイムスタンプが含まれます。例: /snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00

  6. (省略可)スナップショットからカスタム PyPI パッケージのインストールをスキップするには、[Skip PyPI package installation] を選択します。カスタム PyPI パッケージがインストールされている環境のスナップショットを読み込む場合、Cloud Composer ではこれらのカスタム パッケージはインストールされません。

  7. [読み込み] をクリックし、Cloud Composer によってスナップショットが読み込まれるまで待ちます。

gcloud

gcloud beta composer environments snapshots load コマンドを実行すると、環境にスナップショットが読み込まれます。

  • --snapshot-path 引数で、スナップショットが存在するフォルダを指定します。

    フォルダ名には、プロジェクトの ID、環境の場所、スナップショットが保存された時点のタイムスタンプが含まれます。例: gs://us-central1-example-916807e1-bucket/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00

  • (省略可)--skip-pypi-packages-installation 引数は、スナップショットからカスタム PyPI パッケージのインストールをスキップします。カスタム PyPI パッケージがインストールされている環境のスナップショットを読み込む場合、Cloud Composer ではこれらのカスタム パッケージはインストールされません。

gcloud beta composer environments snapshots load \
  DESTINATION_ENVIRONMENT_NAME \
  --location LOCATION \
  -–snapshot-path "SNAPSHOT_PATH"

次のように置き換えます。

  • DESTINATION_ENVIRONMENT_NAME は、スナップショットを読み込む環境の名前に置き換えます。
  • LOCATION は、環境が配置されているリージョン。
  • SNAPSHOT_PATH をバケットの URI に続けて、スナップショットのパスを指定したものに置き換えます。

例:

gcloud beta composer environments snapshots load \
  example-environment \
  --location us-central1 \
  --snapshot-path "gs://us-central1-example-916807e1-bucket/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00"

API

  1. environments.LoadSnapshot API リクエストを作成します。

  2. リクエストの本文の snapshotPath フィールドで、バケットの URI の後にスナップショットのパスを指定します。フォルダ名には、プロジェクトの ID、環境の場所、スナップショットが保存された時点のタイムスタンプが含まれます。例: gs://us-central1-example-916807e1-bucket/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00

  3. (省略可)リクエスト本文の skipPypiPackagesInstallation フィールドで、スナップショットからカスタム PyPI パッケージのインストールをスキップするかどうかを指定します。カスタム PyPI パッケージがインストールされている環境のスナップショットを読み込む場合、Cloud Composer ではこれらのカスタム パッケージはインストールされません。

    このフィールドは省略可能です。このフィールドを省略すると、Cloud Composer はスナップショットから PyPI パッケージをインストールします。

{
  "snapshotPath": "SNAPSHOT_PATH"
}

次のように置き換えます。

  • SNAPSHOT_PATH は、スナップショットを保存するバケット フォルダの URI に置き換えます。

例:

// POST https://composer.googleapis.com/v1beta1/projects/example-project/
// locations/us-central1/environments/example-environment:loadSnapshot

{
  "snapshotPath": "gs://us-central1-example-916807e1-bucket/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00",
  "skipPypiPackagesInstallation": "False"
}

Terraform

Terraform を使用して環境スナップショットを保存および読み込むことはできません。

スナップショットの保存と読み込みは、環境に対して実行されるアクションです。生成されるスナップショットは環境の定義には含まれません。Terraform は Cloud Composer 環境の構成のみを管理するため、そこから環境スナップショットを保存または読み込むことはできません。

次のステップ