オーケストレーション パイプラインをデプロイする

このページでは、オーケストレーション パイプラインのデプロイ環境構成を作成するプロセスについて説明します。

デプロイ環境について

プロジェクトには 1 つ以上のデプロイ環境を設定できます。 各デプロイ環境の構成では、この環境に属するパイプラインとリソースのデプロイ方法を定義します。たとえば、開発用のデプロイ環境と本番環境用のデプロイ環境を設定できます。これらのデプロイ環境には、別々のパイプライン セットを設定し、異なるランナー環境で実行できます。

各デプロイ環境にはランナー環境が必要です。 Managed Airflow は、パイプラインがデプロイされた後に実行するオーケストレーション エンジンです。プレビューでは、サポートされているランナー 環境は、 デプロイ環境に割り当てた Managed Airflow 環境のみです。

デプロイ環境にアーティファクト バケットを指定できます。 このバケットには、パイプラインが実行するバージョン管理されたパイプライン アセットと、アーティファクト バケットに出力される一部の アクションの結果が保存されます。

パイプライン バンドルについて

オーケストレーション パイプラインは、パイプライン バンドルにデプロイされます。 パイプライン バンドルには、共通のデプロイ サイクルを共有する 1 つ以上のパイプラインとパイプライン アセットが含まれています。

各バンドルには複数のバージョンを設定できます。

  • バンドルをデプロイすると、特定のバージョンのバンドル パッケージ内のすべてのパイプラインと付随するスクリプトが一緒にデプロイされます。
  • バンドルの現在のバージョンは 1 つだけです(最新バージョンとしてデプロイされたもの)。以前のコード バージョンでトリガーされた個々のパイプライン実行は、中断されることなく続行されます。
  • 現在のバージョンとは異なるバージョンでパイプラインを手動でトリガーすることはできません。
  • パイプラインがバンドルから削除され、バンドルの新しいバージョンがデプロイされた場合、パイプラインは新しいバージョンでは実行されませんが、以前にアクティブに実行されていた実行は続行されます。

始める前に

パイプライン バンドルのスキャフォールディングを初期化する

Orchestration Pipelines には、リポジトリ内のオーケストレーション パイプラインのスキャフォールディングを初期化する gcloud CLI コマンドが用意されています。

スキャフォールディングには次のものが含まれます。

  • orchestration-pipeline.yaml: スケジュールは含まれていますが、アクションが定義されていないパイプライン定義の例。
  • deployment.yaml: パイプラインのデプロイ方法を定義するパイプライン デプロイ構成の例。ランナー環境、アーティファクト バケット、パイプライン アクションで使用されるその他のリソースの構成が含まれています。
  • .github/workflows/validate.yamlmain ブランチへの pull リクエストが作成されたときに パイプラインを検証する GitHub アクションの例。
  • .github/workflows/deploy.yaml: GitHub リポジトリの main ブランチに変更をマージしたときにパイプラインをデプロイする GitHub アクションの例。

オーケストレーション パイプラインを初期化するには:

  1. リポジトリまたはプロジェクト ディレクトリに移動します。コマンドを実行すると、実行したディレクトリに新しいファイルが作成されます。

  2. 次の gcloud CLI コマンドを実行します。

    gcloud beta orchestration-pipelines init PIPELINE_NAME \
      --environment DEPLOYMENT_ENVIRONMENT \
      --composer-environment RUNNER_ENVIRONMENT \
      --artifacts-bucket ARTIFACTS_BUCKET_NAME \
      --project PROJECT_ID \
      --region REGION \
      --service-account SERVICE_ACCOUNT
    

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

    • PIPELINE_NAME: 初期パイプラインの名前。
    • DEPLOYMENT_ENVIRONMENT: 初期デプロイ環境の名前。
    • RUNNER_ENVIRONMENT: ランナー環境の名前。
    • ARTIFACTS_BUCKET_NAME: パイプライン アクション アーティファクトの保存に使用される Cloud Storage バケット。gs:// 接頭辞は付けません。
    • PROJECT_ID: ランナー環境が配置されているプロジェクトのプロジェクト ID。 Google Cloud
    • REGION: ランナー環境が配置されているリージョン。
    • SERVICE_ACCOUNT: 変数としてプリセットされるサービス アカウント。この値は、ランナー環境のサービス アカウントに設定します。この変数は、パイプライン 定義とリソース プロファイルで使用できます。たとえば、偽装チェーンを使用するアクションの impersonationChainパラメータ の値として使用できます

      ランナー環境のサービス アカウントは、環境の詳細を表示して取得できます。gcloud CLI では、環境サービス アカウントは nodeConfig.serviceAccount キーに指定されます。

    例:

    gcloud beta orchestration-pipelines init example-pipeline \
      --environment development \
      --composer-environment production-runner-us-central1 \
      --artifacts-bucket production-artifacts \
      --project example-production-project \
      --region us-central1 \
      --service-account example-account@example-project.iam.gserviceaccount.com
    

