我正在尝试将文档转换为Terraform文件来创建策略。然而,当我尝试用",“或试图将其转换为JSON时,Join format under the Resource section
似乎也不被接受。我可以寻求一些帮助吗?如何按照Terraform正确解释它的方式格式化它?下面是我正在处理的terraform文件。事先非常感谢。
module "my_policy" {
source = "../modules/policy"
policy = {
name = "my_access"
description = "my access account"
path = "/"
document = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "MyBeanstalkPermissions",
"Effect": "Allow",
"Action": [
"elasticbeanstalk:CreateApplicationVersion",
"elasticbeanstalk:DeleteApplicationVersion",
"elasticbeanstalk:UpdateEnvironment",
"elasticbeanstalk:CreateStorageLocation",
"elasticbeanstalk:Check*",
"elasticbeanstalk:Describe*",
"elasticbeanstalk:List*",
"elasticbeanstalk:RequestEnvironmentInfo",
"elasticbeanstalk:RetrieveEnvironmentInfo",
"elasticbeanstalk:RestartAppServer",
"elasticbeanstalk:UpdateApplication",
"elasticbeanstalk:UpdateApplicationVersion"
],
"Resource": !Join ["", ["arn:aws:elasticbeanstalk:*:", !Ref "AWS::AccountId", ":*" ] ]
}
]
}
EOF
}
}
我知道这个错误:
"policy" contains an invalid JSON: invalid character '!' looking for beginning of value
发布于 2022-07-24 09:15:42
正如您可能已经注意到的,与CloudFormation相比,Terraform中的Concatenating字符串有一点不同。通常这样做的方式是引用一个资源属性。如果ElasticBeanstalk属性在创建后可用,则可以引用该值。如果没有,您可以使用Terraform 1附带的内插。因此,为了修复错误,只需对值使用不同的格式:
document = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "MyBeanstalkPermissions",
"Effect": "Allow",
"Action": [
"elasticbeanstalk:CreateApplicationVersion",
"elasticbeanstalk:DeleteApplicationVersion",
"elasticbeanstalk:UpdateEnvironment",
"elasticbeanstalk:CreateStorageLocation",
"elasticbeanstalk:Check*",
"elasticbeanstalk:Describe*",
"elasticbeanstalk:List*",
"elasticbeanstalk:RequestEnvironmentInfo",
"elasticbeanstalk:RetrieveEnvironmentInfo",
"elasticbeanstalk:RestartAppServer",
"elasticbeanstalk:UpdateApplication",
"elasticbeanstalk:UpdateApplicationVersion"
],
"Resource": "arn:aws:elasticbeanstalk:*:<AWS account id>:*"
}
]
}
EOF
为了获得帐户ID,您需要使用data
源代码。数据源的名称是aws_caller_identity
2。必须将数据源添加到tf文件中:
data "aws_caller_identity" "current" {}
然后,您将使用以下命令来代替上面片段中的<AWS account id>
占位符:
data.aws_caller_identity.current.account_id
然后,它可以用来形成弹性豆柄ARN:
"arn:aws:elasticbeanstalk:*:${data.aws_caller_identity.current.account_id}:*"
但是,您也可以考虑使用数据源来创建策略,因为与Terraform的思维方式相适应比JSON策略3更容易。
还请注意,AWS帐户ID的数据源将只匹配正在执行操作的当前AWS帐户。如果您需要为另一个帐户执行此操作,则需要提供一个值,而不是使用数据源引用。
https://stackoverflow.com/questions/73096967
复制相似问题