TL;DR
Это ошибка в документе GCP Настройка вашей среды с помощью Secret Manager. Префиксы различаются в этих двух бэкендах. Вам нужно использовать префикс airflow-config
для серверной части airflow.providers.google.cloud.secrets.secret_manager.CloudSecretManagerBackend
и airflow-variables
для серверной части airflow.contrib.secrets.gcp_secrets_manager.CloudSecretsManagerBackend
для доступа к секрету в SecretManager. Так что мое секретное имя в SecretManager должно быть airflow-config-smtp-password
вместо airflow-variables-smtp-password
.
Согласно документу Настройка среды с помощью Secret Manager, рекомендуется использовать секретный сервер airflow.providers.google.cloud.secrets.secret_manager.CloudSecretManagerBackend
.
И особенно в документе есть предупреждение
Внимание! Не используйте airflow.contrib.secrets.gcp_secrets_manager.CloudSecretsManagerBackend, поскольку это значение не позволяет просматривать журналы в пользовательском интерфейсе веб-сервера Airflow.
А в документе Настройка пароля SMTP для сторонней службы SMTP приводится пример того, как хранить пароль SMTP в Secret Manager:
echo -n "SMTP_PASSWORD" | gcloud beta secrets create \
airflow-variables-smtp-password \
--data-file=- \
--replication-policy=automatic
В качестве префикса секретной переменной используется airflow-variables
.
Но проблема в том, что серверная часть airflow.providers.google.cloud.secrets.secret_manager.CloudSecretManagerBackend
использует префикс airflow-config
для секретных конфигураций
в исходном коде /opt/python3.6/lib/python3.6/site-packages/airflow/providers/google/cloud/secrets/secret_manager.py
def __init__(
...
variables_prefix: str = "airflow-variables",
config_prefix: str = "airflow-config",
...
) -> None:
...
def get_variable(self, key: str) -> Optional[str]:
...
return self._get_secret(self.variables_prefix, key)
def get_config(self, key: str) -> Optional[str]:
...
return self._get_secret(self.config_prefix, key)
А серверная часть airflow.contrib.secrets.gcp_secrets_manager.CloudSecretsManagerBackend
использует префикс airflow-variables
как для переменных, так и для секретных конфигураций
в исходном коде /usr/local/lib/airflow/airflow/contrib/secrets/gcp_secrets_manager.py
def __init__(
...
variables_prefix="airflow-variables", # type: str
...
):
...
def get_variable(self, key):
...
return self._get_secret(self.variables_prefix, key)
Поэтому, если вы следуете предложенному бэкенду, вам следует использовать airflow-config
в качестве префикса секретной переменной. В моем случае это должно быть airflow-config-smtp-password
в секретном менеджере.