ランナー環境の構成を追加する

ランナー環境は、デプロイ環境の composer_environment キーで指定します。複数のデプロイ環境を使用する場合は、それぞれに個別のランナー環境を指定できます。

開発環境の構成の project キーと region キーとともに、composer_environment キーのランナー環境の名前を指定すると、パイプラインがデプロイされるランナー環境を指定できます。

次の例では、example-development-project プロジェクトの us-central1 リージョンにある example-runner-environment という名前のランナー環境を追加しています。

environments:
  example-development-environment:
    project: "example-development-project"
    region: "us-central1"
    composer_environment: "example-runner-environment"
    ...

ランナー環境の構成を調整する

ランナー環境は、他の Managed Service for Apache Airflow 環境と同様に構成できます。

パイプライン アセットを追加してアクションを構成する

パイプラインの定義ファイルを編集して、アクションとパイプライン アセットを含めます。

Hello World アクションの例

最小限のパイプライン アクションの例を次に示します。これを使用して、デプロイ環境の構成をテストできます。

  1. 次のアクションをスキャフォールディング パイプラインに追加し、actions: [] を置き換えます。

    actions:
      - python:
          name: "hello_world_script_run"
          executionTimeout: "30m"
          mainFilePath: "scripts/hello_world.py"
          pythonCallable: "main"
          engine:
            local: {}
    
  2. リポジトリに scripts という名前の新しいサブディレクトリを作成し、次のファイルを /scripts/hello_world.py として保存します。

    def main():
      print("Hello, World!")
    

パイプラインを検証する

検証コマンドは、パイプライン 定義ファイルの構文と型の正確性をチェックします。また、 Google Cloud プロジェクトや Managed Service for Apache Airflow 環境などのリソースのセマンティック チェックも、 デプロイ構成ファイルとパイプライン定義ファイルの両方で実行します。

デフォルトでは、リモート ランナー環境への接続など、すべてのデプロイ環境の完全な検証が実行されます。次のパラメータを使用して、デプロイ構成の特定の部分を検証できます。

  • --mode: syntax-only に設定すると、リモート ランナー環境に接続しません。 デフォルトは full です。
  • --environment: 特定の環境のみを検証します。
  • --pipeline-paths: 検証するパイプライン定義ファイルのカンマ区切りのリスト。
  • --substitutions--substitutions-file: 検証中にデプロイ構成パラメータを 置き換えます。

このコマンドは、ローカル パイプライン バージョンをデプロイする前のクイック チェックとして、また CI/CD ワークフローの一部として GitHub アクションとして実行できます。

リポジトリで次のコマンドを実行して、パイプラインを検証します。

gcloud beta orchestration-pipelines validate

パイプライン バンドルをデプロイする

このセクションでは、パイプラインをデプロイするさまざまな方法について説明します。

Orchestration Pipelines では、パイプライン バンドルをデプロイする方法が 2 つあります。これらのアプローチは、開発とリリース ワークフローのさまざまな段階で連携するように設計されています。

  • ローカル バンドル バージョンをデプロイする: パイプライン アセット、パイプライン定義、デプロイ構成の現在のバージョンをデプロイします。新しいバンドル ID は、ワークスペース名とバンドル内のファイルの md5 に基づいて自動生成されます。

    このデプロイタイプは開発を目的としています。また、パイプラインをステージング ランナー環境にデプロイする別のデプロイ構成を作成することをおすすめします。

  • commit された変更をデプロイする: パイプライン アセット、パイプライン定義、デプロイ構成に変更を commit したら、パイプライン バンドルの新しいバージョンをランナー環境にデプロイできます。新しいバンドルの ID は、リポジトリ内の Git commit SHA にリンクされます。

    このデプロイタイプは、CI/CD の一部として実行することを目的としています(GitHub アクションなど)。commit された変更をローカル Git リポジトリからデプロイすることもできます。

Orchestration Pipelines では、パイプライン定義ファイルとデプロイ構成ファイルでパラメータを置き換える方法がいくつかあります。これは、ローカル開発と GitHub アクションで実行されるコマンドの両方でパイプラインをデプロイする場合に便利です。たとえば、gcloud CLI コマンドで --substitutions 引数を使用するか、 環境変数を設定するか、 GitHub シークレットから値を取得して、パラメータを置き換えることができます。

デプロイ コマンドを実行する

ローカル

ローカル バンドル バージョンをデプロイするには、--local 引数を使用します。

gcloud beta orchestration-pipelines deploy \
  --environment DEPLOYMENT_ENVIRONMENT \
  --local

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

  • DEPLOYMENT_ENVIRONMENT: パイプラインのデプロイ環境。

例:

