ααΌαααΌααααααΆααααΈααΆαααααΆααα½αα
ααα½α αα½αααΆαααααα αΆαααααΆααααααΉαααααα·ααα»α ααααα·αααΎααα
ααααΈαααααααΆααα αα·ααα
αα
αααααααααΆαααΆαααααααΆα ααααΌα
ααΆαααα αΆααΌαα
ααΆα
αααΎααααααααααααΆααααα 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 αααααααΉααααααααααααααΆααααααΆαααα’ααΆαα ααΌα
ααααα’αΆαααααααΎααααααα’αααα’αΆαααααα
ααα ααΆα’αΆα
ααΆααα½α
α αΎαα α
ααααΉαα
αααΆααααΆ
ααααααααααααΆαααΆαααααααΆα 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