【发布时间】:2021-03-23 18:35:28
【问题描述】:
我正在尝试通过 local-exec-provisioner 使用 null 资源,以便使用模板文件在负载均衡器上启用 s3 存储桶日志记录。然而,terraform 文件和模板文件 (lb-to-s3-log.tpl) 都在同一目录 "/modules/lb-to-s3-log" 上收到错误。 Terraform 文件看起来是这样的:
data "template_file" "lb-to-s3-log" {
template = file(".//modules/lb-to-s3-log/lb-to-s3-log.tpl")
vars = {
X_INFO1 = var.INFO1
X_INFO2 = var.INFO2
X_INFO3 = var.INFO3
}
}
resource "null_resource" "lb-to-s3-log" {
provisioner "local-exec" {
command = "aws elb modify-load-balancer-attributes --load-balancer-name ${var.LOAD_BALANCER_NAME[0]} --load-balancer-attributes ${data.template_file.lb-to-s3-log.rendered}"
}
}
地点:
var.INFO1 = test1
var.INFO2 = test2
var.INFO3 = test3
模板 (TPL) 文件包含:
{
"AccessLog": {
"Enabled": true,
"S3BucketName": "${X_INFO1}-${X_INFO2}-${X_INFO3}-logs",
"EmitInterval": 5,
"S3BucketPrefix": "${X_INFO1}-${X_INFO2}-${X_INFO3}-logs"
}
}
收到错误消息:
Error: Error running command 'aws elb modify-load-balancer-attributes --load-balancer-name awseb-e-5-AWSEBLoa-ABCDE0FGHI0V --load-balancer-attributes {
"AccessLog": {
"Enabled": true,
"S3BucketName": "test1-test2-test3-logs",
"EmitInterval": 5,
"S3BucketPrefix": "test1-test2-test3-logs"
}
}
': exit status 2. Output:
Error parsing parameter '--load-balancer-attributes': Invalid JSON: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
JSON received: {
/bin/sh: line 1: AccessLog:: command not found
/bin/sh: line 2: Enabled:: command not found
/bin/sh: line 3: S3BucketName:: command not found
/bin/sh: line 4: EmitInterval:: command not found
/bin/sh: line 5: S3BucketPrefix:: command not found
/bin/sh: -c: line 6: syntax error near unexpected token `}'
/bin/sh: -c: line 6: ` }'
问题/问题: 模板文件成功更新了变量赋值(X_INFO1、X_INFO2、X_INFO23)。似乎问题出在 aws cli 命令的 ${data.template_file.lb-to-s3-log.rendered} 上。
当我尝试将文件从 lb-s3log.tpl 替换为 lb-s3log.json 时出现同样的错误。
我使用的是 Terraform v0.14,我按照documentation 为亚马逊经典负载均衡器的日志存储启用 s3 存储桶的过程
【问题讨论】:
标签: amazon-web-services terraform