建立 Cloud Composer 環境

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

本頁面說明如何建立 Cloud Composer 環境。

事前準備

步驟 1:建立或選擇環境的服務帳戶

建立環境時,您會指定服務帳戶。這個服務帳戶稱為環境的服務帳戶。您的環境會使用這個服務帳戶執行大部分作業。

環境的服務帳戶並非使用者帳戶。服務帳戶是一種特殊的帳戶,由應用程式或虛擬機器 (VM) 執行個體使用,而非由人使用。

您無法事後變更環境的服務帳戶。

如果您的專案中還沒有 Cloud Composer 環境的服務帳戶,請建立一個。

如需 Terraform 中為環境建立服務帳戶的詳細範例,請參閱「建立環境 (Terraform)」一文。

如要為環境建立新的服務帳戶,請按照下列步驟操作:

  1. 按照 Identity and Access Management 說明文件中的說明建立新的服務帳戶

  2. 如需詳細資訊,請參閱 Identity and Access Management 說明文件中的授予角色一節。必要角色為 Composer Worker (composer.worker)。

  3. 如果您的環境使用資源位置限制,或從 Artifact Registry 存放區從私人存放區安裝 PyPI 套件,請將「服務帳戶使用者」 (iam.serviceAccountUser) 角色授予使用者代管的服務帳戶,讓該帳戶自行執行您的環境 (主體和資源皆為相同的服務帳戶)。

  4. 如要存取 Google Cloud 專案中的其他資源,請將額外權限授予此服務帳戶,讓該帳戶能夠存取這些資源。在大多數情況下,Composer 工作者 (composer.worker) 角色會提供這組必要權限。只有在 DAG 運作需要時,才為這個服務帳戶新增額外權限。

步驟 2:基本設定

這個步驟會在指定位置建立 Cloud Composer 環境,並設定預設參數。

主控台

  1. 在 Google Cloud 控制台中,前往「Create environment」頁面。

    前往「建立環境」

  2. 在「Name」欄位中,輸入環境名稱。

    名稱開頭必須為小寫英文字母,後面最多可接 62 個小寫英文字母、數字或連字號,但結尾不得為連字號。環境名稱會用於為環境建立子元件,因此您必須提供可做為 Cloud Storage 值區名稱的名稱。如要查看限制清單,請參閱值區命名規範

  3. 在「Location」下拉式清單中,為環境選擇位置。

    位置是指環境所在的區域。

  4. 在「映像檔版本」下拉式清單中,選取含有所需 Airflow 版本的 Cloud Composer 映像檔

  5. 在「Service account」下拉式清單中,選取環境的服務帳戶。

    如果您尚未為環境建立服務帳戶,請參閱建立或選擇環境的服務帳戶

gcloud

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version IMAGE_VERSION \
    --service-account "SERVICE_ACCOUNT"

取代:

  • ENVIRONMENT_NAME 替換為環境的名稱。

    名稱開頭必須為小寫英文字母,後面最多可接 62 個小寫英文字母、數字或連字號,但結尾不得為連字號。環境名稱會用於為環境建立子元件,因此您必須提供可做為 Cloud Storage 值區名稱的名稱。如要查看限制清單,請參閱值區命名規範

  • LOCATION 替換成環境的區域。

    位置是指環境所在的區域。

  • SERVICE_ACCOUNT 與環境的服務帳戶。

  • IMAGE_VERSION 改為 Cloud Composer 映像檔的名稱。

範例:

gcloud composer environments create example-environment \
    --location us-central1 \
    --image-version composer-2.13.2-airflow-2.10.5 \
    --service-account "
example-account@example-project.iam.gserviceaccount.com
"

API

建構 environments.create API 要求。在 Environment 資源中指定設定。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/environments/ENVIRONMENT_NAME",
  "config": {
    "softwareConfig": {
      "imageVersion": "IMAGE_VERSION"
    },
    "nodeConfig": {
      "serviceAccount": "SERVICE_ACCOUNT"
    }
  }
}

取代:

  • PROJECT_ID 替換為專案 ID

  • LOCATION 替換成環境的區域。

    位置是指環境所在的區域。

  • ENVIRONMENT_NAME 替換為環境名稱。

    名稱開頭必須為小寫英文字母,後面最多可接 62 個小寫英文字母、數字或連字號,但結尾不得為連字號。環境名稱會用於為環境建立子元件,因此您必須提供可做為 Cloud Storage 值區名稱的名稱。如要查看限制清單,請參閱值區命名規範

  • IMAGE_VERSION 改為 Cloud Composer 映像檔的名稱。

  • SERVICE_ACCOUNT 與環境的服務帳戶。

範例:

// POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments

{
  "name": "projects/example-project/locations/us-central1/environments/example-environment",
  "config": {
    "softwareConfig": {
      "imageVersion": "composer-2.13.2-airflow-2.10.5"
    },
    "nodeConfig": {
      "serviceAccount": "
example-account@example-project.iam.gserviceaccount.com
"
    }
  }
}

Terraform

如要建立含有預設參數的環境,請將下列資源區塊新增至 Terraform 設定,然後執行 terraform apply

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

  config {
    software_config {
      image_version = "IMAGE_VERSION"
    }
    node_config {
      service_account = "SERVICE_ACCOUNT"
    }
  }
}

取代:

  • ENVIRONMENT_NAME 替換為環境的名稱。

    名稱開頭必須為小寫英文字母,後面最多可接 62 個小寫英文字母、數字或連字號,但結尾不得為連字號。環境名稱會用於為環境建立子元件,因此您必須提供可做為 Cloud Storage 值區名稱的名稱。如要查看限制清單,請參閱值區命名規範

  • LOCATION 替換成環境的區域。

    位置是指環境所在的區域。

  • IMAGE_VERSION 改為 Cloud Composer 映像檔的名稱。

  • SERVICE_ACCOUNT 與環境的服務帳戶。

範例:

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

  config {
    software_config {
      image_version = "composer-2.13.2-airflow-2.10.5"
    }
    node_config {
      service_account = "
example-account@example-project.iam.gserviceaccount.com
"
    }
  }
}

步驟 3:將必要權限授予 Cloud Composer 服務帳戶

在專案中啟用 Cloud Composer API 時,系統會在專案中建立 Composer Service Agent 帳戶。Cloud Composer 會使用這個帳戶在Google Cloud 專案中執行作業。

Cloud Composer v2 API 服務代理人擴充角色可為 Cloud Composer 服務代理人帳戶提供額外權限。這個角色不會自動授予。您必須手動授權。

主控台

在專案中建立環境時,如果 Cloud Composer 服務代理程式沒有環境服務帳戶的必要權限,就會顯示「Grant required permissions to Cloud Composer service account」部分。

您將 Cloud Composer 服務代理人帳戶新增為環境服務帳戶的新主體,並將 Cloud Composer v2 API 服務代理人擴充角色授予該帳戶。

確認您使用的是環境適用的服務帳戶,然後按一下「授予」

gcloud

您將 Cloud Composer 服務代理人帳戶新增為環境服務帳戶的新主體,並將 Cloud Composer v2 API 服務代理人擴充角色授予該帳戶。

gcloud iam service-accounts add-iam-policy-binding \
    SERVICE_ACCOUNT \
    --member serviceAccount:service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com \
    --role roles/composer.ServiceAgentV2Ext

取代:

  • SERVICE_ACCOUNT 與環境的服務帳戶。
  • PROJECT_NUMBER專案編號

範例:

gcloud iam service-accounts add-iam-policy-binding \
    [email protected] \
    --member serviceAccount:service-00000000000@cloudcomposer-accounts.iam.gserviceaccount.com \
    --role roles/composer.ServiceAgentV2Ext

API

如要授予角色,您必須使用讀取 - 修改 - 寫入模式修改現有的允許政策

  1. 查看環境服務帳戶的現有許可政策。
  2. 修改該角色,加入 Cloud Composer 服務代理程式的 roles/composer.ServiceAgentV2Ext 角色。
  3. 改寫現有的允許政策。

詳情請參閱「以程式輔助方式控管存取權」。

{
  "role": "roles/composer.ServiceAgentV2Ext",
  "members": [
    "serviceAccount:service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com"
  ]
}

取代:

範例:

