αžšαžŽαŸ’αžαŸ…αžŠαžΈαž₯αžŠαŸ’αž‹

αžšαžŽαŸ’αžαŸ…αžŠαžΈαž₯αžŠαŸ’αž‹
αžŸαžΌαž˜αž‚αžΌαžŸαž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž–αžΈαž—αžΆαž–αž›αŸ†αž”αžΆαž€αž˜αž½αž™αž…αŸ†αž“αž½αž“ αžšαž½αž˜αž‘αžΆαŸ†αž„αž”αž‰αŸ’αž αžΆαžŠαŸ‚αž›αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αžšαž„αŸ’αžœαž·αž›αž‡αž»αŸ† αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžŸαŸαž…αž€αŸ’αžαžΈαžαŸ’αž›αŸ‚αž„αž€αžΆαžšαžŽαŸ αž“αž·αž„αž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸαž“αŸƒαž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™ αž€αŸαžŠαžΌαž…αž‡αžΆαž”αž‰αŸ’αž αžΆαž‘αžΌαž‘αŸ…αž‡αžΆαž…αŸ’αžšαžΎαž“αž‘αŸ€αžαžŠαŸ‚αž›αž”αŸ‰αŸ‡αž–αžΆαž›αŸ‹αžŠαž›αŸ‹ Terraform αž‡αžΆαž‘αžΌαž‘αŸ…αŸ–

  • αž€αžΆαžšαžšαžΆαž”αŸ‹ αž“αž·αž„αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž“αžΈαž˜αž½αž™αŸ—αž˜αžΆαž“αžŠαŸ‚αž“αž€αŸ†αžŽαžαŸ‹αŸ”
  • αž€αŸ†αžŽαžαŸ‹αžŸαžΌαž“αŸ’αž™αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž–αŸαž›αž‘αŸ†αž“αŸαžš;
  • αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αž•αŸ‚αž“αž€αžΆαžšαž›αŸ’αž’αž€αŸαž’αžΆαž…αž”αžšαžΆαž‡αŸαž™αžŠαŸ‚αžšαŸ”
  • refactoring αž’αžΆαž…αž˜αžΆαž“αžšαžŽαŸ’αžαŸ…αžšαž”αžŸαŸ‹αžœαžΆ;
  • αž€αžΆαžšαž”αž„αŸ’αžšαž½αž”αž”αž„αŸ’αžšαž½αž˜αž–αž“αŸ’αž™αžΆαž–αŸαž›αž‚αžΊαžŸαŸ’αžšαž” ... αž‡αžΆαž˜αž½αž™αž€αžΆαžšαž–αž“αŸ’αž™αžΆαž–αŸαž›αŸ”

αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžšαžΆαž”αŸ‹ αž“αž·αž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹_αž“αžΈαž˜αž½αž™αŸ—αž˜αžΆαž“αžŠαŸ‚αž“αž€αŸ†αžŽαžαŸ‹

αž§αž‘αžΆαž αžšαžŽαŸαž€αŸ’αž“αž»αž„αž‡αŸ†αž–αžΌαž€αž“αŸαŸ‡αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž™αŸ‰αžΆαž„αž‘αžΌαž›αŸ†αž‘αžΌαž›αžΆαž™αž“αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžšαžΆαž”αŸ‹ αž“αž·αž„αž€αž“αŸ’αžŸαŸ„αž˜ for_each αž€αŸ’αž“αž»αž„αžšαž„αŸ’αžœαž·αž›αž‡αž»αŸ† αž“αž·αž„αžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαžαžΆαž˜αž›αž€αŸ’αžαžαžŽαŸ’αžŒαŸ” αž–αž½αž€αž‚αŸαž’αž“αž»αžœαžαŸ’αžαž”αžΆαž“αž›αŸ’αž’ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž–αž½αž€αž‚αŸαž˜αžΆαž“αžŠαŸ‚αž“αž€αŸ†αžŽαžαŸ‹αžŸαŸ†αžαžΆαž“αŸ‹αž–αžΈαžšαžŠαŸ‚αž›αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžŠαžΉαž„αŸ”

  • αžšαžΆαž”αŸ‹ αž“αž·αž„ for_each αž˜αž·αž“αž’αžΆαž…αž™αŸ„αž„αž‘αŸ…αž›αžΎαž’αžαŸαžšαž‘αž·αž“αŸ’αž“αž•αž›αž’αž“αž’αžΆαž“αžŽαžΆαž˜αž½αž™αž”αžΆαž“αž‘αŸαŸ”
  • count αž“αž·αž„ for_each αž˜αž·αž“αž’αžΆαž…αž”αŸ’αžšαžΎαž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž˜αŸ‰αžΌαžŒαž»αž›αž”αžΆαž“αž‘αŸαŸ”

αžšαžΆαž”αŸ‹ αž“αž·αž„ for_each αž˜αž·αž“β€‹αž’αžΆαž…β€‹αž™αŸ„αž„β€‹αž’αžαŸαžšβ€‹αž‘αž·αž“αŸ’αž“αž•αž›β€‹αž’αž“αž’αžΆαž“β€‹αžŽαžΆαž˜αž½αž™β€‹αž”αžΆαž“β€‹αž‘αŸαŸ”

αžŸαŸ’αžšαž˜αŸƒαžαžΆαž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ EC2 αž‡αžΆαž…αŸ’αžšαžΎαž“ αž αžΎαž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž αŸαžαž»αž•αž›αž˜αž½αž™αž…αŸ†αž“αž½αž“αžŠαŸ‚αž›αž’αŸ’αž“αž€αž˜αž·αž“αž…αž„αŸ‹αž”αŸ’αžšαžΎ ASG αŸ” αž›αŸαžαž€αžΌαžŠαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž’αžΆαž…αžŠαžΌαž…αž“αŸαŸ‡αŸ–

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

αžαŸ„αŸ‡αž˜αžΎαž›αž–αž½αž€αžœαžΆαž˜αŸ’αžαž„αž˜αž½αž™αŸ—αŸ”

