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

Him*_*oel 3 amazon-web-services terraform

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

问题是它试图破坏和重新创建不需要的资源,因为它会失败。当我执行 terraform apply 时,我如何设法不破坏和重新创建 r1。

这是我的做法:

主文件

resource "aws_lb" "r1"{

}

...

resource "aws_api_gateway_integration" "r2" {

  type                    = "HTTP"
  uri                     = "${aws_lb.r1.dns_name}}/o/v1/multi/get/m/content"
}
Run Code Online (Sandbox Code Playgroud)

首先我导入该资源

 terraform import aws_lb.r1 {my_arn}
Run Code Online (Sandbox Code Playgroud)

接下来我应用地形

terraform apply
Run Code Online (Sandbox Code Playgroud)

错误

 aws_lb.r1: Error deleting LB: ResourceInUse: Load balancer 'my_arn' cannot be deleted because it is currently associated with another service
Run Code Online (Sandbox Code Playgroud)

Tie*_*men 5

import语句旨在控制 Terraform 设置中的现有资源

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

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"
}
Run Code Online (Sandbox Code Playgroud)


Sim*_*ndi 2

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

我想这样的事情应该有效:

resource "aws_lb" "r1"{

 lifecycle {
    ignore_changes = ["*"]
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 这只会掩盖 OP 面临的问题,更重要的是,在删除导入的资源时会带来删除 ALB 的风险,除了派生其 DNS 名称之外没有任何好处。请参阅我关于使用“数据源”的文章。 (4认同)