【问题标题】:How to pass aws_elastic_beanstalk_environment settings to a Terraform module如何将 aws_elastic_beanstalk_environment 设置传递给 Terraform 模块
【发布时间】:2017-01-04 05:46:56
【问题描述】:

我正在使用 Terraform 模块来管理 AWS Elastic Beanstalk 应用程序和环境,并希望将环境变量列表传递给该模块。

由于缺乏更好的解决方案,我目前正在传递名称和值的平面列表,并声明固定数量的 setting 节(见下文)。这似乎行得通,除非当然有人要传递比我预期更多的环境变量。

那么 - 有没有更好的方法来实现这一点?

# 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)}"
  }
}

【问题讨论】:

    标签: amazon-web-services amazon-elastic-beanstalk terraform


    【解决方案1】:

    在 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}"]
    }
    

    【讨论】:

    • 直到 Terraform 0.12 到达这个工作但有警告 - see this issue
    猜你喜欢
    • 2018-09-07
    • 2019-05-20
    • 2023-03-23
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    相关资源
    最近更新 更多