環境をアップグレードする

Managed Airflow(第 3 世代) | Managed Airflow(第 2 世代) | Managed Airflow(レガシー第 1 世代)

このページでは、環境を新しい Airflow バージョンにアップグレードする方法について説明します。

アップグレード操作について

マネージド Airflow(第 3 世代)では、環境のマネージド Airflow バージョンを管理しません

  • Managed Airflow は、環境のインフラストラクチャ コンポーネントを自動的にアップグレードします。これらのコンポーネントは Managed Airflow の機能に関連しており、Airflow の動作や Airflow DAG の実行方法を変更することはありません。
  • Managed Airflow は、Airflow のバージョンとビルド、Airflow コンポーネント、Airflow ワークロードに密接に関連するコンポーネントを自動的にアップグレードしません。インフラストラクチャ コンポーネントが自動的にアップグレードされた場合、変更されません。
  • 新しい Airflow のバージョンまたはビルドに 手動でアップグレードできます。

たとえば、アップグレードを行わずに数か月間、同じバージョンと Airflow ビルドを使用でき、環境には環境のインフラストラクチャ コンポーネントの最新の Managed Airflow の更新、修正、改善が適用されます。後で新しいバージョンの Airflow に移行する場合は、環境内の Airflow バージョンをアップグレードします。

Airflow バージョンのアップグレードについて

環境では、次のように Airflow のバージョンまたはビルドが変更 されます。

  • 環境の Airflow バージョン(およびビルド)を制御します。環境を別のバージョンの Airflow に切り替えることを選択した場合、Airflow のバージョン アップグレード オペレーションを実行できます。たとえば、Airflow の現在のバージョンとビルドのサポートが 終了している場合に、これが発生する可能性があります

  • Managed Airflow は、指定された Airflow バージョンとビルドを使用して、環境の Airflow コンポーネント を再デプロイします。

  • Managed Airflow は、アップグレード前に環境内で Airflow 構成の変更(カスタム PyPI パッケージや Airflow 構成オプションのオーバーライドなど)が行われている場合にそれを適用します。

  • Managed Airflow は、新しい Cloud SQL データベースを指定するため Airflow airflow_db 接続を更新します。

Airflow のバージョンを変更しても、環境内のリソース(環境のバケットの URL、Airflow ウェブサーバーなど)へどのように接続するかについては変わりません。

インフラストラクチャの自動アップグレード オペレーションについて

Managed Airflow は、 インフラストラクチャの自動アップグレード オペレーション を定期的に実行します。

  • インフラストラクチャの自動アップグレード オペレーションは、環境に指定された メンテナンスの時間枠で定期的に実行されます。

  • Managed Airflow(第 3 世代)では、インフラストラクチャの自動アップグレードを無効にすることはできません。環境にカスタム メンテナンスの時間枠を指定することで、自動アップグレードを実行できる期間を制御できます。

  • このオペレーションは、他の長時間実行オペレーションと同様に、 Google Cloud コンソールと 環境のログに表示されます。オペレーションの実行中は、環境レベルで他のオペレーションを開始することはできません(Airflow DAG は引き続き実行できます)。

  • インフラストラクチャの自動アップグレードにより、Airflow コンポーネントが再起動されることがあります。このような再起動中、Airflow ワーカーは 24 時間の猶予期間で正常に終了します。完了までに 24 時間以上かかるタスクがある場合は、遅延可能な演算子の使用を検討してください。 アップグレードにより、環境モニタリングなど、環境のインフラストラクチャ コンポーネントが短時間利用できなくなる可能性があります。

アップグレード オペレーションの制限事項

アップグレード オペレーションには次の制限事項があります。

  • Managed Airflow のリリースは、数日かけて Managed Airflow でサポートされているすべてのリージョンに段階的にロールアウトされます。リリースが進行中の最新バージョンは、お住まいの地域ではまだ利用できない可能性があります。

  • Airflow の以前のバージョンまたはビルドにダウングレードすることはできません。

  • Airflow データベースに 20 GB を超えるデータが含まれている場合は、環境をアップグレードできません。アップグレード中に Airflow データベースのサイズが 20 GB を超えると、警告が表示されます。その場合、データベースのメンテナンスを実行して、データベースのサイズを減らします。

  • XCom メカニズムを使用してファイルを転送する場合は、Airflow のガイドラインに従って使用するようにしてください。XCom を使用して大きなファイルや大量のファイルを転送すると、Airflow データベースのパフォーマンスに影響し、スナップショットの読み込みや環境のアップグレード時に障害が発生する可能性があります。大量のデータを転送するには、Cloud Storage などの代替手段の使用を検討してください。

