【问题标题】:Elastic Beanstalk Application Version in TerraformTerraform 中的 Elastic Beanstalk 应用程序版本
【发布时间】:2017-11-28 05:10:49
【问题描述】:

我尝试通过参数化名称来管理我的 terraform 模板中的应用程序版本。这是一种尝试,只要应用程序的内容发生变化,我们的 CI 流程就会创建一个新的应用程序版本。这样,在 elasticbeanstalk 中,我可以保留历史应用程序版本的列表,以便我可以回滚等。这不起作用,因为同一应用程序版本不断更新,实际上我丢失了所有应用程序版本的历史记录。

resource "aws_elastic_beanstalk_application_version" "default" {
   name        = "${var.eb-app-name}-${var.build-number}"
   application = "${var.eb-app-name}"
   description = "application version created by terraform"
   bucket      = "${aws_s3_bucket.default.id}"
   key         = "${aws_s3_bucket_object.default.id}"
}

然后我尝试参数化逻辑资源引用名称,但 terraform 不支持。

resource "aws_elastic_beanstalk_application_version" "${var.build-number}" {
   name        = "${var.eb-app-name}-${var.build-number}"
   application = "${var.eb-app-name}"
   description = "application version created by terraform"
   bucket      = "${aws_s3_bucket.default.id}"
   key         = "${aws_s3_bucket_object.default.id}"
}

目前我的解决方案是在 terraform 之外管理我的应用程序版本,这令人失望,因为还有其他相关资源,例如 S3 存储桶和权限需要担心。

我错过了什么吗?

【问题讨论】:

  • 我的理解是,var.build-number 是独一无二的,对吧?所以名称name = "${var.eb-app-name}-${var.build-number}" 也将是唯一的。您可以将其更新和更改为输入变量。然后你可以用它控制EB应用程序版本。那么真正的问题是什么?请提供任何详细信息。
  • 正如我所描述的,我的目标是在每次${var.eb-app-name}-${var.build-number} 更改时创建一个新的应用程序版本。即我们 CI 流程中的每个新构建。这不会发生。我们只是不断地拥有一个使用新名称和捆绑包更新的应用程序版本。这意味着我们不能回滚到以前的版本

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


【解决方案1】:

就 Terraform 而言,您只是在那里更新单个 EB 应用程序版本资源。如果您想保留以前的版本,那么您可能需要尝试增加 Terraform 管理的资源数量。

在我的脑海中,你可以尝试这样的事情:

variable "builds" = {
  type = list
}

resource "aws_elastic_beanstalk_application_version" "default" {
   count       = "${length(var.builds)}"
   name        = "${var.eb-app-name}-${element(builds, count.index)}"
   application = "${var.eb-app-name}"
   description = "application version created by terraform"
   bucket      = "${aws_s3_bucket.default.id}"
   key         = "${aws_s3_bucket_object.default.id}"
}

如果你有一个builds 列表,它应该为每个构建创建一个新的应用程序版本。

当然,这可能是动态的,因为变量可以是返回所有构建列表的数据源。如果数据源不存在,您可以编写一个小脚本用作external data source

【讨论】:

  • 您将如何使用 S3 存储桶数据源来执行此操作?所有版本包都在一个 S3 存储桶中。使用该存储桶作为数据源的语法是什么?
  • 您需要动态获取 S3 存储桶中的对象列表。不幸的是,您不能直接使用 Terraform 执行此操作,但您可以使用外部数据源进行处理。不过,可能值得在一个单独的问题中提出并在其中提及这个问题
猜你喜欢
  • 2020-11-07
  • 2015-03-05
  • 2013-11-23
  • 1970-01-01
  • 2018-12-27
  • 2022-08-12
  • 2015-11-20
  • 2018-08-21
  • 2015-06-12
相关资源
最近更新 更多