amazon-web-services - AWS Beanstalk Tomcat 和 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
此错误来自 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 不会将存储桶名称添加到键中,它可以很好地找到文件。
推荐阅读
- android - Fab 没有被底部导航上方的小吃店向上推
- c++ - 难以配置 Bazel 目标包括和 deps
- sql - 我遇到了一个奇怪的问题,使用 NOT IN 对 PostgreSQL 数据库运行查询,但不明白为什么它不起作用
- android - 渐变按钮显示默认紫色
- r - 从字符串中提取世纪和年份
- mysql - Power BI 无法连接到 MySQL 数据库
- java - 对象字段的最终确定
- google-coral - Coral Dev Board Mini - 无法通过 USB 连接但设备已列出 [Ubuntu]
- html - 如何确保输出
标签正确对齐
- python - Flask:Firebase orderBy 必须是有效的 JSON 编码路径