Ern*_*ert 4 amazon-web-services terraform terraform-provider-aws
如果我单独运行以下命令,我会得到预期的结果 -
这 :
aws cloudfront list-cloud-front-origin-access-identities | jq -r ' .CloudFrontOriginAccessIdentityList.Items[] | select(.Comment == "Created for Nackle Shared CF in pprd").Id'
Run Code Online (Sandbox Code Playgroud)
返回这个:
E1P6ZIBDB6I6FZ
Run Code Online (Sandbox Code Playgroud)
如何使用 Terraform 外部数据源获得相同的结果?
我试过这个:
data "external" "json" {
program = ["sh", "-c", "aws cloudfront list-cloud-front-origin-access-identities | jq -r ' .CloudFrontOriginAccessIdentityList.Items[] | select(.Comment == "Created for Nackle Shared CF in pprd").Id'"]
}
output "map" {
value = ["${values(data.external.json.result)}"]
}
Run Code Online (Sandbox Code Playgroud)
但当我运行 Terraform apply 时它返回此错误 -
Expected a comma to mark the beginning of the next item.
Run Code Online (Sandbox Code Playgroud)
我假设正确写入时“值”将是 E1P6ZIBDB6I6FZ ?
如何将该值用作地形另一部分中的变量?
有没有不同的方法来解决这个问题?
我是 Terraform 的新手,从未使用过外部数据源。
外部数据源的json解析能力非常有限。它应该是(转义引号并返回新的 json):
data "external" "json" {
program = ["sh", "-c", "aws cloudfront list-cloud-front-origin-access-identities | jq -r ' .CloudFrontOriginAccessIdentityList.Items[] | select(.Comment == \"Created for Nackle Shared CF in pprd\") | {id: .Id}'"]
}
Run Code Online (Sandbox Code Playgroud)
然后您可以通过以下方式访问 Id:
data.external.json.result["id"]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5279 次 |
| 最近记录: |