设置环境变量

Managed Airflow(第 3 代) | Managed Airflow(第 2 代) | Managed Airflow(旧版第 1 代)

本页面介绍如何在 Managed Airflow 环境中设置环境变量。

在为 DAG 提供运行时配置时,您可以使用环境变量来代替 Airflow 变量。Airflow 变量在 Airflow 数据库中设置,而环境变量在 Airflow 工作器的容器中设置。

例如,您可以在由 BashOperator 运行的命令中直接使用环境变量的名称,也可以从 DAG 中的 os.environ 对象获取此值,或者改用 Airflow 变量。

环境变量具有持久性。您指定一个环境变量后,Airflow 会一直使用它,直到您从环境中移除该变量。

Managed Service for Apache Airflow 会设置自己的预留环境变量来控制环境。

名称格式

环境变量必须与正则表达式 [a-zA-Z_][a-zA-Z0-9_]* 匹配。

Airflow 配置选项

无法指定会更改 Apache Airflow 配置选项的变量。

这些变量不能使用 AIRFLOW__{SECTION}__{KEY} 格式,也不能匹配正则表达式 AIRFLOW__[A-Z0-9_]+__[A-Z0-9_]+。例如,无法设置 AIRFLOW__WEBSERVER__DAG_DEFAULT_VIEW

不过,您可以替换 Airflow 配置选项

预留变量

以下变量名称由 Managed Airflow 保留。无法创建具有这些名称的变量。

  • AIRFLOW_DATABASE_VERSION
  • AIRFLOW_HOME
  • AIRFLOW_SRC_DIR
  • AIRFLOW_WEBSERVER
  • AUTO_GKE
  • CLOUDSDK_METRICS_ENVIRONMENT
  • CLOUD_LOGGING_ONLY
  • COMPOSER_AGENT_BUILD_SERVICE_ACCOUNT
  • COMPOSER_ENVIRONMENT
  • COMPOSER_ENVIRONMENT_SIZE
  • COMPOSER_GKE_LOCATION
  • COMPOSER_GKE_NAME
  • COMPOSER_GKE_ZONE
  • COMPOSER_LOCATION
  • COMPOSER_OPERATION_UUID
  • COMPOSER_PYTHON_VERSION
  • COMPOSER_VERSION
  • CONTAINER_NAME
  • C_FORCE_ROOT
  • DAGS_FOLDER
  • GCE_METADATA_TIMEOUT
  • GCP_PROJECT
  • GCP_TENANT_PROJECT
  • GCSFUSE_EXTRACTED
  • GCS_BUCKET
  • GKE_CLUSTER_NAME
  • GKE_IN_TENANT
  • GOOGLE_APPLICATION_CREDENTIALS

  • MAJOR_VERSION

  • MINOR_VERSION

  • PATH

  • PIP_DISABLE_PIP_VERSION_CHECK

  • PORT

  • PROJECT_ID

  • PYTHONPYCACHEPREFIX

  • PYTHONWARNINGS

  • REDIS_PASSWORD

  • REDIS_PORT

  • REDIS_USER

  • SQL_DATABASE

  • SQL_HOST

  • SQL_INSTANCE

  • SQL_PASSWORD

  • SQL_PROJECT

  • SQL_REGION

  • SQL_USER

为新环境设置环境变量

您可以在创建环境时指定环境变量。如需了解详情,请参阅创建环境

为现有环境设置环境变量

控制台

如需为现有环境设置环境变量,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往环境页面。

    转到“环境”

  2. 在环境列表中,点击您的环境名称。环境详情页面会打开。

  3. 转到环境变量标签页,然后点击修改

  4. 为您的环境添加、更改或删除环境变量:

    • 名称字段中,指定变量名称。
    • 字段中,指定变量值。
    • 如需添加额外的变量,请点击添加环境变量
    • 如需删除变量,请将指针悬停在变量上,然后点击删除项

gcloud

以下参数可控制环境变量:

  • --update-env-variables 指定要创建或更新的环境变量的逗号分割列表。

  • --remove-env-variables 指定要删除的环境变量逗号分割列表。

  • --clear-env-variables 会删除所有现有环境变量。

gcloud composer environments update \
  ENVIRONMENT_NAME \
  --location LOCATION \
  --update-env-variables=NAME=VALUE

替换:

  • ENVIRONMENT_NAME 替换为环境的名称。
  • LOCATION 替换为环境所在的区域。
  • NAME 替换为您要创建或更新的变量名称。
  • VALUE 替换为变量的值。
  • 如需添加多个变量,请用英文逗号分隔定义:NAME=VALUE,NAME=VALUE,...

例如:

gcloud composer environments update \
  example-environment \
  --location us-central1 \
  --update-env-variables=EXAMPLE_VARIABLE=True,ANOTHER_VARIABLE=test

API

构建 environments.patch API 请求。

在此请求中:

  1. updateMask 参数中,指定 config.softwareConfig.envVariables 掩码以将所有现有变量替换为指定变量。未指定的变量会被删除。

  2. 在请求正文中,指定变量及其值:

    {
      "config": {
        "softwareConfig": {
          "envVariables": {
            "VAR_NAME": "VAR_VALUE"
          }
        }
      }
    }
    

    替换:

    • VAR_NAME 替换为环境变量的名称。
    • VAR_VALUE 替换为环境变量的值。
    • 如需添加多个变量,请在 envVariables 中添加变量的额外条目。

例如:

// PATCH https://composer.googleapis.com/v1/projects/example-project/
// locations/us-central1/environments/example-environment?updateMask=
// config.softwareConfig.envVariables
{
  "config": {
    "softwareConfig": {
      "envVariables": {
        "EXAMPLE_VARIABLE": "True",
        "ANOTHER_VARIABLE": "test"
      }
    }
  }
}

Terraform

software_config 块中的 env_variables 块可用于指定环境变量。

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

  config {

    software_config {

      env_variables = {
        VAR_NAME = "VAR_VALUE"
      }

    }
  }
}

替换:

  • ENVIRONMENT_NAME 替换为环境的名称。
  • LOCATION 替换为环境所在的区域。
  • VAR_NAME 替换为环境变量的名称。
  • VAR_VALUE 替换为环境变量的值。
  • 如需添加多个变量,请在 env_variables 中添加变量的额外条目。

例如:

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

  config {

    software_config {

      env_variables = {
        EXAMPLE_VARIABLE = "True"
        ANOTHER_VARIABLE = "test"
      }
    }
  }
}

后续步骤