Terraform 中的 Elastic Beanstalk 应用程序版本
Posted
技术标签:
【中文标题】Terraform 中的 Elastic Beanstalk 应用程序版本【英文标题】:Elastic Beanstalk Application Version in Terraform 【发布时间】: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 流程中的每个新构建。这不会发生。我们只是不断地拥有一个使用新名称和捆绑包更新的应用程序版本。这意味着我们不能回滚到以前的版本
【参考方案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 执行此操作,但您可以使用外部数据源进行处理。不过,可能值得在一个单独的问题中提出并在其中提及这个问题以上是关于Terraform 中的 Elastic Beanstalk 应用程序版本的主要内容,如果未能解决你的问题,请参考以下文章
使用 terraform 为 Elastic Beanstalk 启用托管更新
AWS Elastic Beanstalk 部署的 ActionType 在哪里?
如何使用 Terraform 为 Elastic Beanstalk 环境定义条件(每个环境)设置?