AWS Beanstalk Tomcat and Terraform



我尝试使用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 不会在键前面附加存储桶名称,并且可以很好地找到文件。

最新更新