gcloud beta orchestration-pipelines deploy \
  --environment example-deployment-environment \
  --local

出力例には、パイプライン バンドルの名前とバージョン、デプロイ ステータスが含まれます。

Bundle ID: bundle-local-example-orchestrationpipelines
Version ID: local-14776d43ebba

...

--- Pipeline Deployment Status ---
Pipeline 'example-pipeline': [OK] (Status: HEALTHY)

--- Pipeline Deployment full details ---

...

commit 済み

変更をデプロイするには、リポジトリに変更が commit されていることを確認します。gcloud CLI で次のコマンドを実行します。

gcloud beta orchestration-pipelines deploy \
  --environment DEPLOYMENT_ENVIRONMENT

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

  • DEPLOYMENT_ENVIRONMENT: パイプラインのデプロイ環境。

例:

gcloud beta orchestration-pipelines deploy \
  --environment example-deployment-environment

出力例には、パイプライン バンドルの名前とバージョン、デプロイ ステータスが含まれます。

Bundle ID: bundle-local-example-orchestrationpipelines
Version ID: local-14776d43ebba

...

--- Pipeline Deployment Status ---
Pipeline 'example-pipeline': [OK] (Status: HEALTHY)

--- Pipeline Deployment full details ---

...

GitHub アクション

パイプライン スキャフォールディングには、GitHub アクションの例が 2 つあります。これを使用すると、 GitHub アクションを使用してパイプラインのデプロイと検証を開始できます。これらのファイルを GitHub にアップロードすると、リポジトリはこれらのアクションで構成されます。より複雑な GitHub アクションの構成については、 GitHub Actions を使用したデプロイを GitHub ドキュメントでご覧ください。

GitHub アクションの例を使用するには:

  1. GitHub アクションから gcloud CLI コマンドを実行する 別のサービス アカウントを作成します。

  2. デプロイ コマンドと検証 コマンドの実行を許可するロールをこのサービス アカウントに割り当てます。

  3. このサービス アカウント キーを このサービス アカウントに作成します。

  4. GCP_SA_KEY シークレットを GitHub リポジトリに追加し、その値を作成したサービス アカウント キーに設定します。シークレットの追加の詳細については、 GitHub Actions でシークレットを使用するをご覧ください。

デプロイ構成

このセクションでは、デプロイ環境に適用できる追加の構成について説明します。

別のパイプラインを追加または削除する

既存のデプロイ環境に別のパイプラインを追加するには:

  1. パイプライン定義ファイルとパイプライン アセットをリポジトリに追加します。
  2. デプロイ構成で、新しいパイプライン定義ファイルを指す値を持つ新しい source キーを追加します。

例:

environments:
  dev:

    ...

    pipelines:
      - source: example-pipeline.yaml
      - source: another-pipeline.yaml

パイプラインを削除するには:

  1. デプロイ構成で、パイプラインの source キーを削除します。
  2. パイプライン定義ファイルとパイプライン アセットをリポジトリから削除します。
  3. パイプラインの新しいバージョンをデプロイします。パイプラインは新しいバンドル バージョンには存在しません。

別のデプロイ環境を追加する

別のデプロイ環境を追加するには:

  1. デプロイ構成で、environments マッピングに新しいキーを追加します。
  2. デプロイ構成とパイプライン定義で 変数デプロイ構成変数 を使用して、各環境に属する Google Cloud リソースを区別する必要があるパイプライン アクションを実行します。

例:

environments:

  example-development-environment:
    project: "example-development-project"
    region: "us-central1"
    composer_environment: "development-runner-us-central1"
    ...
    variables:
      service_account: "another-service-account@example-development-project.iam.gserviceaccount.com"
    ...

  example-production-environment:
    project: "example-production-project"
    region: "us-central1"
    composer_environment: "production-runner-us-central1"
    ...
    variables:
      service_account: "example-account@example-project.iam.gserviceaccount.com"

変数、シークレット、置換

デプロイ構成で変数を定義したら、パイプライン定義とリソース プロファイルで使用できます。

カスタム変数を追加する

デプロイ構成の variables キーに独自の変数を追加できます。

  1. デプロイ構成環境で、variables キーを追加します。
  2. 変数名と値のマッピングを追加します。
  3. パイプライン定義とリソース プロファイルで変数の値を取得するには、変数の名前を二重中かっこで囲みます: {{ example_variable }}.

次の例では、2 つのデプロイ環境に同じ変数を設定しています。

