如果aws_api_gateway_integration是在Terraform模块中创建的,如何在aws_api_gateway_deployment资源上填充Depends_on?

时间:2019-03-21 13:05:32

标签: aws-api-gateway terraform terraform-provider-aws

aws_api_gateway_deployment的Terraform文档中,它说:

  

注意:取决于您的休息区中是否包含aws_api_gateway_integration   api(取决于aws_api_gateway_method)。为了避免种族   条件,您可能需要添加一个显式的depends_on =   [“ aws_api_gateway_integration.name”]。

我的aws_api_gateway_deployment资源位于根模块中,但是大多数aws_api_gateway_integration是在子模块(这是我创建的本地模块)中创建的。

我的理解是您不能从模块中导出资源。

文件夹结构为:

 - 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 个答案:

答案 0 :(得分:1)

您不能依赖另一个模块内的资源。您可以通过引用该模块的输出 在整个模块上创建隐式依赖项。

我认为您可以为此使用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}"
  }
}

答案 1 :(得分:1)

因此,最后我使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"
}