L oop через список для Terraform 0.11 - PullRequest
1 голос
/ 09 апреля 2020

У меня есть файл terraform, который развертывает ресурс и метод в существующий APIGW в AWS. В настоящее время мой лог c создает только один метод (POST). Я хотел бы обновить свою логику c в TF, чтобы, если пользователь хочет создать более одного метода для своего ресурса, он может.

Я просмотрел сеть и не уверен, что у меня есть мой лог c правильный, как при запуске задания terraform, я получаю ошибку ниже 1006 *

Ниже приведено то, что отправлено в моей команде применения terraform:

план terraform -var = gatewayID = XXXX -var = parentID = XXXX -var = lambda_name = lambda -var = path_name = resourcename -var = awsAccount = 123456 -var = resource_method = ["POST", "GET"]

Ниже показано, как у меня есть мой файл terraform и мой файл variable.tf.

resource "aws_api_gateway_resource" "NewResource" {
  rest_api_id = "${var.gatewayID}"
  parent_id   = "${var.parentID}"
  path_part   = "${var.path_name}"
}

resource "aws_api_gateway_method" "newexecution" {
  count = "${length(var.resource_method)}"
  rest_api_id   = "${var.gatewayID}"
  resource_id   = "${aws_api_gateway_resource.NewResource.id}"
  http_method   = "${var.resource_method[count.index]}"
  authorization = "NONE"
  depends_on    = ["aws_api_gateway_resource.NewResource"]
}



variable "region" {
  default = "us-east-1"
}

variable "lambda_name" {
  type = "string"
}

variable "path_name" {
  type = "string"
}

variable "awsAccount" {
  type = "string"
}

variable "gatewayID" {
  type = "string"
}

variable "parentID" {
  type = "string"
}

variable "resource_method" {
  type = "list"
}

Есть предложения, как мне это исправить, чтобы Terraform создала новый ресурс и добавила в него POST и GET? Разве это невозможно в Terraform 0.11 (с использованием terraform 0.11.7)

1 Ответ

1 голос
/ 09 апреля 2020

Для наличия петель в версии terraform 11

элементом является функция ** ИСПОЛЬЗОВАТЬ **

http_method = "${element(var.resource_method, count.index)}"

Ваш код будет

resource "aws_api_gateway_method" "newexecution" {
  count = "${length(var.resource_method)}"
  rest_api_id   = "${var.gatewayID}"
  resource_id   = "${aws_api_gateway_resource.NewResource.id}"
  http_method   = "${element(var.resource_method, count.index)}
  authorization = "NONE"
  depends_on    = ["aws_api_gateway_resource.NewResource"]
}
element(list, index)
element(["a", "b", "c"], 1)
b

element(["a", "b", "c"], 3)
a

элемент начнется с индекса 0, и как только индекс превысит длину списка, он снова начнет с 0.

Например:

element(["a", "b", "c"], 3)
a

element(["a", "b", "c"], 7)
b
...