2

我将 Terraform 与 A​​WS 作为提供商一起使用。

在我的一个网络中,我不小心配置了错误的值,导致资源创建失败。

所以情况是资源的某些部分已经启动并运行,但我希望所有进程都作为一个事务执行。

我熟悉 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"
}
4

0 回答 0