Мне нужно изменить, используя Terraform, project_id по умолчанию в моей среде Composer, чтобы что я могу получить доступ к секретам другого проекта. Для этого, согласно Terraform, мне нужна переменная airflow_config_overrides. Думаю, у меня должно получиться что-то вроде этого:

resource "google_composer_environment" "test" {
  # ...

  config {
    software_config {
      airflow_config_overrides = {
        secrets-backend = "airflow.providers.google.cloud.secrets.secret_manager.CloudSecretManagerBackend",
        secrets-backend_kwargs = {"project_id":"9999999999999"}
      }
    }
  }
}

Похоже, что ключ раздела secret-backend работает. С другой стороны, secrets-backend_kwargs возвращает следующую ошибку:

Inappropriate value for attribute "airflow_config_overrides": element "secrets-backend_kwargs": string required

Похоже, проблема в том, что GCP ожидает формат JSON, а Terraform требует строку. Как я могу заставить Terraform предоставлять его в нужном формате?

1
Matheus Schaly 11 Фев 2021 в 23:36

1 ответ

Лучший ответ

Вы можете преобразовать карту, такую ​​как {"project_id":"9999999999999"}, в закодированную строку JSON, используя jsonencode функция.

Итак, объединяя пример, приведенный в google_composer_environment ресурсная документация с вашей конфигурацией в вопросе, вы можете сделать что-то вроде этого:

resource "google_composer_environment" "test" {
  name   = "mycomposer"
  region = "us-central1"

  config {
    software_config {
      airflow_config_overrides = {
        secrets-backend = "airflow.providers.google.cloud.secrets.secret_manager.CloudSecretManagerBackend",
        secrets-backend_kwargs = jsonencode({"project_id":"9999999999999"})
      }

      pypi_packages = {
        numpy = ""
        scipy = "==1.1.0"
      }

      env_variables = {
        FOO = "bar"
      }
    }
  }
}
1
ydaetskcoR 12 Фев 2021 в 18:51