Terraform阅读现有资源的详细信息

时间:2018-11-28 07:44:23

标签: amazon-web-services terraform

我在terraform中遇到一个问题,我想阅读通过AWS Web控制台创建的某些现有资源(r1)的详细信息。 我正在通过Terraform在新资源(r2)上创建时使用这些细节。

问题是它试图破坏并重新创建不需要的资源,因为它将失败。当我执行Terraform应用时,如何不破坏并重新创建r1。

这是我的操作方式:

main.tf

resource "aws_lb" "r1"{

}

...

resource "aws_api_gateway_integration" "r2" {

  type                    = "HTTP"
  uri                     = "${aws_lb.r1.dns_name}}/o/v1/multi/get/m/content"
}

首先,我导入该资源

 terraform import aws_lb.r1 {my_arn}

接下来我要使用Terraform

terraform apply

错误

 aws_lb.r1: Error deleting LB: ResourceInUse: Load balancer 'my_arn' cannot be deleted because it is currently associated with another service

2 个答案:

答案 0 :(得分:1)

您可以在lifecycle中添加一个resource "aws_lb" "r1"配置块(请参阅:https://www.terraform.io/docs/configuration/resources.html#lifecycle),以告知Terraform忽略资源中的更改。

我猜这样的东西应该可以工作:

resource "aws_lb" "r1"{

 lifecycle {
    ignore_changes = ["*"]
  }
}

答案 1 :(得分:1)

import语句为meant for taking control over existing resources in your Terraform setup

如果您唯一的意图是获取有关现有资源(在Terraform控件之外)的信息,则data sources专为满足这一需求而设计:

data "aws_lb" "r1" {
    name = "lb_foo"
    arn = "some_specific_arn" #you can use any selector you wish to query the correct LB
}

resource "aws_api_gateway_integration" "r2" {
    type = "HTTP"
    uri = "${data.aws_lb.r1.dns_name}/o/v1/multi/get/m/content"
}