terraform - 使用 cURL 调用 Terraform REST API
问题描述
从 Terraform 进行 REST API 调用的最佳方式是什么?我目前正在使用null_resource
配置local-exec
器进行 cURL 调用:
resource "null_resource" "cloudability-setup" {
provisioner "local-exec" {
command = <<EOT
curl -s -X POST https://api.cloudability.com/v3/vendors/aws/accounts \
-H 'Content-Type: application/json' \
-u "$${CldAbltyAPIToken:?Missing Cloudability API Token Env Variable}:" \
-d '{"vendorAccountId": "${data.aws_caller_identity.current.account_id}", "type": "aws_role" }'
EOT
}
但是,对于 HTTP 200 和 HTTP 400 响应,cURL 返回代码是成功的。如果无法注册新帐户,我希望将资源标记为失败。
我试过只返回 HTTP 响应代码:
resource "null_resource" "cloudability-setup" {
provisioner "local-exec" {
command = <<EOT
curl -s -o /dev/null -w "%{http_code}" \
-X POST https://api.cloudability.com/v3/vendors/aws/accounts \
-H 'Content-Type: application/json' \
-u "$${CldAbltyAPIToken:?Missing Cloudability API Token Env Variable}:" \
-d '{"vendorAccountId": "${data.aws_caller_identity.current.account_id}", "type": "aws_role" }'
EOT
}
但后来我丢失了 API 响应正文,其中包含有价值的信息。有时 HTTP 400 代码表明该帐户已经存在,从整体设置的角度来看,我认为这是成功的。
解决方案
我自己没有用过,但这可能对你有用:https ://github.com/Mastercard/terraform-provider-restapi
推荐阅读
- javascript - 数组和对象过滤器 javascript
- java - 其他应用程序(如whatsapp、facebook)如何在不实施范围存储的情况下工作
- webpack - 您没有设置任何插件、解析器或字符串化程序。现在,PostCSS 什么都不做。(Laravel 混合)
- python - 旋转矩阵的函数返回输入
- facebook - 使用 utm 标签的 Facebook 跟踪导致某些浏览器的跳出率达到 100%
- code-signing - 使用 install4j UI/命令行对现有 dmg 进行代码签名和公证
- dynamic-programming - 为什么在以下存储最大和子序列的所有元素的代码中,所有测试用例都没有通过极客的极客?
- firefox - 在 WebGL 中 VAO 绑定到 null 后 ARRAY_BUFFER 丢失
- php - laravel 使用 where 语句获取所有行
- excel - 清除现有表,然后将另一个表的内容粘贴到其中 vba