เบ‚เบธเบก Terraform

เบ‚เบธเบก Terraform
เบ‚เปเปƒเบซเป‰เบเบปเบเปƒเบซเป‰เป€เบซเบฑเบ™เบšเบฒเบ‡เบ‚เบธเบก, เบฅเบงเบกเบ—เบฑเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบš loops, เบ–เป‰เบฒเบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เปเบฅเบฐเป€เบ•เบฑเบเบ™เบดเบเบเบฒเบ™เบ™เปเบฒเป„เบ›เปƒเบŠเป‰, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบšเบฑเบ™เบซเบฒเบ—เบปเปˆเบงเป„เบ›เบซเบผเบฒเบเบ—เบตเปˆเบกเบตเบœเบปเบ™เบเบฐเบ—เบปเบš Terraform เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›:

  • count เปเบฅเบฐ for_each เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบกเบตเบ‚เปเป‰เบˆเปเบฒเบเบฑเบ”;
  • เบˆเปเบฒโ€‹เบเบฑเบ”โ€‹เบชเบนเบ™โ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบเบฒเบ™ downtimeโ€‹;
  • เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเปเบœเบ™เบเบฒเบ™เบ—เบตเปˆเบ”เบตเบเปเปˆเบšเปเปˆเบชเบฒเบกเบฒเบ”เบฅเบปเป‰เบกเป€เบซเบฅเบง;
  • refactoring เบชเบฒเบกเบฒเบ”เบกเบต pitfalls เบ‚เบญเบ‡เบ•เบปเบ™;
  • เบเบฒเบ™เป€เบฅเบทเปˆเบญเบ™เป€เบงเบฅเบฒเบชเบญเบ”เบ„เปˆเบญเบ‡เปเบกเปˆเบ™เบชเบญเบ”เบ„เปˆเบญเบ‡ ... เบเบฑเบšเบเบฒเบ™เป€เบฅเบทเปˆเบญเบ™เป€เบงเบฅเบฒ.

เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ™เบฑเบš เปเบฅเบฐ for_each เบกเบตเบ‚เปเป‰เบˆเปเบฒเบเบฑเบ”

เบ•เบปเบงเบขเปˆเบฒเบ‡เปƒเบ™เบšเบปเบ”เบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบขเปˆเบฒเบ‡เบเบงเป‰เบฒเบ‡เบ‚เบงเบฒเบ‡เบ‚เบญเบ‡เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบเบฒเบ™เบ™เบฑเบšเปเบฅเบฐเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบ for_each เปƒเบ™ loops เปเบฅเบฐเป€เบซเบ”เบœเบปเบ™เบ•เบฒเบกเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚. เบžเบงเบเป€เบ‚เบปเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เบ”เบต, เปเบ•เปˆเบžเบงเบเป€เบ‚เบปเบฒเบกเบตเบ‚เปเป‰เบˆเปเบฒเบเบฑเบ”เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบชเบญเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เบฅเบฐเบงเบฑเบ‡.

  • Count เปเบฅเบฐ for_each เบšเปเปˆเบชเบฒเบกเบฒเบ”เบญเป‰เบฒเบ‡เบญเบตเบ‡เบ•เบปเบงเปเบ›เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เปƒเบ”เป†.
  • count เปเบฅเบฐ for_each เบšเปเปˆเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป‚เบกเบ”เบนเบ™เป„เบ”เป‰.

count เปเบฅเบฐ for_each เบšเปเปˆเบชเบฒเบกเบฒเบ”เบญเป‰เบฒเบ‡เบญเบตเบ‡เบ•เบปเบงเปเบ›เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เปƒเบ”เป†

เบˆเบดเบ™เบ•เบฐเบ™เบฒเบเบฒเบ™เบงเปˆเบฒเบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ EC2 เบซเบผเบฒเบเบญเบฑเบ™เปเบฅเบฐเบชเปเบฒเบฅเบฑเบšเบšเบฒเบ‡เป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบŠเป‰ ASG. เบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™เปเบšเบšเบ™เบตเป‰:

resource "aws_instance" "example_1" {
   count             = 3
   ami                = "ami-0c55b159cbfafe1f0"
   instance_type = "t2.micro"
}

เปƒเบซเป‰เป€เบฎเบปเบฒเป€เบšเบดเปˆเบ‡เบžเบงเบเป€เบ‚เบปเบฒเป€เบ—เบทเปˆเบญเบฅเบฐเบญเบฑเบ™.

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบเบฒเบ™เบ™เบฑเบšเบ–เบทเบเบ•เบฑเป‰เบ‡เป€เบ›เบฑเบ™เบ„เปˆเบฒเบ„เบปเบ‡เบ—เบตเปˆ, เบฅเบฐเบซเบฑเบ”เบ™เบตเป‰เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเป‚เบ”เบเบšเปเปˆเบกเบตเบšเบฑเบ™เบซเบฒ: เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบชเบฐเบซเบกเบฑเบ, เบกเบฑเบ™เบˆเบฐเบชเป‰เบฒเบ‡เบชเบฒเบกเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ EC2. เปเบ•เปˆเบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบซเบ™เบถเปˆเบ‡เปƒเบ™เปเบ•เปˆเบฅเบฐเป€เบ‚เบ” Availability (AZ) เบžเบฒเบเปƒเบ™เบžเบฒเบเบžเบทเป‰เบ™ AWS เปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™? เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เปƒเบซเป‰เบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป‚เบซเบผเบ”เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เป€เบ‚เบ”เบˆเบฒเบเปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™ aws_availability_zones เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ loop เบœเปˆเบฒเบ™เปเบ•เปˆเบฅเบฐเบญเบฑเบ™เปเบฅเบฐเบชเป‰เบฒเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ EC2 เปƒเบ™เบกเบฑเบ™เป‚เบ”เบเปƒเบŠเป‰เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ™เบฑเบšเปเบฅเบฐเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ”เบฑเบ”เบชเบฐเบ™เบต array:

resource "aws_instance" "example_2" {
   count                   = length(data.aws_availability_zones.all.names)
   availability_zone   = data.aws_availability_zones.all.names[count.index]
   ami                     = "ami-0c55b159cbfafe1f0"
   instance_type       = "t2.micro"
}

data "aws_availability_zones" "all" {}

เบฅเบฐเบซเบฑเบ”เบ™เบตเป‰เบเบฑเบ‡เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เบ”เบต, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ™เบฑเบšเบชเบฒเบกเบฒเบ”เบญเป‰เบฒเบ‡เบญเบตเบ‡เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เป‚เบ”เบเบšเปเปˆเบกเบตเบšเบฑเบ™เบซเบฒเปƒเบ”เป†. เปเบ•เปˆเบˆเบฐเป€เบเบตเบ”เบซเบเบฑเบ‡เบ‚เบถเป‰เบ™เบ–เป‰เบฒเบˆเปเบฒเบ™เบงเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡เปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡? เป€เบžเบทเปˆเบญเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบ™เบตเป‰, เบงเบดเบ—เบตเบ—เบตเปˆเบ‡เปˆเบฒเบเบ—เบตเปˆเบชเบธเบ”เปเบกเปˆเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ random_integer, เป€เบŠเบดเปˆเบ‡, เบ•เบฒเบกเบŠเบทเปˆเปเบ™เบฐเบ™เปเบฒ, เปƒเบซเป‰เบœเบปเบ™เป€เบ›เบฑเบ™เบˆเปเบฒเบ™เบงเบ™เป€เบ•เบฑเบกเปเบšเบšเบชเบธเปˆเบก:

resource "random_integer" "num_instances" {
  min = 1
  max = 3
}

เบฅเบฐเบซเบฑเบ”เบ™เบตเป‰เบชเป‰เบฒเบ‡เบ•เบปเบงเป€เบฅเบเบชเบธเปˆเบกเบฅเบฐเบซเบงเปˆเบฒเบ‡ 1 เปเบฅเบฐ 3. เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบกเบตเบซเบเบฑเบ‡เป€เบเบตเบ”เบ‚เบทเป‰เบ™เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบžเบฐเบเบฒเบเบฒเบกเปƒเบŠเป‰เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ™เบตเป‰เปƒเบ™เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ™เบฑเบšเบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ aws_instance:

