ᨠloops áá á¨á°áŤáŤááľáᣠááááŤáá˝á áĽá á¨áá°ááŤáľ á´áááŽá˝á áĽáá˛áá á á á ááá Terraformá á¨ááአá á ááá ááłáŽá˝á á¨áᎠáĽááľ ááĽááśá˝á áĽááłáá˘
- áá áŤá áĽá á_áĽáŤááłááą áá¤áśá˝ áá°áŚá˝ á áá¸á;
- áᎠá¨áĽá¨ááľ áá áá°ááŤáśá˝á áááľáĄ;
- áĽáŠ áĽá áľ áĽááłá ááłáŤ áá˝áá;
- refactoring á¨áŤáą ááĽááśá˝ ááá¨á áá˝áá;
- á¨ááᨠáľáľáľá ááĽááľ áŤáá áá... á¨áááá¨áľ ááá˘
áá áŤá áĽá ááĽáŤááłááą_áááááá˝ áá°áŚá˝ á áá¸á
á áá áááŤá ááľáĽ áŤááľ ááłááá˝ á¨ááĽá áááŞáŤáá áĽá á¨áĽáŤááłááąá á áááá˝ á loops áĽá áááłá á ááááŽáá˝ á áľááľ áá áááᢠáĽááą áĽáŠ á áááá á áá¸á ᣠáá ááá áŤááĽááľ áááľ á áľááá áá°áŚá˝ á áá¸áá˘
- áá ፠áĽá á_áĽáŤááłááą áááááá á¨ááĽá¨áľ áá ááľ á°ááááŽá˝á ááĽááľ á áá˝ááá˘
- áá ፠áĽá á_áĽáŤááłááą á ááá áá á ááľáĽ áá áá á ááťááá˘
áá ፠áĽá á_áĽáŤááłááą áááááá á¨ááĽá¨áľ áá ááľ á°ááááŽá˝á ááĽááľ á áá˝ááá˘
áĽá EC2 á ááááŽá˝á áá°ááŤáľ áĽááłááŚáľ áĽá á áá ááááŤáľ ASG áá áá áĽáá°ááááá á áľáĄáľá˘ á¨áĽááľá áŽáľ áĽáá°áá ááá áá˝áááĄ-
resource "aws_instance" "example_1" {
count = 3
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
}
áĽáľá˛ á ááľ á á ááľ áĽááŤá¸áá˘
á¨ááĽá áááŞáŤá áá° á¨áááááłááľ áĽá´áľ á¨á°ááá ᨠá ááá áá áŽáľ áŤáááá á˝áá áá°áŤáᥠá¨á áááŹá˝á áľáááá á˛áŤááą áśáľáľ á¨EC2 á ááááŽá˝á áááĽáŤáᢠáá á áá áŁáá á áľ á¨AWS ááá ááľáĽ á áĽáŤááłááą á¨á°ááááľ áá (AZ) á ááľ á áááá áá°ááŤáľ áĽáľááááľ? áŽáľáá á¨á ááľ_availability_ááá˝ á¨ááἠááá á¨ááá˝ áááá áĽáá˛áá ááľá¨á áĽá áĽáŤááłááąá ááá áĽá á¨ááĽá áááŞáŤ áĽá á¨áľááľá áá¨á á áá ááłá¨áťá á áá áá á¨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 ááŤá¨á áŤá á¨áááá° ááĽá áŤáááŤáᢠá¨áá á ááĽáľ áá ááľ á á ááľ_á˘ááľáłááľ áŞáśááľ áá ፠áááŞáŤ ááá áá á¨áá¨áá áá áĽáá°ááá áĽáááĄ-
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.
Terraform ááááá ááĽááľ á¨ááá አááá á¨ááá¨áŠ á ááľ á áĽá áľ á°á¨áá ááľáĽ áĽáá˛áá á áĽá ááĽáŤááłááą_áĽáŤááłááą áĽáá˛á°á áááááᢠáá áááľ áá ፠áĽá á_áĽáŤááłááą áá á ááᣠá°ááááŽá˝áŁ á¨ááἠáááŽá˝ áĽá ááá áááś á¨ááĽá¨áľ ááááŽá˝á ááŤááááľ áá˝áá (ááááłá¸á á áá áááááĽá áá áĽáľáŤáá°áá°á áľá¨áľ)ᣠááá áá á¨á°á°á á¨ááĽáľ áá ááľ á°ááááŽá˝á á áá°ááá˘
áá ፠áĽá á_áĽáŤááłááą á ááá áá á ááľáĽ áá áá á ááťáá
á ááľ áá áá° ááá áá áá á¨ááĽá áááŞáŤ ááá¨áá ááá°á áá˝áááĄ
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 áááŽáŁ á ááá ááľáĽ áŤááá áá ፠ááá ááĽáŤááłááą_áĽáŤááłááąá áá áá á áá°áááᢠá á´áŤááá 0.12 á¨áááá፠ááľáłááťáá˝ (http://bit.ly/3257bv4) áá á¨áľ HashiCorp áá
áá á˝ááł áá°ááľ ááá¨áá á á
áˇáᣠáľááá
áá
á áá˝áá á ááŤááĄá áľ áá áá á áááľá¨áľáŁ á áľááľá ááá áá˝ááᢠá áĽááá áááľ áááá
áŁ
á¨áᎠá¨áĽá¨ááľ áá áá°ááŤáľ áá°áŚá˝
Create_before_destroy áĽááá ᨠASG áá á ááŁáá áá áá ááŽ-áá áá°ááŤáśá˝á áááá á áĽáŠ áááľá áááŁá¨á ááľ ááľá ááá፠á áľá°áááŁá¨áŤáľ-á ááŁáĽ á áá˝ á áá°áááᢠááá á¨á áá áľáááá ááááᣠáá á áĽáŤááłááą áá°ááŤáą áá ᨠASG áá áá áá° min_size áááá°ááᣠáá á á¨áááąáľá á¨á ááááŽá˝ áĽááľ ááá¨áá á ááśáá˛á á áá˝á áĽá¨á°á áá á¨áá á˝áá ááá áá˝ááá˘
áááłá á¨ááĽá°áá¨á-áááľá°á ááá áĽááľ aws_autoscaling_schedule ááááá˝á ááááŁáá á 9 am áá á áááľá°á ááľáĽ áŤááľá á¨á ááááŽá˝ áĽááľ á¨áááľ áá° á áľá áá¨ááŤáᢠá¨á ááą 11áĄ9 áá áŤá°ááŤá á á˛áą ASG á¨á áľá ááá á áááľ á ááááŽá˝ áĽáť áááłá á áááĽáá áá áĽáľá¨ XNUMXáĄXNUMX áľá¨áľ áááŤáá˘
áá áá°áĽ á á°ááŤáŠ ááááśá˝ ááłáá áá˝ááá˘
- á¨áľáááášá ááŹáľ á aws_autoscaling_schedule ᨠ0 9 * * * ("á 9 am ááŽáĽ") áá° áĽáá° 0-59 9-17 * * * ("á á¨á°ááá á¨á ááą 9 am áĽáľá¨ 5 pm áŠáĄ") ááááĄá˘ ASG ááľááá á áľá á°áá¨áŽá˝ áŤááľáŁ áá áá á¨áŤáľ-áľáŹá á áá áĽáá°áá ááľáŹáľ ááá ááá á ááááĽáᣠáá á áĽá á¨áááááá ááᢠááá áá ASG á á áᥠáľáŤ áá á¨ááᣠáá á á á á¨áá°á á°áá ááľáĽ á¨á ááááŽáš ááĽá á áľá ááľá¨áąá áŤá¨áááŁáᢠáá áá ááá á¨ááŤáá á áŤááľ á áá°ááᣠáĽá á¨á áľá áá° áááľ á°áá¨áŽá˝ áĽá ááᣠáľáá ááá á á°á áááá˝ áá á˝áá áááĽáŤáá˘
- á ASG ááľáĽ áŤááľá á¨áá á ááááŽá˝ áĽááľ áááá á¨AWS APIá á¨áá áá áĽá áľááŞááľ ááá áŠáŁ á¨á᪠á¨ááἠááá á áá áá áá°áá ("á¨áá á¨ááἠááá" á áá˝ 249 áááá¨áą) áĽá ᨠASG á¨áááááá_á á á áááŞáŤ áá° á°ááá°á áĽá´áľ áŤáááᢠá˝áá. á áá ááááľáŁ áĽáŤááłááą á á˛áľ ASG ááłá áááá áŤáá á¨á´áŤááá áŽáľ áá á á°ááłáłá á á á áá°áŤá áĽá áááá¨áľ á¨á áá á áľá¸á᪠áŤá°ááááá˘
á áĽááἠá´áŤááá ááᎠáá áá˝áááá á áĽáŽ á¨á°á°áŤ áľáá ááá¨ááᣠááá áá á¨áá 2019 áááŽáŁ á¨HashiCorp áĄáľá áá
áá á°ááŁá á¨áá¨áá áĽá
áľ á ááá á¨áá (
áľááááá áĽá áľ áłááłáŤ áá°áá á áá˝áá
á ááłááľ áá á¨ááá áľááá áášá áľáááá á¨áľááŞáľ áĽá áľ áŤááŁáᣠááá áá á¨á°á°áá á¨á áľááá áľá á°áľá ááááłáᢠáááłá á¨aws_iam_user ááááá áá°á á˛á á áááŤá 2 ááá áá¨á á¨IAM á°á áá á¨á°á áááá áľ á°ááłáłá áľá áá ááá¨á ááááĄ-
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 State ááá ááľáĽ á¨á°ááášáľá ááĽáśá˝ áĽáť áááľ ááľáĽ áŤáľááŁá. ááĽáśá˝ á áá ááááľ á¨á°áá አ(áááłá, á áĽá á AWS áŽááśá ááľáĽ á á á ááľá¨á), á áľá´áą ááá ááľáĽ á áá áááá áĽá áľááá Terraform á¨áĽá áąá áľááá á˛áá˝á áááľ ááľáĽ á áŤáľááŁá. á áá¤áąá, á á áá°áá áĽááł áľááá á¨áááľáá áĽá áľ áá° áľáŹáľ ááá¨áŤá.
á¨áá á¨ááááŤá¸á áááľ áľáá ááśá˝ á áá˘
- á¨á´áŤááá áá ááľáŤáľ á¨áááá áá ááá ááá á áľá ááᢠá¨áá á¨á° áááľá ááá á´áŤáááá á áá áá á¨áá°áłá°á á¨ááᣠá¨á áá á áá á áĽá ááá¨á á áá˝ááᢠáŤáá áááŤáŁ áĽááľá ááááá á¨á´áŤááá áľá á°áśá˝ áĽáť áłááá áŽáą á¨áá á¨á° áááľáá áľáááá áááá áľááááá áĽá á¨IaC áĽá áá˝á áááłáá˘
- á ááłááľ áá á¨á° áááśá˝ áŤáááľ á¨ááľááŁáľ áľáááá áá ááᢠá´áŤáááá á¨ááŁá áá á¨á° áááľ áá áá áá á¨áááá á¨á´áŤááá á áľá᪠áľáááá á áá áá áá° áááą ááá áá¨á áľá˝ááá
ᢠá áá
ááááľ á´áŤááá áá ááááľ áá á¨á° áááľ áááŤáľ áĽááłáá áľ áŤáááᢠá¨ááľááŁáľ áľáĽáá áááľ áá᪠áĽá´áśá˝á áááľáłáᢠá¨ááááŞáŤá á áĽááľá á¨áááá áááá˝ ááľáĽ áŤáá á¨áá¨á ááá á áľáŤáť ááᢠáĽáá
áŤáá á ááŁáĽ á¨ááĽá¨áľ ááŤáŤáŁáá˝ áá á°ááłáłá áááĄ_ . (áĽáá° aws_iam_user.existing_user)ᢠááá°áá áá¨áŤá¨áŞáŤ áá° á áá ááľáĽ á¨áááŁáá ááĽáľ ááłáá፠áá. á¨ááá ááłáá፠aws_iam_user á¨á°á áá áľá áá áĽáá á (áááłá yevgeniy.brikman) áĽá á¨ááĽá¨áľ ááłáá፠aws_intance á¨EC2 á áááá ááłáá፠áá (áĽáá° i-190e22e5)ᢠááĽáľá áĽáá´áľ ááľááŁáľ áĽáá°ááťá áĽááá áá á ááš áłá˝áá ááá áá áŁáá á°ááľ ááľáĽ ááááťáá˘
á áááŤá 2 á¨IAM á°á áá áá áá° Terraform áá á¨áľá áŤá¨ááľá á¨aws_iam_user ááĽááľ á¨ááŤááłáľáá á¨ááľááŁáľ áľáĽáá á¨áá á áłá˝ á á (áľáá á á yevgeniy.brikman á áá°áŤáľ áĽááἠáá)áĄ-
$ terraform import aws_iam_user.existing_user yevgeniy.brikman
Terraform á¨áĽááľáá IAM á°á áá áááááľ áá° AWS á¤áá á áá°ááá áĽá á áĽáą áĽá á aws_iam_user.existing_user ááá ááŤá¨á á Terraform áá á¨áľá ááŤá¨á á¨áááľ ááá áááááľ áááĽáŤáᢠá¨á áá áááŽáŁ á¨áĽá áľ áľáááá á˛áŤááą á´áŤááá á¨IAM á°á áá á áľááľá áĽááłá áŤááá áĽá áĽáá°áá áááá á á áááááá˘
áá° á´áŤááá áááľááŁáľ á¨ááľáááá¸á áĽá ááĽáśá˝ áŤáá áŽáąá á áĽá á ááťá áĽáŤááłááąá á á ááľ áá ááľááŁáľ á˝áá ááá áĽáá°áá˝á áἠááŁá áááŁáᢠáľááá áĽáá° á´áŤááááá (http://terraforming.dtan4.net/) áŤá ááłáŞáŤ áááá á°áᢠááᣠáĽáąá á áŤáľ á°á áŽáľ á áľáᣠáĽá á¨AWS áááŤá áá ááľááἠáá˝ááá˘
áĽáá°áá ááá á á¨áŤáą á˝ááŽá˝ áááŠáľ áá˝ááá˘
áĽáá°áá ááá á ááŤá áŁá ᪠áłáááἠá˛áá á¨áŽáąá ááľáŁá ááá á á¨ááááŠá áľ ááŽááŤá ááľáĽ á¨á°ááá° á°ááŁá ááᢠáá áŽáąá á¨á áá ááá˝áŁ ááá áĽá ááá áááľá¨á ááᢠáá°áľ á¨ááááá áá´ á˛áá á áá°á áááľ áĽá á áá ááá á áá áľ. ááá áá áá° á´áŤááá ááá áá á¨IaC ááłáŞáŤ á˛áᣠá¨á ááľ ááŤá˝ áŽáľ "ááŤá áŁá áŞ" á˛á áá ááááľ áĽáá°ááá á áŁá áá ááá á ááĽááľ, á áá áá፠áŤáá°á á á á˝ááŽá˝ áá¨á°áłá.
áááłáᣠá¨á°ááá° á¨áááś áááá á áááľ á¨á°ááááŽá˝á ááá á¨á°ááŁáŽá˝á áľá á á áá ááá¨áłáľ á ááŤáľá˝á áá°áŤáľ ááᢠáĽá á áá˛á˘áá˝ ááá°áľ á áĽáŽ á¨á°á°áŤ áľáá á áá¸á áĽá á ááŽáááą ááľáĽ á°ááááŽá˝á áĽá á°ááŁáŤáľá á áŤáľ á°á áĽáá°áá áá°á¨á áá˝ááᢠá á á ááá ááá á¨ááŽááŤá á ááŁáĽ ááááá˝áŁ áá áĽááľá ááŤáľáĄá áľ á¨ááá˝ááľ á°áŤ áá°áľ ááᣠááá áá á á´áŤááá ááľáĽ á áá áá á¨áá°á áĽááá ááľá¨á á ááĽááľáŁ áŤááá áá ááá¨áĽ ááŤááĽáááľ áá˝ááá˘
áááłáᣠá¨ááĽá°áá¨á-áááľá°á ááá á¨áá¤áľ á°áááá á¨áááľá°á_áľá á áááĄ-
variable "cluster_name" { description = "The name to use for all the cluster resources" type = string }
foo á¨ááŁá áááᎠá°ááŞáľ ááá°ááŤáľ áá á ááá áá áá áĽáá°áááá á áľááá á áľáĽá˘ á ááᣠá¨áĽááľáá á áááááľ áá° á áá áĽáá°áá áá°á¨á áááááᢠáá ááἠááá áááľá áá˝ááᣠáá áĽáá° áĽáááą á¨áá á¨á áááááľ ááľá°ááá ááŤáľá¨áľá áá˝ááá˘
áĽáááłá áá á¨ááĽá°áá¨á-áááľá°á ááá á¨áááľá°á_áľá á°áááá á á ááŤáł ááĽáśá˝ ááľáĽ áá ááááŁá¨áááľ á¨á°á áááľ áĄáľáá˝ á¨áľá áááŞáŤ áĽá 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 á¨ááᣠáĽáąá á áá°á¨á áĽá á á˛áľ áľáŞáľ á ááá¨áľ ááŤá¨áᣠáľáŤááá áá° á¨áľá á ááááá áááá á¨ááŤáľá˝á áá´ á áááááľáᢠáĽáá°ááá á¨á°á áááľ áĄáľá á¨á°á°á¨á á¨áĽááľá á ááááŽá˝ á á˛áľ áĄáľá áĽáľáŞáá á áľá¨áľ áááááá á¨á ááłá¨ áá¨áĽ áľáŤáá á áááá á ááááŤáá˘
áááááľ á¨áá˝ááľ áá á¨ááťáťáŤ á áááľ á¨á´áŤááá ááłáá፠ááá¨á ááᢠá ááĽá°áá¨á-áááľá°á ááá ááľáĽ áŤááá á¨á ááľ_á°á áááľ_áĄáľá ááĽáľ áĽáá° ááłá áĽááá°áľáĄ-
resource "aws_security_group" "instance" { # (...) }
á¨áá ááĽáľ áá፠ááłá ááŁááᢠáĽáá°áá á áááááľ áá áá áἠááá¨áłáľ áá°ááťá (á áĽááľá á áľá°áŤá¨áľ) á¨áááľá°á_ááłá áľá áááá¨á áĽáá°áá°á á áľáĄáľáĄ-
resource "aws_security_group" "cluster_instance" { # (...) }
á áá¨á¨áť áá áááá? áá ááᥠááá¨áĽá˘
Terraform áĽáŤááłááąá á¨ááĽá¨áľ ááłáá፠á¨á°áá á á áŤá˘ ááłáá፠áá áŤáááłáᢠáááłáᣠiam_user á¨AWS IAM á°á áá ááłáá፠áá á¨á°ááŤá ááᣠáĽá aws_intance ᨠAWS EC2 á áááá ááłáá፠áá á¨á°ááŤá ááᢠá¨ááĽá¨áľ ááłáááŤáá á¨áá¨áŠáľ (á¨á áĽááľ áá° áááľá°á_á˘áľáłááľ ááááŠáŁ áĽáá° aws_security_group) áá° Terraform á¨áľáŽáá ááĽáľ á°ááá á á˛áľ áĽáá°á¨ááá áá ááłáŤáᢠáĽááá á áááŚá˝ á¨á°á°áá አá´áŤááá á¨áľáŽáá á¨á°á áááľ áĄáľá áá°ááá áĽá á á˛áľ áááĽáŤá, á¨áĽááľá á ááááŽá˝ áááááá á¨á ááłá¨ áá¨áĽ áľáŤáá ááľá ááľá¨á ááááŤá.
á¨áá ááááľ áááľáˇá¸á á¨ááᥠá áŤáľ ááá áľáá ááśá˝ áĽáá á áá˘
- áááá á¨áĽá áľ áľáááá áá áá. áĽááá á áá áĽáá ááśá˝ áááἠáá˝áá. áá¤áąá á áĽááá ááááá áĽá á´áŤááá áá°á¨á á¨ááááŁá¸áá ááĽáśá˝ ááá°á¨á áŤáá°áŁá¸áá áááłáá˝ áľáŠá¨áľ ááľáĄá˘
- á¨áá°á¨áá á ááľ ááá áŠ. ááĽáľá ááá°áŤáľ á¨ááá áááá á¨áá°á¨áá á ááľ ááľá ááá á áŤáľáááááľ áĽáá°áá á áĽááá áŤáľáĄá áľá˘ áááą á á á¨ááᣠá¨ááá¨áľ_á ááľ_áá á_áá¨áłááᢠáááľ áĽááááá˝á á ááá¸á á°ááłáłá áá¤áľ á áĽá ááááľ ááťááᥠá ááááŞáŤ áá° áá አá á˛áľ ááá áá¨áአáĽá á¨á áááŹá˝á áľáááá áŤááą áĽá á¨á፠á¨áľáŽáá ááĽáľ á¨áá አáŤáľáááą áĽá á¨á áááŹá˝á áľáááá áĽáá°áá áá ááá˘
- áááŤáá˝á ááá¨á áááłá áááἠáŤáľáááááᢠá¨ááĽá¨áľ áá á¨á°áŤáŤááá ááłáá፠ááá¨á á¨ááá (áááłáጠaws_security_groupá á¨á áĽááľ áá° áááľá°á_á˘ááľáłááľ áá°áá) ááĽá¨áąá áłáá°áá áĽá á á˛áľ á
ááá áłáááĽáŠ á¨Terraform state áááá á áá áá°á¨áľ áááá á ááĽááľá˘ áá
áá á ááŤá˝ á áĽá
á áŤáľáá - á ááľáŠ á¨á´áŤááá áááľ áľáááá áá ááᢠáááŤáá˝á á ááááŠá áľ ááᣠá¨áá¨á°ááá á ááŁáĽ á¨áŤááá á¨á´áŤááá áľá´áľ mv áľááá ááľáŹáľ á ááŚáľá˘
terraform state mv <ORIGINAL_REFERENCE> <NEW_REFERENCE>
ORIGINAL_REFERENCE ááĽá¨áąá á áá áŁáá ááአá¨ááŤááááľ á áááá˝ ááᣠáĽá NEW_REFERENCE ááŤáááłá áąáľ á¨áááááľ áŚáł ááᢠáááłá á¨á ááľ_á°á áááľ_ááŠá áĄáľáá á¨á áĽááľ áá° áááľá°á_á˘áľáłááľ áľáľá°áá á¨áá¨á°ááá áľááá ááľáŹáľ á ááĽá á˘
$ terraform state mv aws_security_group.instance aws_security_group.cluster_instance
áá áá´áŤááá á¨áá áá°á á¨á ááľ_á°á áááľ_áĄáľá.á˘ááľáłááľ áá á¨á°ááŤáá áááľ á áá á¨aws_security_group.cluster_intance áá ááŤáŤá áĽááłáá áľ áááá¨ááᢠáá áá á¨áľááá áľá á¨áá¨áŠ áĽá áŤáľáŹáą á áá á´áŤááá áĽá áľ ááá áááŚá˝á áŤááłá¨ áááá ááá á áľááá á á¨áááááá˘
- á ááłááľ á ááĽáŽá˝ áááᥠá áá˝ááᢠá¨áĽá ááĽáśá˝ áááŞáŤáá˝ á¨ááááᥠáá¸áᢠáĽááąá áááá¨á á¨áá¨áŠ á´áŤááá á¨áľáŽáá ááĽáľ áá°ááá áĽá á áĽáą áŚáł á á˛áľ áááĽáŤáᢠáĽáŤááłááą á¨áá¨á ááá á áĽáááá áá á ááľá ááźáľ á˛ááአáá áĽáá°ááá á áá áááᣠáľááá á°ááśášá áá¨áááĽáá áŤá¨áááĄá˘ áááá á¨ááá áľáááá áá áá áĽá á¨creat_before_destroy áľáľáŤá´á ááá áá áŤáľáĄá áľá˘
á¨ááᨠááĽááľ ááĽááľ áŤáá áá... á¨áááá¨áľ áá
áĽáá° AWS áŤá á ááłááľ á¨á°áá á á áŤá˘áá˝ á¤áá ááá˝ áŤáá°ááłá°á áĽá ááĽááľ áááá°ááᢠAsynchrony áááľ á ááááš á¨á°á á¨áá áĽááá áĽáľáŞá ááá áľá¨áľ áłáá áĽá áá˛áŤáá ááá˝ ááááľ áá˝ááᢠá¨ááᨠááĽááľ áááľ áááŚáš á áľáá áą ááľáĽ áááľáááľ áá áááľáą áá˝ááᤠáá á áááá áľ áá á¨áĽááľá ááážá˝ ááĽááľ á¨ááá¸á áĽá á á¨áľáá á¨ááἠááá á á áá¤áá á áĽáŞáá˝á ááá˝ áĽá¨á°á áĽáá°áá áá á¨á°áá¨áŽá ááá áá˝ááá˘
á áľáĄáľáŁ áááłáᣠá¨á¤.á.á á.á¤2 á áááá áĽáá˛ááĽá á áá á¨á áá° AWS áá°ááᢠá¤áá á á áááአáŤáą áĽáľáŞáá á áľá¨áľ áłáá áĽá áá˛áŤáá âá¨á°áłáŤâ ááá˝ (201 á¨á°áá á¨á) ááááłáᢠá¨áĽáą áá áá˛áŤáá ááááááľ á¨áá¨áŠ á áĽááá áááľ á ááłáŤá ááááŤáąá á á፠áá AWS á ááá ááĽáśá˝á áĽáŤáľááᨠáá ááá áĽáá° á ááŤá á áááአáá á áá°áŤááᢠá á°á¨ááŞá áľááá á áááá áá¨á áááááľ áá áĽáŞ áŤá°á¨á áľá á°áľ áá°ááľááľ áá˝áá (404 á áá°ááá)ᢠááአáá á¨EC2 á áááá áá¨á á ááá áŚáł á¨ááááą á ááľ á ááá á ááá AWS áá°áŤá áá˝ááᣠáĽááľ á°á¨ááśá˝ áá á á á ááĽááľá˘
áŤáá°ááłá°á á¤áá á á¨á°áá ááĽááľ áá á á°á ááá ááĽá áľáááą áĽáľáŞá ááá áĽá á áľáááą ááľáĽ áĽáľáŞá°áŤá áľá¨áľ á á¨ááá áĽáŤáá á áĽáá°áá ááá¨á á ááĽá ᢠáĽáá° á áááłá°á ááᣠAWS á¤áľá˛áŹ ááá ááá á áááľ áĽáŠ ááłáŞáŤ á áá°áĽáᣠáĽá á¨á´áŤááá ááŽáááľ áĽáá° 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
á áá á áááá˝áŁ ááĽááľ (áĽáá° áłáĽááľ áŤá) ááĽá¨á á¨á፠áľááĽáą á¨á°áá°á áá¨á áááááľ áááአ(áĽáá° á á˛áľ á¨á°áá ᨠáłáĽááľ ááłáááŤ) áĽá á´áŤááá ááŤááá á áá˝ááᢠá áĽááááš áĽááá áłááŤáá˝ (6813 á á¨ááŽ) á°áľá°áŤááááᣠááá áá á ááá á¨áá áá° áá áá á ááᣠá á°ááá Terraform áá á˛áą á¨ááĽá¨áľ á áááľ áľááá á˛á¨ááᢠáá á¨ááŤá áłá áá, ááá áá á á áĽááááš áááłáá˝ ááá ááłáľ á áŤáľá¨áľáá. á´áŤáááá áĽáá°áá á˛áŤáŤááą ááá ááá ááľáŤáľ á áá áľ ááááŤáąá á áá áá áá¨áá á áľáááą ááľáĽ áá°áŤáŤá.
áá á ááἠá¨áá˝áá Evgeniy Brikman ááá§á
"á´áŤááá: áá á¨á° áááľ á áŽáľ á°á¨á" .
ááá: hab.com