我尝试通过参数化名称来管理我的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存储桶和担心的权限。
我错过了什么吗?
答案 0 :(得分:2)
就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的小脚本。