[英]AWS Beanstalk Tomcat and Terraform
我嘗試使用 Beanstalk 設置 Tomcat。
這是我的 Terraform 代碼:
(桶是預先創建的)
# 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"
}
...
}
我最終遇到了一個非常奇怪的錯誤,說它找不到存儲桶上的文件。
InvalidParameterCombination:無法從 S3 位置下載(存儲桶:mybucket 密鑰: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
}
如果您嘗試使用它,則 terraform 會因存儲桶對象而失敗,因為“源”參數在 aws_elastic_beanstalk_application_version 中不再可用。 刪除“源”屬性后,它移到下一個問題,即Error: InvalidParameterCombination: Unable to download from S3 location (Bucket: mybucket Key: mybucket/myfile.txt). Reason: Not Found
Error: InvalidParameterCombination: Unable to download from S3 location (Bucket: mybucket Key: mybucket/myfile.txt). Reason: Not Found
此錯誤來自 terraform:
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
您會看到 bucket = "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 不會在鍵之前添加存儲桶名稱,它可以很好地找到文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.