Terraform aws_iam_role_policy 中的 JSON 语法错误
Posted
技术标签:
【中文标题】Terraform aws_iam_role_policy 中的 JSON 语法错误【英文标题】:JSON Syntax error in Terraform aws_iam_role_policy 【发布时间】:2020-03-27 15:05:23 【问题描述】:因此,使用 Terraform,我正在创建一个 IAM 策略并将其附加到一个角色。我目前正在跑步:
Terraform v0.12.16
provider.aws v2.40.0
provider.template v2.1.2
执行代码时,我可以毫无问题地初始化 terraform。运行 terraform plan 时,出现以下错误:
Error: "policy" contains an invalid JSON: invalid character '' looking for beginning of value
on ec2-iam.tf line 8, in resource "aws_iam_role_policy" "s3_ec2_policy":
8: resource "aws_iam_role_policy" "s3_ec2_policy"
我遇到了这个错误。任何意见将是有益的。以下是我的代码:
data "template_file" "s3_web_policy"
template = file("scripts/iam/web-ec2-policy.json")
vars =
s3_bucket_arn = "arn:aws:s3:::$var.my_app_s3_bucket/*"
resource "aws_iam_role_policy" "s3_ec2_policy"
name = "s3_ec2_policy"
role = aws_iam_role.s3_ec2_role.id
policy = data.template_file.s3_web_policy.rendered
resource "aws_iam_role" "s3_ec2_role"
name = "s3_ec2_role"
assume_role_policy = file("scripts/iam/web-ec2-assume-role.json")
【问题讨论】:
模板文件是什么样的?可能有一个额外的空间或大括号/括号未打开。 【参考方案1】:从字符串模板生成 JSON 时经常会遇到语法错误,因为模板语言不知道 JSON 语法,所以你作为模板作者必须注意确保括号都正确嵌套,没有遗漏或额外的逗号等。
您通常可以通过使用Terraform's jsonencode
function 生成 JSON 来避免此类问题:
resource "aws_iam_role_policy" "s3_ec2_policy"
name = "s3_ec2_policy"
role = aws_iam_role.s3_ec2_role.id
policy = jsonencode(
Version = "2012-10-17"
Statement = [
# etc, etc
]
)
如果策略定义似乎太大而无法将内联包含在您的 resource
块中,您仍然可以根据需要将其分解到单独的模板文件中:
resource "aws_iam_role_policy" "s3_ec2_policy"
name = "s3_ec2_policy"
role = aws_iam_role.s3_ec2_role.id
policy = templatefile("$path.module/scripts/iam/web-ec2-policy.json.tmpl",
s3_bucket_arn = "arn:aws:s3:::$var.my_app_s3_bucket/*"
)
...但是在模板内部,而不是使用单独的模板插值,只需将整个模板编写为对 jsonencode
的单个调用,如下所示:
$jsonencode(
Version = "2012-10-17"
Statement = [
# ...
Resource = s3_bucket_arn
# ...
,
# etc, etc
]
)
请注意,template_file
数据源适用于 Terraform 0.11 及更早版本,而在 Terraform 0.12 中只是为了向后兼容。您应该改用 the templatefile
function,它的用途相同,但直接集成到 Terraform 语言中。
【讨论】:
以上是关于Terraform aws_iam_role_policy 中的 JSON 语法错误的主要内容,如果未能解决你的问题,请参考以下文章
Terraform 学习总结——Terraform 命令详解
Terraform 学习总结(10)—— 阿里云平台 Terraform 代码开发技巧总结
Terraform 学习总结(10)—— 阿里云平台 Terraform 代码开发技巧总结