рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдиреБрдХрд╕рд╛рди

рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдиреБрдХрд╕рд╛рди
рдЖрдЗрдП рдХреБрдЫ рдХрдорд┐рдпреЛрдВ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓реЗрдВ, рдЬрд┐рдирдореЗрдВ рд▓реВрдк, рдЗрдл рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдФрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рддрдХрдиреАрдХреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд, рд╕рд╛рде рд╣реА рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдореБрджреНрджреЗ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

  • рдЧрд┐рдирддреА рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рд╕реАрдорд╛рдПрдВ рд╣реИрдВ;
  • рд╢реВрдиреНрдп рдбрд╛рдЙрдирдЯрд╛рдЗрдо рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд╕реАрдорд┐рдд рдХрд░реЗрдВ;
  • рдПрдХ рдЕрдЪреНрдЫреА рдпреЛрдЬрдирд╛ рднреА рд╡рд┐рдлрд▓ рд╣реЛ рд╕рдХрддреА рд╣реИ;
  • рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рдЕрдкрдиреЗ рдиреБрдХрд╕рд╛рди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ;
  • рдЖрд╕реНрдердЧрд┐рдд рд╕реБрд╕рдВрдЧрддрд┐ рд╕реБрд╕рдВрдЧрдд рд╣реИ... рд╕реНрдердЧрди рдХреЗ рд╕рд╛рдеред

рдЧрд┐рдирддреА рдФрд░ for_each рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рд╕реАрдорд╛рдПрдБ рд╣реИрдВ

рдЗрд╕ рдЕрдзреНрдпрд╛рдп рдХреЗ рдЙрджрд╛рд╣рд░рдг рд▓реВрдк рдФрд░ рд╕рд╢рд░реНрдд рддрд░реНрдХ рдореЗрдВ рдЧрд┐рдирддреА рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ for_each рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рд╡реНрдпрд╛рдкрдХ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╡реЗ рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХреА рджреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реАрдорд╛рдПрдБ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреЛ рдЕрд╡рдЧрдд рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

  • рдЧрд┐рдирддреА рдФрд░ for_each рдХрд┐рд╕реА рднреА рд╕рдВрд╕рд╛рдзрди рдЖрдЙрдЯрдкреБрдЯ рдЪрд░ рдХрд╛ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗред
  • рдореЙрдбреНрдпреВрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЧрд┐рдирддреА рдФрд░ for_each рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

count рдФрд░ for_each рдХрд┐рд╕реА рднреА рд╕рдВрд╕рд╛рдзрди рдЖрдЙрдЯрдкреБрдЯ рдЪрд░ рдХрд╛ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗ

рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдХрдИ EC2 рд╕рд░реНрд╡рд░ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЖрдк ASG рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЖрдкрдХрд╛ рдХреЛрдб рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

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

рдЖрдЗрдП рдЙрди рдкрд░ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдирдЬрд░ рдбрд╛рд▓реЗрдВред

рдЪреВрдВрдХрд┐ рдЧрд┐рдирддреА рдкреИрд░рд╛рдореАрдЯрд░ рдПрдХ рд╕реНрдерд┐рд░ рдорд╛рди рдкрд░ рд╕реЗрдЯ рд╣реИ, рдпрд╣ рдХреЛрдб рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛: рдЬрдм рдЖрдк рд▓рд╛рдЧреВ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВрдЧреЗ, рддреЛ рдпрд╣ рддреАрди EC2 рд╕рд░реНрд╡рд░ рдмрдирд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рд╡рд░реНрддрдорд╛рди AWS рдХреНрд╖реЗрддреНрд░ рдХреЗ рднреАрддрд░ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреНрд╖реЗрддреНрд░ (AZ) рдореЗрдВ рдПрдХ рд╕рд░реНрд╡рд░ рддреИрдирд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдЖрдк рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ aws_available_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.

рдЯреЗрд░рд╛рдлрд╝реЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рд╕рдВрд╕рд╛рдзрди рдХреЛ рдмрдирд╛рдиреЗ рдпрд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдирд┐рдпреЛрдЬрди рдЪрд░рдг рдХреЗ рджреМрд░рд╛рди рдЧрд┐рдирддреА рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рдХреА рдЬрд╛рдПред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЧрд┐рдирддреА рдФрд░ for_each рд╢рд╛рдмреНрджрд┐рдХ, рдЪрд░, рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рд╕рдВрд╕рд╛рдзрди рд╕реВрдЪрд┐рдпреЛрдВ (рдЬрдм рддрдХ рдЙрдирдХреА рд▓рдВрдмрд╛рдИ рд╢реЗрдбреНрдпреВрд▓рд┐рдВрдЧ рд╕рдордп рдкрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ) рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЧрдгрдирд╛ рдХрд┐рдП рдЧрдП рд╕рдВрд╕рд╛рдзрди рдЖрдЙрдЯрдкреБрдЯ рдЪрд░ рдХреЛ рдирд╣реАрдВред

рдореЙрдбреНрдпреВрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЧрд┐рдирддреА рдФрд░ 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"
}

рдпрд╣ рдХреЛрдб рд╡реЗрдмрд╕рд░реНрд╡рд░-рдХреНрд▓рд╕реНрдЯрд░ рд╕рдВрд╕рд╛рдзрди рдХреА рддреАрди рдкреНрд░рддрд┐рдпрд╛рдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрдВрджрд░ рдЧрд┐рдирддреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рд╕реА рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЙрд╕рдХреЗ рдЧрд┐рдирддреА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ 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.

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЯреЗрд░рд╛рдлреЙрд░реНрдо 0.12.6 рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдореЙрдбреНрдпреВрд▓ рд╕рдВрд╕рд╛рдзрди рдореЗрдВ рдЧрд┐рдирддреА рдпрд╛ for_each рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред рдЯреЗрд░рд╛рдлрд╝реЙрд░реНрдо 0.12 рд░рд┐рд▓реАрдЬрд╝ рдиреЛрдЯреНрд╕ (http://bit.ly/3257bv4) рдХреЗ рдЕрдиреБрд╕рд╛рд░, HashiCorp рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕ рдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдЖрдк рдЗрд╕ рдкреБрд╕реНрддрдХ рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ рддреЛ рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрд▓рдмреНрдз рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдЪреЗрдВрдЬрд▓реЙрдЧ рдпрд╣рд╛рдВ рдкрдврд╝реЗрдВ.

рд╢реВрдиреНрдп рдбрд╛рдЙрдирдЯрд╛рдЗрдо рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреА рд╕реАрдорд╛рдПрдБ

ASG рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ create_before_destroy рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реВрдиреНрдп-рдбрд╛рдЙрдирдЯрд╛рдЗрдо рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдврд╝рд┐рдпрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ, рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдЫреЛрдбрд╝рдХрд░: рдСрдЯреЛрд╕реНрдХреЗрд▓рд┐рдВрдЧ рдирд┐рдпрдо рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВред рдпрд╛ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдкрд░ ASG рдЖрдХрд╛рд░ рдХреЛ рд╡рд╛рдкрд╕ min_size рдкрд░ рд░реАрд╕реЗрдЯ рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдпрджрд┐ рдЖрдк рдЪрд▓ рд░рд╣реЗ рд╕рд░реНрд╡рд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдЯреЛрд╕реНрдХреЗрд▓рд┐рдВрдЧ рдирд┐рдпрдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рдереЗред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реЗрдмрд╕рд░реНрд╡рд░-рдХреНрд▓рд╕реНрдЯрд░ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ aws_autoscaleing_schedule рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рд╣реЛрддреА рд╣реИ, рдЬреЛ рд╕реБрдмрд╣ 9 рдмрдЬреЗ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╕рд░реНрд╡рд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рджреЛ рд╕реЗ рдмрдврд╝рд╛рдХрд░ рджрд╕ рдХрд░ рджреЗрддреА рд╣реИред рдпрджрд┐ рдЖрдк рд╕реБрдмрд╣ 11 рдмрдЬреЗ рддреИрдирд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдирдпрд╛ рдПрдПрд╕рдЬреА рджрд╕ рдХреЗ рдмрдЬрд╛рдп рд╕рд┐рд░реНрдл рджреЛ рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рд╕рд╛рде рдмреВрдЯ рд╣реЛрдЧрд╛ рдФрд░ рдЕрдЧрд▓реЗ рджрд┐рди рд╕реБрдмрд╣ 9 рдмрдЬреЗ рддрдХ рдЙрд╕реА рддрд░рд╣ рд░рд╣реЗрдЧрд╛ред

рдЗрд╕ рд╕реАрдорд╛ рдХреЛ рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рдЯрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

  • aws_autoscaleing_schedule рдореЗрдВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ 0 9 * * * ("рд╕реБрдмрд╣ 9 рдмрдЬреЗ рдЪрд▓рд╛рдПрдВ") рд╕реЗ 0-59 9-17 * * * ("рд╕реБрдмрд╣ 9 рдмрдЬреЗ рд╕реЗ рд╢рд╛рдо 5 рдмрдЬреЗ рддрдХ рд╣рд░ рдорд┐рдирдЯ рдЪрд▓рд╛рдПрдВ") рдореЗрдВ рдмрджрд▓реЗрдВред рдпрджрд┐ рдПрдПрд╕рдЬреА рдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджрд╕ рд╕рд░реНрд╡рд░ рд╣реИрдВ, рддреЛ рдЗрд╕ рдСрдЯреЛрд╕реНрдХреЗрд▓рд┐рдВрдЧ рдирд┐рдпрдо рдХреЛ рджреЛрдмрд╛рд░рд╛ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛, рдЬреЛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрджрд┐ рдПрдПрд╕рдЬреА рдХреЛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдирд┐рдпрдо рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдЕрдзрд┐рдХрддрдо рдПрдХ рдорд┐рдирдЯ рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд░реНрд╡рд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рджрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рдПрдЧреАред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рджреГрд╖реНрдЯрд┐рдХреЛрдг рдирд╣реАрдВ рд╣реИ, рдФрд░ рджрд╕ рд╕реЗ рджреЛ рд╕рд░реНрд╡рд░ рдФрд░ рдкреАрдЫреЗ рдХреА рдмрдбрд╝реА рдЫрд▓рд╛рдВрдЧ рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░ рд╕рдХрддреА рд╣реИред
  • рдПрдХ рдХрд╕реНрдЯрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдПрдВ рдЬреЛ рдПрдПрд╕рдЬреА рдореЗрдВ рд╕рдХреНрд░рд┐рдп рд╕рд░реНрд╡рд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рдЗрд╕реЗ рдмрд╛рд╣рд░реА рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрд▓ рдХрд░реЗрдВ (рдкреГрд╖реНрда 249 рдкрд░ "рдмрд╛рд╣рд░реА рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд" рджреЗрдЦреЗрдВ), рдФрд░ рдПрдПрд╕рдЬреА рдХреЗ рд╡рд╛рдВрдЫрд┐рдд_рдХреНрд╖рдорддрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рджрд┐рдП рдЧрдП рдорд╛рди рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ рд▓рд┐рдкрд┐ред рдЗрд╕ рддрд░рд╣, рдкреНрд░рддреНрдпреЗрдХ рдирдпрд╛ рдПрдПрд╕рдЬреА рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╣рдореЗрд╢рд╛ рдореМрдЬреВрджрд╛ рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдХреЛрдб рдХреА рд╕рдорд╛рди рдХреНрд╖рдорддрд╛ рдкрд░ рдЪрд▓реЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдмреЗрд╢рдХ, рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдореЗрдВ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд╢реВрдиреНрдп-рдбрд╛рдЙрдирдЯрд╛рдЗрдо рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдорд░реНрдерди рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдордИ 2019 рддрдХ, рд╣рд╛рд╢реАрдХреЙрд░реНрдк рдЯреАрдо рдХреА рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрдИ рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдереА (рд╡рд┐рд╡рд░рдг - рдпрд╣рд╛рдБ).

рд╕рд╣реА рдпреЛрдЬрдирд╛ рдЕрд╕рдлрд▓ рд░реВрдк рд╕реЗ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИ

рдХрднреА-рдХрднреА рдкреНрд▓рд╛рди рдХрдорд╛рдВрдб рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдпреЛрдЬрдирд╛ рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдкреНрд▓рд╛рдИ рдХрдорд╛рдВрдб рдПрдХ рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, aws_iam_user рд╕рдВрд╕рд╛рдзрди рдХреЛ рдЙрд╕реА рдирд╛рдо рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рдЕрдзреНрдпрд╛рдп 2 рдореЗрдВ рдмрдирд╛рдП рдЧрдП IAM рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдерд╛:

resource "aws_iam_user" "existing_user" {
   # ╨Я╨╛╨┤╤Б╤В╨░╨▓╤М╤В╨╡ ╤Б╤О╨┤╨░ ╨╕╨╝╤П ╤Г╨╢╨╡ ╤Б╤Г╤Й╨╡╤Б╤В╨▓╤Г╤О╤Й╨╡╨│╨╛ ╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╤В╨╡╨╗╤П IAM,
   # ╤З╤В╨╛╨▒╤Л ╨┐╨╛╨┐╤А╨░╨║╤В╨╕╨║╨╛╨▓╨░╤В╤М╤Б╤П ╨▓ ╨╕╤Б╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╨╜╨╕╨╕ ╨║╨╛╨╝╨░╨╜╨┤╤Л terraform import
   name = "yevgeniy.brikman"
}

рдЕрдм, рдпрджрд┐ рдЖрдк рдпреЛрдЬрдирд╛ рдХрдорд╛рдВрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдПрдХ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрдЪрд┐рдд рддреИрдирд╛рддреА рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧрд╛:

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 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде, рдмрд▓реНрдХрд┐ рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рд╕рдВрд╕рд╛рдзрди рдХреЗ рд╕рд╛рде рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдиреЗ рдЗрд╕ рд╕рдВрд╕рд╛рдзрди рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдпрд╛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рд╣реЛ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ, рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реА рдЖрдИрдбреА рд╕реЗ рдЯрдХрд░рд╛рд╡ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЗ рдХрдИ рд░реВрдк рд╣реИрдВ рдЬреЛ рдЕрдХреНрд╕рд░ рдЯреЗрд░рд╛рдлрд╝реЙрд░реНрдо рдореЗрдВ рдирдП рд▓реЛрдЧреЛрдВ рдХреЛ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд░ рджреЗрддреЗ рд╣реИрдВред

рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдкреНрд▓рд╛рди рдХрдорд╛рдВрдб рдХреЗрд╡рд▓ рдЙрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ рдЬреЛ рдЯреЗрд░рд╛рдлреЙрд░реНрдо рд░рд╛рдЬреНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИрдВред рдпрджрд┐ рд╕рдВрд╕рд╛рдзрди рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ AWS рдХрдВрд╕реЛрд▓ рдореЗрдВ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ), рддреЛ рд╡реЗ рд░рд╛рдЬреНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ рдФрд░ рдЗрд╕рд▓рд┐рдП рдкреНрд▓рд╛рди рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдЙрдиреНрд╣реЗрдВ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦреЗрдЧрд╛ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рд╕рд╣реА рд▓рдЧрдиреЗ рд╡рд╛рд▓реА рдпреЛрдЬрдирд╛ рдЕрд╕рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧреАред

