3

Я использую модуль Terraform для управления приложениями и средами AWS Elastic Beanstalk и хочу передать список переменных среды в модуль.Как передать параметры aws_elastic_beanstalk_environment в модуль Terraform

Из-за отсутствия лучшего решения, я сейчас перехожу к плоскому списку имен и значений и объявляю фиксированное число setting stanzas (см. Ниже). Кажется, это работает, если, конечно, кто-то не примет более переменные окружения, чем я ожидал.

Итак - есть ли лучший способ достичь этого?

# file: main.tf 
variable env_vars { 
    default = ["FIRST_ENV_VAR", "1", "SECOND_ENV_VAR", "2"] 
} 

provider "aws" { 
    region = "eu-central-1" 
} 

module "beanstalk-app" { 
    source = "./beanstalk" 
    env_vars = "${var.env_vars}" 
} 

# file: beanstalk/main.tf 
variable "env_vars" { 
    type = "list" 
} 

resource "aws_elastic_beanstalk_application" "app" { 
    name = "myapp" 
} 

resource "aws_elastic_beanstalk_environment" "env" { 
    name    = "myapp-env" 
    application   = "${aws_elastic_beanstalk_application.app.name}" 
    solution_stack_name = "64bit Amazon Linux 2016.03 v2.1.3 running Tomcat 8 Java 8" 

    setting { 
    namespace = "aws:elasticbeanstalk:application:environment" 
    name  = "${element(var.env_vars, 0)}" 
    value  = "${element(var.env_vars, 1)}" 
    } 

    setting { 
    namespace = "aws:elasticbeanstalk:application:environment" 
    name  = "${element(var.env_vars, 2)}" 
    value  = "${element(var.env_vars, 3)}" 
    } 

    setting { 
    namespace = "aws:elasticbeanstalk:application:environment" 
    name  = "${element(var.env_vars, 4)}" 
    value  = "${element(var.env_vars, 5)}" 
    } 
} 

ответ

0

В HCL повторяющихся блоков объекта эквивалентны списку (см here . Таким образом, вы можете передать переменную (список карт) для settings.

variable "settings" { 
    type = "list" 
    default = [ 
    { 
     namespace = "aws:elasticbeanstalk:application:environment" 
     name  = "FOO" 
     value  = "BAR" 
    }, 
    { 
     namespace = "aws:elasticbeanstalk:application:environment" 
     name  = "BAZ" 
     value  = "HAZ" 
    }, 
    ] 
} 

resource "aws_elastic_beanstalk_environment" "env" { 
    name    = "myapp-env" 
    application   = "${aws_elastic_beanstalk_application.app.name}" 
    solution_stack_name = "64bit Amazon Linux 2016.03 v2.1.3 running Tomcat 8 Java 8" 
    setting = ["${var.settings}"] 
}