Terraform - 无法在字符串模板中包含给定值:需要字符串

waw*_*awa 3 amazon-s3 amazon-web-services terraform amazon-sagemaker terraform-provider-aws

我正在尝试按照此页面使用 terraform 在 SageMaker 上创建模型, 由于权限限制,我无法为 sagemaker 角色分配完整的访问策略,因此我创建了一个角色并附加了具有部分权限的策略

当我测试时Terraform plan,它给了我这个:

Error: Invalid template interpolation value
...
Run Code Online (Sandbox Code Playgroud)
..........................
 141:                 "ecr:GetRepositoryPolicy"
 142:             ],
 143:             "Resource": [
 144:                 "arn:aws:s3:::${aws_s3_bucket.xx_xxxxxxxxxx_xxx_bucket}",
 145:                 "arn:aws:s3:::${local.binaries_bucket_name}",
 146:                 "arn:aws:s3:::${aws_s3_bucket.xx_xxxxxxxxxx_xxx_bucket}/*",
 147:                 "arn:aws:s3:::${local.binaries_bucket_name}/*",
 148:                 "arn:aws:ecr:us-east-1:*:repository/*",
 149.....................
 157:         }
 158:     ]
 159: }
 160: POLICY
    |----------------
    | aws_s3_bucket.xx_xxxxxxxxxx_xxx_bucket is object with 25 attributes

Cannot include the given value in a string template: string required.
Run Code Online (Sandbox Code Playgroud)

我对此很陌生,只是想知道这是在抱怨存储桶名称太长还是其他原因?我该怎么办才能解决这个问题,我有点困惑。非常感谢。

(PS:Terraform版本v0.13.4+提供商registry.terraform.io/hashicorp/aws v3.20.0

Mat*_*ard 5

看来您在这里想要的是 S3 存储桶的 ARN,它由导出的资源属性提供。具体来说,您可能需要arn资源属性。

更新您的政策,例如:

 144:             "${aws_s3_bucket.xx_xxxxxxxxxx_xxx_bucket.arn}",
 146:             "${aws_s3_bucket.xx_xxxxxxxxxx_xxx_bucket.arn}/*",
Run Code Online (Sandbox Code Playgroud)

将通过访问该属性为您提供所需的字符串arn。当前编写的策略是 accessing aws_s3_bucket.xx_xxxxxxxxxx_xxx_bucket,它是该资源的每个参数和属性的映射(可能是对象),并且不会在策略的字符串中进行插值。