{
  "role": "roles/composer.ServiceAgentV2Ext",
  "members": [
    "serviceAccount:service-00000000000@cloudcomposer-accounts.iam.gserviceaccount.com"
  ]
}

Terraform

將新的角色繫結新增至環境的服務帳戶許可政策

您將 Cloud Composer 服務代理人帳戶新增為環境服務帳戶的新主體,並將 Cloud Composer v2 API 服務代理人擴充角色授予該帳戶。

如果您未使用 Terraform 定義環境的服務帳戶許可政策,請勿使用以下範例。請改用其他方法新增此繫結。

resource "google_service_account_iam_member" "custom_service_account" {
  provider = google-beta
  service_account_id = "SERVICE_ACCOUNT"
  role = "roles/composer.ServiceAgentV2Ext"
  member = "serviceAccount:service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com"
}

取代:

  • SERVICE_ACCOUNT 與環境的服務帳戶。
  • PROJECT_NUMBER專案編號

範例:

resource "google_service_account_iam_member" "custom_service_account" {
  provider = google-beta
  service_account_id = "[email protected]"
  role = "roles/composer.ServiceAgentV2Ext"
  member = "serviceAccount:service-00000000000@cloudcomposer-accounts.iam.gserviceaccount.com"
}

步驟 4:(選用) 設定環境縮放和效能參數

如要指定環境的規模和效能設定,請選取環境大小和工作負載設定。

建立環境後,您可以變更所有效能和縮放參數。

下列參數可控管規模和效能:

  • 環境大小。控管包含 Airflow 資料庫的代管 Cloud Composer 基礎架構的效能參數。如要執行大量 DAG 和工作,並提高基礎架構效能,請考慮選取較大的環境規模。舉例來說,環境越大,環境就能以最少的延遲處理的 Airflow 工作日誌項目就越多。

  • 工作負載設定:控制在環境 GKE 叢集中執行的 Airflow 元件規模和效能。

    • Airflow 排程器。剖析 DAG 定義檔案、依據排程間隔排定 DAG 執行作業,並將任務排入佇列來讓 Airflow 工作站執行。

      您的環境可以同時執行多個 Airflow 排程器。使用多個排程器將負載分配到多個排程器執行個體,以提升效能和穩定性。

      增加排程器數量不一定能改善 Airflow 效能。舉例來說,與其使用兩個排程器,不如只使用一個排程器,這樣可能會提供更好的效能。當未使用額外排程器時,就可能發生這種情況,因此會消耗環境資源,但不會提升整體效能。實際的排程器效能取決於 Airflow 工作站數量、在環境中執行的 DAG 和工作數量,以及 Airflow 和環境的設定。

      建議您先使用兩個排程器,然後監控環境效能。如果您變更排程器數量,隨時可以將環境規模縮減至原始排程器數量。

      如要進一步瞭解如何設定多個排程器,請參閱 Airflow 說明文件

    • Airflow 觸發器。以非同步方式監控環境中的所有延後工作。如果環境中至少有一個觸發器執行個體 (在高復原力環境中至少有兩個),您就可以在 DAG 中使用可延遲運算子

      在 Cloud Composer 2 中,Airflow 觸發器預設為停用狀態。如要建立含有觸發器的環境,請將觸發器數量設為一或多個。

    • Airflow 網路伺服器。執行 Airflow 網頁介面,方便您監控、管理 DAG 並以視覺化方式呈現。

    • Airflow 工作站。執行由 Airflow 排程器排定的任務。環境中的工作站數量下限和上限會根據佇列中的工作數量動態調整。

主控台

您可以為環境選取預設設定。選取預設值時,系統會自動選取該預設值的比例和效能參數。您也可以選擇自訂預設值,並指定環境的所有規模和成效參數。

如要為環境選取規模和效能設定,請在「Create environment」頁面中:

  • 如要使用預先定義的值,請在「環境資源」部分中,按一下「小」、「中」或「大」

  • 如要為比例和效能參數指定自訂值,請按照下列步驟操作:

    1. 在「環境資源」部分,按一下「自訂」

    2. 在「Scheduler」部分中,設定要使用的排程器數量,以及 CPU、記憶體和儲存空間的資源分配。

    3. 在「觸發條件」專區的「觸發條件數量」欄位中,輸入環境中的觸發條件數量。

      如果您不想在 DAG 中使用可延遲運算子,請將觸發條件數量設為零。根據預設,Cloud Composer 2 會停用觸發器。

      如果您為環境設定至少一個觸發器,請使用「CPU」和「記憶體」欄位,為觸發器設定資源分配。

    4. 在「DAG 處理器」部分,指定環境中的 DAG 處理器數量,以及每個 DAG 處理器的 CPU、記憶體和儲存空間數量。

    5. 在「Web 伺服器」部分,指定 Web 伺服器的 CPU、記憶體和儲存空間數量。

    6. 在「Worker」部分中,指定下列項目:

      • 環境中自動調度資源限制的工作站數量下限和上限。
      • 工作站的 CPU、記憶體和儲存空間配置
    7. 在「核心基礎架構」專區的「環境大小」下拉式清單中,選取環境大小。

gcloud

建立環境時,下列引數會控制環境的規模和效能參數。

  • --environment-size 會指定環境大小。
  • --scheduler-count 指定排程器數量。
  • --scheduler-cpu 可指定 Airflow 排程器的 CPU 數量。
  • --scheduler-memory 會指定 Airflow 調度器的記憶體容量。
  • --scheduler-storage 可指定 Airflow 排程器的磁碟空間量。

  • --triggerer-count 會指定環境中的 Airflow 觸發器數量。此標記的預設值為 0。如要在 DAG 中使用可延遲運算子,就需要觸發器。

    • 針對標準復原力環境,請使用介於 010 之間的值。
    • 對於具備高度彈性的環境,請使用 0 或介於 210 之間的值。
  • --triggerer-cpu 會以 vCPU 單位指定 Airflow 觸發器的 CPU 數量。允許的值:0.50.751。預設值為 0.5

  • --triggerer-memory 會以 GB 為單位,指定 Airflow 觸發器的記憶體容量。預設值為 0.5

    所需記憶體容量下限等於為觸發條件分配的 CPU 數量。允許的最大值等於觸發器 CPU 數量乘以 6.5。

    舉例來說,如果您將 --triggerer-cpu 旗標設為 1--triggerer-memory最小值1最大值則為 6.5

  • --web-server-cpu 可指定 Airflow 網路伺服器的 CPU 數量。

  • --web-server-memory 會指定 Airflow 網路伺服器的記憶體容量。

  • --web-server-storage 可指定 Airflow 網頁伺服器的磁碟空間量。

  • --worker-cpu 會指定 Airflow 工作站的 CPU 數量。

  • --worker-memory 會指定 Airflow worker 的記憶體容量。

  • --worker-storage 可指定 Airflow 工作站的磁碟空間量。

  • --min-workers 指定 Airflow 工作站數量下限。環境叢集至少會執行這個數量的 worker。

  • --max-workers 會指定 Airflow 工作站的數量上限。環境叢集最多會執行這個數量的 worker。

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-2.13.2-airflow-2.10.5 \
    --service-account "SERVICE_ACCOUNT" \
    --environment-size ENVIRONMENT_SIZE \
    --scheduler-count SCHEDULER_COUNT \
    --scheduler-cpu SCHEDULER_CPU \
    --scheduler-memory SCHEDULER_MEMORY \
    --scheduler-storage SCHEDULER_STORAGE \
    --triggerer-count TRIGGERER_COUNT \
    --triggerer-cpu TRIGGERER_CPU \
    --triggerer-memory TRIGGERER_MEMORY \
    --web-server-cpu WEB_SERVER_CPU \
    --web-server-memory WEB_SERVER_MEMORY \
    --web-server-storage WEB_SERVER_STORAGE \
    --worker-cpu WORKER_CPU \
    --worker-memory WORKER_MEMORY \
    --worker-storage WORKER_STORAGE \
    --min-workers WORKERS_MIN \
    --max-workers WORKERS_MAX

