我尝试使用Beanstalk设置一个Tomcat。
这是我的地形代码:
(存储桶是事先创建的(
# Upload the JAR to bucket
resource "aws_s3_bucket_object" "myjar" {
bucket = "${aws_s3_bucket.mybucket.id}"
key = "src/java-tomcat-v3.zip"
source = "${path.module}/src/java-tomcat-v3.zip"
etag = "${md5(file("${path.module}/src/java-tomcat-v3.zip"))}"
}
# Define app
resource "aws_elastic_beanstalk_application" "tftestapp" {
name = "tf-test-name"
description = "tf-test-desc"
}
# Define beanstalk jar version
resource "aws_elastic_beanstalk_application_version" "myjarversion" {
name = "tf-test-version-label"
application = "tf-test-name"
description = "My description"
bucket = "${aws_s3_bucket.mybucket.id}"
key = "${aws_s3_bucket_object.myjar.id}"
force_delete = true
}
# Deploy env
resource "aws_elastic_beanstalk_environment" "tftestenv" {
name = "tf-test-name"
application = "${aws_elastic_beanstalk_application.tftestapp.name}"
solution_stack_name = "64bit Amazon Linux 2018.03 v3.0.0 running Tomcat 7 Java 7"
setting {
namespace = "aws:autoscaling:asg"
name = "MinSize"
value = "1"
}
...
}
我最终遇到了一个非常奇怪的错误,说它在存储桶上找不到文件。
无效参数组合:无法从 S3 位置下载 (Bucket: mybucket Key: src/java-tomcat-v3.zip(。原因:未找到
尽管如此,连接到 Web 控制台并访问我的存储桶,我可以看到 zip 文件就在那里......
我不明白,有什么帮助吗?
PS:我尝试过有和没有src/
干杯
我最近在 Terraform 0.13 上遇到了同样的错误。
0.13 和旧版本之间的差异: 文档似乎已过时。 例如,在aws_elastic_beanstalk_application_version下显示
resource "aws_s3_bucket" "default" {
bucket = "tftest.applicationversion.bucket"
}
resource "aws_s3_bucket_object" "default" {
bucket = aws_s3_bucket.default.id
key = "beanstalk/go-v1.zip"
source = "go-v1.zip"
}
resource "aws_elastic_beanstalk_application" "default" {
name = "tf-test-name"
description = "tf-test-desc"
}
resource "aws_elastic_beanstalk_application_version" "default" {
name = "tf-test-version-label"
application = "tf-test-name"
description = "application version created by terraform"
bucket = aws_s3_bucket.default.id
key = aws_s3_bucket_object.default.id
}
如果您尝试使用它,则存储桶对象将失败,因为"source"参数在aws_elastic_beanstalk_application_version中不再可用。 删除"源"属性后,它移动到下一个问题,即Error: InvalidParameterCombination: Unable to download from S3 location (Bucket: mybucket Key: mybucket/myfile.txt). Reason: Not Found
此错误来自地形图:
resource "aws_s3_bucket" "bucket" {
bucket = "mybucket"
}
resource "aws_s3_bucket_object" "default" {
bucket = aws_s3_bucket.bucket.id
key = "myfile.txt"
}
resource "aws_elastic_beanstalk_application" "default" {
name = "tf-test-name"
description = "tf-test-desc"
}
resource "aws_elastic_beanstalk_application_version" "default" {
name = "tf-test-version-label"
application = "tf-test-name"
description = "application version created by terraform"
bucket = aws_s3_bucket.bucket.id
key = aws_s3_bucket_object.default.id
}
Terraform最终在这里所做的是它将存储桶附加到键之前。 当您运行terraform plan
时,您会看到存储桶 = "mybucket" 和 key = "mybucket/myfile.txt"。 这样做的问题是,Terraform在存储桶中查找文件"mybucket/myfile.txt",而它应该只查找"myfile.txt
溶液
我所做的是从脚本中删除存储桶和存储桶对象资源,并将名称放在变量中,如下所示:
variable "sourceCodeS3BucketName" {
type = string
description = "The bucket that contains the engine code."
default = "mybucket"
}
variable "sourceCodeFilename" {
type = string
description = "The code file name."
default = "myfile.txt"
}
resource "aws_elastic_beanstalk_application" "myApp" {
name = "my-beanstalk-app"
description = "My application"
}
resource "aws_elastic_beanstalk_application_version" "v1_0_0" {
name = "my-application-v1_0_0"
application = aws_elastic_beanstalk_application.myApp.name
description = "Application v1.0.0"
bucket = var.sourceCodeS3BucketName
key = var.sourceCodeFilename
}
通过直接使用文件和存储桶的名称,Terraform 不会在键前面附加存储桶名称,并且可以很好地找到文件。