我将 Terraform 与 AWS 作为提供商一起使用。
在我的一个网络中,我不小心配置了错误的值,导致资源创建失败。
所以情况是资源的某些部分已经启动并运行,但我希望所有进程都作为一个事务执行。
我熟悉 Terraform 在这种情况下提供的输出:
Terraform 不会在遇到错误时自动回滚。相反,您的 Terraform 状态文件已使用成功完成的任何资源进行了部分更新。请解决上述错误并再次申请以逐步更改您的基础架构。
我的问题是: 在某些资源创建而某些资源失败的情况下,是否还有办法设置回滚策略?
下面是一个重现问题的简单示例。
在局部变量'az_list'
中,只是将值从“names”更改为“zone_ids”:
az_list = "${data.aws_availability_zones.available.zone_ids}"
并且将使用一些默认安全组和路由表创建一个 VPC,但没有子网。
资源.tf:
provider "aws" {
region = "${var.region}"
}
### Local data ###
data "aws_availability_zones" "available" {}
locals {
#In order to reproduce an error: Change 'names' to 'zone_ids'
az_list = "${data.aws_availability_zones.available.names}"
}
### Vpc ###
resource "aws_vpc" "base_vpc" {
cidr_block = "${var.cidr}"
instance_tenancy = "default"
enable_dns_hostnames = "false"
enable_dns_support = "true"
}
### Subnets ###
resource "aws_subnet" "private" {
vpc_id = "${aws_vpc.base_vpc.id}"
cidr_block = "${cidrsubnet( var.cidr, 8, count.index + 1 + length(local.az_list) )}"
availability_zone = "${element(local.az_list, count.index)}"
count = 2
}
resource "aws_subnet" "public" {
vpc_id = "${aws_vpc.base_vpc.id}"
cidr_block = "${cidrsubnet(var.cidr, 8, count.index + 1)}"
availability_zone = "${element(local.az_list, count.index)}"
count = 2
map_public_ip_on_launch = true
}
变量.tf:
variable "region" {
description = "Name of region"
default = "ap-south-1"
}
variable "cidr" {
description = "The CIDR block for the VPC"
default = "10.0.0.0/16"
}