environments:
  example-development-environment:
    project: "example-development-project"
    region: "us-central1"
    composer_environment: "development-runner-us-central1"
    artifact_storage:
      bucket: "development-artifacts"
      path_prefix: pipelines
    pipelines:
      - source: example-pipeline.yaml
    variables:
      service_account: "another-service-account@example-development-project.iam.gserviceaccount.com"
      network_uri: projects/example-development-project/global/networks/default

  example-production-environment:
    project: "example-production-project"
    region: "us-central1"
    composer_environment: "production-runner-us-central1"
    artifact_storage:
      bucket: "production-artifacts"
      path_prefix: pipelines
    pipelines:
      - source: example-pipeline.yaml
    variables:
      service_account: "example-account@example-project.iam.gserviceaccount.com"
      network_uri: projects/example-production-project/global/networks/vpc-main

次は、これらの変数を読み取る Managed Service for Apache Spark リソース プロファイルです。パイプライン定義ファイル(example-pipeline.yaml)のアクションは同じリソース プロファイルを使用できるため、本番環境と開発環境の間で調整する必要はありません。

profileId: serverless-standard
type: dataproc.session
definition:
  environmentConfig:
    execution_config:
      service_account: "{{ service_account }}"
      network_uri: "{{ network_uri }}"

デプロイ構成パラメータにアクセスする

デプロイ構成の一部のパラメータは変数としても使用できます。

  • project
  • region
  • composer_environment
  • COMMIT_SHA: Git リポジトリの現在の commit SHA。この 変数は、ローカル パイプライン バンドル バージョンを デプロイするときに値を置き換えることで使用できます。これにより、commit SHA 値に依存するアクションは、正しいファイル コンテンツで引き続き動作します。

次の例では、パイプライン定義で、デプロイ構成パラメータ projectregion に基づいてパイプライン アクションのデフォルトを設定しています。

pipelineId: example-pipeline
description: Example pipeline
runner: 'airflow'
owner: 'data-eng-team'
modelVersion: '1.0'
defaults:
  projectId: {{ project }}
  location: {{ region }}
  executionConfig:
    retries: 1

GitHub アクション シークレットにアクセスする

パイプライン定義ファイルとデプロイ構成ファイルで GitHub シークレットを使用できます。パイプラインが GitHub アクションを介してデプロイされると、これらのシークレットの値はパイプライン定義とデプロイ構成の両方に渡されます。

デプロイ中にアクセスできるシークレットを作成するには:

  1. GitHub で、DEPLOY_VAR_ 接頭辞が付いたシークレットを追加します。 例: DEPLOY_VAR_API_KEY

    シークレットの作成の詳細については、 GitHub Actions でシークレットを使用する を GitHub ドキュメントでご覧ください。

  2. 同じ環境変数を GitHub ワークフローに追加します。GitHub シークレットからこの変数の値を読み取ります。

    例:

    jobs:
      deploy:
        runs-on: ubuntu-latest
        env:
          DEPLOY_VAR_API_KEY: ${{ secrets.API_KEY }}
    
        steps:
    
        ...
    
    

    ワークフローへの環境変数の追加の詳細については、 GitHub ドキュメントの変数に情報を保存する をご覧ください。

  3. パイプライン定義ファイルとデプロイ構成で、変数名(DEPLOY_VAR_ 接頭辞なし)を使用します。例: {{ API_KEY }}

  4. (省略可)GitHub シークレットを使用するパイプラインのローカル バージョンをデプロイするには、 コマンドライン パラメータを使用するか、 デプロイ コマンドを実行する環境で定義して、シークレットから DEPLOY_VAR_* 環境変数を置き換えます。

コマンドライン パラメータを使用して変数を置き換える

gcloud CLI デプロイ コマンド--substitutions 引数をサポートしています。これを使用して、 パイプライン定義とデプロイ構成の変数をオーバーライドまたは設定できます。

コマンドライン パラメータを使用して変数を置き換えるには、コマンドラインで変数とその値のリストを指定します。

例:

gcloud beta orchestration-pipelines deploy \
  --environment example-deployment-environment \
  --local \
  --substitutions=VARIABLE_NAME_1=value_1,VARIABLE_NAME_2=value_2

代わりに、置換を YAML ファイルに保存し、--substitutions-file 引数で指定することもできます。

gcloud beta orchestration-pipelines deploy \
  --environment example-deployment-environment \
  --local \
  --substitutions-file=substitutions.yaml

置換ファイルで、変数のマッピングを指定します。

VARIABLE_NAME_1: value_1
VARIABLE_NAME_2: value_2

パイプライン定義ファイルとデプロイ構成で変数名を使用できます。例: {{ VARIABLE_NAME_1 }}

環境変数を使用して変数を指定して置き換える

パイプライン定義とデプロイ構成では、DEPLOY_VAR_ 接頭辞が付いた環境変数を使用できます。

  1. 環境変数を設定します。

    export DEPLOY_VAR_VARIABLE_NAME_1=value_1
    
  2. パイプライン定義ファイルとデプロイ構成で、変数名(DEPLOY_VAR_ 接頭辞なし)を使用できます。例: {{ VARIABLE_NAME_1 }}

次のステップ