ΠΡΠ΄Π΅Π»ΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½ΡΡ
ΠΊΠ°ΠΌΠ½Π΅ΠΉ, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠ΅, ΡΡΠΎ ΡΠ²ΡΠ·Π°Π½Ρ Ρ ΡΠΈΠΊΠ»Π°ΠΌΠΈ, Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ if ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΠ°ΠΌΠΈ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ, Π° ΡΠ°ΠΊΠΆΠ΅ Ρ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡΠΈΠΌΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠ°ΡΠ°ΡΡΡΡ Terraform Π² ΡΠ΅Π»ΠΎΠΌ:
- ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ count ΠΈ for_each ΠΈΠΌΠ΅ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ;
- ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠΉ Ρ Π½ΡΠ»Π΅Π²ΡΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΏΡΠΎΡΡΠΎΡ;
- Π΄Π°ΠΆΠ΅ Ρ ΠΎΡΠΎΡΠΈΠΉ ΠΏΠ»Π°Π½ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π½Π΅ΡΠ΄Π°ΡΠ½ΡΠΌ;
- ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠ²ΠΎΠΈ ΠΏΠΎΠ΄Π²ΠΎΡ ΠΈ;
- ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½Π°Ρ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡΡ ΡΠΎΠ³Π»Π°ΡΡΠ΅ΡΡΡβ¦ Ρ ΠΎΡΠ»Π°Π³Π°ΡΠ΅Π»ΡΡΡΠ²ΠΎΠΌ.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ count ΠΈ for_each ΠΈΠΌΠ΅ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ
Π ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ ΡΡΠΎΠΉ Π³Π»Π°Π²Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ count ΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ for_each Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π² ΡΠΈΠΊΠ»Π°Ρ ΠΈ ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠ΅. ΠΠ½ΠΈ Ρ ΠΎΡΠΎΡΠΎ ΡΠ΅Π±Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ, Π½ΠΎ Ρ Π½ΠΈΡ Π΅ΡΡΡ Π΄Π²Π° Π²Π°ΠΆΠ½ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, ΠΎ ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°ΡΡ.
- Π count ΠΈ for_each Π½Π΅Π»ΡΠ·Ρ ΡΡΡΠ»Π°ΡΡΡΡ Π½ΠΈ Π½Π° ΠΊΠ°ΠΊΠΈΠ΅ Π²ΡΡ ΠΎΠ΄Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ΅ΡΡΡΡΠ°.
- count ΠΈ for_each Π½Π΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ.
Π count ΠΈ for_each Π½Π΅Π»ΡΠ·Ρ ΡΡΡΠ»Π°ΡΡΡΡ Π½ΠΈ Π½Π° ΠΊΠ°ΠΊΠΈΠ΅ Π²ΡΡ ΠΎΠ΄Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ΅ΡΡΡΡΠ°
ΠΡΠ΅Π΄ΡΡΠ°Π²ΡΡΠ΅, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² EC2 ΠΈ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΏΡΠΈΡΠΈΠ½Π΅ Π²Ρ Π½Π΅ Ρ ΠΎΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ASG. ΠΠ°Ρ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°ΠΊΠΈΠΌ:
resource "aws_instance" "example_1" {
count = 3
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
}
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΈΡ ΠΏΠΎ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ count ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΡΠΎΡ ΠΊΠΎΠ΄ Π·Π°ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌ: ΠΊΠΎΠ³Π΄Π° Π²Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ apply, ΠΎΠ½ ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ° EC2. ΠΠΎ Π΅ΡΠ»ΠΈ Π²Π°ΠΌ Π·Π°Ρ ΠΎΡΠ΅Π»ΠΎΡΡ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΡΠ΅ΡΠ²Π΅ΡΡ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·ΠΎΠ½Π΅ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΠΈ (Availability Zone ΠΈΠ»ΠΈ AZ) Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠ΅Π³ΠΈΠΎΠ½Π° AWS? ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π²Π°Ρ ΠΊΠΎΠ΄ Π·Π°Π³ΡΡΠ·ΠΈΠ» ΡΠΏΠΈΡΠΎΠΊ Π·ΠΎΠ½ ΠΈΠ· ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° Π΄Π°Π½Π½ΡΡ aws_availability_zones ΠΈ Π·Π°ΡΠ΅ΠΌ Β«ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΒ» ΠΏΡΠΎΡΠ΅Π»ΡΡ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ ΠΈ ΡΠΎΠ·Π΄Π°Π» Π² Π½Π΅ΠΉ ΡΠ΅ΡΠ²Π΅Ρ EC2, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ count ΠΈ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΌΠ°ΡΡΠΈΠ²Ρ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ:
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" {}
ΠΡΠΎΡ ΠΊΠΎΠ΄ ΡΠΎΠΆΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ count ΠΌΠΎΠΆΠ΅Ρ Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΈ Π΄Π°Π½Π½ΡΡ . ΠΠΎ ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ, Π΅ΡΠ»ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ, Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π²ΡΠ²ΠΎΠ΄Π° ΠΊΠ°ΠΊΠΎΠ³ΠΎ-ΡΠΎ ΡΠ΅ΡΡΡΡΠ°? Π§ΡΠΎΠ±Ρ ΡΡΠΎ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°ΡΡ, ΠΏΡΠΎΡΠ΅ Π²ΡΠ΅Π³ΠΎ Π²Π·ΡΡΡ ΡΠ΅ΡΡΡΡ random_integer, ΠΊΠΎΡΠΎΡΡΠΉ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ³Π°Π΄Π°ΡΡΡΡ ΠΏΠΎ Π½Π°Π·Π²Π°Π½ΠΈΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ:
resource "random_integer" "num_instances" {
min = 1
max = 3
}
ΠΡΠΎΡ ΠΊΠΎΠ΄ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΎΡ 1 Π΄ΠΎ 3. ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΡΡΠΎ ΡΠ»ΡΡΠΈΡΡΡ, Π΅ΡΠ»ΠΈ ΠΌΡ ΠΏΠΎΠΏΡΡΠ°Π΅ΠΌΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΠ²ΠΎΠ΄ result ΡΡΠΎΠ³ΠΎ ΡΠ΅ΡΡΡΡΠ° Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ count ΡΠ΅ΡΡΡΡΠ° aws_instance:
resource "aws_instance" "example_3" {
count = random_integer.num_instances.result
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
}
ΠΡΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° terraform plan, ΠΏΠΎΠ»ΡΡΠΈΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΠΎΡΠΈΠ±ΠΊΠ°:
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 ΡΡΠ΅Π±ΡΠ΅Ρ, ΡΡΠΎΠ±Ρ count ΠΈ for_each Π²ΡΡΠΈΡΠ»ΡΠ»ΠΈΡΡ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π΄ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ ΡΠ΅ΡΡΡΡΠΎΠ². ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ count ΠΈ for_each ΠΌΠΎΠ³ΡΡ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° Π»ΠΈΡΠ΅ΡΠ°Π»Ρ, ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΈ Π΄Π°Π½Π½ΡΡ ΠΈ Π΄Π°ΠΆΠ΅ ΡΠΏΠΈΡΠΊΠΈ ΡΠ΅ΡΡΡΡΠΎΠ² (ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠΈ, ΡΡΠΎ ΠΈΡ Π΄Π»ΠΈΠ½Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ), Π½ΠΎ Π½Π΅ Π½Π° Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌΡΠ΅ Π²ΡΡ ΠΎΠ΄Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ΅ΡΡΡΡΠ°.
count ΠΈ for_each Π½Π΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ
ΠΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡΠ΄Ρ Ρ Π²Π°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΠ²ΠΈΡΡΡΡ ΡΠΎΠ±Π»Π°Π·Π½ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ count Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ:
module "count_example" {
source = "../../../../modules/services/webserver-cluster"
count = 3
cluster_name = "terraform-up-and-running-example"
server_port = 8080
instance_type = "t2.micro"
}
ΠΡΠΎΡ ΠΊΠΎΠ΄ ΠΏΡΡΠ°Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ count Π²Π½ΡΡΡΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ, ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΠΈ ΠΊΠΎΠΏΠΈΠΈ ΡΠ΅ΡΡΡΡΠ° webserver-cluster. ΠΠ»ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ Π·Π°Ρ ΠΎΡΠ΅ΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ Π±ΡΠ»Π΅Π²Π° ΡΡΠ»ΠΎΠ²ΠΈΡ, ΠΏΡΠΈΡΠ²ΠΎΠΈΠ² Π΅Π³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ count Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 0. Π’Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ Π²ΠΏΠΎΠ»Π½Π΅ ΡΠ°Π·ΡΠΌΠ½ΠΎ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ terraform plan Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠ°ΠΊΡΡ ΠΎΡΠΈΠ±ΠΊΡ:
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 Π² ΡΠ΅ΡΡΡΡΠ΅ module Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ. Π‘ΠΎΠ³Π»Π°ΡΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠΊΠ°ΠΌ ΠΎ Π²ΡΠΏΡΡΠΊΠ΅ Terraform 0.12 (http://bit.ly/3257bv4) ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ HashiCorp ΠΏΠ»Π°Π½ΠΈΡΡΠ΅Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΡΠΈΡΠ°Π΅ΡΠ΅ ΡΡΡ ΠΊΠ½ΠΈΠ³Ρ, ΠΎΠ½Π° ΡΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½Π°. Π§ΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ Π½Π°Π²Π΅ΡΠ½ΡΠΊΠ°,
ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠΉ Ρ Π½ΡΠ»Π΅Π²ΡΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΏΡΠΎΡΡΠΎΡ
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠ° create_before_destroy Π² ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠΈ Ρ ASG ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ»ΠΈΡΠ½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π΄Π»Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠΉ Ρ Π½ΡΠ»Π΅Π²ΡΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΏΡΠΎΡΡΠΎΡ, Π΅ΡΠ»ΠΈ Π½Π΅ ΡΡΠΈΡΠ°ΡΡ ΠΎΠ΄ΠΈΠ½ Π½ΡΠ°Π½Ρ: ΠΏΡΠ°Π²ΠΈΠ»Π° Π°Π²ΡΠΎΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ. ΠΠ»ΠΈ, Π΅ΡΠ»ΠΈ Π±ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΡΠ½ΡΠΌ, ΡΡΠΎ ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ ASG ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΊ min_size ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠΈ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π° Π°Π²ΡΠΎΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ².
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠ΄ΡΠ»Ρ webserver-cluster ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΠ°ΡΡ ΡΠ΅ΡΡΡΡΠΎΠ² aws_autoscaling_schedule, ΠΊΠΎΡΠΎΡΡΠ΅ Π² 9 ΡΡΡΠ° ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ Ρ Π΄Π²ΡΡ Π΄ΠΎ Π΄Π΅ΡΡΡΠΈ. ΠΡΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅, ΡΠΊΠ°ΠΆΠ΅ΠΌ, Π² 11 ΡΡΡΠ°, Π½ΠΎΠ²Π°Ρ Π³ΡΡΠΏΠΏΠ° ASG Π·Π°Π³ΡΡΠ·ΠΈΡΡΡ Π½Π΅ Ρ Π΄Π΅ΡΡΡΡΡ, Π° Π²ΡΠ΅Π³ΠΎ Ρ Π΄Π²ΡΠΌΡ ΡΠ΅ΡΠ²Π΅ΡΠ°ΠΌΠΈ ΠΈ Π±ΡΠ΄Π΅Ρ ΠΎΡΡΠ°Π²Π°ΡΡΡΡ Π² ΡΠ°ΠΊΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π΄ΠΎ 9 ΡΡΡΠ° ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π΄Π½Ρ.
ΠΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΡΡΡΠΌΠΈ.
- ΠΠΎΠΌΠ΅Π½ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ recurrence Π² aws_autoscaling_schedule Ρ 0 9 * * * (Β«Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π² 9 ΡΡΡΠ°Β») Π½Π° ΡΡΠΎ-ΡΠΎ Π²ΡΠΎΠ΄Π΅ 0-59 9-17 * * * (Β«Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΡ ΠΌΠΈΠ½ΡΡΡ Ρ 9 ΡΡΡΠ° Π΄ΠΎ 5 Π²Π΅ΡΠ΅ΡΠ°Β»). ΠΡΠ»ΠΈ Π² ASG ΡΠΆΠ΅ Π΅ΡΡΡ Π΄Π΅ΡΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ², ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π° Π°Π²ΡΠΎΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ, ΡΡΠΎ Π½Π°ΠΌ ΠΈ Π½ΡΠΆΠ½ΠΎ. ΠΠΎ Π΅ΡΠ»ΠΈ Π³ΡΡΠΏΠΏΠ° ASG ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΠ° ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅Π΄Π°Π²Π½ΠΎ, ΡΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ ΡΠ΅ΡΠ΅Π· ΠΌΠΈΠ½ΡΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΅Π΅ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² Π΄ΠΎΡΡΠΈΠ³Π½Π΅Ρ Π΄Π΅ΡΡΡΠΈ. ΠΡΠΎ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΡΠ»Π΅Π³Π°Π½ΡΠ½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, ΠΈ Π±ΠΎΠ»ΡΡΠΈΠ΅ ΡΠΊΠ°ΡΠΊΠΈ Ρ Π΄Π΅ΡΡΡΠΈ Π΄ΠΎ Π΄Π²ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΡΠΎΠΆΠ΅ ΠΌΠΎΠ³ΡΡ Π²ΡΠ·Π²Π°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
- Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΡΠΊΡΠΈΠΏΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ API AWS Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π°ΠΊΡΠΈΠ²Π½ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² Π² ASG, Π²ΡΠ·Π²Π°ΡΡ Π΅Π³ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° Π΄Π°Π½Π½ΡΡ (ΡΠΌ. ΠΏΡΠ½ΠΊΡ Β«ΠΠ½Π΅ΡΠ½ΠΈΠΉ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ Π΄Π°Π½Π½ΡΡ Β» Π½Π° Ρ. 249) ΠΈ ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ desired_capacity Π³ΡΡΠΏΠΏΡ ASG Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Π½ΠΎΠ΅ ΡΡΠΈΠΌ ΡΠΊΡΠΈΠΏΡΠΎΠΌ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΊΠ°ΠΆΠ΄ΡΠΉ Π½ΠΎΠ²ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ASG Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ Ρ ΡΠΎΠΉ ΠΆΠ΅ Π΅ΠΌΠΊΠΎΡΡΡΡ, ΡΡΠΎ ΠΈ ΡΡΠ°Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π° Terraform ΠΈ ΡΡΠ»ΠΎΠΆΠ½ΡΠ΅Ρ Π΅Π³ΠΎ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠ΅.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π² ΠΈΠ΄Π΅Π°Π»Π΅ Π² Terraform Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠΉ Ρ Π½ΡΠ»Π΅Π²ΡΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΏΡΠΎΡΡΠΎΡ, Π½ΠΎ ΠΏΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π½Π° ΠΌΠ°ΠΉ 2019 Π³ΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° HashiCorp Π½Π΅ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π»Π° Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ (
ΠΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΉ ΠΏΠ»Π°Π½ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½
ΠΠ½ΠΎΠ³Π΄Π° ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ plan ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π²ΠΏΠΎΠ»Π½Π΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΉ ΠΏΠ»Π°Π½ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° apply Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ. ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅, ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ΅ΡΡΡΡ aws_iam_user Ρ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ IAM, ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π²Π°ΠΌΠΈ ΡΠ°Π½Π΅Π΅ Π² Π³Π»Π°Π²Π΅ 2:
resource "aws_iam_user" "existing_user" {
# ΠΠΎΠ΄ΡΡΠ°Π²ΡΡΠ΅ ΡΡΠ΄Π° ΠΈΠΌΡ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ IAM,
# ΡΡΠΎΠ±Ρ ΠΏΠΎΠΏΡΠ°ΠΊΡΠΈΠΊΠΎΠ²Π°ΡΡΡΡ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ terraform import
name = "yevgeniy.brikman"
}
Π’Π΅ΠΏΠ΅ΡΡ, Π΅ΡΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ plan, 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.
ΠΡΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ apply, ΠΏΠΎΠ»ΡΡΠΈΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΠΎΡΠΈΠ±ΠΊΠ°:
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 plan ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΡΠ΅ΡΡΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΊΠ°Π·Π°Π½Ρ Π² ΡΠ°ΠΉΠ»Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Terraform. ΠΡΠ»ΠΈ ΡΠ΅ΡΡΡΡΡ ΡΠΎΠ·Π΄Π°Π½Ρ ΠΊΠ°ΠΊΠΈΠΌ-ΡΠΎ Π΄ΡΡΠ³ΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΡΡΠ½ΡΡ, ΡΠ΅Π»ΡΠΊΠΎΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ AWS), ΠΎΠ½ΠΈ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄ΡΡ Π² ΡΠ°ΠΉΠ» ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Terraform Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΈΡ ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ plan. Π ΠΈΡΠΎΠ³Π΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΉ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π·Π³Π»ΡΠ΄ ΠΏΠ»Π°Π½ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ Π½Π΅ΡΠ΄Π°ΡΠ½ΡΠΌ.
ΠΠ· ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π²Π»Π΅ΡΡ Π΄Π²Π° ΡΡΠΎΠΊΠ°.
- ΠΡΠ»ΠΈ Π²Ρ ΡΠΆΠ΅ Π½Π°ΡΠ°Π»ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Terraform, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π½ΠΈΡΠ΅Π³ΠΎ Π΄ΡΡΠ³ΠΎΠ³ΠΎ. ΠΡΠ»ΠΈ ΡΠ°ΡΡΡ Π²Π°ΡΠ΅ΠΉ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Terraform, Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅Π»ΡΠ·Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π΅Π΅ Π²ΡΡΡΠ½ΡΡ. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²Ρ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΡΠΊΡΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΡΠ°Π½Π½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ Terraform, Π½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΡΠ²ΠΎΠ΄ΠΈΡΠ΅ Π½Π° Π½Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° IaC, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΡΠ½ΡΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π²Π°ΡΠ΅ΠΉ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ.
- ΠΡΠ»ΠΈ Ρ Π²Π°Ρ ΡΠΆΠ΅ Π΅ΡΡΡ ΠΊΠ°ΠΊΠ°Ρ-ΡΠΎ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ import. ΠΡΠ»ΠΈ Π²Ρ Π½Π°ΡΠΈΠ½Π°Π΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Terraform Ρ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠΎΠΉ, Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² ΡΠ°ΠΉΠ» ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ terraform import. Π’Π°ΠΊ Terraform Π±ΡΠ΄Π΅Ρ Π·Π½Π°ΡΡ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠΎΠΉ Π½ΡΠΆΠ½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ. ΠΠΎΠΌΠ°Π½Π΄Π° import ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°. ΠΠ΅ΡΠ²ΡΠΌ ΡΠ»ΡΠΆΠΈΡ Π°Π΄ΡΠ΅Ρ ΡΠ΅ΡΡΡΡΠ° Π² Π²Π°ΡΠΈΡ
ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ
ΡΠ°ΠΉΠ»Π°Ρ
. ΠΠ΄Π΅ΡΡ ΡΠΎΡ ΠΆΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ, ΡΡΠΎ ΠΈ Π² ΡΡΡΠ»ΠΊΠ°Ρ
Π½Π° ΡΠ΅ΡΡΡΡΡ: _. (Π²ΡΠΎΠ΄Π΅ aws_iam_user.existing_user). ΠΡΠΎΡΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ β ΡΡΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠ΅ΡΡΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π½ΡΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ID ΡΠ΅ΡΡΡΡΠ° aws_iam_user Π²ΡΡΡΡΠΏΠ°Π΅Ρ ΠΈΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, yevgeniy.brikman), Π° ID ΡΠ΅ΡΡΡΡΠ° aws_instance Π±ΡΠ΄Π΅Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΠ° EC2 (Π²ΡΠΎΠ΄Π΅ i-190e22e5). Π’ΠΎ, ΠΊΠ°ΠΊ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΡΡΡΡ, ΠΎΠ±ΡΡΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π²Π½ΠΈΠ·Ρ Π΅Π³ΠΎ ΡΡΡΠ°Π½ΠΈΡΡ.
ΠΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° import, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ°Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΡΡΡΡ 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. Π‘ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ plan Terraform Π±ΡΠ΄Π΅Ρ Π·Π½Π°ΡΡ, ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ IAM ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, ΠΈ Π½Π΅ ΡΡΠ°Π½Π΅Ρ ΠΏΡΡΠ°ΡΡΡΡ ΡΠΎΠ·Π΄Π°ΡΡ Π΅Π³ΠΎ Π΅ΡΠ΅ ΡΠ°Π·.
Π‘Π»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ, Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ ΡΠΆΠ΅ Π΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π² Terraform, ΡΡΡΠ½ΠΎΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΈ ΠΈΠΌΠΏΠΎΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ ΠΏΠΎ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Ρ Π»ΠΎΠΏΠΎΡΠ½ΡΠΌ Π·Π°Π½ΡΡΠΈΠ΅ΠΌ. ΠΠΎΡΡΠΎΠΌΡ ΡΡΠΎΠΈΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠ°ΠΊΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΊΠ°ΠΊ Terraforming (http://terraforming.dtan4.net/), ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ· ΡΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ AWS ΠΊΠΎΠ΄ ΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅.
Π Π΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠ²ΠΎΠΈ ΠΏΠΎΠ΄Π²ΠΎΡ ΠΈ
Π Π΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³ β ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½Π°Ρ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΌΠ΅Π½ΡΠ΅ΡΠ΅ Π²Π½ΡΡΡΠ΅Π½Π½ΡΡ ΡΡΡΡΠΊΡΡΡΡ ΠΊΠΎΠ΄Π°, ΠΎΡΡΠ°Π²Π»ΡΡ Π²Π½Π΅ΡΠ½Π΅Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ. ΠΡΠΎ Π½ΡΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌ, ΠΎΠΏΡΡΡΠ½ΡΠΌ ΠΈ ΠΏΡΠΎΡΡΡΠΌ Π² ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠΈ. Π Π΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³ β ΡΡΠΎ Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌΠ°Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΠ°, ΠΊΠΎΡΠΎΡΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ. ΠΠΎ, ΠΊΠΎΠ³Π΄Π° ΡΠ΅ΡΡ ΠΈΠ΄Π΅Ρ ΠΎ Terraform ΠΈΠ»ΠΈ Π»ΡΠ±ΠΎΠΌ Π΄ΡΡΠ³ΠΎΠΌ ΡΡΠ΅Π΄ΡΡΠ²Π΅ IaC, ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΊΡΠ°ΠΉΠ½Π΅ ΠΎΡΡΠΎΡΠΎΠΆΠ½ΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΡΡΡ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ ΠΈΠΌΠ΅Π΅ΡΡΡ Π² Π²ΠΈΠ΄Ρ ΠΏΠΎΠ΄ Β«Π²Π½Π΅ΡΠ½ΠΈΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌΒ» ΡΡΠ°ΡΡΠΊΠ° ΠΊΠΎΠ΄Π°, ΠΈΠ½Π°ΡΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡ Π½Π΅ΠΏΡΠ΅Π΄Π²ΠΈΠ΄Π΅Π½Π½ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΉ Π²ΠΈΠ΄ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³Π° β Π·Π°ΠΌΠ΅Π½Π° Π½Π°Π·Π²Π°Π½ΠΈΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌΠΈ. ΠΠ½ΠΎΠ³ΠΈΠ΅ IDE ΠΈΠΌΠ΅ΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³Π° ΠΈ ΠΌΠΎΠ³ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ Π²ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°. Π ΡΠ·ΡΠΊΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠΎ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½Π°Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Π·Π°Π΄ΡΠΌΡΠ²Π°ΡΡΡΡ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² Terraform Ρ ΡΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π±ΡΡΡ ΠΊΡΠ°ΠΉΠ½Π΅ ΠΎΡΡΠΎΡΠΎΠΆΠ½ΡΠΌΠΈ, ΠΈΠ½Π°ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΎΠ»ΠΊΠ½ΡΡΡΡΡ Ρ ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠΌΠΈ Π² ΡΠ°Π±ΠΎΡΠ΅.
Π ΠΏΡΠΈΠΌΠ΅ΡΡ, Ρ ΠΌΠΎΠ΄ΡΠ»Ρ webserver-cluster Π΅ΡΡΡ Π²Ρ ΠΎΠ΄Π½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ cluster_name:
variable "cluster_name" { description = "The name to use for all the cluster resources" type = string }
ΠΡΠ΅Π΄ΡΡΠ°Π²ΡΡΠ΅, ΡΡΠΎ Π²Ρ Π½Π°ΡΠ°Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π΄Π»Ρ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ° Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ foo. ΠΠΎΠ·ΠΆΠ΅ Π²Π°ΠΌ Π·Π°Ρ ΠΎΡΠ΅Π»ΠΎΡΡ ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΉ ΡΠ΅ΡΠ²ΠΈΡ Π² bar. ΠΡΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΠΌ, Π½ΠΎ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΡΡΠΈ ΠΈΠ·-Π·Π° Π½Π΅Π³ΠΎ ΠΌΠΎΠ³ΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΠΏΠ΅ΡΠ΅Π±ΠΎΠΈ Π² ΡΠ°Π±ΠΎΡΠ΅.
ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ webserver-cluster ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ cluster_name Π² ΡΠ΅Π»ΠΎΠΌ ΡΡΠ΄Π΅ ΡΠ΅ΡΡΡΡΠΎΠ², Π²ΠΊΠ»ΡΡΠ°Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ 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] }
ΠΡΠ»ΠΈ ΠΏΠΎΠΌΠ΅Π½ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ name Π² ΠΊΠ°ΠΊΠΎΠΌ-ΡΠΎ ΡΠ΅ΡΡΡΡΠ΅, Terraform ΡΠ΄Π°Π»ΠΈΡ ΡΡΠ°ΡΡΡ Π²Π΅ΡΡΠΈΡ ΡΡΠΎΠ³ΠΎ ΡΠ΅ΡΡΡΡΠ° ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ Π²ΠΌΠ΅ΡΡΠΎ Π½Π΅Π³ΠΎ Π½ΠΎΠ²ΡΡ. ΠΠΎ Π΅ΡΠ»ΠΈ ΡΠ°ΠΊΠΈΠΌ ΡΠ΅ΡΡΡΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ALB, Π² ΠΏΠ΅ΡΠΈΠΎΠ΄ ΠΌΠ΅ΠΆΠ΄Ρ Π΅Π³ΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠΎΠΉ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Ρ Π²Π°Ρ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΡΠ°ΡΠΈΠΊΠ° ΠΊ Π²Π°ΡΠ΅ΠΌΡ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΡ. Π’ΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, Π΅ΡΠ»ΠΈ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ Π³ΡΡΠΏΠΏΠ° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ, Π²Π°ΡΠΈ ΡΠ΅ΡΠ²Π΅ΡΡ Π½Π°ΡΠ½ΡΡ ΠΎΡΠΊΠ»ΠΎΠ½ΡΡΡ Π»ΡΠ±ΠΎΠΉ ΡΠ΅ΡΠ΅Π²ΠΎΠΉ ΡΡΠ°ΡΠΈΠΊ, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½Π° Π½ΠΎΠ²Π°Ρ Π³ΡΡΠΏΠΏΠ°.
ΠΡΠ΅ ΠΎΠ΄Π½ΠΈΠΌ Π²ΠΈΠ΄ΠΎΠΌ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³Π°, ΠΊΠΎΡΠΎΡΡΠΉ Π²Π°Ρ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°ΡΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° Terraform. ΠΠΎΠ·ΡΠΌΠ΅ΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΠ΅ΡΡΡΡ aws_security_group Π² ΠΌΠΎΠ΄ΡΠ»Π΅ webserver-cluster:
resource "aws_security_group" "instance" { # (...) }
ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΡΠΎΠ³ΠΎ ΡΠ΅ΡΡΡΡΠ° Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ instance. ΠΡΠ΅Π΄ΡΡΠ°Π²ΡΡΠ΅, ΡΡΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³Π° Π²Ρ ΡΠ΅ΡΠΈΠ»ΠΈ ΠΏΠΎΠΌΠ΅Π½ΡΡΡ Π΅Π³ΠΎ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ½ΡΡΠ½ΠΎΠ΅ (ΠΏΠΎ Π²Π°ΡΠ΅ΠΌΡ ΠΌΠ½Π΅Π½ΠΈΡ) ΠΈΠΌΡ cluster_instance:
resource "aws_security_group" "cluster_instance" { # (...) }
Π§ΡΠΎ Π² ΠΈΡΠΎΠ³Π΅ ΡΠ»ΡΡΠΈΡΡΡ? ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ: ΠΏΠ΅ΡΠ΅Π±ΠΎΠΉ Π² ΡΠ°Π±ΠΎΡΠ΅.
Terraform ΡΠ²ΡΠ·ΡΠ²Π°Π΅Ρ ID ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ΅ΡΡΡΡΠ° Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ ΠΎΠ±Π»Π°ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, iam_user ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΊ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ IAM Π² AWS, Π° aws_instance β ΠΊ ID ΡΠ΅ΡΠ²Π΅ΡΠ° AWS EC2. ΠΡΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠ΅ΡΡΡΡΠ° (ΡΠΊΠ°ΠΆΠ΅ΠΌ, Ρ instance Π½Π° cluster_instance, ΠΊΠ°ΠΊ Π² ΡΠ»ΡΡΠ°Π΅ Ρ aws_security_group), Π΄Π»Ρ Terraform ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ, Π±ΡΠ΄ΡΠΎ Π²Ρ ΡΠ΄Π°Π»ΠΈΠ»ΠΈ ΡΡΠ°ΡΡΠΉ ΡΠ΅ΡΡΡΡ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π½ΠΎΠ²ΡΠΉ. ΠΡΠ»ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΡΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, Terraform ΡΠ΄Π°Π»ΠΈΡ ΡΡΠ°ΡΡΡ Π³ΡΡΠΏΠΏΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ Π΄ΡΡΠ³ΡΡ, Π° ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅ΠΌ Π²Π°ΡΠΈ ΡΠ΅ΡΠ²Π΅ΡΡ Π½Π°ΡΠ½ΡΡ ΠΎΡΠΊΠ»ΠΎΠ½ΡΡΡ Π»ΡΠ±ΠΎΠΉ ΡΠ΅ΡΠ΅Π²ΠΎΠΉ ΡΡΠ°ΡΠΈΠΊ.
ΠΠΎΡ ΡΠ΅ΡΡΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΡΠΎΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠ·Π²Π»Π΅ΡΡ ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ.
- ΠΡΠ΅Π³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ plan. ΠΡ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΠ²ΠΈΡΡ Π²ΡΠ΅ ΡΡΠΈ Π·Π°Π³Π²ΠΎΠ·Π΄ΠΊΠΈ. Π’ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΠΉΡΠ΅ Π΅Π΅ Π²ΡΠ²ΠΎΠ΄ ΠΈ ΠΎΠ±ΡΠ°ΡΠ°ΠΉΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° Terraform ΠΏΠ»Π°Π½ΠΈΡΡΠ΅Ρ ΡΠ΄Π°Π»ΠΈΡΡ ΡΠ΅ΡΡΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, ΡΠ΄Π°Π»ΡΡΡ Π½Π΅ ΡΡΠΎΠΈΡ.
- Π‘ΠΎΠ·Π΄Π°Π²Π°ΠΉΡΠ΅, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΡΠ΄Π°Π»ΡΡΡ. ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΡΠ΅ΡΡΡΡ, Ρ ΠΎΡΠΎΡΠ΅Π½ΡΠΊΠΎ ΠΏΠΎΠ΄ΡΠΌΠ°ΠΉΡΠ΅, Π½ΡΠΆΠ½ΠΎ Π»ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π·Π°ΠΌΠ΅Π½Ρ Π΄ΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π°. ΠΡΠ»ΠΈ ΠΎΡΠ²Π΅Ρ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠΉ, Π² ΡΡΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ create_before_destroy. Π’ΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡΡΡΡ Π²ΡΡΡΠ½ΡΡ, Π²ΡΠΏΠΎΠ»Π½ΠΈΠ² Π΄Π²Π° ΡΠ°Π³Π°: ΡΠ½Π°ΡΠ°Π»Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½ΠΎΠ²ΡΠΉ ΡΠ΅ΡΡΡΡ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ apply, Π° Π·Π°ΡΠ΅ΠΌ ΡΠ΄Π°Π»ΠΈΡΡ ΠΈΠ· ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΡΠ°ΡΡΠΉ ΡΠ΅ΡΡΡΡ ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ apply Π΅ΡΠ΅ ΡΠ°Π·.
- ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² ΡΡΠ΅Π±ΡΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ. ΠΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠΌΠ΅Π½ΡΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ Ρ ΡΠ΅ΡΡΡΡΠΎΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°ΡΡ aws_security_group Ρ instance Π½Π° cluster_instance), ΠΈΠ·Π±Π΅Π³Π°Ρ ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠ΅ΡΡΡΡΠ° ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π΅Π³ΠΎ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΡΠ°ΠΉΠ» ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Terraform. ΠΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π΄Π΅Π»Π°ΠΉΡΠ΅ ΡΡΠΎΠ³ΠΎ Π²ΡΡΡΠ½ΡΡ β ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ terraform state. ΠΡΠΈ ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ 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 plan Π½Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π·Π½Π°ΡΠΈΡ, Π²Ρ Π²ΡΠ΅ ΡΠ΄Π΅Π»Π°Π»ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ.
- ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π½Π΅Π»ΡΠ·Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ΅ΡΡΡΡΠΎΠ² Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅. ΠΡΠ»ΠΈ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ, Terraform ΡΠ΄Π°Π»ΠΈΡ ΡΡΠ°ΡΡΠΉ ΡΠ΅ΡΡΡΡ ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ Π²ΠΌΠ΅ΡΡΠΎ Π½Π΅Π³ΠΎ Π½ΠΎΠ²ΡΠΉ. ΠΠ° ΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ΅ΡΡΡΡΠ° ΠΎΠ±ΡΡΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅ Π·Π°Π±ΡΠ²Π°ΠΉΡΠ΅ ΡΠ²Π΅ΡΡΡΡΡΡ Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅ΠΉ. ΠΡΠ΅Π³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ plan ΠΈ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΠΉΡΠ΅ ΡΠ΅Π»Π΅ΡΠΎΠΎΠ±ΡΠ°Π·Π½ΠΎΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ create_before_destroy.
ΠΡΠ»ΠΎΠΆΠ΅Π½Π½Π°Ρ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡΡ ΡΠΎΠ³Π»Π°ΡΡΠ΅ΡΡΡβ¦ Ρ ΠΎΡΠ»Π°Π³Π°ΡΠ΅Π»ΡΡΡΠ²ΠΎΠΌ
API Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ±Π»Π°ΡΠ½ΡΡ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠΎΠ², ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ AWS, Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ ΠΈ ΠΈΠΌΠ΅ΡΡ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΡ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡΡ. ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΡΡΡ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°Π·Ρ ΠΆΠ΅ Π²Π΅ΡΠ½ΡΡΡ ΠΎΡΠ²Π΅Ρ, Π½Π΅ Π΄ΠΎΠΆΠΈΠ΄Π°ΡΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ. ΠΡΠ»ΠΎΠΆΠ΅Π½Π½Π°Ρ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡΡ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ Π΄Π»Ρ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΠΎ Π²ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ Π²ΡΠ΅ΠΌΡ; ΠΏΠΎΠΊΠ° ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, Π²Π°ΡΠΈ ΠΎΡΠ²Π΅ΡΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π½Π΅ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΈ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠ°Ρ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ° ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° Π΄Π°Π½Π½ΡΡ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π½Π° Π²Π°ΡΠΈ 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
ΠΠ½ΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π²Ρ ΡΠΎΠ·Π΄Π°Π΅ΡΠ΅ ΡΠ΅ΡΡΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠ΄ΡΠ΅ΡΡ) ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎ Π½Π΅ΠΌ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ (Π²ΡΠΎΠ΄Π΅ ID ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄ΡΠ΅ΡΠΈ), Π° Terraform Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡ Π½Π°ΠΉΡΠΈ. ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΈΠ· ΡΠ°ΠΊΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ (Π²ΠΊΠ»ΡΡΠ°Ρ 6813) ΡΠΆΠ΅ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½Ρ, Π½ΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΠ½ΠΈ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΏΡΠΎΡΠ²Π»ΡΡΡΡΡ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΊΠΎΠ³Π΄Π° Π² Terraform Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΡΠ΅ΡΡΡΡΠΎΠ². ΠΡΠΎ ΡΠ°Π·Π΄ΡΠ°ΠΆΠ°Π΅Ρ, Π½ΠΎ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² Π½Π΅ Π½Π΅ΡΠ΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π²ΡΠ΅Π΄Π°. ΠΡΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ terraform apply Π²ΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π·Π°ΡΠ°Π±ΠΎΡΠ°ΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΊ ΡΡΠΎΠΌΡ ΠΌΠΎΠΌΠ΅Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠΆΠ΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΠΈΡΡΡ ΠΏΠΎ ΡΠΈΡΡΠ΅ΠΌΠ΅.
ΠΠ°Π½Π½ΡΠΉ ΠΎΡΡΡΠ²ΠΎΠΊ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΠΈΠ· ΠΊΠ½ΠΈΠ³ΠΈ ΠΠ²Π³Π΅Π½ΠΈΡ ΠΡΠΈΠΊΠΌΠ°Π½Π°
Β«Terraform: ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΊΠΎΠ΄Π°Β» .
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com