Как лучше всего выполнять вызовы REST API от Terraform? В настоящее время я использую 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
}
Однако код возврата cURL успешен для ответов HTTP 200 и HTTP 400. Я хочу, чтобы ресурс был помечен как сбойный, если новая учетная запись не может быть зарегистрирована.
Я попытался вернуть только 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 указывает, что учетная запись уже существует, что я считаю успешным с точки зрения общей установки.