Terraform - Создание ресурсов в одной транзакции / настройка политик отката - PullRequest
0 голосов
/ 14 марта 2019

Я использую Terraform с AWS в качестве поставщика.

В одной из моих сетей я случайно настроил неправильные значения, которые привели к ошибка при создании ресурсов.

Так что ситуация была в том, что некоторые части ресурсов были запущены, но я бы предпочел, чтобы весь процесс был выполнен как одна транзакция .

Я знаком с выводом, который Terraform дает в таких случаях:

Terraform не выполняет автоматический откат в случае ошибок. Вместо этого ваш файл состояния Terraform был частично обновлен любым ресурсы, которые успешно завершены. Пожалуйста, исправьте ошибку выше и примените снова, чтобы постепенно изменить вашу инфраструктуру.

У меня такой вопрос: Есть ли еще способ настроить политику отката в тех случаях, когда некоторые ресурсы были созданы, а некоторые отказали?

Ниже приведен простой пример воспроизведения проблемы.

В локальной переменной 'az_list' просто изменить значение с «names» на «zone_ids»:

az_list = "${data.aws_availability_zones.available.zone_ids}"

И будет создан VPC с некоторыми группами безопасности по умолчанию и таблицами маршрутов, но без подсетей.


resources.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
}

variables.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"
}
...