Как я могу заполнить depen_on для ресурса aws_api_gateway_deployment, если aws_api_gateway_integration была создана в модуле Terraform? - PullRequest
1 голос
/ 21 марта 2019

В документации Terraform для aws_api_gateway_deployment написано:

Примечание. Зависит от наличия aws_api_gateway_integration внутри вашего остальных API (что, в свою очередь, зависит от aws_api_gateway_method).Чтобы избежать условий гонки, вам, возможно, потребуется добавить явный ресурс depen_on = ["aws_api_gateway_integration.name"].

Мой aws_api_gateway_deployment живет в корневом модуле, но большинство aws_api_gateway_integration s созданов дочернем модуле (это локальный модуль, созданный мной).

Насколько я понимаю, вы не можете экспортировать ресурс из модуля.

Структура папок:

 - main.tf <-- contains the aws_api_gateway_rest_api and aws_api_gateway_deployment and uses the service_func_lambda module multiple times
 - modules/
   - service_func_lambda/
     - main.tf <-- contains the aws_api_gateway_integration and other bits such as aws_api_gateway_method and aws_api_gateway_resource

Как я могу сослаться на aws_api_gateway_integration, который создается внутри модуля из вызывающего корневого модуля?

Ответы [ 2 ]

1 голос
/ 23 марта 2019

Итак, в итоге я сделал aws_api_gateway_deployment зависимым от всего модуля. Казалось, это хорошо работает:

resource "aws_api_gateway_deployment" "api_gw_deploy" {

  depends_on = [
    "module.user_func_list",
    "module.user_func_create",
    "module.resource_func_list",
  ]

  rest_api_id = "${aws_api_gateway_rest_api.main_api_gw.id}"
  stage_name  = "live"
}
1 голос
/ 21 марта 2019

Вы не можете зависеть от ресурса внутри другого модуля. Вы можете создать неявную зависимость для всего модуля, ссылаясь на выходные данные этого модуля.

Я думаю, что вы можете использовать null_resource для этого (хотя может быть лучший способ). Создайте нулевой ресурс, подобный этому, и пусть ваш aws_api_gateway_deployment зависит от него:

resource "null_resource" "depend_on_module" {
  triggers {
    service_func_lambda_module_output = "${module.service_func_for_lambda.some_output}"
  }
}
...