resource "aws_instance" "example_3" {
   count             = random_integer.num_instances.result
   ami                = "ami-0c55b159cbfafe1f0"
   instance_type = "t2.micro"
}

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เปƒเบŠเป‰เปเบœเบ™ terraform เปƒเบ™เบฅเบฐเบซเบฑเบ”เบ™เบตเป‰, เบ—เปˆเบฒเบ™เบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

Error: Invalid count argument

   on main.tf line 30, in resource "aws_instance" "example_3":
   30: count = random_integer.num_instances.result

The "count" value depends on resource attributes that cannot be determined until apply, so Terraform cannot predict how many instances will be created. To work around this, use the -target argument to first apply only the resources that the count depends on.

Terraform เบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบเบฒเบ™เบ™เบฑเบš เปเบฅเบฐ for_each เป„เบ”เป‰เบ–เบทเบเบ„เบดเบ”เป„เบฅเปˆเปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เป„เบฅเบเบฐเบเบฒเบ™เบงเบฒเบ‡เปเบœเบ™, เบเปˆเบญเบ™เบ—เบตเปˆเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เปƒเบ”เป†เบˆเบฐเบ–เบทเบเบชเป‰เบฒเบ‡ เบซเบผเบทเบ”เบฑเบ”เปเบเป‰. เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบเบฒเบ™เบ™เบฑเบšเปเบฅเบฐ for_each เบชเบฒเบกเบฒเบ”เบญเป‰เบฒเบ‡เบญเบตเบ‡เป€เบ–เบดเบ‡เบ•เบปเบงเบซเบ™เบฑเบ‡เบชเบท, เบ•เบปเบงเปเบ›, เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™, เปเบฅเบฐเปเบกเป‰เบเบฐเบ—เบฑเป‰เบ‡เบฅเบฒเบเบเบฒเบ™เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ (เบ•เบฒเบšเปƒเบ”เบ—เบตเปˆเบ„เบงเบฒเบกเบเบฒเบงเบ‚เบญเบ‡เบžเบงเบเบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเบเปเบฒเบ™เบปเบ”เปƒเบ™เป€เบงเบฅเบฒเบเปเบฒเบ™เบปเบ”), เปเบ•เปˆเบšเปเปˆเปเบกเปˆเบ™เบ•เบปเบงเปเบ›เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบ„เบดเบ”เป„เบฅเปˆ.

count เปเบฅเบฐ for_each เบšเปเปˆเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป‚เบกเบ”เบนเบ™เป„เบ”เป‰

เบกเบทเป‰เบซเบ™เบถเปˆเบ‡เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบ–เบทเบเบฅเปเป‰เบฅเบงเบ‡เปƒเบซเป‰เป€เบžเบตเปˆเบกเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบเบฒเบ™เบ™เบฑเบšเป€เบ‚เบปเป‰เบฒเปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป‚เบกเบ”เบนเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™:

module "count_example" {
     source = "../../../../modules/services/webserver-cluster"

     count = 3

     cluster_name = "terraform-up-and-running-example"
     server_port = 8080
     instance_type = "t2.micro"
}

เบฅเบฐเบซเบฑเบ”เบ™เบตเป‰เบžเบฐเบเบฒเบเบฒเบกเปƒเบŠเป‰เบเบฒเบ™เบ™เบฑเบšเบขเบนเปˆเปƒเบ™เป‚เบกเบ”เบนเบ™เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบชเบฒเบกเบชเปเบฒเป€เบ™เบปเบฒเบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ webserver-cluster. เบซเบผเบทเบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป‚เบกเบ”เบนเบ™เป€เบ›เบฑเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบšเบฒเบ‡เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚ Boolean เป‚เบ”เบเบเปเบฒเบ™เบปเบ”เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบเบฒเบ™เบ™เบฑเบšเบ‚เบญเบ‡เบกเบฑเบ™เป€เบ›เบฑเบ™ 0. เบ™เบตเป‰เบญเบฒเบ”เบˆเบฐเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบชเบปเบกเป€เบซเบ”เบชเบปเบกเบœเบปเบ™, เปเบ•เปˆเบ—เปˆเบฒเบ™เบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ™เบตเป‰เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเปเบฅเปˆเบ™เปเบœเบ™ terraform:

Error: Reserved argument name in module block

   on main.tf line 13, in module "count_example":
   13: count = 3

The name "count" is reserved for use in a future version of Terraform.