取代:

  • ENVIRONMENT_SIZE 搭配 smallmediumlarge
  • SCHEDULER_COUNT 與排程器數量。
  • SCHEDULER_CPU 與排程器的 CPU 數量,以 vCPU 為單位。
  • SCHEDULER_MEMORY 與排程器的記憶體量。
  • SCHEDULER_STORAGE 與排程器的磁碟大小。
  • TRIGGERER_COUNT 與觸發條件數量。
  • TRIGGERER_CPU 與觸發器的 CPU 數量,以 vCPU 為單位。
  • TRIGGERER_MEMORY 與觸發器的記憶體量,以 GB 為單位。

  • WEB_SERVER_CPU 與網路伺服器的 CPU 數量,單位為 vCPU。

  • WEB_SERVER_MEMORY 與網路伺服器的記憶體用量。

  • WEB_SERVER_STORAGE 與網路伺服器的記憶體用量。

  • WORKER_CPU 與工作站的 CPU 數量,單位為 vCPU。

  • WORKER_MEMORY 與工作站的記憶體用量。

  • WORKER_STORAGE 與工作站的磁碟大小。

  • WORKERS_MIN 與環境可執行的 Airflow 工作站數量下限。環境中的工作站數量不會超過這個數字,即使較少數量的 worker 也能處理負載。

  • WORKERS_MAX 與環境可執行的 Airflow 工作站數量上限。即使處理負載需要更多工作站,環境中的工作站數量也不會超過這個數字。

範例:

gcloud composer environments create example-environment \
    --location us-central1 \
    --image-version composer-2.13.2-airflow-2.10.5 \
    --service-account "
example-account@example-project.iam.gserviceaccount.com
" \
    --environment-size small \
    --scheduler-count 1 \
    --scheduler-cpu 0.5 \
    --scheduler-memory 2.5GB \
    --scheduler-storage 2GB \
    --triggerer-count 1 \
    --triggerer-cpu 0.5 \
    --triggerer-memory 0.5GB \
    --web-server-cpu 1 \
    --web-server-memory 2.5GB \
    --web-server-storage 2GB \
    --worker-cpu 1 \
    --worker-memory 2GB \
    --worker-storage 2GB \
    --min-workers 2 \
    --max-workers 4

API

建立環境時,請在「環境」>「EnvironmentConfig」EnvironmentConfig>「WorkloadsConfig」WorkloadsConfig資源中,指定環境規模和效能參數。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/environments/ENVIRONMENT_NAME",
  "config": {
    "workloadsConfig": {
      "scheduler": {
        "cpu": SCHEDULER_CPU,
        "memoryGb": SCHEDULER_MEMORY,
        "storageGb": SCHEDULER_STORAGE,
        "count": SCHEDULER_COUNT
      },
      "triggerer": {
        "count": TRIGGERER_COUNT,
        "cpu": TRIGGERER_CPU,
        "memoryGb": TRIGGERER_MEMORY
      },
      "webServer": {
        "cpu": WEB_SERVER_CPU,
        "memoryGb": WEB_SERVER_MEMORY,
        "storageGb": WEB_SERVER_STORAGE
      },
      "worker": {
        "cpu": WORKER_CPU,
        "memoryGb": WORKER_MEMORY,
        "storageGb": WORKER_STORAGE,
        "minCount": WORKERS_MIN,
        "maxCount": WORKERS_MAX
      }
    },
    "environmentSize": "ENVIRONMENT_SIZE",
    "nodeConfig": {
      "serviceAccount": "SERVICE_ACCOUNT"
    }
  }
}

取代:

  • SCHEDULER_CPU 與排程器的 CPU 數量,以 vCPU 為單位。
  • SCHEDULER_MEMORY 包含排程器的記憶體量,單位為 GB。
  • SCHEDULER_STORAGE:排程器的磁碟大小 (GB)。
  • SCHEDULER_COUNT 與排程器數量。

  • TRIGGERER_COUNT 與觸發條件數量。預設值為 0。如要在 DAG 中使用可延遲運算子,就需要觸發器。

    • 針對標準復原力環境,請使用介於 010 之間的值。
    • 對於具備高度彈性的環境,請使用 0 或介於 210 之間的值。

    如果您至少使用一個觸發器,則必須指定 TRIGGERER_CPUTRIGGERER_MEMORY 參數:

  • TRIGGERER_CPU 會以 vCPU 單位指定觸發器的 CPU 數量。允許的值:0.50.751

  • TRIGGERER_MEMORY 會設定觸發器的記憶體量。所需記憶體容量下限等於為觸發條件分配的 CPU 數量。允許的最大值等於觸發器 CPU 數量乘以 6.5。

    舉例來說,如果您將 TRIGGERER_CPU 設為 1TRIGGERER_MEMORY最小值1最大值則為 6.5

  • WEB_SERVER_CPU 與網路伺服器的 CPU 數量,單位為 vCPU。

  • WEB_SERVER_MEMORY 包含網路伺服器的記憶體量 (以 GB 為單位)。

  • WEB_SERVER_STORAGE 包含網頁伺服器的磁碟大小 (GB)。

  • WORKER_CPU 與工作站的 CPU 數量,單位為 vCPU。

  • WORKER_MEMORY 包含工作站的記憶體量,以 GB 為單位。

  • WORKER_STORAGE:工作站的磁碟大小,單位為 GB。

  • WORKERS_MIN 與環境可執行的 Airflow 工作站數量下限。環境中的工作站數量不會超過這個數字,即使較少數量的 worker 也能處理負載。

  • WORKERS_MAX 與環境可執行的 Airflow 工作站數量上限。即使處理負載需要更多工作站,環境中的工作站數量也不會超過這個數字。

  • ENVIRONMENT_SIZE 搭配環境大小 ENVIRONMENT_SIZE_SMALLENVIRONMENT_SIZE_MEDIUMENVIRONMENT_SIZE_LARGE

範例:

// POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments

{
  "name": "projects/example-project/locations/us-central1/environments/example-environment",
  "config": {
    "workloadsConfig": {
      "scheduler": {
        "cpu": 2.5,
        "memoryGb": 2.5,
        "storageGb": 2,
        "count": 1
      },
      "triggerer": {
        "cpu": 0.5,
        "memoryGb": 0.5,
        "count": 1
      },
      "webServer": {
        "cpu": 1,
        "memoryGb": 2.5,
        "storageGb": 2
      },
      "worker": {
        "cpu": 1,
        "memoryGb": 2,
        "storageGb": 2,
        "minCount": 2,
        "maxCount": 4
      }
    },
    "environmentSize": "ENVIRONMENT_SIZE_SMALL",
    "nodeConfig": {
      "serviceAccount": "
example-account@example-project.iam.gserviceaccount.com
"
    }
  }
}

Terraform

建立環境時,下列引數會控制環境的規模和效能參數。

  • config 區塊中:

    • environment_size 欄位會控制環境大小。
  • workloads_config 區塊中:

    • scheduler.cpu 欄位會指定 Airflow 排程器的 CPU 數。
    • scheduler.memory_gb 欄位會指定 Airflow 排程器的記憶體量。
    • scheduler.storage_gb 欄位會指定排程器的磁碟空間量。
    • scheduler.count 欄位會指定環境中的排程器數量。
    • triggerer.cpu 欄位會指定 Airflow 觸發器的 CPU 數量。
    • triggerer.memory_gb 欄位會指定 Airflow 觸發器的記憶體量。
    • triggerer.count 欄位會指定環境中的觸發條件數量。

    • web_server.cpu 欄位會指定 Airflow 網路伺服器的 CPU 數量。

    • web_server.memory_gb 欄位會指定 Airflow 網路伺服器的記憶體容量。

    • web_server.storage_gb 欄位會指定 Airflow 網路伺服器的磁碟空間量。

    • worker.cpu 欄位會指定 Airflow 工作站的 CPU 數量。

    • worker.memory_gb 欄位會指定 Airflow 工作站的記憶體容量。

    • worker.storage_gb 欄位會指定 Airflow worker 的磁碟空間量。

    • worker.min_count 欄位會指定環境中的工作站數量下限。

    • worker.max_count 欄位會指定環境中的工作站數量上限。

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

  config {

    workloads_config {

      scheduler {
        cpu = SCHEDULER_CPU
        memory_gb = SCHEDULER_MEMORY
        storage_gb = SCHEDULER_STORAGE
        count = SCHEDULER_COUNT
      }
      triggerer {
        count = TRIGGERER_COUNT
        cpu = TRIGGERER_CPU
        memory_gb = TRIGGERER_MEMORY
      }
      web_server {
        cpu = WEB_SERVER_CPU
        memory_gb = WEB_SERVER_MEMORY
        storage_gb = WEB_SERVER_STORAGE
      }
      worker {
        cpu = WORKER_CPU
        memory_gb = WORKER_MEMORY
        storage_gb = WORKER_STORAGE
        min_count = WORKERS_MIN
        max_count = WORKERS_MAX
      }
    }

    environment_size = "ENVIRONMENT_SIZE"

    node_config {
      service_account = "SERVICE_ACCOUNT"
    }
  }
}