αžŠαŸ„αž™αžŸαžΆαžšαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžšαžΆαž”αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž‡αžΆαžαž˜αŸ’αž›αŸƒαž‹αž·αžαž·αžœαž“αŸ’αž αž€αžΌαžŠαž“αŸαŸ‡αž“αžΉαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž”αž‰αŸ’αž αžΆαŸ– αž“αŸ…αž–αŸαž›αž’αŸ’αž“αž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž’αž“αž»αžœαžαŸ’αž αžœαžΆαž“αžΉαž„αž”αž„αŸ’αž€αžΎαžαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ EC2 αž…αŸ†αž“αž½αž“αž”αžΈαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž…αž»αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž”αžΎαž’αŸ’αž“αž€αž…αž„αŸ‹αžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™ server αž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„αžαŸ†αž”αž“αŸ‹ Availability Zone (AZ) αž“αžΈαž˜αž½αž™αŸ—αž“αŸ…αž€αŸ’αž“αž»αž„αžαŸ†αž”αž“αŸ‹ AWS αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€? αž’αŸ’αž“αž€αž’αžΆαž…αž±αŸ’αž™αž€αžΌαžŠαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž•αŸ’αž‘αž»αž€αž”αž‰αŸ’αž‡αžΈαžαŸ†αž”αž“αŸ‹αž–αžΈαž”αŸ’αžšαž—αž–αž‘αž·αž“αŸ’αž“αž“αŸαž™ aws_availability_zones αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžšαž„αŸ’αžœαž·αž›αž‡αž»αŸ†αž“αžΈαž˜αž½αž™αŸ— αž αžΎαž™αž”αž„αŸ’αž€αžΎαžαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ EC2 αž“αŸ…αž€αŸ’αž“αž»αž„αžœαžΆαžŠαŸ„αž™αž”αŸ’αžšαžΎαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžšαžΆαž”αŸ‹ αž“αž·αž„αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαž›αž·αž”αž·αž€αŸ’αžšαž˜αž’αžΆαžšαŸαŸ–

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 αž€αžΆαžšαž”αŸ’αžšαžΎ count ឬ for_each αž€αŸ’αž“αž»αž„αž’αž“αž’αžΆαž“αž˜αŸ‰αžΌαžŒαž»αž›αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αžΆαŸ†αž‘αŸ’αžšαž‘αŸαŸ” αž™αŸ„αž„αžαžΆαž˜αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αžšαž”αžŸαŸ‹ Terraform 0.12 (http://bit.ly/3257bv4) HashiCorp αž‚αŸ’αžšαŸ„αž„αž“αžΉαž„αž”αž“αŸ’αžαŸ‚αž˜αžŸαž˜αžαŸ’αžαž—αžΆαž–αž“αŸαŸ‡αž“αžΆαž–αŸαž›αž’αž“αžΆαž‚αž αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž–αŸαž›αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž“αžŸαŸ€αžœαž—αŸ…αž“αŸαŸ‡ αžœαžΆαž’αžΆαž…αž˜αžΆαž“αžšαž½αž…αž αžΎαž™αŸ” αž…αž„αŸ‹αžŠαžΉαž„αž…αŸ’αž”αžΆαžŸαŸ‹αžαžΆ αžŸαžΌαž˜αž’αžΆαž“αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš Terraform αž“αŸ…αž‘αžΈαž“αŸαŸ‡.

αžŠαŸ‚αž“αž€αŸ†αžŽαžαŸ‹αž“αŸƒαž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™ Zero Downtime

αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž”αŸ’αž›αž»αž€ create_before_destroy αžšαž½αž˜αž•αŸ’αžŸαŸ†αž‡αžΆαž˜αž½αž™ ASG αž‚αžΊαž‡αžΆαžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžŠαŸαž›αŸ’αž’αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž–αŸαž›αž‚αŸ’αž˜αžΆαž“αž–αŸαž›αžŸαž˜αŸ’αžšαžΆαž€ αž›αžΎαž€αž›αŸ‚αž„αžαŸ‚αž€αžΆαžšαž–αŸ’αžšαž˜αžΆαž“αž˜αž½αž™αŸ– αž…αŸ’αž”αžΆαž”αŸ‹αž“αŸƒαž€αžΆαžšαž’αŸ’αžœαžΎαž˜αžΆαžαŸ’αžšαžŠαŸ’αž‹αžΆαž“αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αžΆαŸ†αž‘αŸ’αžšαž‘αŸαŸ” αž¬αžŠαžΎαž˜αŸ’αž”αžΈαž±αŸ’αž™αž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹αž‡αžΆαž„αž“αŸαŸ‡ αžœαžΆαž€αŸ†αžŽαžαŸ‹αž‘αŸ†αž αŸ† ASG αž‘αžΎαž„αžœαž·αž‰αž‘αŸ…αž‘αŸ†αž αŸ† min_size αž“αŸ…αž›αžΎαžšαžΆαž›αŸ‹αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™ αžŠαŸ‚αž›αž’αžΆαž…αž‡αžΆαž”αž‰αŸ’αž αžΆαž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž€αŸ†αž–αž»αž„αž”αŸ’αžšαžΎαž…αŸ’αž”αžΆαž”αŸ‹αž’αŸ’αžœαžΎαž˜αžΆαžαŸ’αžšαžŠαŸ’αž‹αžΆαž“αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž· αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž“αž…αŸ†αž“αž½αž“αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ”

αž§αž‘αžΆαž αžšαžŽαŸ αž˜αŸ‰αžΌαžŒαž»αž› webserver-cluster αž˜αžΆαž“αž’αž“αž’αžΆαž“ aws_autoscaling_schedule αž˜αž½αž™αž‚αžΌ αžŠαŸ‚αž›αž“αŸ…αž˜αŸ‰αŸ„αž„ 9 am αž”αž„αŸ’αž€αžΎαž“αž…αŸ†αž“αž½αž“ servers αž€αŸ’αž“αž»αž„ cluster αž–αžΈαž–αžΈαžšαž‘αŸ…αžŠαž”αŸ‹αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž“αŸ…αž˜αŸ‰αŸ„αž„ 11 αž–αŸ’αžšαžΉαž€ ASG αžαŸ’αž˜αžΈαž“αžΉαž„αž…αžΆαž”αŸ‹αž•αŸ’αžŠαžΎαž˜αžŠαŸ„αž™αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž”αŸ’αžšαžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž–αžΈαžšαž‡αžΆαž‡αžΆαž„αžŠαž”αŸ‹ αž αžΎαž™αž“αŸ…αžŠαžŠαŸ‚αž›αžšαž αžΌαžαžŠαž›αŸ‹αž˜αŸ‰αŸ„αž„ 9 αž–αŸ’αžšαžΉαž€αž“αŸ…αžαŸ’αž„αŸƒαž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ”

αžŠαŸ‚αž“αž€αŸ†αžŽαžαŸ‹αž“αŸαŸ‡αž’αžΆαž…αž‡αŸ€αžŸαž”αžΆαž“αžαžΆαž˜αžœαž·αž’αžΈαž‡αžΆαž…αŸ’αžšαžΎαž“αŸ”

  • αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž“αŸƒαž€αžΆαžšαž€αžΎαžαž‘αžΎαž„αžœαž·αž‰αž“αŸ…αž€αŸ’αž“αž»αž„ aws_autoscaling_schedule αž–αžΈ 0 9 * * * ("αžšαžαŸ‹αž“αŸ…αž˜αŸ‰αŸ„αž„ 9 αž–αŸ’αžšαžΉαž€") αž‘αŸ…αž‡αžΆαž’αŸ’αžœαžΈαž˜αž½αž™αžŠαžΌαž…αž‡αžΆ 0-59 9-17 * * * ("αžšαžαŸ‹αžšαŸ€αž„αžšαžΆαž›αŸ‹αž“αžΆαž‘αžΈαž–αžΈαž˜αŸ‰αŸ„αž„ 9 αž–αŸ’αžšαžΉαž€αžŠαž›αŸ‹αž˜αŸ‰αŸ„αž„ 5 αž›αŸ’αž„αžΆαž…")αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎ ASG αž˜αžΆαž“αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž…αŸ†αž“αž½αž“ XNUMX αžšαž½αž…αž αžΎαž™αž“αŸ„αŸ‡ αž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ’αž”αž½αž“αž’αŸ’αžœαžΎαž˜αžΆαžαŸ’αžšαžŠαŸ’αž‹αžΆαž“αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αŸαŸ‡αž˜αŸ’αžαž„αž‘αŸ€αžαž“αžΉαž„αž˜αž·αž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž’αŸ’αžœαžΈαž“αŸ„αŸ‡αž‘αŸ αžŠαŸ‚αž›αž‡αžΆαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž™αžΎαž„αž…αž„αŸ‹αž”αžΆαž“αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αŸ’αžšαžŸαž·αž“αž”αžΎ 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 αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž…αŸ†αž–αŸ„αŸ‡αž’αž“αž’αžΆαž“αžŸαŸ’αž‘αžΎαžšαžαŸ‚αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ” αžœαžΆαž’αžΆαž…αž‘αŸ…αžšαž½αž…αžŠαŸ‚αž›αžαžΆαž“αžšαžŽαžΆαž˜αŸ’αž“αžΆαž€αŸ‹αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž’αž“αž’αžΆαž“αž“αŸαŸ‡αžŠαŸ„αž™αžŠαŸƒ αž¬αž”αŸ’αžšαžΎαž”αž“αŸ’αž‘αžΆαžαŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαžΆαž˜αžœαž·αž’αžΈαžŽαžΆαž€αŸαžŠαŸ„αž™ αž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαž“αžΆαŸ†αž±αŸ’αž™αž˜αžΆαž“αž€αžΆαžšαž”αŸ‰αŸ‡αž‘αž„αŸ’αž‚αž·αž…αŸ” αž˜αžΆαž“αž€αžΆαžšαž”αŸ’αžšαŸ‚αž”αŸ’αžšαž½αž›αž‡αžΆαž…αŸ’αžšαžΎαž“αž“αŸƒαž€αŸ†αž αž»αžŸαž“αŸαŸ‡ αžŠαŸ‚αž›αž‡αžΆαžšαžΏαž™αŸ—αž…αžΆαž”αŸ‹αž’αŸ’αž“αž€αž…αŸ†αžŽαžΌαž›αžαŸ’αž˜αžΈαž˜αž€ Terraform αžŠαŸ„αž™αž€αžΆαžšαž—αŸ’αž‰αžΆαž€αŸ‹αž•αŸ’αž’αžΎαž›αŸ”

αž…αŸ†αžŽαž»αž…αžŸαŸ†αžαžΆαž“αŸ‹αž‚αžΊαžαžΆαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž•αŸ‚αž“αž€αžΆαžš terraform αž‚αž·αžαžαŸ‚αž€αŸ’αž“αž»αž„αž‚αžŽαž“αžΈαž’αž“αž’αžΆαž“αž‘αžΆαŸ†αž„αž“αŸ„αŸ‡αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžšαžšαžŠαŸ’αž‹ Terraform αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αž“αž’αžΆαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαžαžΆαž˜αžšαž”αŸ€αž”αž•αŸ’αžŸαŸαž„αž‘αŸ€αž (αž§αž‘αžΆαž αžšαžŽαŸ αžŠαŸ„αž™αžŠαŸƒαžŠαŸ„αž™αž…αž»αž…αž€αŸ’αž“αž»αž„αž€αž»αž„αžŸαžΌαž› AWS) αž“αŸ„αŸ‡αž–αž½αž€αž‚αŸαž“αžΉαž„αž˜αž·αž“αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžšαžšαžŠαŸ’αž‹αž‘αŸ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž αžΎαž™ Terraform αž“αžΉαž„αž˜αž·αž“αž™αž€αž–αž½αž€αžœαžΆαž‘αŸ…αž€αŸ’αž“αž»αž„αž‚αžŽαž“αžΈαž“αŸ…αž–αŸαž›αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž•αŸ‚αž“αž€αžΆαžšαž“αŸ„αŸ‡αž‘αŸαŸ” αž‡αžΆαž›αž‘αŸ’αž’αž•αž› αž•αŸ‚αž“αž€αžΆαžšαžŠαŸ‚αž›αž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž“αŸ… glance αžŠαŸ†αž”αžΌαž„αž“αžΉαž„αž”αŸ’αžšαŸ‚αž‘αŸ…αž‡αžΆαž˜αž·αž“αž‡αŸ„αž‚αž‡αŸαž™αŸ”

αž˜αžΆαž“αž˜αŸαžšαŸ€αž“αž–αžΈαžšαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαžšαŸ€αž“αž–αžΈαžšαžΏαž„αž“αŸαŸ‡αŸ”

  • αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™ Terraform αžšαž½αž…αž αžΎαž™ αžŸαžΌαž˜αž€αž»αŸ†αž”αŸ’αžšαžΎαž’αŸ’αžœαžΈαž•αŸ’αžŸαŸαž„αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž•αŸ’αž“αŸ‚αž€αž“αŸƒαž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžŠαŸ„αž™αž”αŸ’αžšαžΎ Terraform αž“αŸ„αŸ‡ αž’αŸ’αž“αž€αž˜αž·αž“αž’αžΆαž…αž€αŸ‚αž”αŸ’αžšαŸ‚αžœαžΆαžŠαŸ„αž™αžŠαŸƒαž”αžΆαž“αž‘αŸ€αžαž‘αŸαŸ” αž”αžΎαž˜αž·αž“αžŠαžΌαž…αŸ’αž“αŸ„αŸ‡αž‘αŸ αž’αŸ’αž“αž€αž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ‚αž”αŸ’αžšαžαž»αž™αž“αžΉαž„αž€αŸ†αž αž»αžŸ Terraform αžŠαŸαž…αŸ†αž›αŸ‚αž€αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž’αŸ’αž“αž€αž€αŸαž”αžŠαž·αžŸαŸαž’αž’αžαŸ’αžαž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž‡αžΆαž…αŸ’αžšαžΎαž“αžšαž”αžŸαŸ‹ IaC αž•αž„αžŠαŸ‚αžš αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž›αŸαžαž€αžΌαžŠαž“αžΉαž„αž›αŸ‚αž„αž‡αžΆαžαŸ†αžŽαžΆαž„αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž“αŸƒαž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž‘αŸ€αžαž αžΎαž™αŸ”
  • αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž˜αžΆαž“αž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž˜αž½αž™αž…αŸ†αž“αž½αž“αžšαž½αž…αž αžΎαž™ αžŸαžΌαž˜αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž“αžΆαŸ†αž…αžΌαž›αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž€αŸ†αž–αž»αž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž”αŸ’αžšαžΎ Terraform αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹ αž’αŸ’αž“αž€αž’αžΆαž…αž”αž“αŸ’αžαŸ‚αž˜αžœαžΆαž‘αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžšαžšαžŠαŸ’αž‹αžŠαŸ„αž™αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž“αžΆαŸ†αž…αžΌαž› terraform αŸ” αžœαž·αž’αžΈαž“αŸαŸ‡ Terraform αž“αžΉαž„αžŠαžΉαž„αžαžΆαž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž’αŸ’αžœαžΈαžαŸ’αž›αŸ‡αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αŸ” αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž“αžΆαŸ†αž…αžΌαž›αž™αž€αž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž–αžΈαžšαŸ” αž‘αžΈαž˜αž½αž™αž‚αžΊαž‡αžΆαž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αž’αž“αž’αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” αžœαžΆαž€αŸ’αž™αžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž“αŸ…αž‘αžΈαž“αŸαŸ‡αž‚αžΊαžŠαžΌαž…αž‚αŸ’αž“αžΆαž‘αŸ…αž“αžΉαž„αžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹αž’αž“αž’αžΆαž“αŸ– _. (αžŠαžΌαž…αž‡αžΆ aws_iam_user.existing_user)αŸ” αž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž‘αžΈαž–αžΈαžšαž‚αžΊαž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž“αŸƒαž’αž“αž’αžΆαž“αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž“αžΆαŸ†αž…αžΌαž›αŸ” αž…αžΌαžšαž“αž·αž™αžΆαž™αžαžΆαž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž’αž“αž’αžΆαž“ aws_iam_user αž‚αžΊαž‡αžΆαžˆαŸ’αž˜αŸ„αŸ‡αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ (αž§αž‘αžΆαž αžšαžŽαŸ yevgeniy.brikman) αž αžΎαž™αž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž’αž“αž’αžΆαž“ aws_instance αž‚αžΊαž‡αžΆαž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ EC2 (αžŠαžΌαž…αž‡αžΆ i-190e22e5) αŸ” αžšαž”αŸ€αž”αž“αžΆαŸ†αž…αžΌαž›αž’αž“αž’αžΆαž“αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αž„αŸ’αž’αž»αž›αž”αž„αŸ’αž αžΆαž‰αž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžšαž“αŸ…αž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž“αŸƒαž‘αŸ†αž–αŸαžšαžšαž”αžŸαŸ‹αžœαžΆαŸ”

    αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž“αžΆαŸ†αž…αžΌαž›αžŠαŸ‚αž›αž’αŸ’αžœαžΎαžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜αž’αž“αž’αžΆαž“ 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 αž‚αžΊαž‡αžΆαž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸαžŠαŸ‚αž›αž˜αž·αž“αž’αžΆαž…αžαŸ’αžœαŸ‡αž”αžΆαž“ αžŠαŸ‚αž›αž‚αž½αžšαž”αŸ’αžšαžΎαž‡αžΆαž”αŸ’αžšαž…αžΆαŸ†αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž–αŸαž›αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈ Terraform αž¬αž§αž”αž€αžšαžŽαŸ IaC αž•αŸ’αžŸαŸαž„αž‘αŸ€αž αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžαŸ‚αž˜αžΆαž“αž€αžΆαžšαž”αŸ’αžšαž»αž„αž”αŸ’αžšαž™αŸαžαŸ’αž“αž”αŸ†αž•αž»αžαž’αŸ†αž–αžΈαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž’αŸ’αž“αž€αž…αž„αŸ‹αžŸαŸ†αžŠαŸ…αž›αžΎ "αž’αžΆαž€αž”αŸ’αž”αž€αž·αžšαž·αž™αžΆαžαžΆαž„αž€αŸ’αžšαŸ…" αž“αŸƒαž€αžΌαžŠαž˜αž½αž™ αž”αžΎαž˜αž·αž“αžŠαžΌαž…αŸ’αž“αŸ„αŸ‡αž‘αŸ αž”αž‰αŸ’αž αžΆαžŠαŸ‚αž›αž˜αž·αž“αž“αžΉαž€αžŸαŸ’αž˜αžΆαž“αžŠαž›αŸ‹αž“αžΉαž„αž€αžΎαžαž‘αžΎαž„αŸ”

    αž§αž‘αžΆαž αžšαžŽαŸ αž”αŸ’αžšαž—αŸαž‘αž‘αžΌαž‘αŸ…αž“αŸƒ refactoring αž‚αžΊαž‡αŸ†αž“αž½αžŸαžˆαŸ’αž˜αŸ„αŸ‡αž“αŸƒαž’αžαŸαžš αž¬αž˜αž»αžαž„αžΆαžšαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž’αžΆαž…αž™αž›αŸ‹αž”αžΆαž“αŸ” IDEs αž‡αžΆαž…αŸ’αžšαžΎαž“αž˜αžΆαž“αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž€αž‡αžΆαž˜αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžš refactoring αž“αž·αž„αž’αžΆαž…αž”αŸ’αžαžΌαžšαžˆαŸ’αž˜αŸ„αŸ‡αž’αžαŸαžš αž“αž·αž„αž˜αž»αžαž„αžΆαžšαžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž‘αžΌαž‘αžΆαŸ†αž„αž‚αž˜αŸ’αžšαŸ„αž„αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž—αžΆαžŸαžΆαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž˜αžΆαž“αž‚αŸ„αž›αž”αŸ†αžŽαž„αž‘αžΌαž‘αŸ… αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž“αžΈαžαž·αžœαž·αž’αžΈαžŠαŸαž€αž˜αŸ’αžšαž˜αž½αž™ αžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž˜αž·αž“αž‚αž·αžαžŠαž›αŸ‹ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž€αŸ’αž“αž»αž„ Terraform αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžαŸ‚αž”αŸ’αžšαž»αž„αž”αŸ’αžšαž™αŸαžαŸ’αž“αž”αŸ†αž•αž»αžαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡ αž”αžΎαž˜αž·αž“αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž‘αŸ αž’αŸ’αž“αž€αž’αžΆαž…αž‡αž½αž”αž”αŸ’αžšαž‘αŸ‡αž“αžΉαž„αž€αžΆαžšαžŠαžΆαž…αŸ‹αž—αŸ’αž›αžΎαž„αŸ”

    αž§αž‘αžΆαž αžšαžŽαŸ αž˜αŸ‰αžΌαžŒαž»αž› webserver-cluster αž˜αžΆαž“ input variable cluster_nameαŸ–

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

    αžŸαŸ’αžšαž˜αŸƒαžαžΆαž’αŸ’αž“αž€αž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž”αŸ’αžšαžΎαž˜αŸ‰αžΌαžŒαž»αž›αž“αŸαŸ‡αžŠαžΎαž˜αŸ’αž”αžΈαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αžŸαŸαžœαžΆαž˜αžΈαž€αŸ’αžšαžΌαžŠαŸ‚αž›αž αŸ…αžαžΆ foo αŸ” αž–αŸαž›αž€αŸ’αžšαŸ„αž™ αž’αŸ’αž“αž€αž…αž„αŸ‹αž”αŸ’αžαžΌαžšαžˆαŸ’αž˜αŸ„αŸ‡αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž‘αŸ…αž‡αžΆαžšαž”αžΆαžšαŸ” αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž“αŸαŸ‡αž’αžΆαž…αž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαžšαžΏαž„αžαžΌαž…αžαžΆαž… αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αžΆαžšαž–αž·αžαžœαžΆαž’αžΆαž…αž”αžŽαŸ’αžαžΆαž›αž±αŸ’αž™αž˜αžΆαž“αž€αžΆαžšαžšαŸ†αžαžΆαž“αžŠαž›αŸ‹αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αŸ”

    αž€αžΆαžšαž–αž·αžαž‚αžΊαžαžΆ αž˜αŸ‰αžΌαžŒαž»αž› webserver-cluster αž”αŸ’αžšαžΎαž’αžαŸαžš 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 αžšαžœαžΆαž„αž€αžΆαžšαž›αž»αž”αžœαžΆ αž“αž·αž„αž‘αžΆαž‰αž™αž€αž€αŸ†αžŽαŸ‚αžαŸ’αž˜αžΈ αž’αŸ’αž“αž€αž“αžΉαž„αž˜αž·αž“αž˜αžΆαž“αž™αž“αŸ’αžαž€αžΆαžšαžŠαžΎαž˜αŸ’αž”αžΈαž”αž‰αŸ’αž‡αžΌαž“αž…αžšαžΆαž…αžšαž‘αŸ…αž€αžΆαž“αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž‚αŸαž αž‘αŸ†αž–αŸαžšαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž‘αŸαŸ” αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸαŸ‡αžŠαŸ‚αžš αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αŸ’αžšαž»αž˜αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–αžαŸ’αžšαžΌαžœαž”αžΆαž“αž›αž»αž” αž“αŸ„αŸ‡αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž“αžΉαž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž”αžŠαž·αžŸαŸαž’αž€αžΆαžšαž…αžšαžΆαž…αžšαž”αžŽαŸ’αžαžΆαž‰αžŽαžΆαž˜αž½αž™αžšαž αžΌαžαžŠαž›αŸ‹αž€αŸ’αžšαž»αž˜αžαŸ’αž˜αžΈαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαŸ”

    αž”αŸ’αžšαž—αŸαž‘αž“αŸƒαž€αžΆαžšαž‡αž½αžŸαž‡αž»αž›αž˜αž½αž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž‚αžΊαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹ Terraform αŸ” αžαŸ„αŸ‡αž™αž€αž’αž“αž’αžΆαž“ aws_security_group αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αŸ‰αžΌαžŒαž»αž› webserver-cluster αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαŸ–

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

    αž§αž”αž€αžšαžŽαŸαž€αŸ†αžŽαžαŸ‹αž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽαž“αŸƒαž’αž“αž’αžΆαž“αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž αŸ…αžαžΆ instance αŸ” αžŸαŸ’αžšαž˜αŸƒαžαžΆαž€αŸ’αž“αž»αž„αž’αŸ†αž‘αž»αž„αž–αŸαž› refactor αž’αŸ’αž“αž€αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžœαžΆαž‘αŸ…αž‡αžΆαžˆαŸ’αž˜αŸ„αŸ‡ cluster_instance αžŠαŸ‚αž›αž’αžΆαž…αž™αž›αŸ‹αž”αžΆαž“αž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αžšαžΎαž“ (αžαžΆαž˜αž‚αŸ†αž“αž·αžαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€)αŸ–

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

    αžαžΎαž“αžΉαž„αž˜αžΆαž“αž’αŸ’αžœαžΈαž€αžΎαžαž‘αžΎαž„αž“αŸ…αž‘αžΈαž”αž‰αŸ’αž…αž”αŸ‹? αž“αŸ„αŸ‡αž‡αžΆαž€αžΆαžšαžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαŸ– αž€αžΆαžšαžšαŸ†αžαžΆαž“αž˜αž½αž™αŸ”

    Terraform αž—αŸ’αž‡αžΆαž”αŸ‹αž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž’αž“αž’αžΆαž“αž“αžΈαž˜αž½αž™αŸ—αž‡αžΆαž˜αž½αž™αž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž’αŸ’αž“αž€αž•αŸ’αžαž›αŸ‹αžŸαŸαžœαžΆαž–αž–αž€αŸ” αž§αž‘αžΆαž αžšαžŽαŸ iam_user αžαŸ’αžšαžΌαžœαž”αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™αž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ AWS IAM αž αžΎαž™ aws_instance αžαŸ’αžšαžΌαžœαž”αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™αž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ AWS EC2 αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž’αž“αž’αžΆαž“ (αž“αž·αž™αžΆαž™αžαžΆαž–αžΈ instance αž‘αŸ… cluster_instance αžŠαžΌαž…αž€αžšαžŽαžΈ aws_security_group) αž‘αŸ… Terraform αžœαžΆαž“αžΉαž„αž”αž„αŸ’αž αžΆαž‰αž‘αžΎαž„αžŠαžΌαž…αž‡αžΆαž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž”αžΆαž“αž›αž»αž”αž’αž“αž’αžΆαž“αž…αžΆαžŸαŸ‹ αž αžΎαž™αž”αž“αŸ’αžαŸ‚αž˜αžαŸ’αž˜αžΈαž˜αž½αž™αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžŠαžΌαžšαž‘αžΆαŸ†αž„αž“αŸαŸ‡ Terraform αž“αžΉαž„αž›αž»αž”αž€αŸ’αžšαž»αž˜αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–αž…αžΆαžŸαŸ‹ αž αžΎαž™αž”αž„αŸ’αž€αžΎαžαžαŸ’αž˜αžΈαž˜αž½αž™ αžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž›αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž”αžŠαž·αžŸαŸαž’αž…αžšαžΆαž…αžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰αžŽαžΆαž˜αž½αž™αŸ”

    αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž˜αŸαžšαŸ€αž“αžŸαŸ†αžαžΆαž“αŸ‹αŸ—αž…αŸ†αž“αž½αž“αž”αž½αž“αžŠαŸ‚αž›αž’αŸ’αž“αž€αž‚αž½αžšαžŠαž€αž…αŸαž‰αž–αžΈαž€αžΆαžšαž–αž·αž—αžΆαž€αŸ’αžŸαžΆαž“αŸαŸ‡αŸ”

    • αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž•αŸ‚αž“αž€αžΆαžšαž‡αžΆαž“αž·αž…αŸ’αž…αŸ” αžœαžΆβ€‹αž’αžΆαž…β€‹αž›αžΆαžαžαŸ’αžšαžŠαžΆαž„β€‹αž“αžΌαžœβ€‹αžŸαŸ’αž“αžΆαž˜β€‹αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡β€‹αŸ” αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž›αž‘αŸ’αž’αž•αž›αžšαž”αžŸαŸ‹αžœαžΆαžŠαŸ„αž™αž”αŸ’αžšαž»αž„αž”αŸ’αžšαž™αŸαžαŸ’αž“ αž“αž·αž„αž™αž€αž…αž·αžαŸ’αžαž‘αž»αž€αžŠαžΆαž€αŸ‹αž›αžΎαžŸαŸ’αžαžΆαž“αž—αžΆαž–αžŠαŸ‚αž› Terraform αž‚αŸ’αžšαŸ„αž„αž“αžΉαž„αž›αž»αž”αž’αž“αž’αžΆαž“αžŠαŸ‚αž›αž‘αŸ†αž“αž„αž‡αžΆαž˜αž·αž“αž‚αž½αžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž›αž»αž”αŸ”
    • αž”αž„αŸ’αž€αžΎαžαž˜αž»αž“αž–αŸαž›αž’αŸ’αž“αž€αž›αž»αž”αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αž„αŸ‹αž‡αŸ†αž“αž½αžŸαž’αž“αž’αžΆαž“ αžŸαžΌαž˜αž‚αž·αžαžŠαŸ„αž™αž”αŸ’αžšαž»αž„αž”αŸ’αžšαž™αŸαžαŸ’αž“αžαžΆαžαžΎαž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαž‡αŸ†αž“αž½αžŸαž˜αž»αž“αž“αžΉαž„αž›αž»αž”αžŠαžΎαž˜αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž…αž˜αŸ’αž›αžΎαž™αž‚αžΊαž”αžΆαž‘, create_before_destroy αž’αžΆαž…αž‡αž½αž™αž”αžΆαž“αŸ” αž›αž‘αŸ’αž’αž•αž›αžŠαžΌαž…αž‚αŸ’αž“αžΆαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αžŠαŸ„αž™αžŠαŸƒαžŠαŸ„αž™αž’αž“αž»αžœαžαŸ’αžαž–αžΈαžšαž‡αŸ†αž αžΆαž“αŸ– αžŠαŸ†αž”αžΌαž„αž”αž“αŸ’αžαŸ‚αž˜αž’αž“αž’αžΆαž“αžαŸ’αž˜αžΈαž‘αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ αž αžΎαž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž’αž“αž»αžœαžαŸ’αž αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž™αž€αž’αž“αž’αžΆαž“αž…αžΆαžŸαŸ‹αž…αŸαž‰αž–αžΈαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹ αž αžΎαž™αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž’αž“αž»αžœαžαŸ’αžαž˜αŸ’αžαž„αž‘αŸ€αžαŸ”
    • αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽαžαž˜αŸ’αžšαžΌαžœαž±αŸ’αž™αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžŸαŸ’αžαžΆαž“αž—αžΆαž–αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αž„αŸ‹αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™αž’αž“αž’αžΆαž“ (αž§αž‘αžΆαž αžšαžŽαŸ αž”αŸ’αžαžΌαžšαžˆαŸ’αž˜αŸ„αŸ‡ aws_security_group αž–αžΈ instance αž‘αŸ… cluster_instance) αžŠαŸ„αž™αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž›αž»αž”αž’αž“αž’αžΆαž“ αž“αž·αž„αž”αž„αŸ’αž€αžΎαžαž€αŸ†αžŽαŸ‚αžαŸ’αž˜αžΈαžšαž”αžŸαŸ‹αžœαžΆ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžαŸ‚αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž―αž€αžŸαžΆαžšαžšαžŠαŸ’αž‹ Terraform αž‘αŸ…αžαžΆαž˜αž“αŸ„αŸ‡αŸ” αž€αž»αŸ†αž’αŸ’αžœαžΎαžœαžΆαžŠαŸ„αž™αžŠαŸƒ - αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžšαžŠαŸ’αž‹ terraform αž‡αŸ†αž“αž½αžŸαžœαž·αž‰αŸ” αž“αŸ…αž–αŸαž›αž”αŸ’αžαžΌαžšαžˆαŸ’αž˜αŸ„αŸ‡αž§αž”αž€αžšαžŽαŸαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹ αž’αŸ’αž“αž€αž‚αž½αžšαžαŸ‚αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ terraform state mv αžŠαŸ‚αž›αž˜αžΆαž“αžœαžΆαž€αŸ’αž™αžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ–
      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 αž˜αžΆαž“αž“αŸαž™αžαžΆ αž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž’αžΆαž…αžαŸ’αžšαž‘αž”αŸ‹αž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αž—αŸ’αž›αžΆαž˜αŸ—αžŠαŸ„αž™αž˜αž·αž“αžšαž„αŸ‹αž…αžΆαŸ†αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αžŠαŸ‚αž›αž”αžΆαž“αžŸαŸ’αž“αžΎαžŸαž»αŸ†αžŠαžΎαž˜αŸ’αž”αžΈαž”αž‰αŸ’αž…αž”αŸ‹αŸ” αž—αžΆαž–αž‡αžΆαž”αŸ‹αž›αžΆαž”αŸ‹αžŠαŸ‚αž›αž–αž“αŸ’αž™αžΆαžšαž–αŸαž›αž˜αžΆαž“αž“αŸαž™αžαžΆαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž’αžΆαž…αžαŸ’αžšαžΌαžœαž€αžΆαžšαž–αŸαž›αžœαŸαž›αžΆαžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αžŸαž–αŸ’αžœαž•αŸ’αžŸαžΆαž™αž–αŸαž‰αž”αŸ’αžšαž–αŸαž“αŸ’αž’αŸ” αžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž›αžœαžΆαž€αŸ†αž–αž»αž„αž€αžΎαžαž‘αžΎαž„ αž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž’αžΆαž…αž˜αžΆαž“αž—αžΆαž–αž˜αž·αž“αžŸαŸŠαžΈαžŸαž„αŸ’αžœαžΆαž€αŸ‹αž‚αŸ’αž“αžΆ αž“αž·αž„αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž”αŸ’αžšαž—αž–αž‘αž·αž“αŸ’αž“αž“αŸαž™αž…αž˜αŸ’αž›αž„αžŽαžΆαž˜αž½αž™αžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αž†αŸ’αž›αžΎαž™αžαž”αž‘αŸ…αž“αžΉαž„αž€αžΆαžšαž αŸ… API αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ”

    αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸ αžŸαžΌαž˜αžŸαŸ’αžšαž˜αŸƒαžαžΆαž’αŸ’αž“αž€αž’αŸ’αžœαžΎαž€αžΆαžšαž αŸ… API αž‘αŸ… AWS αžŠαŸ„αž™αžŸαž»αŸ†αž±αŸ’αž™αžœαžΆαž”αž„αŸ’αž€αžΎαžαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ EC2αŸ” API αž“αžΉαž„αžαŸ’αžšαž‘αž”αŸ‹αž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž” "αž‡αŸ„αž‚αž‡αŸαž™" (201 Created) αžŸαŸ’αž‘αžΎαžšαžαŸ‚αž—αŸ’αž›αžΆαž˜αŸ— αžŠαŸ„αž™αž˜αž·αž“αžšαž„αŸ‹αž…αžΆαŸ†αž±αŸ’αž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžαŸ’αž›αž½αž“αž―αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž–αŸ’αž™αžΆαž™αžΆαž˜αž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αžœαžΆαž—αŸ’αž›αžΆαž˜αŸ— αžœαžΆαžŸαŸ’αž‘αžΎαžšαžαŸ‚αž”αŸ’αžšαžΆαž€αžŠαž‡αžΆαž“αžΉαž„αž”αžšαžΆαž‡αŸαž™ αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž“αŸ…αž–αŸαž›αž“αŸ„αŸ‡ AWS αž“αŸ…αžαŸ‚αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž’αž“αž’αžΆαž“ αž¬αž•αŸ’αž‘αž»αž™αž‘αŸ…αžœαž·αž‰ αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž˜αž·αž“αž‘αžΆαž“αŸ‹αž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžŠαžΎαž˜αŸ” αž›αžΎαžŸβ€‹αž–αžΈβ€‹αž“αŸαŸ‡β€‹αž‘αŸ…β€‹αž‘αŸ€αž αž”αŸ’αžšαžŸαž·αž“β€‹αž”αžΎβ€‹αž’αŸ’αž“αž€β€‹αž’αŸ’αžœαžΎβ€‹αž€αžΆαžšβ€‹αž αŸ…β€‹αž‘αžΌαžšαžŸαž–αŸ’αž‘β€‹αž•αŸ’αžŸαŸαž„β€‹αž‘αŸ€αžβ€‹αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αž‘αž‘αž½αž›β€‹αž”αžΆαž“β€‹αž–αŸαžαŸŒαž˜αžΆαž“β€‹αž’αŸ†αž–αžΈβ€‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“β€‹αž”αž˜αŸ’αžšαžΎβ€‹αž“αŸαŸ‡ αž’αŸ’αž“αž€β€‹αž’αžΆαž…β€‹αž“αžΉαž„β€‹αž‘αž‘αž½αž›β€‹αž”αžΆαž“β€‹αž€αŸ†αž αž»αžŸ (404 Not Found)αŸ” αžšαžΏαž„αž“αŸαŸ‡αž‚αžΊαžαžΆαž–αŸαžαŸŒαž˜αžΆαž“αž’αŸ†αž–αžΈαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ EC2 αž“αŸαŸ‡αž’αžΆαž…αž“αŸ…αžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αžŸαž–αŸ’αžœαž•αŸ’αžŸαžΆαž™αž‘αžΌαž‘αžΆαŸ†αž„ AWS αž˜αž»αž“αž–αŸαž›αžŠαŸ‚αž›αžœαžΆαž˜αžΆαž“αž“αŸ…αž‚αŸ’αžšαž”αŸ‹αž‘αžΈαž€αž“αŸ’αž›αŸ‚αž„ αž’αŸ’αž“αž€αž“αžΉαž„αžαŸ’αžšαžΌαžœαžšαž„αŸ‹αž…αžΆαŸ†αž–αžΈαžšαž”αžΈαžœαž·αž“αžΆαž‘αžΈαŸ”

    αž“αŸ…αž–αŸαž›αžŽαžΆαžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αŸ’αžšαžΎ API αž’αžŸαž˜αž€αžΆαž›αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž—αžΆαž–αžαŸ’αž‡αž·αž› αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžαŸ‚αž–αŸ’αž™αžΆαž™αžΆαž˜αž˜αŸ’αžŠαž„αž‘αŸ€αžαž“αžΌαžœαžŸαŸ†αžŽαžΎαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžšαž αžΌαžαžŠαž›αŸ‹αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹ αž“αž·αž„αž•αŸ’αžŸαž–αŸ’αžœαž•αŸ’αžŸαžΆαž™αžαžΆαž˜αžšαž™αŸˆαž”αŸ’αžšαž–αŸαž“αŸ’αž’αŸ” αž‡αžΆαž’αž€αž»αžŸαž› 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

    αž˜αŸ’αž™αŸ‰αžΆαž„αžœαž·αž‰αž‘αŸ€αž αž’αŸ’αž“αž€αž”αž„αŸ’αž€αžΎαžαž’αž“αž’αžΆαž“ (αžŠαžΌαž…αž‡αžΆαž”αžŽαŸ’αžαžΆαž‰αžšαž„) αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž–αŸ’αž™αžΆαž™αžΆαž˜αž™αž€αž–αŸαžαŸŒαž˜αžΆαž“αž˜αž½αž™αž…αŸ†αž“αž½αž“αž’αŸ†αž–αžΈαžœαžΆ (αžŠαžΌαž…αž‡αžΆαž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž“αŸƒαž”αžŽαŸ’αžαžΆαž‰αžšαž„αžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαžαŸ’αž˜αžΈ) αž αžΎαž™ Terraform αž˜αž·αž“αž’αžΆαž…αžŸαŸ’αžœαŸ‚αž„αžšαž€αžœαžΆαž”αžΆαž“αž‘αŸαŸ” αž—αžΆαž‚αž…αŸ’αžšαžΎαž“αž“αŸƒαž€αŸ†αž αž»αžŸαž‘αžΆαŸ†αž„αž“αŸαŸ‡ (αžšαž½αž˜αž‘αžΆαŸ†αž„ 6813) αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αž½αžŸαž‡αž»αž› αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž–αž½αž€αž‚αŸαž“αŸ…αžαŸ‚αž…αŸ’αžšαžΉαž”αž‘αžΎαž„αž–αžΈαž–αŸαž›αž˜αž½αž™αž‘αŸ…αž–αŸαž›αž˜αž½αž™ αž‡αžΆαž–αž·αžŸαŸαžŸαž“αŸ…αž–αŸαž›αžŠαŸ‚αž› Terraform αž”αž“αŸ’αžαŸ‚αž˜αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαž—αŸαž‘αž’αž“αž’αžΆαž“αžαŸ’αž˜αžΈαŸ” αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αžΆαžšαžšαŸ†αžαžΆαž“ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž—αžΆαž‚αž…αŸ’αžšαžΎαž“αž˜αž·αž“αž”αž„αŸ’αž€αž‚αŸ’αžšαŸ„αŸ‡αžαŸ’αž“αžΆαž€αŸ‹αž’αŸ’αžœαžΈαž‘αžΎαž™αŸ” αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž’αŸ’αž“αž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš terraform αž˜αŸ’αžαž„αž‘αŸ€αž αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž‚αž½αžšαžαŸ‚αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž–αŸ’αžšαŸ„αŸ‡αž“αŸ…αž–αŸαž›αž“αŸαŸ‡αž–αŸαžαŸŒαž˜αžΆαž“αž“αžΉαž„αžšαžΈαž€αžšαžΆαž›αžŠαžΆαž›αž–αŸαž‰αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž αžΎαž™αŸ”

    αž€αžΆαžšαžŠαž€αžŸαŸ’αžšαž„αŸ‹αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αž…αŸαž‰αž–αžΈαžŸαŸ€αžœαž—αŸ…αžŠαŸ„αž™ Evgeniy Brikman "Terraform: αž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž“αŸ…αž€αž˜αŸ’αžšαž·αžαž€αžΌαžŠ".

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