ื˜ืขืจืจืึทืคืึธืจื ืคึผื™ื˜ืคืึธืœื–

ื˜ืขืจืจืึทืคืึธืจื ืคึผื™ื˜ืคืึธืœื–
ื–ืืœ ืก ื”ื•ื™ื›ืคึผื•ื ืงื˜ ืึท ื‘ื™ืกืœ ืคึผื™ื˜ืคืึธืœื–, ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ื“ื™ ืฉื™ื™ึทื›ื•ืช ืฆื• ืœื•ืคึผืก, ืื•ื™ื‘ ืกื˜ื™ื™ื˜ืžืึทื ืฅ ืื•ืŸ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ื˜ืขืงื ื™ืงืก, ื•ื•ื™ ื’ืขื–ื•ื ื˜ ื•ื•ื™ ืžืขืจ ื’ืขื ืขืจืึทืœ ื™ืฉื•ื– ื•ื•ืึธืก ื•ื•ื™ืจืงืŸ Terraform ืื™ืŸ ืึทืœื’ืขืžื™ื™ืŸ:

  • ื“ื™ ืฆื™ื™ืœืŸ ืื•ืŸ ืคึฟืึทืจ_ื™ืขื“ืขืจ ืคึผืึทืจืึทืžืขื˜ืขืจืก ื”ืึธื‘ืŸ ืœื™ืžื™ื˜ื™ื™ืฉืึทื ื–;
  • ื‘ืึทื’ืจืขื ืขืฆืŸ ื ื•ืœ ื“ืึทื•ื ื˜ื™ื™ื ื“ื™ืคึผืœื•ื™ืžืึทื ืฅ;
  • ืืคื™ืœื• ืึท ื’ื•ื˜ ืคึผืœืึทืŸ ืงืขื ืขืŸ ืคืึทืจืœืึธื–ืŸ;
  • ืจืขืคืึทืงื˜ืึธืจื™ื ื’ ืงืขื ืขืŸ ื”ืึธื‘ืŸ ื–ื™ื™ึทืŸ ืคึผื™ื˜ืคืึธืœื–;
  • ื“ื™ืคืขืจื“ ืงืึธื•ื›ื™ืจืึทื ืก ืื™ื– ืงืึธื ืกื™ืกื˜ืขื ื˜ ... ืžื™ื˜ ื“ื™ืคืขืจืึทืœ.

ื“ื™ ืฆื™ื™ืœืŸ ืื•ืŸ ืคึฟืึทืจ_ื™ืขื“ืขืจ ืคึผืึทืจืึทืžืขื˜ืขืจืก ื”ืึธื‘ืŸ ืœื™ืžื™ื˜ื™ื™ืฉืึทื ื–

ื“ื™ ื‘ื™ื™ืฉืคื™ืœืŸ ืื™ืŸ ื“ืขื ืงืึทืคึผื™ื˜ืœ ืžืึทื›ืŸ ื‘ืจื™ื™ื˜ ื ื•ืฆืŸ ืคื•ืŸ ื“ื™ ืฆื™ื™ืœืŸ ืคึผืึทืจืึทืžืขื˜ืขืจ ืื•ืŸ ื“ื™ ืคึฟืึทืจ_ื™ืขื˜ืฉ ืื•ื™ืกื“ืจื•ืง ืื™ืŸ ืœื•ืคึผืก ืื•ืŸ ืงืึทื ื“ื™ืฉืึทื ืึทืœ ืœืึธื’ื™ืง. ื–ื™ื™ ื“ื•ืจื›ืคื™ืจืŸ ื’ื•ื˜, ืึธื‘ืขืจ ื–ื™ื™ ื”ืึธื‘ืŸ ืฆื•ื•ื™ื™ ื•ื•ื™ื›ื˜ื™ืง ืœื™ืžื™ื˜ื™ื™ืฉืึทื ื– ืึทื– ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื–ื™ื™ืŸ ืึทื•ื•ืขืจ ืคื•ืŸ.

  • ืฆื™ื™ืœืŸ ืื•ืŸ ืคึฟืึทืจ_ื™ืขื˜ืฉ ืงืขื ืขืŸ ื ื™ืฉื˜ ื“ืขืจืžืึธื ืขืŸ ืงื™ื™ืŸ ืจื™ืกืึธืจืก ืจืขื–ื•ืœื˜ืึทื˜ ื•ื•ืขืจื™ืึทื‘ืึทืœื–.
  • ืฆื™ื™ืœืŸ ืื•ืŸ ืคึฟืึทืจ_ื™ืขื˜ืฉ ืงืขื ืขืŸ ื ื™ื˜ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ืื™ืŸ ืžืึธื“ื•ืœืข ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ.

count ืื•ืŸ for_each ืงืขื ืขืŸ ื ื™ืฉื˜ ื“ืขืจืžืึธื ืขืŸ ืงื™ื™ืŸ ืจื™ืกืึธืจืก ืจืขื–ื•ืœื˜ืึทื˜ ื•ื•ืขืจื™ืึทื‘ืึทืœื–

ื™ืžืึทื“ื–ืฉืึทืŸ ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืฆืขื•ื•ื™ืงืœืขืŸ ืขื˜ืœืขื›ืข EC2 ืกืขืจื•ื•ืขืจืก ืื•ืŸ ืคึฟืึทืจ ืขื˜ืœืขื›ืข ืกื™ื‘ื” ืื™ืจ ื˜ืึธืŸ ื ื™ืฉื˜ ื•ื•ืขืœืŸ ืฆื• ื ื•ืฆืŸ ASG. ื“ื™ื™ืŸ ืงืึธื“ ืงืขืŸ ื–ื™ื™ืŸ ื•ื•ื™ ื“ืึธืก:

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

ื–ืืœ ืก ืงื•ืง ื‘ื™ื™ึท ื–ื™ื™ ืื™ื™ื ืขืจ ื“ื•ืจืš ืื™ื™ื ืขืจ.

ื–ื™ื ื˜ ื“ื™ ืฆื™ื™ืœืŸ ืคึผืึทืจืึทืžืขื˜ืขืจ ืื™ื– ื‘ืึทืฉื˜ื™ืžื˜ ืฆื• ืึท ืกื˜ืึทื˜ื™ืง ื•ื•ืขืจื˜, ื“ืขืจ ืงืึธื“ ื•ื•ืขื˜ ืึทืจื‘ืขื˜ืŸ ืึธืŸ ืคืจืื‘ืœืขืžืขืŸ: ื•ื•ืขืŸ ืื™ืจ ืœื•ื™ืคืŸ ื“ื™ ืฆื•ืœื™ื™ื’ืŸ ื‘ืึทืคึฟืขืœ, ืขืก ื•ื•ืขื˜ ืฉืึทืคึฟืŸ ื“ืจื™ื™ EC2 ืกืขืจื•ื•ืขืจืก. ืึธื‘ืขืจ ื•ื•ืึธืก ืื•ื™ื‘ ืื™ืจ ื•ื•ื™ืœื˜ ืฆืขื•ื•ื™ืงืœืขืŸ ืื™ื™ืŸ ืกืขืจื•ื•ืขืจ ืื™ืŸ ื™ืขื“ืขืจ ืึทื•ื•ืึทื™ืœืึทื‘ื™ืœื™ื˜ื™ ื–ืึธื ืข (ืึทื–) ืื™ืŸ ื“ื™ื™ืŸ ืงืจืึทื ื˜ 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" {}

