我尝试通过参数化名称来管理 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 存储桶和权限)需要担心。
我错过了什么吗?
就 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
它应该为每个构建创建一个新的应用程序版本。
当然,这可以是动态的,因为变量可以是返回所有构建列表的数据源。如果数据源尚不存在,您可以编写一个小脚本用作外部数据源.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)