我在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
答案 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"
}