рдЗрд╕рд╕реЗ рджреЛ рд╕рдмрдХ рд╕реАрдЦрдиреЗ рдХреЛ рдорд┐рд▓рддреЗ рд╣реИрдВред

  • рдпрджрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЯреЗрд░рд╛рдлрд╝реЙрд░реНрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рддреЛ рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХрд╛ рдХреБрдЫ рд╣рд┐рд╕реНрд╕рд╛ рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдЕрдм рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдиреНрдпрдерд╛, рдЖрдк рди рдХреЗрд╡рд▓ рдЕрдЬреАрдм рдЯреЗрд░рд╛рдлреЙрд░реНрдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдЬреЛрдЦрд┐рдо рдЙрдард╛рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЖрдк IaC рдХреЗ рдХрдИ рд▓рд╛рднреЛрдВ рдХреЛ рднреА рдирдХрд╛рд░ рджреЗрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдЕрдм рдЖрдкрдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХрд╛ рд╕рдЯреАрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
  • рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪрд╛ рд╣реИ, рддреЛ рдЖрдпрд╛рдд рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк рдореМрдЬреВрджрд╛ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдЖрдпрд╛рдд рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рд░рд╛рдЬреНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдХреЛ рдкрддрд╛ рдЪрд▓ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдХрд┐рд╕ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдпрд╛рдд рдЖрджреЗрд╢ рджреЛ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИред рдкрд╣рд▓рд╛ рдЖрдкрдХреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рдВрд╕рд╛рдзрди рдкрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рдВрд╕рд╛рдзрди рд▓рд┐рдВрдХ рдХреЗ рд╕рдорд╛рди рд╣реА рд╣реИ: _ред (рдЬреИрд╕реЗ aws_iam_user.рдореМрдЬреВрджрд╛_user)ред рджреВрд╕рд░рд╛ рддрд░реНрдХ рдЖрдпрд╛рдд рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрд╕рд╛рдзрди рдХреА рдЖрдИрдбреА рд╣реИред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╕рдВрд╕рд╛рдзрди рдЖрдИрдбреА aws_iam_user рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, yevgeniy.brikman), рдФрд░ рд╕рдВрд╕рд╛рдзрди рдЖрдИрдбреА aws_instance EC2 рд╕рд░реНрд╡рд░ рдЖрдИрдбреА рд╣реИ (рдЬреИрд╕реЗ i-190e22e5)ред рдХрд┐рд╕реА рд╕рдВрд╕рд╛рдзрди рдХреЛ рдХреИрд╕реЗ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдЙрд╕рдХреЗ рдкреГрд╖реНрда рдХреЗ рдиреАрдЪреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

    рдиреАрдЪреЗ рдПрдХ рдЖрдпрд╛рдд рдХрдорд╛рдВрдб рд╣реИ рдЬреЛ aws_iam_user рд╕рдВрд╕рд╛рдзрди рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдЕрдзреНрдпрд╛рдп 2 рдореЗрдВ IAM рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЬреЛрдбрд╝рд╛ рд╣реИ (рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ yevgeniy.brikman рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдирд╛рдо рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реБрдП):

    $ terraform import aws_iam_user.existing_user yevgeniy.brikman

    рдЯреЗрд░рд╛рдлрд╝реЙрд░реНрдо рдЖрдкрдХреЗ IAM рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдвреВрдВрдврдиреЗ рдХреЗ рд▓рд┐рдП AWS API рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ рдФрд░ рдЙрд╕рдХреЗ рдФрд░ рдЖрдкрдХреЗ рдЯреЗрд░рд╛рдлрд╝реЙрд░реНрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ aws_iam_user.рдореМрдЬреВрджрд╛_user рд╕рдВрд╕рд╛рдзрди рдХреЗ рдмреАрдЪ рдПрдХ рд░рд╛рдЬреНрдп рдлрд╝рд╛рдЗрд▓ рдПрд╕реЛрд╕рд┐рдПрд╢рди рдмрдирд╛рдПрдЧрд╛ред рдЕрдм рд╕реЗ, рдЬрдм рдЖрдк рдкреНрд▓рд╛рди рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВрдЧреЗ, рддреЛ рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдХреЛ рдкрддрд╛ рдЪрд▓ рдЬрд╛рдПрдЧрд╛ рдХрд┐ IAM рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ рдФрд░ рдЗрд╕реЗ рджреЛрдмрд╛рд░рд╛ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

    рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рдВрд╕рд╛рдзрди рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдФрд░ рдПрдХ рд╕рдордп рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдирд╛ рдкрд░реЗрд╢рд╛рдиреА рднрд░рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЯреЗрд░рд╛рдлреЙрд░реНрдорд┐рдВрдЧ (http://terraforming.dtan4.net/) рдЬреИрд╕реЗ рдЯреВрд▓ рдкрд░ рдЧреМрд░ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИ, рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ AWS рдЦрд╛рддреЗ рд╕реЗ рдХреЛрдб рдФрд░ рд╕реНрдерд┐рддрд┐ рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

    рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рдЕрдкрдиреЗ рдиреБрдХрд╕рд╛рди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ

    рдкреБрдирд░реНрд░рдЪрдирд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЕрднреНрдпрд╛рд╕ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдмрд╛рд╣рд░реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдЫреЛрдбрд╝рддреЗ рд╣реБрдП рдХреЛрдб рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдХреЛрдб рдХреЛ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ, рд╕рд╛рдл-рд╕реБрдерд░рд╛ рдФрд░ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рдирд╛ рд╣реИред рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдПрдХ рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рддрдХрдиреАрдХ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдЬрдм рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп IaC рдЯреВрд▓ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдХреЛрдб рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХреЗ "рдмрд╛рд╣рд░реА рд╡реНрдпрд╡рд╣рд╛рд░" рд╕реЗ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмреЗрд╣рдж рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдирд╛ рд╣реЛрдЧрд╛, рдЕрдиреНрдпрдерд╛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╕рдорд╕реНрдпрд╛рдПрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрдВрдЧреАред

    рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреА рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдпрд╛ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдирд╛рдореЛрдВ рдХреЛ рдЕрдзрд┐рдХ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдирд╛рдореЛрдВ рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реИред рдХрдИ рдЖрдИрдбреАрдИ рдореЗрдВ рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдорд░реНрдерди рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╡реЗ рдкреВрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЪрд░ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдпреЛрдЬрди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ, рдпрд╣ рдПрдХ рддреБрдЪреНрдЫ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдк рд╢рд╛рдпрдж рдирд╣реАрдВ рд╕реЛрдЪреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЯреЗрд░рд╛рдлрд╝реЙрд░реНрдо рдореЗрдВ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рдмреЗрд╣рдж рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдирд╛ рд╣реЛрдЧрд╛, рдЕрдиреНрдпрдерд╛ рдЖрдкрдХреЛ рд░реБрдХрд╛рд╡рдЯреЛрдВ рдХрд╛ рдЕрдиреБрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

    рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реЗрдмрд╕рд░реНрд╡рд░-рдХреНрд▓рд╕реНрдЯрд░ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдПрдХ рдЗрдирдкреБрдЯ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреНрд▓рд╕реНрдЯрд░_рдирд╛рдо рд╣реИ:

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

    рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдиреЗ foo рдирд╛рдордХ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдмрд╛рдж рдореЗрдВ, рдЖрдк рдЕрдкрдиреА рд╕реЗрд╡рд╛ рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ bar рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдорд╛рдореВрд▓реА рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╕реЗрд╡рд╛ рдореЗрдВ рд╡реНрдпрд╡рдзрд╛рди рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

    рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗрдмрд╕рд░реНрд╡рд░-рдХреНрд▓рд╕реНрдЯрд░ рдореЙрдбреНрдпреВрд▓ рдХрдИ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдореЗрдВ рдХреНрд▓рд╕реНрдЯрд░_рдирд╛рдо рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рджреЛ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдореВрд╣реЛрдВ рдХреЗ рдирд╛рдо рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рдПрдПрд▓рдмреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

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

    рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рд╕рдВрд╕рд╛рдзрди рдкрд░ рдирд╛рдо рдкреИрд░рд╛рдореАрдЯрд░ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЯреЗрд░рд╛рдлрд╝реЙрд░реНрдо рдЙрд╕ рд╕рдВрд╕рд╛рдзрди рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╣рдЯрд╛ рджреЗрдЧрд╛ рдФрд░ рдЙрд╕рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрджрд┐ рд╡рд╣ рд╕рдВрд╕рд╛рдзрди рдПрдХ ALB рд╣реИ, рддреЛ рдЙрд╕реЗ рд╣рдЯрд╛рдиреЗ рдФрд░ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмреАрдЪ, рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдкрд░ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрдИ рд╡реНрдпрд╡рд╕реНрдерд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред рдЗрд╕реА рддрд░рд╣, рдпрджрд┐ рдХреЛрдИ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдореВрд╣ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЗ рд╕рд░реНрд╡рд░ рдПрдХ рдирдпрд╛ рд╕рдореВрд╣ рдмрдирдиреЗ рддрдХ рдХрд┐рд╕реА рднреА рдиреЗрдЯрд╡рд░реНрдХ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдВрдЧреЗред

    рдПрдХ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреА рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреА рд░реБрдЪрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ рд╡рд╣ рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдЖрдИрдбреА рдХреЛ рдмрджрд▓рдирд╛ рд╣реИред рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╡реЗрдмрд╕рд░реНрд╡рд░-рдХреНрд▓рд╕реНрдЯрд░ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ aws_security_group рд╕рдВрд╕рд╛рдзрди рд▓реЗрдВ:

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

    рдЗрд╕ рд╕рдВрд╕рд╛рдзрди рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рдЙрджрд╛рд╣рд░рдг рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдЖрдкрдиреЗ рдЗрд╕реЗ рдЕрдзрд┐рдХ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп (рдЖрдкрдХреА рд░рд╛рдп рдореЗрдВ) рдХреНрд▓рд╕реНрдЯрд░_рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдирд╛рдо рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рд╣реИ:

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

    рдЖрдЦрд╝рд┐рд░ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдпрд╣ рд╕рд╣реА рд╣реИ: рдПрдХ рд╡реНрдпрд╡рдзрд╛рди.

    рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрд╕рд╛рдзрди рдЖрдИрдбреА рдХреЛ рдХреНрд▓рд╛рдЙрдб рдкреНрд░рджрд╛рддрд╛ рдЖрдИрдбреА рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, iam_user AWS IAM рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдИрдбреА рд╕реЗ рд╕рдВрдмрджреНрдз рд╣реИ, рдФрд░ aws_instance AWS EC2 рд╕рд░реНрд╡рд░ рдЖрдИрдбреА рд╕реЗ рд╕рдВрдмрджреНрдз рд╣реИред рдпрджрд┐ рдЖрдк рд╕рдВрд╕рд╛рдзрди рдЖрдИрдбреА (рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХреНрд▓рд╕реНрдЯрд░_рдЗрдВрд╕реНрдЯреЗрдВрд╕, рдЬреИрд╕рд╛ рдХрд┐ aws_security_group рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реИ) рдХреЛ рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрдЧрд╛ рдЬреИрд╕реЗ рдЖрдкрдиреЗ рдкреБрд░рд╛рдирд╛ рд╕рдВрд╕рд╛рдзрди рд╣рдЯрд╛ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рдПрдХ рдирдпрд╛ рдЬреЛрдбрд╝рд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЯреЗрд░рд╛рдлрд╝реЙрд░реНрдо рдкреБрд░рд╛рдиреЗ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдореВрд╣ рдХреЛ рд╣рдЯрд╛ рджреЗрдЧрд╛ рдФрд░ рдПрдХ рдирдпрд╛ рд╕рдореВрд╣ рдмрдирд╛рдПрдЧрд╛, рдЬрдмрдХрд┐ рдЖрдкрдХреЗ рд╕рд░реНрд╡рд░ рдХрд┐рд╕реА рднреА рдиреЗрдЯрд╡рд░реНрдХ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдВрдЧреЗред

    рдпрд╣рд╛рдВ рдЪрд╛рд░ рдкреНрд░рдореБрдЦ рд╕рдмрдХ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдХреЛ рдЗрд╕ рдЪрд░реНрдЪрд╛ рд╕реЗ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдПред

    • рд╣рдореЗрд╢рд╛ рдкреНрд▓рд╛рди рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ. рдпрд╣ рдЗрди рд╕рднреА рдЧрдбрд╝рдмрдбрд╝рд┐рдпреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреА рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рд╕рдореАрдХреНрд╖рд╛ рдХрд░реЗрдВ рдФрд░ рдЙрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ рдЬрд╣рд╛рдВ рдЯреЗрд░рд╛рдлрд╝реЙрд░реНрдо рдЙрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╕рдВрднрд╡рддрдГ рд╣рдЯрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
    • рд╣рдЯрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмрдирд╛рдПрдВ. рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рд╕рдВрд╕рд╛рдзрди рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореВрд▓ рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдзреНрдпрд╛рди рд╕реЗ рд╕реЛрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдЙрддреНрддрд░ рд╣рд╛рдБ рд╣реИ, рддреЛ create_before_destroy рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рджреЛ рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдХреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдкрд╣рд▓реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдПрдХ рдирдпрд╛ рд╕рдВрд╕рд╛рдзрди рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЕрдкреНрд▓рд╛рдИ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВ, рдФрд░ рдлрд┐рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕рд╛рдзрди рдХреЛ рд╣рдЯрд╛ рджреЗрдВ рдФрд░ рдлрд┐рд░ рд╕реЗ рдЕрдкреНрд▓рд╛рдИ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
    • рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рддрд┐ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рд╕рдВрд╕рд╛рдзрди рд╕реЗ рдЬреБрдбрд╝реА рдЖрдИрдбреА рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, aws_security_group рдХреЛ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХреНрд▓рд╕реНрдЯрд░_рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдореЗрдВ рдмрджрд▓реЗрдВ) рд╕рдВрд╕рд╛рдзрди рдХреЛ рд╣рдЯрд╛рдП рдмрд┐рдирд╛ рдФрд░ рдЙрд╕рдХрд╛ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдП рдмрд┐рдирд╛, рдЖрдкрдХреЛ рддрджрдиреБрд╕рд╛рд░ рдЯреЗрд░рд╛рдлрд╝реЙрд░реНрдо рд╕реНрдерд┐рддрд┐ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕реЗ рдХрднреА рднреА рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рди рдХрд░реЗрдВ - рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЯреЗрд░рд╛рдлрд╝реЙрд░реНрдо рд╕реНрдЯреЗрдЯ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдирд╛рдо рдмрджрд▓рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдЯреЗрд░рд╛рдлреЙрд░реНрдо рд╕реНрдЯреЗрдЯ рдПрдорд╡реА рдХрдорд╛рдВрдб рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИ:
      terraform state mv <ORIGINAL_REFERENCE> <NEW_REFERENCE>

      ORIGINAL_REFERENCE рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ рдЬреЛ рд╕рдВрд╕рд╛рдзрди рдХреЛ рдЙрд╕рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕реНрд╡рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреА рд╣реИ, рдФрд░ NEW_REFERENCE рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдЗрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, aws_security_group рд╕рдореВрд╣ рдХрд╛ рдирд╛рдо рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕реЗ рдХреНрд▓рд╕реНрдЯрд░_рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдореЗрдВ рдмрджрд▓рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

      $ terraform state mv 
         aws_security_group.instance 
         aws_security_group.cluster_instance

      рдпрд╣ рдЯреЗрд░рд╛рдлрд╝реЙрд░реНрдо рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЬреЛ рд░рд╛рдЬреНрдп рдкрд╣рд▓реЗ aws_security_group.instance рд╕реЗ рд╕рдВрдмрджреНрдз рдерд╛, рдЙрд╕реЗ рдЕрдм aws_security_group.cluster_instance рд╕реЗ рд╕рдВрдмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдирд╛рдо рдмрджрд▓рдиреЗ рдФрд░ рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдпреЛрдЬрдирд╛ рдореЗрдВ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдиреЗ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рд╣реИред

    • рдХреБрдЫ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдмрджрд▓реА рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддреАрдВ. рдХрдИ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЯреЗрд░рд╛рдлрд╝реЙрд░реНрдо рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕рд╛рдзрди рдХреЛ рд╣рдЯрд╛ рджреЗрдЧрд╛ рдФрд░ рдЙрд╕рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдПрдХ рдирдпрд╛ рд╕рдВрд╕рд╛рдзрди рдмрдирд╛рдПрдЧрд╛ред рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрд╕рд╛рдзрди рдкреГрд╖реНрда рдЖрдо рддреМрд░ рдкрд░ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдЬрдм рдЖрдк рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╕реЗрдЯрд┐рдВрдЧ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред рд╣рдореЗрд╢рд╛ рдкреНрд▓рд╛рди рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ create_before_destroy рд░рдгрдиреАрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

    рдЖрд╕реНрдердЧрд┐рдд рд╕рдВрдЧрддрд┐ рд╕реБрд╕рдВрдЧрдд рд╣реИ... рдЖрд╕реНрдердЧрд┐рдд рдХреЗ рд╕рд╛рде

    рдХреБрдЫ рдХреНрд▓рд╛рдЙрдб рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреЗ рдПрдкреАрдЖрдИ, рдЬреИрд╕реЗ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реИрдВ рдФрд░ рдЙрдирдореЗрдВ рд╡рд┐рд▓рдВрдмрд┐рдд рд╕реНрдерд┐рд░рддрд╛ рд╣реИред рдПрд╕рд┐рдВрдХреНрд░реЛрдиреА рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЕрдиреБрд░реЛрдзрд┐рдд рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд┐рдП рдмрд┐рдирд╛ рддреБрд░рдВрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рд▓рдВрдмрд┐рдд рд╕реНрдерд┐рд░рддрд╛ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдкреВрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдлреИрд▓рдиреЗ рдореЗрдВ рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ; рдЬрдмрдХрд┐ рдРрд╕рд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЖрдкрдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдБ рдЕрд╕рдВрдЧрдд рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдФрд░ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдХрд┐ рдХреМрди рд╕рд╛ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдкреНрд░рддрд┐рдХреГрддрд┐ рдЖрдкрдХреЗ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХрд╛ рдЬрд╡рд╛рдм рджреЗ рд░рд╣рд╛ рд╣реИред

    рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдк AWS рдХреЛ рдПрдХ API рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕рд╕реЗ 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

    рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЖрдк рдПрдХ рд╕рдВрд╕рд╛рдзрди рдмрдирд╛рддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ рдПрдХ рд╕рдмрдиреЗрдЯ) рдФрд░ рдлрд┐рд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ рдХрд┐ рдирдП рдмрдирд╛рдП рдЧрдП рд╕рдмрдиреЗрдЯ рдХреА рдЖрдИрдбреА), рдФрд░ рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдЗрд╕реЗ рдирд╣реАрдВ рдвреВрдВрдв рдкрд╛рддрд╛ рд╣реИред рдЗрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдмрдЧ (6813 рд╕рд╣рд┐рдд) рдХреЛ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рдЕрднреА рднреА рд╕рдордп-рд╕рдордп рдкрд░ рд╕рд╛рдордиреЗ рдЖрддреЗ рд╣реИрдВ, рдЦрд╛рд╕рдХрд░ рдЬрдм рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдПрдХ рдирдП рд╕рдВрд╕рд╛рдзрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдпрд╣ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЗрд╕рд╕реЗ рдХреЛрдИ рдиреБрдХрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЬрдм рдЖрдк рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдЕрдкреНрд▓рд╛рдИ рдХреЛ рджреЛрдмрд╛рд░рд╛ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рд╕рдордп рддрдХ рдЬрд╛рдирдХрд╛рд░реА рдкреВрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА рдлреИрд▓ рдЪреБрдХреА рд╣реЛрдЧреАред

    рдпрд╣ рдЕрдВрд╢ рдПрд╡рдЧреЗрдиреА рдмреНрд░рд┐рдХрдореИрди рдХреА рдкреБрд╕реНрддрдХ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ "рдЯреЗрд░рд╛рдлреЙрд░реНрдо: рдХреЛрдб рд╕реНрддрд░ рдкрд░ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪрд╛".

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