เปเบ•เปˆเบซเบ™เป‰เบฒเป€เบชเบเบ”เบฒเบ, เป€เบ›เบฑเบ™เบ‚เบญเบ‡ Terraform 0.12.6, เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบ™เบฑเบšเบซเบผเบท for_each เปƒเบ™เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ‚เบญเบ‡เป‚เบกเบ”เบนเบ™เปเบกเปˆเบ™เบšเปเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™. เบญเบตเบ‡เบ•เบฒเบกเบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เบ›เปˆเบญเบ Terraform 0.12 (http://bit.ly/3257bv4), HashiCorp เบงเบฒเบ‡เปเบœเบ™เบ—เบตเปˆเบˆเบฐเป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ™เบตเป‰เปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ‚เบถเป‰เบ™เบขเบนเปˆเบเบฑเบšเป€เบงเบฅเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เบญเปˆเบฒเบ™เบซเบ™เบฑเบ‡เบชเบทเป€เบซเบผเบฑเป‰เบกเบ™เบตเป‰, เบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเบกเบตเบขเบนเปˆเปเบฅเป‰เบง. เป€เบžเบทเปˆเบญเบŠเบญเบเบซเบฒเปเบ™เปˆเบ™เบญเบ™, เบญเปˆเบฒเบ™เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡ Terraform เบ—เบตเปˆเบ™เบตเป‰.

เบ‚เปเป‰เบˆเปเบฒเบเบฑเบ”เบ‚เบญเบ‡ Zero Downtime Deployments

เบเบฒเบ™เปƒเบŠเป‰ block create_before_destroy เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบเบฑเบš ASG เป€เบ›เบฑเบ™เบเบฒเบ™เปเบเป‰เป„เบ‚เบ—เบตเปˆเบ”เบตเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เบเบฒเบ™เปƒเบŠเป‰เบ‡เบฒเบ™เบชเบนเบ™เบเบฒเบ™เบขเบธเบ”เป€เบฎเบฑเบ”เบงเบฝเบ, เบเบปเบเป€เบงเบฑเป‰เบ™เบ„เปเบฒเป€เบ•เบทเบญเบ™เบซเบ™เบถเปˆเบ‡: เบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบ›เบฑเบšเบ‚เบฐเบซเบ™เบฒเบ”เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™. เบซเบผเบทเป€เบžเบทเปˆเบญเปƒเบซเป‰เบกเบตเบ„เบงเบฒเบกเบŠเบฑเบ”เป€เบˆเบ™เบซเบผเบฒเบเบ‚เบถเป‰เบ™, เบ™เบตเป‰เบˆเบฐเบ›เบฑเบšเบ‚เบฐเบซเบ™เบฒเบ” ASG เบเบฑเบšเบ„เบทเบ™เป„เบ›เบšเปˆเบญเบ™ min_size เปƒเบ™เบ—เบธเบเป†เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰, เป€เบŠเบดเปˆเบ‡เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เบšเบฑเบ™เบซเบฒเบ–เป‰เบฒเบ—เปˆเบฒเบ™เปƒเบŠเป‰เบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบ›เบฑเบšเบ‚เบฐเบซเบ™เบฒเบ”เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เป€เบžเบทเปˆเบญเป€เบžเบตเปˆเบกเบˆเปเบฒเบ™เบงเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบ.

เบ•เบปเบงเบขเปˆเบฒเบ‡, เป‚เบกเบ”เบนเบ™ webserver-cluster เบกเบตเบ„เบนเปˆเบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ aw_autoscaling_schedule, เป€เบŠเบดเปˆเบ‡เปƒเบ™เป€เบงเบฅเบฒ 9 เป‚เบกเบ‡เป€เบŠเบปเป‰เบฒเบˆเบฐเป€เบžเบตเปˆเบกเบˆเปเบฒเบ™เบงเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเปƒเบ™ cluster เบˆเบฒเบเบชเบญเบ‡เบซเบฒเบชเบดเบš. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เป€เบงเบฅเบฒ, เป€เบงเบปเป‰เบฒเบงเปˆเบฒ, 11 เป‚เบกเบ‡เป€เบŠเบปเป‰เบฒ, ASG เปƒเบซเบกเปˆเบˆเบฐเบšเบนเบ”เบ”เป‰เบงเบเบžเบฝเบ‡เปเบ•เปˆเบชเบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบชเบดเบšเปเบฅเบฐเบเบฑเบ‡เบ„เบปเบ‡เป€เบ›เบฑเบ™เปเบšเบšเบ™เบฑเป‰เบ™เบˆเบปเบ™เบเปˆเบงเบฒ 9 เป‚เบกเบ‡เป€เบŠเบปเป‰เบฒเบ‚เบญเบ‡เบกเบทเป‰เบ•เปเปˆเบกเบฒ.

เบ‚เปเป‰ เบˆเบณ เบเบฑเบ”เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เบซเบฅเบตเบเบฅเป‰เบฝเบ‡เป„เบ”เป‰เปƒเบ™เบซเบผเบฒเบเบงเบดเบ—เบต.

  • เบ›เปˆเบฝเบ™เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบเบฒเบ™เป€เบเบตเบ”เบ‚เบถเป‰เบ™เบŠเป‰เบณเปƒเบ™ aws_autoscaling_schedule เบˆเบฒเบ 0 9 * * * (โ€œเปเบฅเปˆเบ™เป€เบงเบฅเบฒ 9 เป‚เบกเบ‡เป€เบŠเบปเป‰เบฒโ€) เบกเบฒเป€เบ›เบฑเบ™ 0-59 9-17 * * * (โ€œเปเบฅเปˆเบ™เบ—เบธเบเป†เบ™เบฒเบ—เบตเบˆเบฒเบ 9 เป‚เบกเบ‡เป€เบŠเบปเป‰เบฒเบซเบฒ 5 เป‚เบกเบ‡เปเบฅเบ‡โ€). เบ–เป‰เบฒ ASG เบกเบตเบชเบดเบšเป€เบŠเบตเบšเป€เบงเบตเปเบฅเป‰เบง, เบเบฒเบ™เปƒเบŠเป‰เบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบ›เบฑเบšเบ‚เบฐเบซเบ™เบฒเบ”เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบ™เบตเป‰เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เบˆเบฐเบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡เบซเบเบฑเบ‡, เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™. เปเบ•เปˆเบ–เป‰เบฒ ASG เป„เบ”เป‰เบ–เบทเบเบ™เปเบฒเบกเบฒเปƒเบŠเป‰เปƒเบ™เบšเปเปˆเบ”เบปเบ™เบกเบฒเบ™เบตเป‰, เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ™เบตเป‰เบˆเบฐเบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบงเปˆเบฒเปƒเบ™เป€เบงเบฅเบฒเบชเบนเบ‡เบชเบธเบ”เบ‚เบญเบ‡เบซเบ™เบถเปˆเบ‡เบ™เบฒเบ—เบตเบˆเปเบฒเบ™เบงเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡เบกเบฑเบ™เบˆเบฐเบšเบฑเบ™เบฅเบธเบชเบดเบš. เบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบชเบฐเบซเบ‡เปˆเบฒเบ‡เบฒเบกเบ—เบฑเบ‡เบซเบกเบปเบ”, เปเบฅเบฐเบเบฒเบ™เบเบฐเป‚เบ”เบ”เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบˆเบฒเบเบชเบดเบšเป„เบ›เบซเบฒเบชเบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเปเบฅเบฐเบเบฑเบšเบ„เบทเบ™เป„เบ›เบšเปˆเบญเบ™เบเปเปˆเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบšเบฑเบ™เบซเบฒเบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เปƒเบŠเป‰.
  • เบชเป‰เบฒเบ‡เบชเบฐเบ„เบฃเบดเบšเปเบšเบšเบเบณเบ™เบปเบ”เป€เบญเบ‡เบ—เบตเปˆเปƒเบŠเป‰ AWS API เป€เบžเบทเปˆเบญเบเบณเบ™เบปเบ”เบˆเบณเบ™เบงเบ™เป€เบŠเบตเบšเป€เบงเบตเบ—เบตเปˆเป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเบขเบนเปˆเปƒเบ™ ASG, เป‚เบ—เบซเบฒเบกเบฑเบ™เป‚เบ”เบเปƒเบŠเป‰เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบžเบฒเบเบ™เบญเบ (เป€เบšเบดเปˆเบ‡ "เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบžเบฒเบเบ™เบญเบ" เปƒเบ™เปœเป‰เบฒ 249), เปเบฅเบฐเบเบณเบ™เบปเบ”เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ‚เบญเบ‡ ASG เปƒเบซเป‰เบเบฑเบšเบ„เปˆเบฒเบ—เบตเปˆเบชเบปเปˆเบ‡เบกเบฒเป‚เบ”เบ เบชเบฐเบ„เบฃเบดเบš. เบ”เป‰เบงเบเบงเบดเบ—เบตเบ™เบตเป‰, เปเบ•เปˆเบฅเบฐเบ•เบปเบงเบขเปˆเบฒเบ‡ ASG เปƒเบซเบกเปˆเบˆเบฐเปเบฅเปˆเบ™เบขเบนเปˆเปƒเบ™เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบฅเบฐเบซเบฑเบ” Terraform เบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบเบฒเบเบ—เบตเปˆเบˆเบฐเบฎเบฑเบเบชเบฒ.

เปเบ™เปˆเบ™เบญเบ™, Terraform เบˆเบฐเบกเบตเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เปƒเบ™เบ•เบปเบงเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบ—เบตเปˆเบšเปเปˆเบกเบตเป€เบงเบฅเบฒเบซเบผเบธเบ”เบฅเบปเบ‡, เปเบ•เปˆเปƒเบ™เป€เบ”เบทเบญเบ™เบžเบถเบ”เบชเบฐเบžเบฒ 2019, เบ—เบตเบกเบ‡เบฒเบ™ HashiCorp เบšเปเปˆเบกเบตเปเบœเบ™เบ—เบตเปˆเบˆเบฐเป€เบžเบตเปˆเบกเบซเบ™เป‰เบฒเบ—เบตเปˆเบ™เบตเป‰ (เบฅเบฒเบเบฅเบฐเบญเบฝเบ” - เบ—เบตเปˆเบ™เบตเป‰).

เปเบœเบ™เบเบฒเบ™เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบญเบฒเบ”เบˆเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบšเปเปˆเบชเปเบฒเป€เบฅเบฑเบ”

เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡เปเบœเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เปเบœเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™, เปเบ•เปˆเบ„เปเบฒเบชเบฑเปˆเบ‡เบ™เปเบฒเปƒเบŠเป‰เบชเบปเปˆเบ‡เบ„เบทเบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบฅเบญเบ‡เป€เบžเบตเปˆเบกเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ aws_iam_user เบ—เบตเปˆเบกเบตเบŠเบทเปˆเบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบœเบนเป‰เปƒเบŠเป‰ IAM เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบเปˆเบญเบ™เปœเป‰เบฒเบ™เบตเป‰เปƒเบ™เบšเบปเบ”เบ—เบต 2:

resource "aws_iam_user" "existing_user" {
   # ะŸะพะดัั‚ะฐะฒัŒั‚ะต ััŽะดะฐ ะธะผั ัƒะถะต ััƒั‰ะตัั‚ะฒัƒัŽั‰ะตะณะพ ะฟะพะปัŒะทะพะฒะฐั‚ะตะปั IAM,
   # ั‡ั‚ะพะฑั‹ ะฟะพะฟั€ะฐะบั‚ะธะบะพะฒะฐั‚ัŒัั ะฒ ะธัะฟะพะปัŒะทะพะฒะฐะฝะธะธ ะบะพะผะฐะฝะดั‹ terraform import
   name = "yevgeniy.brikman"
}

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เปเบœเบ™เบเบฒเบ™, Terraform เบˆเบฐเบญเบญเบเปเบœเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ—เบตเปˆเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบชเบปเบกเป€เบซเบ”เบชเบปเบกเบœเบปเบ™:

Terraform will perform the following actions:

   # aws_iam_user.existing_user will be created
   + resource "aws_iam_user" "existing_user" {
         + arn                  = (known after apply)
         + force_destroy   = false
         + id                    = (known after apply)
         + name               = "yevgeniy.brikman"
         + path                 = "/"
         + unique_id         = (known after apply)
      }

Plan: 1 to add, 0 to change, 0 to destroy.

เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบ—เปˆเบฒเบ™โ€‹เบ”เปเบฒโ€‹เป€เบ™เบตเบ™โ€‹เบเบฒเบ™โ€‹เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบ—เบตเปˆโ€‹เบ—เปˆเบฒเบ™โ€‹เบˆเบฐโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบ„เบงเบฒเบกโ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”โ€‹เบ”เบฑเปˆเบ‡โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹:

Error: Error creating IAM User yevgeniy.brikman: EntityAlreadyExists:
User with name yevgeniy.brikman already exists.

   on main.tf line 10, in resource "aws_iam_user" "existing_user":
   10: resource "aws_iam_user" "existing_user" {

เบšเบฑเบ™เบซเบฒ, เปเบ™เปˆเบ™เบญเบ™, เปเบกเปˆเบ™เบงเปˆเบฒเบœเบนเป‰เปƒเบŠเป‰ IAM เบ—เบตเปˆเบกเบตเบŠเบทเปˆเบ™เบฑเป‰เบ™เบกเบตเบขเบนเปˆเปเบฅเป‰เบง. เปเบฅเบฐเบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบเบตเบ”เบ‚เบถเป‰เบ™เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเบเบฑเบšเบœเบนเป‰เปƒเบŠเป‰ IAM, เปเบ•เปˆเบเบฑเบšเป€เบเบทเบญเบšเบ—เบธเบเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™. เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบงเปˆเบฒเบœเบนเป‰เปƒเบ”เบœเบนเป‰เบซเบ™เบถเปˆเบ‡เบชเป‰เบฒเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ™เบตเป‰เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡เบซเบผเบทเปƒเบŠเป‰เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡, เปเบ•เปˆเปƒเบ™เบ—เบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก, เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆ IDs เบ™เปเบฒเป„เบ›เบชเบนเปˆเบเบฒเบ™เบ‚เบฑเบ”เปเบเป‰เบ‡. เบกเบตเบซเบผเบฒเบเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ‚เบญเบ‡เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ™เบตเป‰เบ—เบตเปˆเบกเบฑเบเบˆเบฐเบˆเบฑเบšเบœเบนเป‰เบกเบฒเปƒเบซเบกเปˆเบเบฑเบš Terraform เป‚เบ”เบเปเบ›เบเปƒเบˆ.

เบˆเบธเบ”เบชเปเบฒเบ„เบฑเบ™เปเบกเปˆเบ™เบงเปˆเบฒเบ„เปเบฒเบชเบฑเปˆเบ‡เปเบœเบ™เบเบฒเบ™ terraform เบžเบฝเบ‡เปเบ•เปˆเปƒเบŠเป‰เป€เบงเบฅเบฒเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบšเบฑเบ™เบŠเบตเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™เบ—เบตเปˆเบ–เบทเบเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เปƒเบ™เป„เบŸเบฅเปŒเบฅเบฑเบ” Terraform. เบ–เป‰เบฒเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เปƒเบ™เบ—เบฒเบ‡เบญเบทเปˆเบ™ (เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡เป‚เบ”เบเบเบฒเบ™เบ„เบฅเบดเบเปƒเบชเปˆ console AWS), เบžเบงเบเบกเบฑเบ™เบˆเบฐเบšเปเปˆเบชเบดเป‰เบ™เบชเบธเบ”เปƒเบ™เป„เบŸเบฅเปŒเบ‚เบญเบ‡เบฅเบฑเบ”เปเบฅเบฐเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ Terraform เบˆเบฐเบšเปเปˆเป€เบญเบปเบฒเบžเบงเบเบกเบฑเบ™เป€เบ‚เบปเป‰เบฒเปƒเบ™เบšเบฑเบ™เบŠเบตเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เปเบฒเบชเบฑเปˆเบ‡เปเบœเบ™เบเบฒเบ™. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เปเบœเบ™เบเบฒเบ™เบ—เบตเปˆเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ–เบทเบเบ•เป‰เบญเบ‡เบขเบนเปˆ glance เบ—เปเบฒเบญเบดเบ”เบˆเบฐเบเบฒเบเป€เบ›เบฑเบ™เบšเปเปˆเบชเปเบฒเป€เบฅเบฑเบ”.

เบกเบตเบชเบญเบ‡เบšเบปเบ”เบฎเบฝเบ™เบ—เบตเปˆเบˆเบฐเบฎเบฝเบ™เบฎเบนเป‰เบˆเบฒเบเบ™เบตเป‰.

  • เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป„เบ”เป‰เป€เบฅเบตเปˆเบกเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš Terraform เปเบฅเป‰เบง, เบขเปˆเบฒเปƒเบŠเป‰เบญเบฑเบ™เบญเบทเปˆเบ™. เบ–เป‰เบฒเบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบ–เบทเบเบˆเบฑเบ”เบเบฒเบ™เป‚เบ”เบเปƒเบŠเป‰ Terraform, เบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ”เบฑเบ”เปเบ›เบ‡เบกเบฑเบ™เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡เป„เบ”เป‰. เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ—เปˆเบฒเบ™เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเบกเบตเบ„เบงเบฒเบกเบชเปˆเบฝเบ‡เบ•เปเปˆเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ” Terraform เบ—เบตเปˆเปเบ›เบเบ›เบฐเบซเบผเบฒเบ”, เปเบ•เปˆเบ—เปˆเบฒเบ™เบเบฑเบ‡เบ›เบฐเบ•เบดเป€เบชเบ”เบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบซเบผเบฒเบเบขเปˆเบฒเบ‡เบ‚เบญเบ‡ IaC เป€เบžเบฒเบฐเบงเปˆเบฒเบฅเบฐเบซเบฑเบ”เบˆเบฐเบšเปเปˆเป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบ‚เบญเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™.
  • เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบกเบตเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡เปเบฅเป‰เบง, เปƒเบซเป‰เปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เป€เบฅเบตเปˆเบกเปƒเบŠเป‰ Terraform เบเบฑเบšเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบ—เบตเปˆเบกเบตเบขเบนเปˆ, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบžเบตเปˆเบกเบกเบฑเบ™เปƒเบชเปˆเป„เบŸเบฅเปŒเบ‚เบญเบ‡เบฅเบฑเบ”เป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ terraform. เบงเบดเบ—เบตเบ™เบตเป‰ Terraform เบˆเบฐเบฎเบนเป‰เบงเปˆเบฒเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบญเบฑเบ™เปƒเบ”เบ—เบตเปˆเบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡. เบ„เปเบฒเบชเบฑเปˆเบ‡เบ™เปเบฒเป€เบ‚เบปเป‰เบฒเปƒเบŠเป‰เป€เบงเบฅเบฒเบชเบญเบ‡เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡. เบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™เบ—เบตเปˆเบขเบนเปˆเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เปƒเบ™เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‚เบญเบ‡เบ—เปˆเบฒเบ™. syntax เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰เปเบกเปˆเบ™เบ„เบทเบเบฑเบ™เบเบฑเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™: _. (เป€เบŠเบฑเปˆเบ™: aws_iam_user.existing_user). เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เบตเบชเบญเบ‡เปเบกเปˆเบ™ ID เบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบˆเบฐเบ™เปเบฒเป€เบ‚เบปเป‰เบฒ. เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒ ID เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ aws_iam_user เปเบกเปˆเบ™เบŠเบทเปˆเบœเบนเป‰เปƒเบŠเป‰ (เบ•เบปเบงเบขเปˆเบฒเบ‡, yevgeniy.brikman), เปเบฅเบฐ ID เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ aws_instance เปเบกเปˆเบ™ ID เป€เบŠเบตเบšเป€เบงเบต EC2 (เป€เบŠเบฑเปˆเบ™: i-190e22e5). เบงเบดเบ—เบตเบเบฒเบ™เบ™เปเบฒเป€เบ‚เบปเป‰เบฒเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เปเบกเปˆเบ™เบกเบฑเบเบˆเบฐเบชเบฐเปเบ”เบ‡เบขเบนเปˆเปƒเบ™เป€เบญเบเบฐเบชเบฒเบ™เบขเบนเปˆเบ”เป‰เบฒเบ™เบฅเบธเปˆเบกเบ‚เบญเบ‡เบซเบ™เป‰เบฒเบ‚เบญเบ‡เบกเบฑเบ™.

    เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เปเบกเปˆเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ™เปเบฒเป€เบ‚เบปเป‰เบฒเบ—เบตเปˆ synchronizes เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ aws_iam_user เบ—เบตเปˆเบ—เปˆเบฒเบ™เป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ Terraform เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบžเป‰เบญเบกเบเบฑเบšเบœเบนเป‰เปƒเบŠเป‰ IAM เปƒเบ™เบšเบปเบ”เบ—เบต 2 (เบเบฒเบ™เบ›เปˆเบฝเบ™เบŠเบทเปˆเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบชเปเบฒเบฅเบฑเบš yevgeniy.brikman, เปเบ™เปˆเบ™เบญเบ™):

    $ terraform import aws_iam_user.existing_user yevgeniy.brikman

    Terraform เบˆเบฐเป‚เบ—เบซเบฒ API AWS เป€เบžเบทเปˆเบญเบŠเบญเบเบซเบฒเบœเบนเป‰เปƒเบŠเป‰ IAM เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบฅเบฐเบชเป‰เบฒเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เป„เบŸเบฅเปŒเบ‚เบญเบ‡เบฅเบฑเบ”เบฅเบฐเบซเบงเปˆเบฒเบ‡เบกเบฑเบ™เบเบฑเบšเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ aws_iam_user.existing_user เปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ Terraform เบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เบˆเบฒเบเบ™เบตเป‰, เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เปเบœเบ™เบเบฒเบ™, Terraform เบˆเบฐเบฎเบนเป‰เบงเปˆเบฒเบœเบนเป‰เปƒเบŠเป‰ IAM เบกเบตเบขเบนเปˆเปเบฅเป‰เบงเปเบฅเบฐเบˆเบฐเบšเปเปˆเบžเบฐเบเบฒเบเบฒเบกเบชเป‰เบฒเบ‡เบกเบฑเบ™เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡.

    เบกเบฑเบ™เป€เบ›เบฑเบ™เบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบกเบตเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบฅเบฒเบเบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบ™เปเบฒเป€เบ‚เบปเป‰เบฒเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ Terraform, เบเบฒเบ™เบ‚เบฝเบ™เบฅเบฐเบซเบฑเบ”เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡เปเบฅเบฐเบเบฒเบ™เบ™เปเบฒเป€เบ‚เบปเป‰เบฒเปเบ•เปˆเบฅเบฐเบ„เบฑเป‰เบ‡เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบ„เบงเบฒเบกเบซเบเบธเป‰เบ‡เบเบฒเบ. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบกเบฑเบ™เบ„เบธเป‰เบกเบ„เปˆเบฒเบ—เบตเปˆเบˆเบฐเบŠเบญเบเบซเบฒเป€เบ„เบทเปˆเบญเบ‡เบกเบทเป€เบŠเบฑเปˆเบ™ Terraforming (http://terraforming.dtan4.net/), เป€เบŠเบดเปˆเบ‡เบชเบฒเบกเบฒเบ”เบ™เปเบฒเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เปเบฅเบฐเบชเบฐเบ–เบฒเบ™เบฐเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบˆเบฒเบเบšเบฑเบ™เบŠเบต AWS เบ‚เบญเบ‡เบ—เปˆเบฒเบ™.

    Refactoring เบชเบฒเบกเบฒเบ”เบกเบต pitfalls เบ‚เบญเบ‡เบ•เบปเบ™

    เบ›เบฐเบ•เบดเบชเบฑเบ‡เบ‚เบญเบ™ เป€เบ›เบฑเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบปเปˆเบงเป„เบ›เปƒเบ™เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบผเปเบเบผเบกเบ—เบตเปˆเบ—เปˆเบฒเบ™เบ›เปˆเบฝเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบฒเบเปƒเบ™เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเป€เบฎเบฑเบ”เปƒเบซเป‰เบžเบถเบ”เบ•เบดเบเปเบฒเบžเบฒเบเบ™เบญเบเบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡. เบ™เบตเป‰เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบฅเบฐเบซเบฑเบ”เบŠเบฑเบ”เป€เบˆเบ™, เบชเบฐเบญเบฒเบ”, เปเบฅเบฐเบ‡เปˆเบฒเบเบ•เปเปˆเบเบฒเบ™เบฎเบฑเบเบชเบฒ. Refactoring เป€เบ›เบฑเบ™เป€เบ•เบฑเบเบ™เบดเบเบ—เบตเปˆเบ‚เบฒเบ”เบšเปเปˆเป„เบ”เป‰เบ—เบตเปˆเบ„เบงเบ™เบˆเบฐเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบ›เบฑเบ™เบ›เบฐเบˆเปเบฒ. เปเบ•เปˆเป€เบกเบทเปˆเบญเบกเบฑเบ™เบกเบฒเบเบฑเบš Terraform เบซเบผเบทเป€เบ„เบทเปˆเบญเบ‡เบกเบท IaC เบญเบทเปˆเบ™เป†, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบฅเบฐเบกเบฑเบ”เบฅเบฐเบงเบฑเบ‡เบ—เบตเปˆเบชเบธเบ”เบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบซเบกเบฒเบเป€เบ–เบดเบ‡ "เบžเบถเบ”เบ•เบดเบเปเบฒเบžเบฒเบเบ™เบญเบ" เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”, เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบšเปเปˆเบ„เบฒเบ”เบ„เบดเบ”เบˆเบฐเป€เบเบตเบ”เบ‚เบทเป‰เบ™.

    เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ›เบฐเป€เบžเบ”เบ—เบปเปˆเบงเป„เบ›เบ‚เบญเบ‡ refactoring เปเบกเปˆเบ™เบเบฒเบ™เบ›เปˆเบฝเบ™เบŠเบทเปˆเบ‚เบญเบ‡เบ•เบปเบงเปเบ›เบซเบผเบทเบซเบ™เป‰เบฒเบ—เบตเปˆเบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเบซเบผเบฒเบ. IDEs เบซเบผเบฒเบเบ„เบปเบ™เบกเบตเบ•เบปเบงเบŠเปˆเบงเบเปƒเบ™เบ•เบปเบงเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ refactoring เปเบฅเบฐเบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เบŠเบทเปˆเบ•เบปเบงเปเบ›เปเบฅเบฐเบซเบ™เป‰เบฒเบ—เบตเปˆเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เปƒเบ™เบ—เบปเปˆเบงเป‚เบ„เบ‡เบเบฒเบ™. เปƒเบ™เบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเบ—เบตเปˆเบกเบตเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบ—เบปเปˆเบงเป„เบ›, เบ™เบตเป‰เปเบกเปˆเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบเบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบญเบฒเบ”เบˆเบฐเบšเปเปˆเบ„เบดเบ”เบเปˆเบฝเบงเบเบฑเบš, เปเบ•เปˆเปƒเบ™ Terraform เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบฅเบฐเบกเบฑเบ”เบฅเบฐเบงเบฑเบ‡เบ—เบตเปˆเบชเบธเบ”เบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰, เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบ›เบฐเบชเบปเบšเบเบฑเบšเบšเบฑเบ™เบซเบฒ.

    เบ•เบปเบงเบขเปˆเบฒเบ‡, webserver-cluster module เบกเบต input variable cluster_name:

    variable "cluster_name" {
       description = "The name to use for all the cluster resources"
       type          = string
    }

    เบˆเบดเบ™เบ•เบฐเบ™เบฒเบเบฒเบ™เบงเปˆเบฒเบ—เปˆเบฒเบ™เป€เบฅเบตเปˆเบกเปƒเบŠเป‰เป‚เบกเบ”เบนเบ™เบ™เบตเป‰เป€เบžเบทเปˆเบญเบ™เบณเปƒเบŠเป‰เบšเปเบฅเบดเบเบฒเบ™เบˆเบธเบฅเบฐเบžเบฒเบเบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ foo. เบ•เปเปˆเบกเบฒ, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ›เปˆเบฝเบ™เบŠเบทเปˆเบšเปเบฅเบดเบเบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบ›เบฑเบ™เปเบ–เบš. เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ™เบตเป‰เบญเบฒเบ”เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เป€เบฅเบฑเบเบ™เป‰เบญเบ, เปเบ•เปˆเปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡เปเบฅเป‰เบง เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบเบฒเบ™เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™.

    เบ„เบงเบฒเบกเบˆเบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒ webserver-cluster module เปƒเบŠเป‰เบ•เบปเบงเปเบ› cluster_name เปƒเบ™เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡, เบฅเบงเบกเบ—เบฑเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบŠเบทเปˆเบ‚เบญเบ‡เบชเบญเบ‡เบเบธเปˆเบกเบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเปเบฅเบฐ ALB:

    resource "aws_lb" "example" {
       name                    = var.cluster_name
       load_balancer_type = "application"
       subnets = data.aws_subnet_ids.default.ids
       security_groups      = [aws_security_group.alb.id]
    }

    เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ›เปˆเบฝเบ™เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบŠเบทเปˆเปƒเบ™เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™, Terraform เบˆเบฐเบฅเบถเบšเป€เบงเบตเบŠเบฑเบ™เป€เบเบปเปˆเบฒเบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ™เบฑเป‰เบ™เปเบฅเบฐเบชเป‰เบฒเบ‡เปƒเบซเบกเปˆเปƒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ‚เบญเบ‡เบกเบฑเบ™. เปเบ•เปˆเบ–เป‰เบฒเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ™เบฑเป‰เบ™เป€เบ›เบฑเบ™ ALB, เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบฅเบถเบšเบกเบฑเบ™เปเบฅเบฐเบเบฒเบ™เบ”เบฒเบงเป‚เบซเบฅเบ”เป€เบงเบตเบŠเบฑเบ™เปƒเบซเบกเปˆ, เบ—เปˆเบฒเบ™เบˆเบฐเบšเปเปˆเบกเบตเบเบปเบ™เป„เบเบ—เบตเปˆเบˆเบฐเบ›เปˆเบฝเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป„เบ›เบซเบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป€เบงเบฑเบšเบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™, เบ–เป‰เบฒเบเบธเปˆเบกเบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเบ–เบทเบเบฅเบถเบš, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบˆเบฐเป€เบฅเบตเปˆเบกเบ›เบฐเบ•เบดเป€เบชเบ”เบเบฒเบ™เบˆเบฒเบฅเบฐเบˆเบญเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเปƒเบ”เป†เบˆเบปเบ™เบเปˆเบงเบฒเบเบธเปˆเบกเปƒเบซเบกเปˆเบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™.

    เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบเบฒเบ™ refactoring เบญเบทเปˆเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบชเบปเบ™เปƒเบˆเปเบกเปˆเบ™เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡ Terraform ID. เปƒเบซเป‰เป€เบญเบปเบฒเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ aws_security_group เปƒเบ™เป‚เบกเบ”เบนเบ™ webserver-cluster เป€เบ›เบฑเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡:

    resource "aws_security_group" "instance" {
      # (...)
    }

    เบ•เบปเบงเบฅเบฐเบšเบธเบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ™เบตเป‰เป€เบญเบตเป‰เบ™เบงเปˆเบฒ instance. เบˆเบดเบ™เบ•เบฐเบ™เบฒเบเบฒเบ™เบงเปˆเบฒเปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™ refactoring เบ—เปˆเบฒเบ™เป„เบ”เป‰เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ—เบตเปˆเบˆเบฐเบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™เบŠเบทเปˆเบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเปƒเบˆเป„เบ”เป‰เบซเบผเบฒเบเบ‚เบถเป‰เบ™ (เปƒเบ™เบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™) cluster_instance:

    resource "aws_security_group" "cluster_instance" {
       # (...)
    }

    เบˆเบฐเป€เบเบตเบ”เบซเบเบฑเบ‡เบ‚เบถเป‰เบ™เปƒเบ™เบ—เบตเปˆเบชเบธเบ”? เบกเบฑเบ™เบ–เบทเบเบ•เป‰เบญเบ‡: เบเบฒเบ™เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡.

    Terraform เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เปเบ•เปˆเบฅเบฐ ID เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบเบฑเบš ID เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เบ„เบฅเบฒเบง. เบ•เบปเบงเบขเปˆเบฒเบ‡, iam_user เปเบกเปˆเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบเบฑเบš ID เบœเบนเป‰เปƒเบŠเป‰ AWS IAM, เปเบฅเบฐ aws_instance เปเบกเปˆเบ™เบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบš ID เป€เบŠเบตเบšเป€เบงเบต AWS EC2. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ›เปˆเบฝเบ™ ID เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ (เป€เบงเบปเป‰เบฒเบˆเบฒเบ instance เป€เบ›เบฑเบ™ cluster_instance, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบš aws_security_group), เบเบฑเบš Terraform เบกเบฑเบ™เบˆเบฐเบ›เบฒเบเบปเบ”เบ„เบทเบเบฑเบšเบงเปˆเบฒเบ—เปˆเบฒเบ™เป„เบ”เป‰เบฅเบถเบšเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เป€เบเบปเปˆเบฒเบญเบญเบ เปเบฅเบฐเป€เบžเบตเปˆเบกเบญเบฑเบ™เปƒเปเปˆ. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰, Terraform เบˆเบฐเบฅเบถเบšเบเบธเปˆเบกเบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเป€เบเบปเปˆเบฒเปเบฅเบฐเบชเป‰เบฒเบ‡เปƒเบซเบกเปˆ, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบฅเบตเปˆเบกเบ›เบฐเบ•เบดเป€เบชเบ”เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเปƒเบ”เป†.

    เบ™เบตเป‰เปเบกเปˆเบ™เบชเบตเปˆเบšเบปเบ”เบฎเบฝเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ„เบงเบ™เบ–เบญเบ”เบ–เบญเบ™เบญเบญเบเบˆเบฒเบเบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒเบ™เบตเป‰.

    • เปƒเบŠเป‰เบ„เบณเบชเบฑเปˆเบ‡เปเบœเบ™เบชเบฐเป€เปเบต. เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เป€เบ›เบตเบ”เป€เบœเบตเบ snags เบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰. เบ—เบปเบšเบ—เบงเบ™เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ‚เบญเบ‡เบกเบฑเบ™เบขเปˆเบฒเบ‡เบฅเบฐเบกเบฑเบ”เบฅเบฐเบงเบฑเบ‡เปเบฅเบฐเป€เบญเบปเบฒเปƒเบˆเปƒเบชเปˆเบเบฑเบšเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ—เบตเปˆ Terraform เบงเบฒเบ‡เปเบœเบ™เบ—เบตเปˆเบˆเบฐเบฅเบถเบšเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบญเบฒเบ”เบˆเบฐเบšเปเปˆเบ–เบทเบเบฅเบถเบšเบ–เบดเป‰เบก.
    • เบชเป‰เบฒเบ‡เบเปˆเบญเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบˆเบฐเบฅเบถเบš. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™, เปƒเบซเป‰เบ„เบดเบ”เบขเปˆเบฒเบ‡เบฅเบฐเบญเบฝเบ”เบเปˆเบฝเบงเบเบฑเบšเบงเปˆเบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบฅเบถเบšเบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบš. เบ–เป‰เบฒเบ„เปเบฒเบ•เบญเบšเปเบกเปˆเบ™เปเบกเปˆเบ™, create_before_destroy เบชเบฒเบกเบฒเบ”เบŠเปˆเบงเบเป„เบ”เป‰. เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ”เบฝเบงเบเบฑเบ™เบชเบฒเบกเบฒเบ”เบšเบฑเบ™เบฅเบธเป„เบ”เป‰เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡เป‚เบ”เบเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบชเบญเบ‡เบ‚เบฑเป‰เบ™เบ•เบญเบ™: เบ—เปเบฒเบญเบดเบ”เป€เบžเบตเปˆเบกเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เปƒเบซเบกเปˆเปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบชเบฐเบซเบกเบฑเบ, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบญเบปเบฒเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เป€เบเบปเปˆเบฒเบญเบญเบเบˆเบฒเบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบฅเบฐเบ™เปเบฒเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡เบ™เปเบฒเปƒเบŠเป‰เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡.
    • เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ•เบปเบงเบฅเบฐเบšเบธเบ•เป‰เบญเบ‡เบเบฒเบ™เบ›เปˆเบฝเบ™เบชเบฐเบ–เบฒเบ™เบฐ. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ›เปˆเบฝเบ™ ID เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ (เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ›เปˆเบฝเบ™เบŠเบทเปˆ aws_security_group เบˆเบฒเบ instance เป€เบ›เบฑเบ™ cluster_instance) เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบฅเบถเบšเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เปเบฅเบฐเบชเป‰เบฒเบ‡เป€เบงเบตเบŠเบฑเบ™เปƒเบซเบกเปˆเบ‚เบญเบ‡เบกเบฑเบ™, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบ›เบฑเบšเบ›เบธเบ‡เป„เบŸเบฅเปŒเบฅเบฑเบ” Terraform เบ•เบฒเบกเบ„เบงเบฒเบกเป€เบซเบกเบฒเบฐเบชเบปเบก. เบขเปˆเบฒเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡ - เปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡เบ‚เบญเบ‡เบฅเบฑเบ” terraform เปเบ—เบ™. เป€เบกเบทเปˆเบญเบ›เปˆเบฝเบ™เบŠเบทเปˆเบ•เบปเบงเบฅเบฐเบšเบธ, เบ—เปˆเบฒเบ™เบ„เบงเบ™เปเบฅเปˆเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡ mv state terraform, เป€เบŠเบดเปˆเบ‡เบกเบต syntax เบ•เปเปˆเป„เบ›เบ™เบตเป‰:
      terraform state mv <ORIGINAL_REFERENCE> <NEW_REFERENCE>

      ORIGINAL_REFERENCE เปเบกเปˆเบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ—เบตเปˆเบซเบกเบฒเบเป€เบ–เบดเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เปƒเบ™เบฎเบนเบšเปเบšเบšเบ›เบฐเบˆเบธเบšเบฑเบ™เบ‚เบญเบ‡เบกเบฑเบ™, เปเบฅเบฐ NEW_REFERENCE เปเบกเปˆเบ™เบšเปˆเบญเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบเป‰เบฒเบเบกเบฑเบ™. เบ•เบปเบงเบขเปˆเบฒเบ‡, เป€เบกเบทเปˆเบญเบ›เปˆเบฝเบ™เบŠเบทเปˆเบเบธเปˆเบก aws_security_group เบˆเบฒเบ instance เป€เบ›เบฑเบ™ cluster_instance, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เปเบฅเปˆเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

      $ terraform state mv 
         aws_security_group.instance 
         aws_security_group.cluster_instance

      เบญเบฑเบ™เบ™เบตเป‰เบšเบญเบ Terraform เบงเปˆเบฒเบชเบฐเบ–เบฒเบ™เบฐเบ—เบตเปˆเป€เบ„เบตเบเป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบเบฑเบš aws_security_group.instance เปƒเบ™เป€เบกเบทเปˆเบญเบเปˆเบญเบ™เบ„เบงเบ™เบˆเบฐเบ–เบทเบเป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบเบฑเบš aws_security_group.cluster_instance. เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบ›เปˆเบฝเบ™เบŠเบทเปˆเปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปเบœเบ™เบเบฒเบ™ terraform เบ„เปเบฒเบชเบฑเปˆเบ‡เบ™เบตเป‰เบšเปเปˆเป„เบ”เป‰เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปƒเบ”เป†, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เป„เบ”เป‰เป€เบฎเบฑเบ”เบ—เบธเบเบขเปˆเบฒเบ‡เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡.

    • เบšเบฒเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เปเบ›เบ‡เป„เบ”เป‰. เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบซเบผเบฒเบเปเบกเปˆเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เปเบ›เบ‡เป„เบ”เป‰. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบžเบฐเบเบฒเบเบฒเบกเบ›เปˆเบฝเบ™เบžเบงเบเบกเบฑเบ™, Terraform เบˆเบฐเบฅเบถเบšเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เป€เบเบปเปˆเบฒเปเบฅเบฐเบชเป‰เบฒเบ‡เปƒเบซเบกเปˆเปƒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ‚เบญเบ‡เบกเบฑเบ™. เปเบ•เปˆเบฅเบฐเบซเบ™เป‰เบฒเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบˆเบฐเบŠเบตเป‰เบšเบญเบเป€เบ–เบดเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบทเป‰เบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เบ›เปˆเบฝเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบชเบฐเป€เบžเบฒเบฐ, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบˆเบฐเบเบงเบ”เป€เบšเบดเปˆเบ‡เป€เบญเบเบฐเบชเบฒเบ™. เบชเบฐเป€เบซเบกเบตเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡เปเบœเบ™เบเบฒเบ™เปเบฅเบฐเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบ™เปเบฒเปƒเบŠเป‰เบเบธเบ”เบ—เบฐเบชเบฒเบ” create_before_destroy.

    เบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡เบ‚เบญเบ‡เบเบฒเบ™เป€เบฅเบทเปˆเบญเบ™เปเบกเปˆเบ™เบชเบญเบ”เบ„เปˆเบญเบ‡ ... เบเบฑเบšเบเบฒเบ™เป€เบฅเบทเปˆเบญเบ™เป€เบงเบฅเบฒ

    APIs เบ‚เบญเบ‡เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เบ„เบฅเบฒเบงเบšเบฒเบ‡เบญเบฑเบ™, เป€เบŠเบฑเปˆเบ™ AWS, เปเบกเปˆเบ™เบšเปเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡เบเบฑเบ™ เปเบฅเบฐเบกเบตเบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡เบŠเบฑเบเบŠเป‰เบฒ. Asynchrony เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบชเบฒเบกเบฒเบ”เบชเบปเปˆเบ‡เบ„เบทเบ™เบเบฒเบ™เบ•เบญเบšเป‚เบ•เป‰เป„เบ”เป‰เบ—เบฑเบ™เบ—เบตเป‚เบ”เบเบšเปเปˆเบ•เป‰เบญเบ‡เบฅเปเบ–เป‰เบฒเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบฎเป‰เบญเบ‡เบ‚เปเปƒเบซเป‰เบชเปเบฒเป€เบฅเบฑเบ”. เบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡เบ—เบตเปˆเบŠเบฑเบเบŠเป‰เบฒเบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบญเบฒเบ”เบˆเบฐเปƒเบŠเป‰เป€เบงเบฅเบฒเป€เบžเบทเปˆเบญเปเบœเปˆเบ‚เบฐเบซเบเบฒเบเปƒเบ™เบ—เบปเปˆเบงเบฅเบฐเบšเบปเบš; เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบกเบฑเบ™เป€เบเบตเบ”เบ‚เบถเป‰เบ™, เบ„เปเบฒเบ•เบญเบšเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบšเปเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡เปเบฅเบฐเบ‚เบถเป‰เบ™เบเบฑเบšเบงเปˆเบฒเปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™ replica เปเบกเปˆเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ•เปเปˆเบเบฒเบ™เป‚เบ— API เบ‚เบญเบ‡เบ—เปˆเบฒเบ™.

    เบ•เบปเบงเบขเปˆเบฒเบ‡, เบˆเบดเบ™เบ•เบฐเบ™เบฒเบเบฒเบ™เบงเปˆเบฒเป€เบˆเบปเป‰เบฒเป‚เบ—เบซเบฒ API เบเบฑเบš AWS เบ‚เปเปƒเบซเป‰เบกเบฑเบ™เบชเป‰เบฒเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ EC2. API เบˆเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡ "เบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”" (201 เบชเป‰เบฒเบ‡) เป€เบเบทเบญเบšเบ—เบฑเบ™เบ—เบต, เป‚เบ”เบเบšเปเปˆเบ•เป‰เบญเบ‡เบฅเปเบ–เป‰เบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡เบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เบ–เบทเบเบชเป‰เบฒเบ‡. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบžเบฐเบเบฒเบเบฒเบกเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบกเบฑเบ™เบ—เบฑเบ™เบ—เบต, เบกเบฑเบ™เป€เบเบทเบญเบšเปเบ™เปˆเบ™เบญเบ™เบˆเบฐเบฅเบปเป‰เบกเป€เบซเบฅเบงเป€เบžเบฒเบฐเบงเปˆเบฒเปƒเบ™เบˆเบธเบ”เบ™เบฑเป‰เบ™ AWS เบเบฑเบ‡เบเปเบฒเบฅเบฑเบ‡เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบซเบผเบท, เปƒเบ™เบ—เบฒเบ‡เบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบก, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบเบฑเบ‡เบšเปเปˆเป„เบ”เป‰ booted. เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป‚เบ—เบซเบฒเบญเบทเปˆเบ™เป€เบžเบทเปˆเบญเบฎเบฑเบšเป€เบญเบปเบฒเบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ™เบตเป‰, เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ” (404 เบšเปเปˆเบžเบปเบš). เบชเบดเปˆเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ EC2 เบ™เบตเป‰เบญเบฒเบ”เบˆเบฐเบเบฑเบ‡เบ–เบทเบเป€เบœเบตเบเปเบœเปˆเปƒเบ™เบ—เบปเปˆเบง AWS เบเปˆเบญเบ™เบ—เบตเปˆเบกเบฑเบ™เบˆเบฐเบกเบตเบขเบนเปˆเบ—เบปเปˆเบงเบ—เบธเบเปเบซเปˆเบ‡, เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เบฅเปเบ–เป‰เบฒเบชเบญเบ‡เบชเบฒเบกเบงเบดเบ™เบฒเบ—เบต.

    เป€เบกเบทเปˆเบญเปƒเบ”เบเปเปˆเบ•เบฒเบกเบ—เบตเปˆเบ—เปˆเบฒเบ™เปƒเบŠเป‰ API asynchronous เบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡เบ‚เบตเป‰เบเบฝเบ”, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบฅเบญเบ‡เบ„เบทเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบ›เบฑเบ™เป„เบฅเบเบฐเบˆเบปเบ™เบเปˆเบงเบฒเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบชเปเบฒเป€เบฅเบฑเบ”เปเบฅเบฐเปเบœเปˆเบ‚เบฐเบซเบเบฒเบเบœเปˆเบฒเบ™เบฅเบฐเบšเบปเบš. เปเบ•เปˆเบซเบ™เป‰เบฒเป€เบชเบเบ”เบฒเบ, AWS SDK เบšเปเปˆเป„เบ”เป‰เบชเบฐเบซเบ™เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเบ”เบตเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เบตเป‰, เปเบฅเบฐเป‚เบ„เบ‡เบเบฒเบ™ Terraform เป€เบ„เบตเบเบ—เบปเบ™เบ—เบธเบเบˆเบฒเบเปเบกเบ‡เป„เบกเป‰เบซเบผเบฒเบเป€เบŠเบฑเปˆเบ™ 6813 (https://github.com/hashicorp/terraform/issues/6813):

    $ terraform apply
    aws_subnet.private-persistence.2: InvalidSubnetID.NotFound:
    The subnet ID 'subnet-xxxxxxx' does not exist

    เปƒเบ™เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡เป†เบญเบทเปˆเบ™เป†, เบ—เปˆเบฒเบ™เบชเป‰เบฒเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ (เป€เบŠเบฑเปˆเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบเปˆเบญเบ) เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบฐเบเบฒเบเบฒเบกเป€เบญเบปเบฒเบ‚เปเป‰เบกเบนเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™ (เป€เบŠเบฑเปˆเบ™ ID เบ‚เบญเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบเปˆเบญเบเบ—เบตเปˆเบชเป‰เบฒเบ‡เปƒเบซเบกเปˆ), เปเบฅเบฐ Terraform เบšเปเปˆเบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเบกเบฑเบ™เป„เบ”เป‰. เบชเปˆเบงเบ™เปƒเบซเบเปˆเบ‚เบญเบ‡เปเบกเบ‡เป„เบกเป‰เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰ (เบฅเบงเบกเบ—เบฑเบ‡ 6813) เป„เบ”เป‰เบ–เบทเบเปเบเป‰เป„เบ‚เปเบฅเป‰เบง, เปเบ•เปˆเบžเบงเบเป€เบ‚เบปเบฒเบเบฑเบ‡เบ›เบนเบเบžเบทเบ”เป€เบ›เบฑเบ™เปเบ•เปˆเบฅเบฐเป„เบฅเบเบฐ, เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆ Terraform เป€เบžเบตเปˆเบกเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเบ›เบฐเป€เบžเบ”เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เปƒเบซเบกเปˆ. เบ™เบตเป‰เปเบกเปˆเบ™เบซเบ™เป‰เบฒเบฅเปเบฒเบ„เบฒเบ™, เปเบ•เปˆเปƒเบ™เบเปเบฅเบฐเบ™เบตเบซเบผเบฒเบเบ—เบตเปˆเบชเบธเบ”เบšเปเปˆเป„เบ”เป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบญเบฑเบ™เบ•เบฐเบฅเบฒเบเปƒเบ”เป†. เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เปƒเบŠเป‰ terraform เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ„เบงเบ™เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบ, เป€เบžเบฒเบฐเบงเปˆเบฒเป€เบงเบฅเบฒเบ™เบตเป‰เบ‚เปเป‰เบกเบนเบ™เบˆเบฐเปเบœเปˆเบฅเบฒเบกเป„เบ›เบ—เบปเปˆเบงเบฅเบฐเบšเบปเบš.

    excerpt เบ™เบตเป‰เป„เบ”เป‰เบ–เบทเบเบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเบˆเบฒเบเบซเบ™เบฑเบ‡เบชเบทเป‚เบ”เบ Evgeniy Brikman "Terraform: เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เปƒเบ™เบฅเบฐเบ”เบฑเบšเบฅเบฐเบซเบฑเบ”".

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™