如何在 Terraform 外部数据源中使用 AWS cli 命令

How to use an AWS cli command in a Terraform external data source

如果我 运行 单独执行以下命令,我会得到预期的结果 -

这个:

aws cloudfront list-cloud-front-origin-access-identities | jq -r ' .CloudFrontOriginAccessIdentityList.Items[] | select(.Comment == "Created for Nackle Shared CF in pprd").Id'

Returns这个:

E1P6ZIBDB6I6FZ

如何使用 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)}"] 
}

但是当我 运行 Terraform 应用时 returns 这个错误 -

Expected a comma to mark the beginning of the next item.

我假设正确写入后“值”将是 E1P6ZIBDB6I6FZ?

如何在 terraform 的另一部分使用该值作为变量?

是否有不同的方法来解决这个问题?

我是 Terraform 的新手,从未使用过外部数据源。

外部数据源的json解析能力非常有限。它应该是 (escape quote and return new 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}'"] 
}

那么你访问的Id为:

data.external.json.result["id"]