始める前に

  • 必要に応じて環境を再作成できるように、環境の新しいスナップショットを作成することをおすすめします。

  • アカウントには、環境の更新オペレーションをトリガーできるロールが必要です。また、環境のサービス アカウントには、アップグレード オペレーションを実行するための十分な権限を持つロールが必要です。詳しくは、アクセス制御をご覧ください。

環境が最新であることを確認する

Managed Airflow では、環境の Airflow ビルドがサポート終了日に近づくと、警告が表示されます。これらの警告を利用して、環境のサポートを常に維持することができます

[環境の詳細] ページに非推奨メッセージが表示されます
図 1.[環境の詳細] ページに非推奨メッセージが表示されます

Managed Airflow は、環境の基盤となる Airflow のバージョンとビルド を追跡しています。サポート終了日に近づくと、環境のリストと [**環境の詳細**] ページに警告が表示されます。

環境が最新かどうかを確認するには、次のようにします。

コンソール

  1. コンソールで、[**環境**] ページに移動します。 Google Cloud

    [環境] に移動

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

  3. [環境の設定] タブに移動します。

  4. [イメージのバージョン] フィールドに、次のいずれかのメッセージが表示されます。

    • 最新の使用可能なバージョン。環境イメージが完全にサポートされます。

    • 新しいバージョンがあります。環境イメージが完全にサポートされ、新しいバージョンにアップグレードできます。

    • このイメージ バージョンのサポートは(特定の日時)に終了します。環境イメージは、完全なサポート期間の終盤に近づいています。

    • このバージョンは(特定の日時)現在サポートされていません。環境は完全なサポート期間を超えています。

gcloud

この機能は Google Cloud CLI では使用できません。代わりに、推奨されるアップグレードを表示して、利用可能な新しいバージョンを確認できます。

API

この機能は API では使用できません。代わりに、推奨されるアップグレードを表示して、利用可能な新しいバージョンを確認できます。

推奨されるアップグレードを表示する

Managed Airflow には、環境をアップグレードできる Airflow ビルドのリストが表示されます。

アップグレードにおすすめの Managed Airflow バージョンを表示するには:

コンソール

  1. コンソールで、[**環境**] ページに移動します。 Google Cloud

    [環境] に移動

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

  3. [環境の設定] タブに移動し、[イメージ バージョンをアップグレード] をクリックします。

  4. 推奨されるバージョンの一覧については、Managed Airflow の [イメージのバージョン] プルダウン メニューをクリックしてください。

gcloud

gcloud composer environments list-upgrades \
  ENVIRONMENT_NAME \
  --location LOCATION

以下のように置き換えます。

  • ENVIRONMENT_NAME を環境の名前に置き換えます。
  • LOCATION は、環境が配置されているリージョン。

例:

gcloud composer environments list-upgrades example-environment \
  --location us-central1

API

ロケーションの利用可能なバージョンを表示できます。これを行うには、imageVersions.list API リクエストを作成します。

次に例を示します。

// GET https://composer.googleapis.com/v1/projects/example-project/
// locations/us-central1/imageVersions

PyPI パッケージの競合を確認する

環境にインストールされている PyPI パッケージが、新しい Airflow バージョンまたはビルドにプリインストールされているパッケージと競合していないか確認できます。

チェックにパスするとは、PyPI パッケージの依存関係が、現在のバージョンと指定したバージョンの間で競合していないことを意味します。ただし、他の理由でアップグレード オペレーションが成功しないこともあります。

コンソール