ื“ืขืจ ืงืึธื“ ื•ื•ืขื˜ ืื•ื™ืš ืึทืจื‘ืขื˜ ื’ื•ื˜, ื•ื•ื™ื™ึทืœ ื“ื™ ืฆื™ื™ืœืŸ ืคึผืึทืจืึทืžืขื˜ืขืจ ืงืขื ืขืŸ ื“ืขืจืžืึธื ืขืŸ ื“ืึทื˜ืŸ ืงื•ื•ืืœืŸ ืึธืŸ ืงื™ื™ืŸ ืคืจืื‘ืœืขืžืขืŸ. ืึธื‘ืขืจ ื•ื•ืึธืก ื›ืึทืคึผืึทื ื– ืื•ื™ื‘ ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืกืขืจื•ื•ืขืจืก ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืฉืึทืคึฟืŸ ื“ืขืคึผืขื ื“ืก ืื•ื™ืฃ ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜ ืคื•ืŸ ืขื˜ืœืขื›ืข ืžื™ื˜ืœ? ืฆื• ื‘ืึทื•ื•ื™ื™ึทื–ืŸ ื“ืขื, ื“ื™ ื™ื–ื™ืึทืกื˜ ื•ื•ืขื’ ืื™ื– ืฆื• ื ื•ืฆืŸ ื“ื™ ืจืึทื ื“ืึทืž_ื™ื ื˜ืขื’ืขืจ ืžื™ื˜ืœ, ื•ื•ืึธืก, ื•ื•ื™ ื“ืขืจ ื ืึธืžืขืŸ ืกืึทื’ื“ื–ืฉืขืก, ืงืขืจื˜ ืึท ื˜ืจืึทืค ื™ื ื˜ืึทื“ื–ืฉืขืจ:

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

ืื•ื™ื‘ ืื™ืจ ืœื•ื™ืคืŸ ื˜ืขืจืจืึทืคืึธืจื ืคึผืœืึทืŸ ืื•ื™ืฃ ื“ืขื ืงืึธื“, ืื™ืจ ื•ื•ืขื˜ ื‘ืึทืงื•ืžืขืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ื˜ืขื•ืช:

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.

ื˜ืขืจืจืึทืคืึธืจื ืจื™ืงื•ื•ื™ื™ืขืจื– ืึทื– ืฆื™ื™ืœืŸ ืื•ืŸ ืคึฟืึทืจ_ื™ืขื˜ืฉ ื–ืึธืœ ื–ื™ื™ืŸ ืงืึทืœืงื™ืึทืœื™ื™ื˜ื™ื“ ื‘ืขืฉืึทืก ื“ื™ ืคึผืœืึทื ื™ืจื•ื ื’ ืคืึทืกืข, ืื™ื™ื“ืขืจ ืงื™ื™ืŸ ืจืขืกื•ืจืกืŸ ื–ืขื ืขืŸ ื‘ืืฉืืคืŸ ืึธื“ืขืจ ืžืึทื“ืึทืคื™ื™ื“. ื“ืขื ืžื™ื˜ืœ ืึทื– ืฆื™ื™ืœืŸ ืื•ืŸ ืคึฟืึทืจ_ื™ืขื˜ืฉ ืงืขื ืขืŸ ืึธืคึผืฉื™ืงืŸ ืฆื• ืœื™ื˜ืขืจืึทืœืก, ื•ื•ืขืจื™ืึทื‘ืึทืœื–, ื“ืึทื˜ืŸ ืงื•ื•ืืœืŸ, ืื•ืŸ ืืคื™ืœื• ืžื™ื˜ืœ ืจืฉื™ืžื•ืช (ื•ื•ื™ ืœืึทื ื’ ื•ื•ื™ ื–ื™ื™ืขืจ ืœืขื ื’ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื‘ืืฉืœืืกืŸ ืื™ืŸ ืกืงืขื“ื–ืฉื•ืœื™ื ื’ ืฆื™ื™ื˜), ืึธื‘ืขืจ ื ื™ืฉื˜ ืฆื• ืงืึทืžืคึผื™ื•ื˜ืึทื“ ืจื™ืกืึธืจืก ืจืขื–ื•ืœื˜ืึทื˜ ื•ื•ืขืจื™ืึทื‘ืึทืœื–.

ืฆื™ื™ืœืŸ ืื•ืŸ ืคึฟืึทืจ_ื™ืขื˜ืฉ ืงืขื ืขืŸ ื ื™ื˜ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ืื™ืŸ ืžืึธื“ื•ืœืข ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ

ืึทืžืึธืœ ืื™ืจ ืงืขืŸ ื–ื™ื™ืŸ ื’ืขืคืจื•ืื•ื•ื˜ ืฆื• ืœื™ื™ื’ืŸ ืึท ืฆื™ื™ืœืŸ ืคึผืึทืจืึทืžืขื˜ืขืจ ืฆื• ื“ื™ื™ืŸ ืžืึธื“ื•ืœืข ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ:

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

     count = 3

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