取代:

  • ENVIRONMENT_NAME 替換為環境的名稱。
  • LOCATION 改成環境所在的地區。
  • SERVICE_ACCOUNT 與環境的服務帳戶。
  • SCHEDULER_CPU 與排程器的 CPU 數量,以 vCPU 為單位。
  • SCHEDULER_MEMORY 包含排程器的記憶體量,單位為 GB。
  • SCHEDULER_STORAGE:排程器的磁碟大小 (GB)。
  • SCHEDULER_COUNT 與排程器數量。
  • TRIGGERER_COUNT 與觸發條件數量。
  • TRIGGERER_CPU 與觸發器的 CPU 數量,以 vCPU 為單位。
  • TRIGGERER_MEMORY 與觸發器的記憶體量,以 GB 為單位。
  • WEB_SERVER_CPU 與網路伺服器的 CPU 數量,單位為 vCPU。
  • WEB_SERVER_MEMORY 包含網路伺服器的記憶體量 (以 GB 為單位)。
  • WEB_SERVER_STORAGE 包含網頁伺服器的磁碟大小 (GB)。
  • WORKER_CPU 與工作站的 CPU 數量,單位為 vCPU。
  • WORKER_MEMORY 包含工作站的記憶體量,以 GB 為單位。
  • WORKER_STORAGE:工作站的磁碟大小,單位為 GB。
  • WORKERS_MIN 與環境可執行的 Airflow 工作站數量下限。環境中的工作站數量不會超過這個數字,即使較少數量的 worker 也能處理負載。
  • WORKERS_MAX 與環境可執行的 Airflow 工作站數量上限。即使處理負載需要更多工作站,環境中的工作站數量也不會超過這個數字。
  • ENVIRONMENT_SIZE 搭配環境大小 ENVIRONMENT_SIZE_SMALLENVIRONMENT_SIZE_MEDIUMENVIRONMENT_SIZE_LARGE

範例:

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

  config {

    workloads_config {

      scheduler {
        cpu = 2.5
        memory_gb = 2.5
        storage_gb = 2
        count = 1
      }
      triggerer {
        count = 1
        cpu = 0.5
        memory_gb = 0.5
      }
      web_server {
        cpu = 1
        memory_gb = 2.5
        storage_gb = 2
      }
      worker {
        cpu = 1
        memory_gb = 2
        storage_gb = 2
        min_count = 2
        max_count = 4
      }
    }

    environment_size = "ENVIRONMENT_SIZE_SMALL"

    node_config {
      service_account = "
example-account@example-project.iam.gserviceaccount.com
"
    }

  }
}

步驟 5:(選用) 啟用高復原力模式

高度彈性的 Cloud Composer 環境是指使用內建備援和復原機制的環境,可降低環境發生區域故障和單點故障中斷的可能性。

高復原力環境會跨越所選區域的至少兩個可用區。在不同的區域中,執行兩個 Airflow 排程器、兩個網頁伺服器,以及至少兩個觸發器 (如果觸發器數量未設為 0)。工作站數量下限設為兩個,而環境叢集會在區域之間分配工作站執行個體。如果發生區域服務中斷,受影響的工作者執行個體會在其他區域重新排程。高復原力環境的 Cloud SQL 資料庫是指具有主執行個體和待命執行個體的區域執行個體。

主控台

在「Create environment」頁面中,執行下列操作:

  1. 在「復原力模式」部分中,選取「高復原力」

  2. 在「環境資源」部分,選取可提供高度彈性環境的縮放參數。高復原力環境需要精確的兩個排程器、零或兩到十個觸發器,以及至少兩個工作站:

    1. 按一下 [Custom] (自訂)。

    2. 在「排程器數量」下拉式清單中,選取 2

    3. 在「觸發器數量」下拉式清單中,選取 0,或 210 之間的值。為觸發器設定 CPU記憶體 分配。

    4. 在「工作站數量下限」下拉式清單中,選取 2 或更多,視所需工作站數量而定。

  3. 在「網路設定」部分:

    1. 在「網路類型」中,選取「私人 IP 環境」

    2. 視需要指定其他網路參數

gcloud

建立環境時,--enable-high-resilience 引數會啟用高復原力模式。