環境のアップグレード チェックを実行するには、次のようにします。

  1. コンソールで、[**環境**] ページに移動します。 Google Cloud

    [環境] に移動

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

  3. [ENVIRONMENT CONFIGURATION] タブに移動して [イメージのバージョン] エントリを見つけ、[アップグレード] をクリックします。

  4. [環境バージョンのアップグレード] ダイアログの [新しいバージョン] プルダウン リストで、アップグレードする Airflow のバージョンまたはビルドを選択します。

  5. [PyPI packages compatibility] セクションで、[Check for conflicts] をクリックします。

  6. チェックが完了するまで待ちます。PyPI パッケージの依存関係の競合がある場合、表示されるエラー メッセージに競合するパッケージとパッケージのバージョンの詳細が表示されます。

gcloud

環境のアップグレードチェックを実行するには、アップグレードする Airflow のバージョンまたはビルドで environments check-upgrade コマンドを実行します。

gcloud composer environments check-upgrade \
  ENVIRONMENT_NAME \
  --location LOCATION \
  --airflow-version VERSION

以下のように置き換えます。

  • ENVIRONMENT_NAME を環境の名前に置き換えます。
  • LOCATION は、環境が配置されているリージョン。
  • VERSION は、アップグレード先の新しい Airflow バージョンとビルドに置き換えます。形式は airflow-x.y.z-build.t です。すべてのバージョンのエイリアスも使用できます。

例:

gcloud composer environments check-upgrade example-environment \
  --location us-central1 \
  --airflow-version airflow-2.11.1-build.3

出力例:

Waiting for [projects/example-project/locations/us-central1/environments/
example-environment] to be checked for PyPI package conflicts when upgrading
to composer-3-airflow-2.11.1-build.3. Operation [projects/example-project/locations/
us-central1/operations/04d0e8b2-...]...done.
...

Response:
'@type': type.googleapis.com/
google.cloud.orchestration.airflow.service.v1.CheckUpgradeResponse
buildLogUri: ...
containsPypiModulesConflict: CONFLICT
pypiConflictBuildLogExtract: |-
The Cloud Build image build failed: Build failed; check build logs for
details. Full log can be found at ...
Error details: tensorboard 2.2.2 has requirement
setuptools>=41.0.0, but you have setuptools 40.3.0.

別の方法としては、アップグレードの確認を非同期で実行できます。--async 引数を使用して非同期呼び出しを行い、gcloud composer operations describe コマンドで結果を確認します。

API

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

imageVersion フィールドに、イメージのバージョンを指定します。

{
  "imageVersion": "VERSION"
}

VERSION は、アップグレード後の新しいバージョン(composer-3-airflow-x.y.z-build.t 形式)に置き換えます。

Managed Airflow(第 3 世代)との競合を確認する

Managed Airflow(第 3 世代)は、Managed Airflow の最新のメジャー バージョンです。アップグレード チェックを使用して、Managed Airflow(第 2 世代)環境を Managed Airflow(第 3 世代)にアップグレードできるかどうかを確認できます。以下の説明は、Managed Airflow(第 2 世代)環境に適用されます

環境を Managed Airflow(第 2 世代)から Managed Airflow(第 3 世代)にインプレースで移行することはできませんが、アップグレード チェックを使用して互換性の問題を確認できます。マネージド Airflow (第 3 世代)に移行する前に これを行うことをおすすめします

マネージド Airflow(第 3 世代)との互換性を確認するには、マネージド Airflow(第 2 世代)環境の通常のアップグレード チェックを行い、ターゲットとしてマネージド Airflow(第 3 世代)バージョンを指定します。

報告された競合には、次のタイプがあります。

  • BLOCKING の競合は、Managed Airflow(第 3 世代)でサポートされていない互換性のない環境構成要素を報告します。マネージド Airflow(第 3 世代)への移行を開始する前に、これらの競合を解決することをおすすめします。

  • NON_BLOCKING の競合は、Managed Airflow(第 3 世代)で異なる環境構成要素を報告し、予期しない動作を引き起こす可能性があります。たとえば、デフォルトのメンテナンスの時間枠などのデフォルト値の変更は、ブロックされない競合として報告されます。移行プロセスを開始する前に、これらの競合が問題を引き起こす可能性があるかどうかを確認することをおすすめします。

  • PyPI パッケージの競合も、このチェックの一部として報告されます。通常の PyPI パッケージの互換性チェックと同様に、構成の競合とは別に報告されます。

コンソール

マネージド Airflow(第 3 世代)との互換性を確認するには、 gcloud CLI または Cloud Composer API を使用します。 Google Cloud コンソールでは、PyPI パッケージの互換性チェックのみがサポートされています。