ื“ืขืจ ืงืึธื“ ืคืจื•ื•ื•ืŸ ืฆื• ื ื•ืฆืŸ ืฆื™ื™ืœืŸ ืื™ืŸ ืึท ืžืึธื“ื•ืœืข ืฆื• ืฉืึทืคึฟืŸ ื“ืจื™ื™ ืขืงื–ืขืžืคืœืืจืŸ ืคื•ืŸ ื“ื™ ื•ื•ืขื‘ืกืขืจื•ื•ืขืจ-ืงื ื•ื™ืœ ืžื™ื˜ืœ. ืึธื“ืขืจ ืื™ืจ ื–ืืœ ื•ื•ืขืœืŸ ืฆื• ืžืึทื›ืŸ ืงืึทื ืขืงื˜ื™ื ื’ ืึท ืžืึธื“ื•ืœืข ืึทืคึผืฉืึทื ืึทืœ ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ืขื˜ืœืขื›ืข ื‘ืึธืึธืœืขืึทืŸ ืฆื•ืฉื˜ืึทื ื“ ื“ื•ืจืš ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ื–ื™ื™ึทืŸ ืฆื™ื™ืœืŸ ืคึผืึทืจืึทืžืขื˜ืขืจ ืฆื• 0. ื“ืึธืก ืงืขืŸ ืงื•ืงืŸ ื•ื•ื™ ื’ืœื™ื™ึทืš ืงืึธื“, ืึธื‘ืขืจ ืื™ืจ ื•ื•ืขื˜ ื‘ืึทืงื•ืžืขืŸ ื“ืขื ื˜ืขื•ืช ื•ื•ืขืŸ ืคืœื™ืกื ื“ื™ืง ื˜ืขืจืจืึทืคืึธืจื ืคึผืœืึทืŸ:

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, ื ื™ืฆืŸ ืฆื™ื™ืœืŸ ืึธื“ืขืจ ืคึฟืึทืจ_ื™ืขื˜ืฉ ืื™ืŸ ืึท ืžืึธื“ื•ืœืข ืžื™ื˜ืœ ืื™ื– ื ื™ืฉื˜ ื’ืขืฉื˜ื™ืฆื˜. ืœื•ื™ื˜ ื“ื™ Terraform 0.12 ืžืขืœื“ื•ื ื’ ื”ืขืจื•ืช (http://bit.ly/3257bv4), HashiCorp ืคึผืœืึทื ื– ืฆื• ืœื™ื™ื’ืŸ ื“ืขื ืคื™ื™ื™ืงื™ื™ื˜ ืื™ืŸ ื“ืขืจ ืฆื•ืงื•ื ืคึฟื˜, ืึทื–ื•ื™ ื“ื™ืคึผืขื ื“ื™ื ื’ ืื•ื™ืฃ ื•ื•ืขืŸ ืื™ืจ ืœื™ื™ืขื ืขืŸ ื“ืขื ื‘ื•ืš, ืขืก ืงืขืŸ ืฉื•ื™ืŸ ื–ื™ื™ืŸ ื‘ืืจืขื›ื˜ื™ื’ื˜. ืฆื• ื•ื•ื™ืกืŸ ื–ื™ื›ืขืจ, ืœื™ื™ืขื ืขืŸ ื“ื™ ื˜ืขืจืจืึทืคืึธืจื ื˜ืฉืึทื ื’ืขืœืึธื’ ื“ืึธ.

ืœื™ืžื™ื˜ื™ื™ืฉืึทื ื– ืคื•ืŸ ื ื•ืœ ื“ืึทื•ื ื˜ื™ื™ื ื“ื™ืคึผืœื•ื™ืžืึทื ืฅ

ื ื™ืฆืŸ ื“ื™ create_before_destroy ื‘ืœืึธืง ืื™ืŸ ืงืึธืžื‘ื™ื ืึทืฆื™ืข ืžื™ื˜ ASG ืื™ื– ืึท ื’ืจื•ื™ืก ืœื™ื™ื–ื•ื ื’ ืคึฟืึทืจ ืงืจื™ื™ื™ื˜ื™ื ื’ ื ื•ืœ ื“ืึทื•ื ื˜ื™ื™ื ื“ื™ืคึผืœื•ื™ืžืึทื ืฅ, ืึทื—ื•ืฅ ืคึฟืึทืจ ืื™ื™ืŸ ืงื™ื™ื•ื•ื™ืึทื˜: ืึทื•ื˜ืึธืกืงืึทืœื™ื ื’ ื›ึผืœืœื™ื ื–ืขื ืขืŸ ื ื™ืฉื˜ ื’ืขืฉื˜ื™ืฆื˜. ืึธื“ืขืจ ืฆื• ื–ื™ื™ืŸ ืžืขืจ ื’ืขื ื•ื™, ื“ืึธืก ื‘ืึทืฉื˜ืขื˜ื™ืงื˜ ื“ื™ ASG ื’ืจื™ื™ืก ืฆื•ืจื™ืง ืฆื• min_size ืื•ื™ืฃ ื™ืขื“ืขืจ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜, ื•ื•ืึธืก ืงืขืŸ ื–ื™ื™ืŸ ืึท ืคึผืจืึธื‘ืœืขื ืื•ื™ื‘ ืื™ืจ ื ื•ืฆืŸ ืึทื•ื˜ืึธืกืงืึทืœื™ื ื’ ื›ึผืœืœื™ื ืฆื• ืคืึทืจื’ืจืขืกืขืจืŸ ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืกืขืจื•ื•ืขืจืก ืคืœื™ืกื ื“ื™ืง.

ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ื“ื™ ื•ื•ืขื‘ืกืขืจื•ื•ืขืจ-ืงื ื•ื™ืœ ืžืึธื“ื•ืœืข ื›ึผื•ืœืœ ืึท ืคึผืึธืจ ืคื•ืŸ aws_autoscaling_schedule ืจืขืกื•ืจืกืŸ, ื•ื•ืึธืก ื‘ื™ื™ 9:11 ื™ื ืงืจื™ืกืึทื– ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืกืขืจื•ื•ืขืจืก ืื™ืŸ ื“ืขื ืงื ื•ื™ืœ ืคื•ืŸ ืฆื•ื•ื™ื™ ืฆื• ืฆืขืŸ. ืื•ื™ื‘ ืื™ืจ ืฆืขื•ื•ื™ืงืœืขืŸ ื‘ื™ื™, ื–ืึธื’ืŸ, 9:XNUMX, ื“ื™ ื ื™ื™ึทืข ASG ื•ื•ืขื˜ ืฉื˜ื™ื•ื•ืœ ืึทืจื•ื™ืฃ ืžื™ื˜ ื‘ืœื•ื™ื– ืฆื•ื•ื™ื™ ืกืขืจื•ื•ืขืจืก ืืœื ื•ื•ื™ ืฆืขืŸ ืื•ืŸ ื‘ืœื™ื™ื‘ืŸ ืึทื–ื•ื™ ื‘ื™ื– XNUMX:XNUMX ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ื˜ืึธื’.

ื“ืขื ื‘ืึทื’ืจืขื ืขืฆื•ื ื’ ืงืขื ืขืŸ ื–ื™ื™ืŸ ืกืขืจืงืึทืžื•ื•ืขื ื˜ื™ื“ ืื™ืŸ ืขื˜ืœืขื›ืข ื•ื•ืขื’ืŸ.

  • ื˜ื•ื™ืฉืŸ ื“ื™ ืจื™ืงืขืจืึทื ืก ืคึผืึทืจืึทืžืขื˜ืขืจ ืื™ืŸ aws_autoscaling_schedule ืคื•ืŸ 0 9 * * * ("ืœื•ื™ืคืŸ ื‘ื™ื™ึท 9:0") ืฆื• ืขืคึผืขืก ื•ื•ื™ 59-9 17-9 * * * ("ืœื•ื™ืคืŸ ื™ืขื“ืขืจ ืžื™ื ื•ื˜ ืคื•ืŸ 5:XNUMX ืฆื• XNUMX:XNUMX"). ืื•ื™ื‘ ASG ื”ืื˜ ืฉื•ื™ืŸ ืฆืขืŸ ืกืขืจื•ื•ืขืจืก, ืคืœื™ืกื ื“ื™ืง ื“ืขื ืึทื•ื˜ืึธืกืงืึทืœื™ื ื’ ื”ืขืจืฉืŸ ื•ื•ื™ื“ืขืจ ื•ื•ืขื˜ ื ื™ืฉื˜ ื˜ื•ื™ืฉืŸ ืขืคึผืขืก, ื•ื•ืึธืก ืื™ื– ื•ื•ืึธืก ืžื™ืจ ื•ื•ืขืœืŸ. ืื‘ืขืจ ืื•ื™ื‘ ื“ื™ ASG ืื™ื– ื‘ืœื•ื™ื– ืœืขืฆื˜ื ืก ื“ื™ืคึผืœื•ื™ื“, ื“ื™ ื”ืขืจืฉืŸ ื•ื•ืขื˜ ืขื ืฉื•ืจ ืึทื– ืื™ืŸ ืึท ืžืึทืงืกื™ืžื•ื ืคื•ืŸ ืึท ืžื™ื ื•ื˜ ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ื–ื™ื™ึทืŸ ืกืขืจื•ื•ืขืจืก ื•ื•ืขื˜ ื“ืขืจื’ืจื™ื™ื›ืŸ ืฆืขืŸ. ื“ืึธืก ืื™ื– ื ื™ืฉื˜ ืึท ื’ืึธืจ ืขืœืขื’ืึทื ื˜ ืฆื•ื’ืึทื ื’, ืื•ืŸ ื’ืจื•ื™ืก ื“ื–ืฉืึทืžืคึผืก ืคื•ืŸ ืฆืขืŸ ืฆื• ืฆื•ื•ื™ื™ ืกืขืจื•ื•ืขืจืก ืื•ืŸ ืฆื•ืจื™ืง ืงืขื ืขืŸ ืื•ื™ืš ืคืึทืจืฉืึทืคืŸ ืคึผืจืึธื‘ืœืขืžืก ืคึฟืึทืจ ื™ื•ื–ืขืจื–.
  • ืฉืึทืคึฟืŸ ืึท ืžื ื”ื’ ืฉืจื™ืคื˜ ื•ื•ืึธืก ื ื™ืฆื˜ ื“ื™ AWS API ืฆื• ื‘ืึทืฉื˜ื™ืžืขืŸ ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืึทืงื˜ื™ื•ื• ืกืขืจื•ื•ืขืจืก ืื™ืŸ ื“ื™ ASG, ืจื•ืคืŸ ืขืก ืžื™ื˜ ืึท ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ื“ืึทื˜ืŸ ืžืงื•ืจ (ื–ืขืŸ "ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ื“ืึทื˜ืึท ืžืงื•ืจ" ืื•ื™ืฃ ื‘ืœืึทื˜ 249), ืื•ืŸ ืฉื˜ืขืœืŸ ื“ื™ ASG's wished_capacity ืคึผืึทืจืึทืžืขื˜ืขืจ ืฆื• ื“ื™ ื•ื•ืขืจื˜ ืื•ืžื’ืขืงืขืจื˜ ื“ื•ืจืš ื“ื™ ืฉืจื™ืคื˜. ื“ืขื ื•ื•ืขื’, ื™ืขื“ืขืจ ื ื™ื™ึท 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 ื“ื•ืจืš ื™ื‘ืขืจืจืึทืฉืŸ.

ื“ืขืจ ืฉืœื™ืกืœ ืคื•ื ื˜ ืื™ื– ืึทื– ื“ื™ ื˜ืขืจืจืึทืคืึธืจื ืคึผืœืึทืŸ ื‘ืึทืคึฟืขืœ ื‘ืœื•ื™ื– ื ืขืžื˜ ืื™ืŸ ื—ืฉื‘ื•ืŸ ื“ื™ ืจืขืกื•ืจืกืŸ ื•ื•ืึธืก ื–ืขื ืขืŸ ืกืคึผืขืกื™ืคื™ืขื“ ืื™ืŸ ื“ื™ ื˜ืขืจืจืึทืคืึธืจื ืฉื˜ืึทื˜ ื˜ืขืงืข. ืื•ื™ื‘ ืจืขืกื•ืจืกืŸ ื–ืขื ืขืŸ ื‘ืืฉืืคืŸ ืื™ืŸ ืขื˜ืœืขื›ืข ืื ื“ืขืจืข ื•ื•ืขื’ (ืœืžืฉืœ, ืžืึทื ื™ื•ืึทืœื™ ื“ื•ืจืš ื’ืขื‘ืŸ ืึท ืงืœื™ืง ืื™ืŸ ื“ื™ AWS ืงืึทื ืกืึธื•ืœ), ื–ื™ื™ ื•ื•ืขืœืŸ ื ื™ืฉื˜ ืกื•ืฃ ืึทืจื•ื™ืฃ ืื™ืŸ ื“ื™ ืฉื˜ืึทื˜ ื˜ืขืงืข ืื•ืŸ ื“ืขืจื™ื‘ืขืจ ื˜ืขืจืจืึทืคืึธืจื ื•ื•ืขื˜ ื ื™ืฉื˜ ื ืขืžืขืŸ ื–ื™ื™ ืื™ืŸ ื—ืฉื‘ื•ืŸ ื•ื•ืขืŸ ืขืงืกืึทืงื™ื•ื˜ื™ื ื’ ื“ื™ ืคึผืœืึทืŸ ื‘ืึทืคึฟืขืœ. ื•ื•ื™ ืึท ืจืขื–ื•ืœื˜ืึทื˜, ืึท ืคึผืœืึทืŸ ื•ื•ืึธืก ืžื™ื™ื ื˜ ืจื™ื›ื˜ื™ืง ื‘ื™ื™ึท ืขืจืฉื˜ืขืจ ื‘ืœื™ืง ื•ื•ืขื˜ ื–ื™ื™ืŸ ื ื™ื˜ ื’ืขืจืึธื˜ืŸ.

ืขืก ื–ืขื ืขืŸ ืฆื•ื•ื™ื™ ืœืขืงืฆื™ืขืก ืฆื• ืœืขืจื ืขืŸ ืคื•ืŸ ื“ืขื.

  • ืื•ื™ื‘ ืื™ืจ ื”ืึธื˜ ืฉื•ื™ืŸ ืกื˜ืึทืจื˜ืขื“ ืืจื‘ืขื˜ืŸ ืžื™ื˜ Terraform, ื˜ืึธืŸ ื ื™ื˜ ื ื•ืฆืŸ ืขืคึผืขืก ืึทื ื“ืขืจืฉ. ืื•ื™ื‘ ืึท ื˜ื™ื™ืœ ืคื•ืŸ ื“ื™ื™ืŸ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ืื™ื– ื’ืขืจืื˜ืŸ ืžื™ื˜ Terraform, ืื™ืจ ืงืขื ืขืŸ ื ื™ื˜ ืžืขืจ ืžืึธื“ื™ืคื™ืฆื™ืจืŸ ืขืก ืžืึทื ื™ื•ืึทืœื™. ืึทื ื“ืขืจืฉ, ืื™ืจ ื ื™ื˜ ื‘ืœื•ื™ื– ืจื™ื–ื™ืงื™ืจืŸ ื˜ืฉื•ื“ื ืข ื˜ืขืจืจืึทืคืึธืจื ืขืจืจืึธืจืก, ืึธื‘ืขืจ ืื™ืจ ืื•ื™ืš ืึธืคึผืฉืึทืฆืŸ ืคื™ืœืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ื‘ืขื ืขืคื™ืฅ ืคื•ืŸ ื™ืึทืง ื–ื™ื ื˜ ื“ื™ ืงืึธื“ ื•ื•ืขื˜ ื ื™ื˜ ืžืขืจ ื–ื™ื™ืŸ ืึทืŸ ืคึผื™ื ื˜ืœืขืš ืคืึทืจื˜ืจืขื˜ื•ื ื’ ืคื•ืŸ ื“ื™ื™ืŸ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ.
  • ืื•ื™ื‘ ืื™ืจ ืฉื•ื™ืŸ ื”ืึธื‘ืŸ ืขื˜ืœืขื›ืข ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ, ื ื•ืฆืŸ ื“ื™ ืึทืจื™ื™ึทื ืคื™ืจ ื‘ืึทืคึฟืขืœ. ืื•ื™ื‘ ืื™ืจ ืึธื ื”ื™ื™ื‘ืŸ ืฆื• ื ื•ืฆืŸ Terraform ืžื™ื˜ ื™ื’ื–ื™ืกื˜ื™ื ื’ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ, ืื™ืจ ืงืขื ืขืŸ ืœื™ื™ื’ืŸ ืขืก ืฆื• ื“ื™ ืฉื˜ืึทื˜ ื˜ืขืงืข ืžื™ื˜ ื“ื™ ื˜ืขืจืจืึทืคืึธืจื ืึทืจื™ื™ึทื ืคื™ืจ ื‘ืึทืคึฟืขืœ. ื“ืขืจ ื•ื•ืขื’, Terraform ื•ื•ืขื˜ ื•ื•ื™ืกืŸ ื•ื•ืึธืก ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ื“ืึทืจืฃ ื–ื™ื™ืŸ ื’ืขืจืื˜ืŸ. ื“ืขืจ ืึทืจื™ื™ึทื ืคื™ืจ ื‘ืึทืคึฟืขืœ ื ืขืžื˜ ืฆื•ื•ื™ื™ ืึทืจื’ื•ืžืขื ื˜ืŸ. ื“ืขืจ ืขืจืฉื˜ืขืจ ืื™ื– ื“ื™ ืžื™ื˜ืœ ืึทื“ืจืขืก ืื™ืŸ ื“ื™ื™ืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื˜ืขืงืขืก. ื“ืขืจ ืกื™ื ื˜ืึทืงืก ื“ืึธ ืื™ื– ื“ื™ ื–ืขืœื‘ืข ื•ื•ื™ ืคึฟืึทืจ ืžื™ื˜ืœ ืœื™ื ืงืก: _. (ื•ื•ื™ aws_iam_user.existing_user). ื“ื™ ืฆื•ื•ื™ื™ื˜ืข ืึทืจื’ื•ืžืขื ื˜ ืื™ื– ื“ื™ ID ืคื•ืŸ ื“ื™ ืžื™ื˜ืœ ืฆื• ื–ื™ื™ืŸ ื™ืžืคึผืึธืจื˜ื™ื“. ื–ืืœ ืก ื–ืึธื’ืŸ ื“ื™ ืžื™ื˜ืœ ืฉื™ื™ึทืŸ aws_iam_user ืื™ื– ื“ืขืจ ื‘ืึทื ื™ืฆืขืจ ื ืึธืžืขืŸ (ืœืžืฉืœ, yevgeniy.brikman), ืื•ืŸ ื“ื™ ืžื™ื˜ืœ ืฉื™ื™ึทืŸ aws_instance ืื™ื– ื“ื™ EC2 ืกืขืจื•ื•ืขืจ ืฉื™ื™ึทืŸ (ื•ื•ื™ i-190e22e5). ื•ื•ื™ ืฆื• ืึทืจื™ื™ึทื ืคื™ืจ ืึท ืžื™ื˜ืœ ืื™ื– ื™ื•ื–ืฉืึทื•ื•ืึทืœื™ ืื ื’ืขื•ื•ื™ื–ืŸ ืื™ืŸ ื“ื™ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ืื™ืŸ ื“ื™ ื“ื ืึธ ืคื•ืŸ ื–ื™ื™ึทืŸ ื‘ืœืึทื˜.

    ื•ื ื˜ืขืจ ืื™ื– ืึทืŸ ืึทืจื™ื™ึทื ืคื™ืจ ื‘ืึทืคึฟืขืœ ื•ื•ืึธืก ืกื™ื ื’ืงืจืึทื ื™ื™ื–ื™ื– ื“ื™ aws_iam_user ืžื™ื˜ืœ ื•ื•ืึธืก ืื™ืจ ื”ืึธื˜ ืฆื•ื’ืขื’ืขื‘ืŸ ืฆื• ื“ื™ื™ืŸ ื˜ืขืจืจืึทืคืึธืจื ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืฆื•ื–ืึทืžืขืŸ ืžื™ื˜ ื“ื™ IAM ื‘ืึทื ื™ืฆืขืจ ืื™ืŸ ื˜ืฉืึทืคึผื˜ืขืจ 2 (ืึทื•ื•ื“ืื™ ืกืึทื‘ืกื˜ื™ื˜ื•ื˜ ื“ื™ื™ืŸ ื ืึธืžืขืŸ ืคึฟืึทืจ yevgeniy.brikman):

    $ terraform import aws_iam_user.existing_user yevgeniy.brikman

    Terraform ื•ื•ืขื˜ ืจื•ืคืŸ ื“ื™ AWS API ืฆื• ื’ืขืคึฟื™ื ืขืŸ ื“ื™ื™ืŸ IAM ื‘ืึทื ื™ืฆืขืจ ืื•ืŸ ืฉืึทืคึฟืŸ ืึท ืฉื˜ืึทื˜ ื˜ืขืงืข ืคืึทืจื‘ืึทื ื“ ืฆื•ื•ื™ืฉืŸ ืขืก ืื•ืŸ ื“ื™ aws_iam_user.existing_user ืžื™ื˜ืœ ืื™ืŸ ื“ื™ื™ืŸ ื˜ืขืจืจืึทืคืึธืจื ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ. ืคื•ืŸ ืื™ืฆื˜ ืื•ื™ืฃ, ื•ื•ืขืŸ ืื™ืจ ืœื•ื™ืคืŸ ื“ื™ ืคึผืœืึทืŸ ื‘ืึทืคึฟืขืœ, Terraform ื•ื•ืขื˜ ื•ื•ื™ืกืŸ ืึทื– ื“ืขืจ IAM ื‘ืึทื ื™ืฆืขืจ ืฉื•ื™ืŸ ื™ื’ื–ื™ืกืฅ ืื•ืŸ ื•ื•ืขื˜ ื ื™ืฉื˜ ืคึผืจื•ื‘ื™ืจืŸ ืฆื• ืžืึทื›ืŸ ืขืก ื•ื•ื™ื“ืขืจ.

    ืขืก ืื™ื– ื›ื“ืื™ ืฆื• ื‘ืืžืขืจืงืŸ ืึทื– ืื•ื™ื‘ ืื™ืจ ืฉื•ื™ืŸ ื”ืึธื‘ืŸ ืึท ืคึผืœืึทืฅ ืคื•ืŸ ืจืขืกื•ืจืกืŸ ืึทื– ืื™ืจ ื•ื•ื™ืœืŸ ืฆื• ืึทืจื™ื™ึทื ืคื™ืจ ืื™ืŸ Terraform, ืžืึทื ื™ื•ืึทืœื™ ืฉืจื™ื™ื‘ืŸ ื“ื™ ืงืึธื“ ืื•ืŸ ื™ืžืคึผืึธืจื˜ื™ื ื’ ื™ืขื“ืขืจ ืื™ื™ื ืขืจ ืื™ืŸ ืึท ืฆื™ื™ื˜ ืงืขื ืขืŸ ื–ื™ื™ืŸ ืึท ื›ืึทืกืึทืœ. ืึทื–ื•ื™ ืขืก ืื™ื– ื•ื•ืขืจื˜ ืฆื• ืงื•ืงืŸ ืื™ืŸ ืึท ื’ืขืฆื™ื™ึทื’ ื•ื•ื™ Terraforming (http://terraforming.dtan4.net/), ื•ื•ืึธืก ืงืขื ืขืŸ ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ืึทืจื™ื™ึทื ืคื™ืจ ืงืึธื“ ืื•ืŸ ืฉื˜ืึทื˜ ืคึฟื•ืŸ ื“ื™ื™ืŸ AWS ื—ืฉื‘ื•ืŸ.

    ืจืขืคืึทืงื˜ื•ืจื™ื ื’ ืงืขื ืขืŸ ื”ืึธื‘ืŸ ื–ื™ื™ึทืŸ ืคึผื™ื˜ืคืึธืœื–

    ืจืขืคืึทืงื˜ื•ืจื™ื ื’ ืื™ื– ืึท ืคึผืจืึธืกื˜ ืคื™ืจ ืื™ืŸ ืคึผืจืึธื’ืจืึทืžืžื™ื ื’ ื•ื•ื• ืื™ืจ ื˜ื•ื™ืฉืŸ ื“ื™ ื™ื ืขืจืœืขืš ืกื˜ืจื•ืงื˜ื•ืจ ืคื•ืŸ ื“ื™ ืงืึธื“ ื‘ืฉืขืช ืื™ืจ ืœืึธื–ืŸ ื“ื™ ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ื ืึทื˜ื•ืจ ืึทื ื˜ืฉื™ื™ื ื“ื–ืฉื“. ื“ืึธืก ืื™ื– ืฆื• ืžืึทื›ืŸ ื“ื™ ืงืึธื“ ืงืœื™ืจืขืจ, ื ื™ื˜ืขืจ ืื•ืŸ ื’ืจื™ื ื’ืขืจ ืฆื• ื˜ื™ื™ึทื ืขืŸ. ืจืขืคืึทืงื˜ื•ืจื™ื ื’ ืื™ื– ืึท ื™ื ื“ื™ืกืคึผืขื ืกืึทื‘ืึทืœ ื˜ืขื›ื ื™ืง ื•ื•ืึธืก ื–ืึธืœ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ืงืขืกื™ื™ื“ืขืจ. ืึธื‘ืขืจ ื•ื•ืขืŸ ืขืก ืงื•ืžื˜ ืฆื• ื˜ืขืจืจืึทืคืึธืจื ืึธื“ืขืจ ืงื™ื™ืŸ ืื ื“ืขืจืข ื™ืึทืง ื’ืขืฆื™ื™ึทื’, ืื™ืจ ืžื•ื–ืŸ ื–ื™ื™ืŸ ื’ืึธืจ ืึธืคึผื’ืขื”ื™ื˜ ื•ื•ืขื’ืŸ ื•ื•ืึธืก ืื™ืจ ืžื™ื™ื ืขืŸ ืžื™ื˜ ื“ื™ "ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ื ืึทื˜ื•ืจ" ืคื•ืŸ ืึท ืฉื˜ื™ืง ืคื•ืŸ ืงืึธื“, ืึทื ื“ืขืจืฉ ืื•ืžื’ืขืจื™ื›ื˜ ืคึผืจืึธื‘ืœืขืžืก ื•ื•ืขื˜ ืื•ื™ืคืฉื˜ื™ื™ืŸ.

    ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืึท ืคึผืจืึธืกื˜ ื˜ื™ืคึผ ืคื•ืŸ ืจืขืคืึทืงื˜ืึธืจื™ื ื’ ืื™ื– ืจื™ืคึผืœื™ื™ืกื™ื ื’ ื“ื™ ื ืขืžืขืŸ ืคื•ืŸ ื•ื•ืขืจื™ืึทื‘ืึทืœื– ืึธื“ืขืจ ืคืึทื ื’ืงืฉืึทื ื– ืžื™ื˜ ืžืขืจ ืคืึทืจืฉื˜ื™ื™ื™ืง ืึธื ืขืก. ืคื™ืœืข IDEs ื”ืึธื‘ืŸ ืึท ื’ืขื‘ื•ื™ื˜-ืื™ืŸ ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ ืจืขืคืึทืงื˜ืึธืจื™ื ื’ ืื•ืŸ ืงืขื ืขืŸ ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ืจืขื ืึทืžืข ื•ื•ืขืจื™ืึทื‘ืึทืœื– ืื•ืŸ ืคืึทื ื’ืงืฉืึทื ื– ืื™ื‘ืขืจ ื“ื™ ืคึผืจื•ื™ืขืงื˜. ืื™ืŸ ืึทืœื’ืขืžื™ื™ืŸ-ืฆื•ื•ืขืง ืคึผืจืึธื’ืจืึทืžืžื™ื ื’ ืฉืคึผืจืึทื›ืŸ, ื“ืึธืก ืื™ื– ืึท ื ื™ืฉื˜ื™ืง ืคึผืจืึธืฆืขื“ื•ืจ ื•ื•ืึธืก ืื™ืจ ืงืขืŸ ื ื™ืฉื˜ ื˜ืจืึทื›ื˜ืŸ ื•ื•ืขื’ืŸ, ืึธื‘ืขืจ ืื™ืŸ Terraform ืื™ืจ ืžื•ื–ืŸ ื–ื™ื™ืŸ ื’ืึธืจ ืึธืคึผื’ืขื”ื™ื˜ ืžื™ื˜ ื“ืขื, ืึทื ื“ืขืจืฉ ืื™ืจ ืงืขืŸ ื“ืขืจืคืึทืจื•ื ื’ ืึทื•ื˜ืึทื“ื–ืฉืึทื–.

    ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ื“ื™ ื•ื•ืขื‘ืกืขืจื•ื•ืขืจ-ืงื ื•ื™ืœ ืžืึธื“ื•ืœืข ื”ืื˜ ืึทืŸ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง cluster_name:

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

    ื™ืžืึทื“ื–ืฉืึทืŸ ืึทื– ืื™ืจ ืกื˜ืึทืจื˜ืขื“ ื ื™ืฆืŸ ื“ืขื ืžืึธื“ื•ืœืข ืฆื• ืฆืขื•ื•ื™ืงืœืขืŸ ืึท ืžื™ืงืจืึธ ืกืขืจื•ื•ื™ืก ื’ืขืจื•ืคึฟืŸ ืคืึธืึธ. ืฉืคึผืขื˜ืขืจ, ืื™ืจ ื•ื•ื™ืœืŸ ืฆื• ืจืขื ืึทืžืข ื“ื™ื™ืŸ ื“ื™ื ืกื˜ ืฆื• ื‘ืึทืจ. ื“ืขืจ ืขื ื“ืขืจื•ื ื’ ืงืขืŸ ื•ื™ืกืงื•ืžืขืŸ ื ื™ืฉื˜ื™ืง, ืึธื‘ืขืจ ืื™ืŸ ืคืึทืงื˜ ืขืก ืงืขืŸ ืคืึทืจืฉืึทืคืŸ ืกืขืจื•ื•ื™ืก ื“ื™ืกืจืึทืคึผืฉืึทื ื–.

    ื“ืขืจ ืคืึทืงื˜ ืื™ื– ืึทื– ื“ื™ ื•ื•ืขื‘ืกืขืจื•ื•ืขืจ-ืงื ื•ื™ืœ ืžืึธื“ื•ืœืข ื ื™ืฆื˜ ื“ื™ 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 ID. ืœืึธืžื™ืจ ื ืขืžืขืŸ ื“ื™ aws_security_group ืžื™ื˜ืœ ืื™ืŸ ื“ื™ ื•ื•ืขื‘ืกืขืจื•ื•ืขืจ-ืงื ื•ื™ืœ ืžืึธื“ื•ืœืข ื•ื•ื™ ืึท ื‘ื™ื™ืฉืคึผื™ืœ:

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

    ื“ืขืจ ืื™ื“ืขื ื˜ื™ืคื™ืฆืขืจ ืคื•ืŸ ื“ืขื ืžื™ื˜ืœ ืื™ื– ื’ืขืจื•ืคืŸ ืœืžืฉืœ. ื™ืžืึทื“ื–ืฉืึทืŸ ืึทื– ื‘ืขืฉืึทืก ืจืขืคืึทืงื˜ืึธืจื™ื ื’ ืื™ืจ ื‘ืึทืฉืœืึธืกืŸ ืฆื• ื˜ื•ื™ืฉืŸ ืขืก ืฆื• ืึท ืžืขืจ ืคืึทืจืฉื˜ื™ื™ื™ืง (ืื™ืŸ ื“ื™ื™ืŸ ืžื™ื™ื ื•ื ื’) ื ืึธืžืขืŸ cluster_instance:

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

    ื•ื•ืึธืก ื•ื•ืขื˜ ืคึผืึทืกื™ืจืŸ ืื™ืŸ ื“ื™ ืกื•ืฃ? ืึทื– ืก ืจืขื›ื˜: ืึท ื“ื™ืกืจืึทืคึผืฉืึทืŸ.

    Terraform ืึทืกืกืึธืกื™ืึทื˜ืขืก ื™ืขื“ืขืจ ืžื™ื˜ืœ ืฉื™ื™ึทืŸ ืžื™ื˜ ื“ื™ ื•ื•ืึธืœืงืŸ ืฉืคึผื™ื™ึทื–ืขืจ ืฉื™ื™ึทืŸ. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, iam_user ืื™ื– ืคึฟืึทืจื‘ื•ื ื“ืŸ ืžื™ื˜ ื“ื™ AWS IAM ื‘ืึทื ื™ืฆืขืจ ืฉื™ื™ึทืŸ, ืื•ืŸ aws_instance ืื™ื– ืคึฟืึทืจื‘ื•ื ื“ืŸ ืžื™ื˜ ื“ื™ AWS EC2 ืกืขืจื•ื•ืขืจ ืฉื™ื™ึทืŸ. ืื•ื™ื‘ ืื™ืจ ื˜ื•ื™ืฉืŸ ื“ื™ ืžื™ื˜ืœ ืฉื™ื™ึทืŸ (ื–ืึธื’ืŸ ืคื•ืŸ ื‘ื™ื™ึทืฉืคึผื™ืœ ืฆื• cluster_instance, ื•ื•ื™ ืื™ื– ื“ืขืจ ืคืึทืœ ืžื™ื˜ aws_security_group), ืฆื• ื˜ืขืจืจืึทืคืึธืจื ืขืก ื•ื•ืขื˜ ื“ืขืจืฉื™ื™ึทื ืขืŸ ื•ื•ื™ ืื•ื™ื‘ ืื™ืจ ืื•ื™ืกื’ืขืžืขืงื˜ ื“ื™ ืึทืœื˜ ืžื™ื˜ืœ ืื•ืŸ ืฆื•ื’ืขื’ืขื‘ืŸ ืึท ื ื™ื™ึทืข. ืื•ื™ื‘ ืื™ืจ ืฆื•ืœื™ื™ื’ืŸ ื“ื™ ืขื ื“ืขืจื•ื ื’ืขืŸ, Terraform ื•ื•ืขื˜ ื•ื™ืกืžืขืงืŸ ื“ื™ ืึทืœื˜ ื–ื™ื›ืขืจื”ื™ื™ื˜ ื’ืจื•ืคึผืข ืื•ืŸ ืฉืึทืคึฟืŸ ืึท ื ื™ื™ึทืข, ื‘ืฉืขืช ื“ื™ื™ืŸ ืกืขืจื•ื•ืขืจืก ืึธื ื”ื™ื™ื‘ืŸ ืฆื• ืึธืคึผื•ื•ืึทืจืคืŸ ืงื™ื™ืŸ ื ืขืฅ ืคืึทืจืงืขืจ.

    ื“ืึธ ื–ืขื ืขืŸ ืคื™ืจ ืฉืœื™ืกืœ ืœืขืงืฆื™ืขืก ืื™ืจ ื–ืึธืœ ื ืขืžืขืŸ ืึทื•ื•ืขืง ืคื•ืŸ ื“ืขื ื“ื™ืกืงื•ืกื™ืข.

    • ืฉื˜ืขื ื“ื™ืง ื ื•ืฆืŸ ื“ื™ ืคึผืœืึทืŸ ื‘ืึทืคึฟืขืœ. ืขืก ืงืขื ืขืŸ ืึทื ื˜ื“ืขืงืŸ ืึทืœืข ื“ื™ ืกื ืึทื’ื–. ืื™ื‘ืขืจื‘ืœื™ืง ื–ื™ื™ืŸ ืคึผืจืึธื“ื•ืงืฆื™ืข ืงืขืจืคืึทืœื™ ืื•ืŸ ืื›ื˜ื•ื ื’ ืฆื• ืกื™ื˜ื•ืึทื˜ื™ืึธื ืก ื•ื•ื• Terraform ืคึผืœืึทื ื– ืฆื• ื•ื™ืกืžืขืงืŸ ืจืขืกื•ืจืกืŸ ื•ื•ืึธืก ืจื•ื‘ึฟ ืžืกืชึผืžื ื–ืึธืœ ื ื™ื˜ ื–ื™ื™ืŸ ืื•ื™ืกื’ืขืžืขืงื˜.
    • ืฉืึทืคึฟืŸ ืื™ื™ื“ืขืจ ืื™ืจ ื•ื™ืกืžืขืงืŸ. ืื•ื™ื‘ ืื™ืจ ื•ื•ื™ืœืŸ ืฆื• ืคืึทืจื‘ื™ื™ึทื˜ืŸ ืึท ืžื™ื˜ืœ, ื˜ืจืึทื›ื˜ืŸ ืงืขืจืคืึทืœื™ ืฆื™ ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืฉืึทืคึฟืŸ ืึท ืคืึทืจื‘ื™ื™ึทื˜ ืื™ื™ื“ืขืจ ื“ื™ืœื™ื˜ื™ื ื’ ื“ื™ ืึธืจื™ื’ื™ื ืขืœ. ืื•ื™ื‘ ื“ืขืจ ืขื ื˜ืคืขืจ ืื™ื– ื™ืึธ, create_before_destroy ืงืขื ืขืŸ ื”ืขืœืคึฟืŸ. ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ืงืขื ืขืŸ ื–ื™ื™ืŸ ืึทื˜ืฉื™ื•ื•ื“ ืžืึทื ื™ื•ืึทืœื™ ื“ื•ืจืš ื“ื•ืจื›ืคื™ืจืŸ ืฆื•ื•ื™ื™ ืกื˜ืขืคึผืก: ืขืจืฉื˜ืขืจ ืœื™ื™ื’ืŸ ืึท ื ื™ื™ึทืข ืžื™ื˜ืœ ืฆื• ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืื•ืŸ ืœื•ื™ืคืŸ ื“ื™ ืฆื•ืœื™ื™ื’ืŸ ื‘ืึทืคึฟืขืœ, ืื•ืŸ ื“ืึทืŸ ืึทืจืึธืคึผื ืขืžืขืŸ ื“ื™ ืึทืœื˜ ืžื™ื˜ืœ ืคื•ืŸ ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืื•ืŸ ื ื•ืฆืŸ ื“ื™ ืฆื•ืœื™ื™ื’ืŸ ื‘ืึทืคึฟืขืœ ื•ื•ื™ื“ืขืจ.
    • ื˜ืฉืึทื ื’ื™ื ื’ ื™ื“ืขื ื˜ื™ืคื™ืขืจืก ืจื™ืงื•ื•ื™ื™ืขืจื– ื˜ืฉืึทื ื’ื™ื ื’ ืฉื˜ืึทื˜. ืื•ื™ื‘ ืื™ืจ ื•ื•ื™ืœืŸ ืฆื• ื˜ื•ื™ืฉืŸ ื“ื™ ืฉื™ื™ึทืŸ ืคึฟืึทืจื‘ื•ื ื“ืŸ ืžื™ื˜ ืึท ืžื™ื˜ืœ (ืœืžืฉืœ, ืจืขื ืึทืžืข aws_security_group ืคึฟื•ืŸ ื‘ื™ื™ึทืฉืคึผื™ืœ ืฆื• cluster_instance) ืึธืŸ ื•ื™ืกืžืขืงืŸ ื“ื™ ืžื™ื˜ืœ ืื•ืŸ ืฉืึทืคึฟืŸ ืึท ื ื™ื™ึทืข ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹ืขืก, ืื™ืจ ืžื•ื–ืŸ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ื“ื™ ื˜ืขืจืจืึทืคืึธืจื ืฉื˜ืึทื˜ ื˜ืขืงืข ืึทืงืึธืจื“ื™ื ื’ืœื™. ืงื™ื™ื ืžืึธืœ ื˜ืึธืŸ ื“ืึธืก ืžืึทื ื™ื•ืึทืœื™ - ื ื™ืฆืŸ ื“ื™ ื˜ืขืจืจืึทืคืึธืจื ืฉื˜ืึทื˜ ื‘ืึทืคึฟืขืœ ืึทื ืฉื˜ืึธื˜. ื•ื•ืขืŸ ืจื™ื ื™ื™ืžื™ื ื’ ื™ื“ืขื ื˜ื™ืคื™ืขืจืก, ืื™ืจ ื–ืึธืœ ืœื•ื™ืคืŸ ื“ื™ ื˜ืขืจืจืึทืคืึธืจื ืฉื˜ืึทื˜ mv ื‘ืึทืคึฟืขืœ, ื•ื•ืึธืก ื”ืื˜ ื“ื™ ืคืืœื’ืขื ื“ืข ืกื™ื ื˜ืึทืงืก:
      terraform state mv <ORIGINAL_REFERENCE> <NEW_REFERENCE>

      ORIGINAL_REFERENCE ืื™ื– ืึทืŸ ืื•ื™ืกื“ืจื•ืง ื•ื•ืึธืก ืจืขืคืขืจืก ืฆื• ื“ื™ ืžื™ื˜ืœ ืื™ืŸ ื–ื™ื™ืŸ ืงืจืึทื ื˜ ืคืึธืจืขื, ืื•ืŸ NEW_REFERENCE ืื™ื– ื•ื•ื• ืื™ืจ ื•ื•ื™ืœืŸ ืฆื• ืžืึทืš ืขืก. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ื•ื•ืขืŸ ืจื™ื ื™ื™ืžื™ื ื’ ื“ื™ aws_security_group ื’ืจื•ืคึผืข ืคื•ืŸ โ€‹โ€‹ื‘ื™ื™ึทืฉืคึผื™ืœ ืฆื• 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 ื•ื•ืขื˜ ื•ื™ืกืžืขืงืŸ ื“ื™ ืึทืœื˜ ืžื™ื˜ืœ ืื•ืŸ ืฉืึทืคึฟืŸ ืึท ื ื™ื™ึทืข ืื™ืŸ ื–ื™ื™ืŸ ืึธืจื˜. ื™ืขื“ืขืจ ืžื™ื˜ืœ ื‘ืœืึทื˜ ื•ื•ืขื˜ ื™ื•ื–ืฉืึทื•ื•ืึทืœื™ ืึธื ื•ื•ื™ื™ึทื–ืŸ ื•ื•ืึธืก ื›ืึทืคึผืึทื ื– ื•ื•ืขืŸ ืื™ืจ ื˜ื•ื™ืฉืŸ ืึท ื‘ืึทื–ื•ื ื“ืขืจ ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ, ืึทื–ื•ื™ ื–ื™ื™ืŸ ื–ื™ื›ืขืจ ืฆื• ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื“ื™ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ. ืฉื˜ืขื ื“ื™ืง ื ื•ืฆืŸ ื“ื™ ืคึผืœืึทืŸ ื‘ืึทืคึฟืขืœ ืื•ืŸ ื‘ืึทื˜ืจืึทื›ื˜ืŸ ื ื™ืฆืŸ ื“ื™ create_before_destroy ืกื˜ืจืึทื˜ืขื’ื™ืข.

    ื“ื™ืคืขืจื“ ืงืึธื ืกื™ืกื˜ืขื ืกื™ ืื™ื– ืงืึธื ืกื™ืกื˜ืขื ื˜ ... ืžื™ื˜ ื“ื™ืคืขืจืึทืœ

    ืขื˜ืœืขื›ืข ื•ื•ืึธืœืงืŸ ืคึผืจืึทื•ื•ื™ื™ื“ืขืจื– 'ืึทืคึผื™ืก, ืึทื–ืึท ื•ื•ื™ AWS, ื–ืขื ืขืŸ ื™ื™ืกื™ื ื’ืงืจืึทื ืึทืก ืื•ืŸ ื”ืึธื‘ืŸ ื“ื™ืœื™ื™ื“ ืงืึธื ืกื™ืกื˜ืขื ืกื™. ืึทืกื™ื ื˜ืฉืจืึธื ื™ ืžื™ื˜ืœ ืึทื– ื“ื™ ืฆื•ื‘ื™ื ื“ ืงืขื ืขืŸ ื’ืœื™ื™ืš ืฆื•ืจื™ืงืงื•ืžืขืŸ ืึท ืขื ื˜ืคืขืจ ืึธืŸ ื•ื•ืืจื˜ืŸ ืคึฟืึทืจ ื“ื™ ื’ืขื‘ืขื˜ืŸ ืงืึทืžืฃ ืฆื• ืคืึทืจืขื ื“ื™ืงืŸ. ื“ื™ืœื™ื™ื“ ืงืึธื ืกื™ืกื˜ืขื ืกื™ ืžื™ื˜ืœ ืึทื– ืขื ื“ืขืจื•ื ื’ืขืŸ ืงืขืŸ ื ืขืžืขืŸ ืฆื™ื™ื˜ ืฆื• ืคืึทืจืฉืคึผืจื™ื™ื˜ืŸ ืื™ื‘ืขืจ ื“ื™ ืกื™ืกื˜ืขื; ื‘ืฉืขืช ื“ืึธืก ืื™ื– ื’ืขืฉืขืขื ื™ืฉ, ื“ื™ื™ืŸ ืจืขืกืคึผืึธื ืกืขืก ืงืขืŸ ื–ื™ื™ืŸ ืกืชื™ืจื” ืื•ืŸ ืึธืคืขื ื’ื™ืง ืื•ื™ืฃ ื•ื•ืึธืก ื“ืึทื˜ืŸ ืžืงื•ืจ ืจืขืคึผืœื™ืงืข ืจื™ืกืคึผืึทื ื“ ืฆื• ื“ื™ื™ืŸ ืึทืคึผื™ ืจื•ืคื˜.

    ื™ืžืึทื“ื–ืฉืึทืŸ, ืœืžืฉืœ, ืึทื– ืื™ืจ ืžืึทื›ืŸ ืึท ืึทืคึผื™ ืจื•ืคืŸ ืฆื• AWS ืื•ืŸ ื‘ืขื˜ืŸ ืขืก ืฆื• ืฉืึทืคึฟืŸ ืึทืŸ EC2 ืกืขืจื•ื•ืขืจ. ื“ื™ ืึทืคึผื™ ื•ื•ืขื˜ ืฆื•ืจื™ืงืงื•ืžืขืŸ ืึท "ื’ืขืจืึธื˜ืŸ" ืขื ื˜ืคืขืจ (201 ื‘ืืฉืืคืŸ) ื›ึผืžืขื˜ ื˜ื™ื™ืงืขืฃ, ืึธืŸ ื•ื•ืืจื˜ืŸ ืคึฟืึทืจ ื“ื™ ืกืขืจื•ื•ืขืจ ื–ื™ืš ืฆื• ื–ื™ื™ืŸ ื‘ืืฉืืคืŸ. ืื•ื™ื‘ ืื™ืจ ืคึผืจื•ื‘ื™ืจืŸ ืฆื• ืคืึทืจื‘ื™ื ื“ืŸ ืฆื• ืขืก ื’ืœื™ื™ืš, ืขืก ื•ื•ืขื˜ ื›ึผืžืขื˜ ื–ื™ื›ืขืจ ื“ื•ืจื›ืคืึทืœ ื•ื•ื™ื™ึทืœ ืื™ืŸ ื“ืขื ืคื•ื ื˜ AWS ืื™ื– ื ืึธืš ื™ื ื™ื˜ื™ืึทืœื™ื–ื™ื ื’ ืจืขืกื•ืจืกืŸ ืึธื“ืขืจ, ืึทืœื˜ืขืจื ืึทื˜ื™ื•ื•ืขืœื™, ื“ืขืจ ืกืขืจื•ื•ืขืจ ื”ืื˜ ื ื™ืฉื˜ ื ืึธืš ื‘ื•ื˜ื™ื“. ื“ืขืจืฆื•, ืื•ื™ื‘ ืื™ืจ ืžืึทื›ืŸ ืืŸ ืื ื“ืขืจ ืจื•ืคืŸ ืฆื• ื‘ืึทืงื•ืžืขืŸ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื•ื•ืขื’ืŸ ื“ืขื ืกืขืจื•ื•ืขืจ, ืื™ืจ ืงืขืŸ ื‘ืึทืงื•ืžืขืŸ ืึท ื˜ืขื•ืช (404 ื ื™ื˜ ื’ืขืคึฟื•ื ืขืŸ). ื“ื™ ื–ืึทืš ืื™ื– ืึทื– ื“ื™ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื•ื•ืขื’ืŸ ื“ืขื EC2 ืกืขืจื•ื•ืขืจ ืงืขืŸ ื ืึธืš ื–ื™ื™ืŸ ืคึผืจืึทืคึผืึทื’ื™ื™ื˜ื™ื“ ืื™ื‘ืขืจ AWS ืื™ื™ื“ืขืจ ืขืก ื•ื•ืขืจื˜ ื‘ื ื™ืžืฆื ืื•ืžืขื˜ื•ื, ืื™ืจ ื•ื•ืขื˜ ื”ืึธื‘ืŸ ืฆื• ื•ื•ืึทืจื˜ืŸ ืึท ื‘ื™ืกืœ ืกืขืงื•ื ื“ืขืก.

    ื•ื•ืขืŸ ืื™ืจ ื ื•ืฆืŸ ืึท ื™ื™ืกื™ื ื’ืงืจืึทื ืึทืก ืึทืคึผื™ ืžื™ื˜ ืคื•ื™ืœ ืงืึธื ืกื™ืกื˜ืขื ืกื™, ืื™ืจ ืžื•ื–ืŸ ืคึผื™ืจื™ืึทื“ื™ืงืœื™ ืคึผืจื•ื‘ื™ืจืŸ ื“ื™ื™ืŸ ื‘ืงืฉื” ื‘ื™ื– ื“ื™ ืึทืงืฆื™ืข ืงืึทืžืคึผืœื™ืฅ ืื•ืŸ ืคึผืจืึทืคึผืึทื’ื™ื™ืฅ ื“ื•ืจืš ื“ื™ ืกื™ืกื˜ืขื. ืฆื•ื ื‘ืึทื“ื•ื™ืขืจืŸ, ื“ื™ AWS SDK ื’ื™ื˜ ืงื™ื™ืŸ ื’ื•ื˜ืข ืžื›ืฉื™ืจื™ื ืคึฟืึทืจ ื“ืขื, ืื•ืŸ ื“ื™ ื˜ืขืจืจืึทืคืึธืจื ืคึผืจื•ื™ืขืงื˜ ืœื™ื™ื“ืŸ ืคื•ืŸ ืคื™ืœืข ื‘ืึทื’ื– ื•ื•ื™ 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 ืžื•ืกื™ืฃ ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ ืึท ื ื™ื™ึทืข ืžื™ื˜ืœ ื˜ื™ืคึผ. ื“ืึธืก ืื™ื– ืึทื ื•ื™ื™ื ื’, ืึธื‘ืขืจ ืื™ืŸ ืจื•ื‘ึฟ ืงืึทืกืขืก ื˜ื•ื˜ ื ื™ืฉื˜ ื’ืจื•ื ื˜ ืงื™ื™ืŸ ืฉืึธื“ืŸ. ื•ื•ืขืŸ ืื™ืจ ืœื•ื™ืคืŸ ื˜ืขืจืจืึทืคืึธืจื ืฆื•ืœื™ื™ื’ืŸ ื•ื•ื™ื“ืขืจ, ืึทืœืฅ ื–ืึธืœ ืึทืจื‘ืขื˜ืŸ, ื•ื•ื™ื™ึทืœ ืื™ืŸ ื“ืขื ืฆื™ื™ึทื˜ ื“ื™ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื•ื•ืขื˜ ื”ืึธื‘ืŸ ืฉื•ื™ืŸ ืคืึทืจืฉืคึผืจื™ื™ื˜ืŸ ืื™ื‘ืขืจ ื“ื™ ืกื™ืกื˜ืขื.

    ื“ืขืจ ื“ืึธื–ื™ืงืขืจ ืื•ื™ืกืฆื•ื’ ื•ื•ืขืจื˜ ื“ืขืจืœืึทื ื’ื˜ ืคึฟื•ื ืขื ื‘ื•ืš ืคึฟื•ืŸ ืขื•ื•ื’ืขื ื™ ื‘ืจื™ืงืžืึทืŸ "ื˜ืขืจืจืึทืคืึธืจื: ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ืื•ื™ืฃ ื“ื™ ืงืึธื“ ืžื“ืจื’ื”".

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’