Jadi saya memiliki dua proyek, terpisah dan terisolasi satu sama lain, menggunakan file status terraform terpisah untuk mengelola sendiri.

Proyek A: Lapisan VPC, jaringan, subnet, eip, gw. Proyek ini adalah VPC bersama untuk semua proyek dalam kelompok kerja saya. Kami meluncurkan semua proyek kami dalam VPC yang sama ini

Proyek B: Aplikasi, penyeimbang beban, grup keamanan, wadah ecs, gerbang api. Proyek ini adalah aplikasi itu sendiri, Anda mengonfigurasi penyeimbang beban sesuai dengan grup keamanan yang mengizinkan port apa pun yang dibutuhkan dan menjalankan perangkat lunak pada ecs.

Masalahnya: Ketika saya ingin mengubah beberapa hal kecil dalam konfigurasi VPC, bahkan bukan informasi aktual, hanya beberapa nama sumber daya, sepertinya saya secara tidak sengaja memicu pembuatan ulang subnet. Ini berarti ia akan mencoba menghapusnya. Tapi tidak bisa karena ada load balancer yang terpasang. Jadi selalu gagal. Jalan buntu sekarang karena saya memiliki 20 proyek yang dikerahkan masing-masing dengan penyeimbang beban mereka sendiri

Bagaimana cara mengelola ini agar VPC dapat dikonfigurasi ulang tanpa selalu memicu masalah yang menyebabkan saya harus menghancurkan dan membuat ulang seluruh suite aplikasi setiap saat. Ini tampaknya masalah yang sangat menjengkelkan untuk selalu memikirkan solusi itu ketika dalam kasus saya, saya sebenarnya tidak mengubah apa pun di subnet, hanya menormalkan nama sumber daya terraform.

1
Christopher Thomas 20 Mei 2020, 19:47

1 menjawab

Jawaban Terbaik

Jika Anda mengubah nama sumber daya Terraform, Anda dapat mengedit file status untuk mengganti nama ini di status juga.

Anda dapat melakukannya dengan menggunakan terraform state mv perintah.

Jadi jika Anda memiliki sesuatu seperti ini sebelumnya:

data "aws_region" "current" {}

resource "aws_subnet" "az-a" {
  vpc_id     = "${aws_vpc.main.id}"
  cidr_block = "10.0.1.0/24"

  availability_zone = "${data.aws_region.current.name}-a"

  tags = {
    Name = "Main"
  }
}

Dan kemudian mengganti nama sumber daya dari az-a menjadi az_a untuk mengikuti pola penamaan umum Terraform menggunakan garis bawah alih-alih tanda hubung sebagai contoh:

data "aws_region" "current" {}

resource "aws_subnet" "az-a" {
  vpc_id     = "${aws_vpc.main.id}"
  cidr_block = "10.0.1.0/24"

  availability_zone = "${data.aws_region.current.name}-a"

  tags = {
    Name = "Main"
  }
}

Terraform akan melihat bahwa Anda telah "menghapus" sumber daya aws_subnet.az-a dan kemudian membuat sumber daya baru yang disebut aws_subnet.az_a dan mengabaikan fakta bahwa 2 sumber daya ini sebaliknya sama. Karena itu, ia ingin menghancurkan sumber daya aws_subnet.az-a pada penerapan berikutnya dan membuat aws_subnet.az_a.

Dalam hal ini jika Anda menjalankan:

terraform state mv aws_subnet.az-a aws_subnet.az_a

Kemudian Terraform akan mengganti nama sumber daya dalam keadaan dan rencana berikutnya akan menampilkan diff kosong.

Anda juga dapat menggunakan ini saat memfaktorkan ulang kode Anda untuk memindahkan sumber daya masuk dan keluar dari modul seperti contoh pemindahan sumber daya subnet ini ke dalam modul yang disebut vpc:

terraform state mv aws_subnet.az_a module.vpc.aws_subnet.az_a
1
ydaetskcoR 20 Mei 2020, 22:35