gcloud

マネージド Airflow(第 3 世代)との互換性を確認するには、 environments check-upgrade コマンドを実行し、ターゲットとしてマネージド Airflow(第 3 世代)バージョンを指定します。

gcloud composer environments check-upgrade \
  ENVIRONMENT_NAME \
  --location LOCATION \
  --image-version COMPOSER_3_VERSION

以下のように置き換えます。

  • ENVIRONMENT_NAME を環境の名前に置き換えます。
  • LOCATION は、環境が配置されているリージョン。
  • COMPOSER_3_VERSION は、アップグレード先の Airflow バージョンとビルドに置き換えます。形式は airflow-x.y.z-build.t です。すべての バージョンのエイリアスも使用できます。

例:

gcloud composer environments check-upgrade example-environment \
  --location us-central1 \
  --image-version composer-3-airflow-2

競合メッセージの例:

...
- message: Error validating property [core]unit_test_mode. Overriding [core]
unit_test_mode is not permitted.
type: BLOCKING
- message: Environment variables [GOOGLE_CLOUD_PROJECT] may not be overridden.
type: BLOCKING
- message: You have to specify Worker CPUs to be 0.5, 1.0 or multiples of 2.0.
type: BLOCKING
- message: The environment uses a default maintenance window, which is
different in Composer 2 and Composer 3. Unless set to a custom value, the
maintenance window will be changed to a new default after the upgrade.
type: NON_BLOCKING
...

別の方法として、このチェックを非同期で実行することもできます。 --async 引数を使用して非同期呼び出しを行い、 gcloud composer operations describe コマンドで結果を確認します。

API

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

imageVersion フィールドに、画像モードを指定します。

{
  "imageVersion": "COMPOSER_3_VERSION"
}

COMPOSER_3_VERSION は、アップグレード先の Airflow バージョンとビルド に置き換えます。形式は airflow-x.y.z-build.t です。すべてのバージョンのエイリアスも使用できます

環境をアップグレードする

環境を新しいバージョンの Airflow にアップグレードするには:

コンソール

  1. コンソールで、[**環境**] ページに移動します。 Google Cloud

    [環境] に移動

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

  3. [環境の設定] タブに移動します。

  4. [イメージのバージョン] 項目を見つけて [アップグレード] をクリックします。

  5. [イメージのバージョン] プルダウン メニューから、アップグレードする Airflow のバージョンまたはビルドを選択します。

  6. [アップグレード] をクリックします。

gcloud

gcloud composer environments update \
  ENVIRONMENT_NAME \
  --location LOCATION \
  --airflow-version VERSION

以下のように置き換えます。

  • ENVIRONMENT_NAME を環境の名前に置き換えます。
  • LOCATION は、環境が配置されているリージョン。
  • VERSION は、アップグレード先の新しい Airflow バージョンとビルドに置き換えます。形式は airflow-x.y.z-build.t です。 すべてのバージョンのエイリアスも使用できます。

次に例を示します。

gcloud composer environments update
  example-environment \
  --location us-central1 \
  --airflow-version airflow-2.11.1-build.3

API

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

  2. このリクエストで次のように操作します。

    1. updateMask パラメータで、config.softwareConfig.imageVersion マスクを指定します。

    2. リクエストの本文の imageVersion フィールドに、アップグレード後の新しいバージョンを指定します。

次に例を示します。

// PATCH https://composer.googleapis.com/v1/projects/example-project/
// locations/us-central1/environments/example-environment?updateMask=
// config.softwareConfig.imageVersion

  {
    "config": {
      "softwareConfig": {
        "imageVersion": "composer-3-airflow-2.11.1-build.3"
      }
    }
  }

Terraform

image_version フィールドは、config.software_config ブロック で環境の Airflow のバージョンとビルドを制御します。このフィールドで、新しい Airflow のバージョンとビルドを指定します。

  resource "google_composer_environment" "example" {
  provider = google-beta
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {
    software_config {
      image_version = "VERSION"
    }
  }
}

以下のように置き換えます。

例:

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "example-environment"
  region = "us-central1"

  config {
    software_config {
      image_version = "airflow-2.11.1-build.3"
    }
  }
}

次のステップ