首页 > 解决方案 > 使用 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 代码表明该帐户已经存在,从整体设置的角度来看,我认为这是成功的。

标签: terraform

解决方案


我自己没有用过,但这可能对你有用:https ://github.com/Mastercard/terraform-provider-restapi


推荐阅读