設定下列引數:

  • --enable-high-resilience
  • --enable-private-environment,以及私人 IP 環境的其他網路參數 (如有需要)
  • --scheduler-count2
  • --triggerer-count0,或是介於 210 之間的值。如果您使用觸發器,建立環境時也需要使用 --triggerer-cpu and--triggerer-memory` 標記。

    如要進一步瞭解 --triggerer-count--triggerer-cpu--triggerer-memory 標記,請參閱「設定環境縮放和效能參數」。

  • --min-workers2 或更多

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-2.13.2-airflow-2.10.5 \
    --service-account "SERVICE_ACCOUNT" \
    --enable-high-resilience \
    --enable-private-environment \
    --scheduler-count 2 \
    --triggerer-count 2 \
    --triggerer-cpu 0.5 \
    --triggerer-memory 0.5 \
    --min-workers 2

API

建立環境時,請在「Environment」>「EnvironmentConfig」EnvironmentConfig資源中啟用高復原力模式。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/environments/ENVIRONMENT_NAME",
  "config": {
    "resilience_mode": "HIGH_RESILIENCE",
    "nodeConfig": {
      "serviceAccount": "SERVICE_ACCOUNT"
    }

  }
}

範例:


// POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments

{
  "name": "projects/example-project/locations/us-central1/environments/example-environment",
  "config": {
    "resilience_mode": "HIGH_RESILIENCE",
    "nodeConfig": {
      "serviceAccount": "
example-account@example-project.iam.gserviceaccount.com
"
    }

  }
}

Terraform

建立環境時,config 區塊中的 resilience_mode 欄位會啟用高復原模式。

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

  config {

    resilience_mode = "HIGH_RESILIENCE"

    node_config {
      service_account = "SERVICE_ACCOUNT"
    }

  }
}

範例:

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

  config {

    resilience_mode = "HIGH_RESILIENCE"

    node_config {
      service_account = "
example-account@example-project.iam.gserviceaccount.com
"
    }
  }
}

步驟 6:(選用) 指定環境資料庫的區域

建立標準復原環境時,您可以指定偏好的 Cloud SQL 區域。

主控台

在「Create environment」頁面中,執行下列操作:

  1. 在「進階設定」部分,展開「顯示進階設定」項目。

  2. 在「Airflow 資料庫可用區」清單中,選取偏好的 Cloud SQL 可用區。

gcloud

建立環境時,--cloud-sql-preferred-zone 引數會指定偏好的 Cloud SQL 區域。

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-2.13.2-airflow-2.10.5 \
    --service-account "SERVICE_ACCOUNT" \
    --cloud-sql-preferred-zone SQL_ZONE

更改下列內容:

  • SQL_ZONE:偏好的 Cloud SQL 區域。這個可用區必須位於環境所在的區域。

範例:

gcloud composer environments create example-environment \
    --location us-central1 \
    --image-version composer-2.13.2-airflow-2.10.5 \
    --service-account "
example-account@example-project.iam.gserviceaccount.com
" \
    --cloud-sql-preferred-zone us-central1-a

API

建立環境時,請在「Environment」>「DatabaseConfig」DatabaseConfig資源中,指定偏好的 Cloud SQL 區域。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/environments/ENVIRONMENT_NAME",
  "config": {
    "databaseConfig": {
      "zone": "SQL_ZONE"
    },
      "nodeConfig": {
      "serviceAccount": "SERVICE_ACCOUNT"
    }
  }
}

更改下列內容:

  • SQL_ZONE:偏好的 Cloud SQL 區域。這個可用區必須位於環境所在的區域。

範例:


// POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments

{
  "name": "projects/example-project/locations/us-central1/environments/example-environment",
  "config": {
    "databaseConfig": {
      "zone": "us-central1-a"
    },
    "nodeConfig": {
      "serviceAccount": "
example-account@example-project.iam.gserviceaccount.com
"
    }
  }
}

Terraform

建立環境時,database_config 區塊中的 zone 欄位會指定偏好的 Cloud SQL 區域。

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

  config {
    database_config {
      zone = "SQL_ZONE"
    }

    node_config {
      service_account = "SERVICE_ACCOUNT"
    }
  }
}

更改下列內容:

  • SQL_ZONE:偏好的 Cloud SQL 區域。這個可用區必須位於環境所在的區域。

步驟 7:(選用) 設定環境的網路

網路參數取決於您要建立的環境類型:

  • 公開 IP 環境。使用預設網路參數。

  • 私人 IP 環境 (含 PSC)。在這個設定中,環境會使用 Private Service Connect 進行連線。

    設定私人 IP 環境:

    1. 為私人 IP 環境設定專案網路
    2. 建立環境時,設定 Private Service Connect
    3. 指定私人 IP 環境的其他參數,如本節所述。

    如要使用 PSC 的私人 IP 環境,您需要瞭解:

    • 您的虛擬私有雲網路 ID
    • 您的虛擬私有雲子網路 ID
    • 虛擬私有雲子網路中的兩個次要 IP 範圍:

      • pod 的次要 IP 範圍
      • 服務的次要 IP 範圍
    • 環境元件的 IP 範圍:

      • GKE 控制層 IP 範圍。GKE 控制層的 IP 範圍。
      • Cloud Composer 連線子網路。Cloud Composer 連線子網路的 IP 範圍。
  • 私人 IP 環境 (虛擬私有雲網路對等互連)。在這種設定中,環境會使用虛擬私有雲對等互連連線。

    設定私人 IP 環境:

    1. 為私人 IP 環境設定專案網路
    2. 指定私人 IP 環境的其他參數,如本節所述。

    對於含有虛擬私有雲對等互連的私人 IP 環境,您需要瞭解:

    • 您的虛擬私有雲網路 ID
    • 您的虛擬私有雲子網路 ID
    • 虛擬私有雲子網路中的兩個次要 IP 範圍:

      • pod 的次要 IP 範圍
      • 服務的次要 IP 範圍
    • 環境元件的 IP 範圍:

      • GKE 控制層的 IP 範圍。

      • 從內部 Cloud Composer 網路匯出至所選網路的虛擬私有雲對等互連 IP 範圍。Cloud Composer 基礎架構元件會使用這個範圍內的 IP 位址。

      • Cloud SQL 執行個體的 IP 範圍。

  • 對於共用虛擬私有雲環境,您必須為主專案進行額外的網路設定,然後在服務專案中建立公開或私人 IP 環境。請按照「設定共用虛擬私有雲」頁面上的操作說明進行。

    對於共用虛擬私有雲環境,您需要瞭解:

    • 主專案的 VPC 網路 ID
    • 主機專案的虛擬私有雲子網路 ID

    • 主機專案 VPC 子網路中的兩個次要 IP 範圍:

      • pod 的次要 IP 範圍
      • 服務的次要 IP 範圍

    建立共用虛擬私人雲端網路的公開 IP 環境時,您仍需要為 Pod 和服務指定主專案 VPC 網路、子網路和次要 IP 範圍。

  • 如要建立 VPC SC 環境,您必須建立服務範圍,然後在該範圍內建立私人 IP 環境。請按照「設定 VPC Service Controls」一節中的指示操作。

環境的其他網路選項如下:

  • 私人使用的公開 IP 位址。如果您想使用更多 IP 位址,環境可以私下使用特定公開 IP 位址範圍,做為 Pod 和服務的內部子網路 IP 位址範圍。
  • 授權網路。如果您想使用 HTTPS 存取私人 IP 環境的控制層,可以使用授權網路指定可執行此操作的 CIDR 範圍。
  • IP 偽裝代理程式。使用含有 IP 偽裝代理程式的環境,即可在環境的網路設定中使用多對一 IP 位址轉譯。如要進一步瞭解如何使用 IP 偽裝代理程式建立環境,請參閱「啟用 IP 偽裝代理程式」。

主控台

如要建立私人 IP 環境,請按照下列步驟操作:

  1. 請確認網路已針對要建立的環境類型進行設定。

  2. 在「網路設定」部分,展開「顯示網路設定」項目。

  3. 在「Network」下拉式選單中,選取 VPC 網路 ID。

  4. 在「Subnetwork」(子網路) 下拉式清單中,選取 VPC 子網路 ID。

  5. 在「Pod 的次要 IP 範圍」部分,選取或指定 Pod 的次要 IP 範圍。您可以使用 VPC 網路中的現有次要範圍,也可以選擇使用自動建立的範圍。

  6. 在「服務的次要 IP 範圍」部分,選取或指定服務的次要 IP 範圍。您可以使用虛擬私人雲端網路中現有的次要範圍,也可以選擇使用自動建立的範圍。

  7. 在「網路類型」部分,選取「私人 IP 環境」選項,即可建立私人 IP 環境。

  8. 在「Composer 連線」部分,選取環境的網路類型,並指定環境元件的 IP 範圍:

    針對使用 Private Service Connect 的環境:

    1. 針對使用 Private Service Connect 的環境,選取「Private Service Connect」

    2. 在「Composer 連線子網路」部分,指定 Cloud Composer 連線子網路的 IP 範圍。系統會從這個範圍內選取 PSC 端點的位址。您可以指定自訂範圍,也可以選擇使用預設範圍。

    針對使用虛擬私有雲對等互連的環境:

    1. 針對使用虛擬私有雲對等互連的環境,選取「虛擬私有雲對等互連」

    2. 在「Composer 用戶群網路的 IP 範圍」部分,指定 Cloud Composer 用戶群網路的 IP 範圍。這個網路會代管環境的 SQL Proxy 元件。您可以指定自訂範圍,也可以選擇使用預設範圍。

    3. 在「Cloud SQL 網路的 IP 範圍」部分,指定 Cloud SQL 執行個體的 IP 範圍。您可以指定自訂範圍,也可以選擇使用預設範圍。

  9. 在「GKE 控制層網路的 IP 範圍」部分,為 GKE 控制層指定 IP 範圍:

    • 如要為環境所在的地區使用預設 IP 範圍,請選取「預設 IP 範圍」

    • 如要指定自訂 IP 範圍,請選取「自訂 IP 範圍」,然後在「GKE 叢集主要執行個體私人 IP」欄位中,以 CIDR 標記法輸入範圍。

  10. 選取 GKE 控制層的存取層級。控制層有兩個端點。一個端點是私密的,供叢集節點和 VM 使用。另一個端點是公開的。您可以指定公開端點的存取層級:

    • 如要允許從授權網路存取公開端點,請勾選「使用外部 IP 位址存取叢集控制層端點」核取方塊。

      使用這個選項可將控制層的存取權層級設為「啟用公開端點存取權,啟用授權網路」。這樣一來,授權網路就能存取控制層,但存取權受到限制。根據預設,系統不會指定來源 IP 位址。您可以將授權網路新增至叢集

    • 如要停用從授權網路存取公開端點的功能,請取消勾選「使用外部 IP 位址存取叢集控制層端點」核取方塊。

      使用這個選項可將控制層的存取層級設為「Public endpoint access disabled」。這樣可防止所有網際網路存取控制層。

gcloud

請確認網路已針對要建立的環境類型進行設定。

建立環境時,下列引數會控制網路參數。如果省略參數,系統會使用預設值。

  • --enable-private-environment 會啟用私人 IP 環境。

  • --network 會指定您的 VPC 網路 ID。

  • --subnetwork 會指定您的 VPC 子網路 ID。

  • --cluster-secondary-range-name--cluster-ipv4-cidr 會設定 Pod 的次要範圍。

  • --services-secondary-range-name--services-ipv4-cidr 設定服務的次要範圍。

  • --master-ipv4-cidr 可指定 GKE 控制層的範圍。

  • (含 PSC 的環境) --connection-subnetwork 會為 Cloud Composer 連線子網路指定範圍,該子網路會代管 PSC 端點。

  • (含有虛擬私有雲對等互連的環境) --connection-type=VPC_PEERING:指定環境必須使用虛擬私有雲對等互連。

  • (含有虛擬私有雲對等互連的環境) --composer-network-ipv4-cidr 指定 Cloud Composer 租用戶網路的範圍。這個網路會代管環境的 SQL Proxy 元件

  • (含有 VPC 對等連線的環境) --cloud-sql-ipv4-cidr 會為 Cloud SQL 執行個體指定範圍。

  • --enable-private-endpoint 可控制 GKE 控制層的存取層級。控制層有兩個端點。一個端點是私有的,供叢集節點和 VM 使用。另一個端點是公開的。您可以指定公開端點的存取層級:

    • 如要允許從已授權的網路存取公開端點,請省略 --enable-private-endpoint 引數。

      使用這個選項可將控制層的存取層級設為「啟用公開端點存取權,啟用授權網路」。這樣一來,授權網路就能存取控制層,但存取權受到限制。根據預設,系統不會指定來源 IP 位址。您可以將授權網路新增至叢集

    • 如要禁止從已授權的網路存取公開端點,請指定 --enable-private-endpoint 引數。

      使用這個選項可將控制層的存取層級設為「Public endpoint access disabled」。這樣可防止所有網際網路存取控制層。

  • --enable-master-authorized-networks--master-authorized-networks 引數可為環境設定授權網路

  • --enable-privately-used-public-ips 會為您的環境設定私人使用的公開 IP 位址

  • --enable-ip-masq-agent 啟用 IP 偽裝代理程式

範例 (私人 IP 環境)

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-2.13.2-airflow-2.10.5 \
    --service-account "SERVICE_ACCOUNT" \
    --enable-private-environment \
    --network NETWORK_ID \
    --subnetwork SUBNETWORK_ID \
    --cluster-ipv4-cidr PODS_RANGE \
    --services-ipv4-cidr SERVICES_RANGE \
    --master-ipv4-cidr CONTROL_PLANE_RANGE \
    --connection-subnetwork COMPOSER_PSC_RANGE \

取代:

  • NETWORK_ID 改成您的虛擬私有雲網路 ID。
  • SUBNETWORK_ID 與您的虛擬私有雲子網路 ID。

  • PODS_RANGE 與 Pod 的次要範圍。

  • SERVICES_RANGE 與服務的次要範圍。

  • CONTROL_PLANE_RANGE 與 GKE 控制層的次要範圍。

  • COMPOSER_PSC_RANGE 與 Cloud Composer 連線子網路的範圍。

步驟 8:(選用) 新增網路標記

網路標記會套用至環境叢集中的所有節點 VM。標記可用於識別網路防火牆的有效來源或目標。清單中的每個標記都必須符合 RFC 1035

舉例來說,如果您打算使用防火牆規則限制私人 IP 環境的流量,可能就需要新增網路標記。

主控台

在「Create environment」頁面中,執行下列操作:

  1. 找出「網路設定」部分。
  2. 在「Network tags」欄位中,輸入環境的網路標記。

gcloud

建立環境時,下列引數會控制網路標記:

  • --tags 會指定套用至所有節點 VM 的網路標記逗號分隔清單。
gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-2.13.2-airflow-2.10.5 \
    --service-account "SERVICE_ACCOUNT" \
    --tags TAGS

取代:

  • TAGS,其中包含以半形逗號分隔的網路標記清單。

範例:

gcloud composer environments create example-environment \
    --location us-central1 \
    --image-version composer-2.13.2-airflow-2.10.5 \
    --tags group1,production

API

建立環境時,請在「環境」>「EnvironmentConfig」EnvironmentConfig資源中,指定環境的網路代碼。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/environments/ENVIRONMENT_NAME",
  "config": {
    "nodeConfig": {
      "tags": [
        "TAG"
      ],
      "serviceAccount": "SERVICE_ACCOUNT"
    }
  }
}

取代:

  • TAG 搭配網路標記。

範例:

// POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments

{
  "name": "projects/example-project/locations/us-central1/environments/example-environment",
  "config": {
    "nodeConfig": {
      "tags": [
        "group1",
        "production"
      ],
      "serviceAccount": "
example-account@example-project.iam.gserviceaccount.com
"
    }
  }
}

Terraform

建立環境時,請使用下列欄位定義環境的網路標記:

  • node_config 區塊中的 tags 欄位會指定以半形逗號分隔的網路標記清單,這些標記會套用至所有節點 VM。
resource "google_composer_environment" "example" {
  provider = google-beta
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {

    node_config {
      tags = ["TAGS"]
      service_account = "SERVICE_ACCOUNT"
    }
  }
}

取代:

  • TAGS,其中包含以半形逗號分隔的網路標記清單。

範例:

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

  config {
    node_config {
      tags = ["group1","production"]
      service_account = "
example-account@example-project.iam.gserviceaccount.com
"
    }
  }
}

步驟 9:(選用) 設定網路伺服器網路存取權

Airflow 網路伺服器存取參數不受環境類型影響。您可以改為個別設定網頁伺服器存取權。舉例來說,私人 IP 環境仍可透過網際網路存取 Airflow UI。

您無法使用私人 IP 位址設定允許的 IP 範圍。

主控台

在「Create environment」頁面中,執行下列操作:

  1. 在「網路設定」部分,展開「顯示網路設定」項目。

  2. 在「網路伺服器網路存取權控管」部分:

    • 如要允許從所有 IP 位址存取 Airflow 網路伺服器,請選取「允許所有 IP 位址傳出的存取要求」

    • 如要只限制存取特定 IP 範圍,請選取「只允許來自特定 IP 位址的存取要求」。在「IP 範圍」欄位中,以 CIDR 標記法指定 IP 範圍。在「Description」欄位中,指定這個範圍的選用說明。如要指定多個範圍,請按一下「新增 IP 範圍」

    • 如要禁止所有 IP 位址存取,請選取「只允許來自特定 IP 位址的存取要求」,然後按一下空白範圍項目旁的「刪除項目」

gcloud

建立環境時,下列引數會控管網路伺服器存取層級:

  • --web-server-allow-all 可讓所有 IP 位址存取 Airflow。這是預設選項。

  • --web-server-allow-ip 會限制只允許特定來源 IP 範圍的存取。如要指定多個 IP 範圍,請多次使用這個引數。

  • --web-server-deny-all 會禁止所有 IP 位址的存取權。

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-2.13.2-airflow-2.10.5 \
    --web-server-allow-ip ip_range=WS_IP_RANGE,description=WS_RANGE_DESCRIPTION

取代:

  • WS_IP_RANGE 與可存取 Airflow UI 的 IP 範圍 (以 CIDR 標記法表示)。
  • WS_RANGE_DESCRIPTION,其中包含 IP 範圍的說明。

範例:

gcloud composer environments create example-environment \
    --location us-central1 \
    --image-version composer-2.13.2-airflow-2.10.5 \
    --service-account "
example-account@example-project.iam.gserviceaccount.com
" \
    --web-server-allow-ip ip_range=192.0.2.0/24,description="office net 1" \
    --web-server-allow-ip ip_range=192.0.4.0/24,description="office net 3"

API

建立環境時,請在「環境」>「EnvironmentConfig」EnvironmentConfig資源中指定網路伺服器存取參數。

  • 如要允許所有 IP 位址存取 Airflow 網路伺服器,請省略 webServerNetworkAccessControl

  • 如要只限制特定 IP 範圍的存取權,請在 allowedIpRanges 中指定一或多個範圍。

  • 如要禁止所有 IP 位址的存取權,請新增 allowedIpRanges,並將其設為空白清單。請勿在其中指定 IP 範圍。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/environments/ENVIRONMENT_NAME",
  "config": {
    "webServerNetworkAccessControl": {
      "allowedIpRanges": [
        {
          "value": "WS_IP_RANGE",
          "description": "WS_RANGE_DESCRIPTION"
        }
      ]
    },
      "nodeConfig": {
      "serviceAccount": "SERVICE_ACCOUNT"
    }
  }
}

取代:

  • WS_IP_RANGE 與可存取 Airflow UI 的 IP 範圍 (以 CIDR 標記法表示)。
  • WS_RANGE_DESCRIPTION,其中包含 IP 範圍的說明。

範例:


// POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments

{
  "name": "projects/example-project/locations/us-central1/environments/example-environment",
  "config": {
    "webServerNetworkAccessControl": {
      "allowedIpRanges": [
        {
          "value": "192.0.2.0/24",
          "description": "office net 1"
        },
        {
          "value": "192.0.4.0/24",
          "description": "office net 3"
        }
      ]
    },
      "nodeConfig": {
        "serviceAccount": "
example-account@example-project.iam.gserviceaccount.com
"
    }
  }
}

Terraform

建立環境時,web_server_network_access_control 區塊中的 allowed_ip_range 區塊會包含可存取網路伺服器的 IP 範圍。

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

  config {

    web_server_network_access_control {

      allowed_ip_range {
        value = "WS_IP_RANGE"
        description = "WS_RANGE_DESCRIPTION"
      }
    }

    node_config {
      service_account = "SERVICE_ACCOUNT"
    }
  }
}

取代:

  • WS_IP_RANGE 與可存取 Airflow UI 的 IP 範圍 (以 CIDR 標記法表示)。
  • WS_RANGE_DESCRIPTION,其中包含 IP 範圍的說明。

範例:

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

  config {

    web_server_network_access_control {
      allowed_ip_range {
        value = "192.0.2.0/24"
        description = "office net 1"
      },
      allowed_ip_range {
        value = "192.0.4.0/24"
        description = "office net 3"
      }
    }

    node_config {
      service_account = "
example-account@example-project.iam.gserviceaccount.com
"
    }

}

步驟 10:(選用) 指定 Airflow 設定覆寫值和環境變數

您可以在建立環境時設定 Airflow 覆寫設定環境變數。或者,您也可以在環境建立完成後再進行這項操作。

部分 Airflow 設定選項遭到封鎖,因此您無法覆寫這些選項。

如需可用的 Airflow 設定選項清單,請參閱 Airflow 2 設定參考資料Airflow 1.10.*

如要指定 Airflow 設定覆寫和環境變數,請按照下列步驟操作:

主控台

在「Create environment」頁面中,執行下列操作:

  1. 在「環境變數」區段中,按一下「新增環境變數」

  2. 輸入環境變數的「名稱」和「值」

  3. 在「Airflow configuration overrides」(Airflow 設定覆寫) 部分,按一下「Add Airflow configuration override」(新增 Airflow 設定覆寫)

  4. 輸入設定選項覆寫值的區段

    例如:

    區段
    webserver dag_orientation TB

gcloud

建立環境時,下列引數會控制環境變數和 Airflow 設定覆寫值:

  • --env-variables 會指定以逗號分隔的環境變數清單。

    變數名稱可包含大小寫英文字母、數字和底線,但不得以數字開頭。

  • --airflow-configs 會指定 Airflow 設定覆寫值的鍵和值清單 (以逗號分隔)。

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-2.13.2-airflow-2.10.5 \
    --service-account "SERVICE_ACCOUNT" \
    --env-variables ENV_VARS \
    --airflow-configs CONFIG_OVERRIDES

取代:

  • ENV_VARS 包含以半形逗號分隔的環境變數 NAME=VALUE 組合清單。
  • CONFIG_OVERRIDES 包含以逗號分隔的 SECTION-KEY=VALUE 組合清單,用於設定覆寫。請使用 - 符號分隔設定區段名稱,後方依序加上鍵名。例如:core-dags_are_paused_at_creation

範例:

gcloud composer environments create example-environment \
    --location us-central1 \
    --image-version composer-2.13.2-airflow-2.10.5 \
    --service-account "
example-account@example-project.iam.gserviceaccount.com
" \
    --env-variables SENDGRID_MAIL_FROM=[email protected],SENDGRID_API_KEY=example-key \
    --airflow-configs core-dags_are_paused_at_creation=True,webserver-dag_orientation=TB

API

建立環境時,請在「環境」>「EnvironmentConfig」EnvironmentConfig資源中指定環境變數和 Airflow 設定覆寫值。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/environments/ENVIRONMENT_NAME",
  "config": {
    "softwareConfig": {
      "airflowConfigOverrides": {
        "SECTION-KEY": "OVERRIDE_VALUE"
      },
      "envVariables": {
        "VAR_NAME": "VAR_VALUE",
      }
    },
    "nodeConfig": {
      "serviceAccount": "SERVICE_ACCOUNT"
    }
  }
}

取代:

  • SECTION 與設定檔中 Airflow 設定選項所在的部分。
  • KEY,其中包含 Airflow 設定選項的名稱。
  • OVERRIDE_VALUE,其值為 Airflow 設定選項。
  • VAR_NAME 與環境變數名稱。
  • VAR_VALUE 與環境變數的值。

範例:

// POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments

{
  "name": "projects/example-project/locations/us-central1/environments/example-environment",
  "config": {
    "softwareConfig": {
      "airflowConfigOverrides": {
        "core-dags_are_paused_at_creation": "True",
        "webserver-dag_orientation": "TB"
      },
      "envVariables": {
        "SENDGRID_MAIL_FROM": "[email protected]",
        "SENDGRID_API_KEY": "example-key"
      }
    },
    "nodeConfig": {
        "serviceAccount": "
example-account@example-project.iam.gserviceaccount.com
"
    }
  }
}

Terraform

建立環境時,下列區塊會控制環境變數和 Airflow 設定覆寫值:

  • software_config 區塊中的 env_variables 區塊會指定環境變數。

    變數名稱可包含大小寫英文字母、數字和底線,但不得以數字開頭。

  • software_config 區塊中的 airflow_config_overrides 區塊會指定 Airflow 設定覆寫值。

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

  config {

    software_config {

      airflow_config_overrides = {
        SECTION-KEY = "OVERRIDE_VALUE"
      }

      env_variables = {
        VAR_NAME = "VAR_VALUE"
      }
    }

    node_config {
      service_account = "SERVICE_ACCOUNT"
    }

  }
}

取代:

  • SECTION 與設定檔中 Airflow 設定選項所在的部分。
  • KEY,其中包含 Airflow 設定選項的名稱。
  • OVERRIDE_VALUE,其值為 Airflow 設定選項。
  • VAR_NAME 與環境變數名稱。
  • VAR_VALUE 與環境變數的值。

範例:

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

  config {

    software_config {

      airflow_config_overrides = {
        core-dags_are_paused_at_creation = "True"
        webserver-dag_orientation = "TB"
      }

      env_variables = {
        SENDGRID_MAIL_FROM = "[email protected]"
        SENDGRID_API_KEY = "example-key"
      }
    }

    node_config {
      service_account = "
example-account@example-project.iam.gserviceaccount.com
"
    }
  }
}

步驟 11:(選用) 指定維護期間

Cloud Composer 2 的預設維護時間為每週週五、週六和週日的 00:00:00 到 04:00:00 (格林威治標準時間)。

如要為環境指定自訂維護期間,請按照下列步驟操作:

主控台

在「Create environment」頁面中

  1. 找出「維護期間」部分。

  2. 在「時區」下拉式清單中,選擇維護時段的時區。

  3. 設定「開始時間」、「天數」和「長度」,以便:

    • 每週至少分配 12 小時。

    • 您可以使用多個時段,但每個時段的時間長度必須至少為 4 小時。

    舉例來說,每週一、週三和週五的 4 小時時間長度符合需求。

gcloud

下列引數可定義維護期間參數:

  • --maintenance-window-start 會設定維護期間的開始時間。
  • --maintenance-window-end 會設定維護期間的結束時間。
  • --maintenance-window-recurrence 會設定維護期間週期
gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-2.13.2-airflow-2.10.5 \
    --service-account "SERVICE_ACCOUNT" \
    --maintenance-window-start 'DATETIME_START' \
    --maintenance-window-end 'DATETIME_END' \
    --maintenance-window-recurrence 'MAINTENANCE_RECURRENCE'

取代:

  • ENVIRONMENT_NAME 替換為環境的名稱。
  • DATETIME_START 的開始日期和時間,以日期/時間輸入格式表示。只使用當天指定的時間,系統會忽略指定的日期。
  • DATETIME_END 結束日期和時間,格式為日期/時間輸入格式。系統只會使用當天指定的時間,而忽略指定的日期。指定的日期和時間必須晚於開始日期。
  • MAINTENANCE_RECURRENCE 搭配 RFC 5545 RRULE,用於維護期間的重複時間。Cloud Composer 支援兩種格式:

  • FREQ=DAILY 格式指定每日週期。

  • FREQ=WEEKLY;BYDAY=SU,MO,TU,WE,TH,FR,SA 格式會指定在所選星期幾重複發生的事件。

以下範例指定星期三、星期六和星期日的 01:00 至 07:00 (世界標準時間) 之間的 6 小時維護期間。系統會忽略 2023 年 1 月 1 日的日期。

gcloud composer environments create example-environment \
  --location us-central1 \
  --image-version composer-2.13.2-airflow-2.10.5 \
  --service-account "
example-account@example-project.iam.gserviceaccount.com
" \
  --maintenance-window-start '2023-01-01T01:00:00Z' \
  --maintenance-window-end '2023-01-01T07:00:00Z' \
  --maintenance-window-recurrence 'FREQ=WEEKLY;BYDAY=SU,WE,SA'

API

建立環境時,請在 Environment > EnvironmentConfig 資源中指定維護時段參數:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/environments/ENVIRONMENT_NAME",
  "config": {
    "maintenanceWindow": {
        "startTime": "DATETIME_START",
        "endTime": "DATETIME_END",
        "recurrence": "MAINTENANCE_RECURRENCE"
    },
    "nodeConfig": {
      "serviceAccount": "SERVICE_ACCOUNT"
    }
  }
}

取代:

  • DATETIME_START 的開始日期和時間,以日期/時間輸入格式表示。系統只會使用當天指定的時間,而忽略指定的日期。
  • DATETIME_END 結束日期和時間,格式為日期/時間輸入格式。系統只會使用當天指定的時間,而忽略指定的日期。指定的日期和時間必須晚於開始日期。
  • MAINTENANCE_RECURRENCE 搭配維護期間重複的 RFC 5545 RRULE。Cloud Composer 支援兩種格式:

  • FREQ=DAILY 格式指定每日週期。

  • FREQ=WEEKLY;BYDAY=SU,MO,TU,WE,TH,FR,SA 格式會指定在所選星期幾重複發生的事件。

以下範例指定星期三、星期六和星期日的 01:00 至 07:00 (世界標準時間) 之間的 6 小時維護期間。系統會忽略 2023 年 1 月 1 日的日期。

範例:

// POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments

{
  "name": "projects/example-project/locations/us-central1/environments/example-environment",
  "config": {
    "maintenanceWindow": {
        "startTime": "2023-01-01T01:00:00Z",
        "endTime": "2023-01-01T07:00:00Z",
        "recurrence": "FREQ=WEEKLY;BYDAY=SU,WE,SA"
    },
    "nodeConfig": {
      "serviceAccount": "SERVICE_ACCOUNT"
    }
  }
}

Terraform

maintenance_window 區塊會指定環境的維護期間:

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

  config {
    maintenance_window {
      start_time = "DATETIME_START"
      end_time = "DATETIME_END"
      recurrence = "MAINTENANCE_RECURRENCE"
    }

    node_config {
      service_account = "SERVICE_ACCOUNT"
    }
  }
}

取代:

  • DATETIME_START 的開始日期和時間,以日期/時間輸入格式表示。系統只會使用當天指定的時間,而忽略指定的日期。
  • DATETIME_END 結束日期和時間,格式為日期/時間輸入格式。系統只會使用當天指定的時間,而忽略指定的日期。指定的日期和時間必須晚於開始日期。
  • MAINTENANCE_RECURRENCE 搭配維護期間重複的 RFC 5545 RRULE。Cloud Composer 支援兩種格式:

    • FREQ=DAILY 格式指定每日週期。
    • FREQ=WEEKLY;BYDAY=SU,MO,TU,WE,TH,FR,SA 格式會指定在所選星期幾重複發生的事件。

以下範例指定星期三、星期六和星期日的 01:00 至 07:00 (世界標準時間) 之間的 6 小時維護期間。系統會忽略 2023 年 1 月 1 日的日期。

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

  config {
    maintenance_window {
      start_time = "2023-01-01T01:00:00Z"
      end_time = "2023-01-01T07:00:00Z"
      recurrence = "FREQ=WEEKLY;BYDAY=SU,WE,SA"
    }
  }
}

步驟 12:(選用) 資料歷程整合

資料歷程是 Dataplex 通用目錄的功能,可讓您追蹤資料移動情形。

資料歷程整合功能適用於 Cloud Composer 2 2.1.2 以上版本,搭配 Airflow 2.2.5 以上版本。

如果符合下列條件,系統會在新的 Cloud Composer 環境中自動啟用資料歷程整合功能:

  • 專案中已啟用 Data Lineage API。詳情請參閱 Dataplex 通用目錄說明文件中的「啟用資料系譜 API」。

  • 在 Airflow 中未設定自訂的Lineage 後端

您可以在建立環境時停用資料沿革整合功能。例如,如果您想在環境建立後,稍後再啟用資料沿革記錄,則可覆寫自動行為。

主控台

如要停用資料歷程整合功能,請在「Create environment」頁面中:

  1. 在「進階設定」部分,展開「顯示進階設定」項目。

  2. 在「Dataplex 資料歷程整合」部分,選取「停用 Dataplex 資料歷程整合」

gcloud

建立環境時,--disable-cloud-data-lineage-integration 引數會停用資料系譜整合功能。

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-2.13.2-airflow-2.10.5 \
    --service-account "SERVICE_ACCOUNT" \
    --disable-cloud-data-lineage-integration

取代:

  • ENVIRONMENT_NAME 替換為環境的名稱。
  • LOCATION 改成環境所在的地區。

範例:

gcloud composer environments create example-environment \
    --location us-central1 \
    --image-version composer-2.13.2-airflow-2.10.5 \
    --service-account "
example-account@example-project.iam.gserviceaccount.com
" \
    --disable-cloud-data-lineage-integration

步驟 13:(選用) 設定資料加密 (CMEK)

根據預設,環境中的資料會使用 Google 提供的金鑰加密。

如要使用客戶自行管理的加密金鑰 (CMEK) 加密環境中的資料,請按照「使用客戶自行管理的加密金鑰」一文中的指示操作。

步驟 14:(選用) 使用自訂環境的 bucket

建立環境時,Cloud Composer 會自動為環境建立值區。

您也可以改為在專案中指定自訂 Cloud Storage 值區。您的環境會以與自動建立的值區相同的方式使用這個值區。

如要使用自訂環境值區,請按照「使用自訂環境的值區」一文中的指示操作。

步驟 15:(選用) 指定環境標籤

您可以為環境指派標籤,根據這些標籤細分帳單費用

主控台

在「Create environment」頁面的「Labels」專區中:

  1. 按一下「新增標籤」

  2. 在「Key」和「Value」欄位中,指定環境標籤的鍵/值組合。

gcloud

建立環境時,--labels 引數會指定以逗號分隔的鍵/值清單,並附上環境標籤。

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-2.13.2-airflow-2.10.5 \
    --service-account "SERVICE_ACCOUNT" \
    --labels LABELS

取代:

  • LABELS 包含環境標籤的半形逗號分隔 KEY=VALUE 組合清單。

範例:

gcloud composer environments create example-environment \
    --location us-central1 \
    --image-version composer-2.13.2-airflow-2.10.5 \
    --service-account "
example-account@example-project.iam.gserviceaccount.com
" \
    --labels owner=engineering-team,env=production

API

建立環境時,請在「環境」資源中指定環境的標籤。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/environments/ENVIRONMENT_NAME",
  "labels": {
    "LABEL_KEY": "LABEL_VALUE"
  }
}

取代:

  • LABEL_KEY 與環境標籤的鍵。
  • LABEL_VALUE,其值為環境標籤。

範例:


// POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments

{
  "name": "projects/example-project/locations/us-central1/environments/example-environment",
  "labels": {
    "owner": "engineering-team",
    "env": "production"
  }
}

Terraform

建立環境時,請在 labels 區塊 (config 區塊外) 中指定標籤。

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

  labels = {
    LABEL_KEY = "LABEL_VALUE"
  }

}

取代:

  • LABEL_KEY 與環境標籤的鍵。
  • LABEL_VALUE,其值為環境標籤。

範例:

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

  labels = {
    owner = "engineering-team"
    env = "production"
  }

}

後續步驟