рдЯреЗрд░рд╛рдлреЙрд░реНрдо рддреЛрдЯреЗ

рдЯреЗрд░рд╛рдлреЙрд░реНрдо рддреЛрдЯреЗ
рд▓реВрдк, рдЗрдл рд╕реНрдЯреЗрдЯрдореЗрдВрдЯреНрд╕ рдЖрдгрд┐ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рддрдВрддреНрд░, рддрд╕реЗрдЪ рдЯреЗрд░рд╛рдлреЙрд░реНрдорд╡рд░ рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ рдкрд░рд┐рдгрд╛рдо рдХрд░рдгрд╛рд▒реНрдпрд╛ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╕реНрдпрд╛рдВрд╕рд╣ рдХрд╛рд╣реА рддреЛрдЯреЗ рд╣рд╛рдпрд▓рд╛рдЗрдЯ рдХрд░реВ рдпрд╛:

  • рд╕рдВрдЦреНрдпрд╛ рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рдирд╛ рдорд░реНрдпрд╛рджрд╛ рдЖрд╣реЗрдд;
  • рд╢реВрдиреНрдп рдбрд╛рдЙрдирдЯрд╛рдЗрдо рдЙрдкрдпреЛрдЬрди рдорд░реНрдпрд╛рджрд┐рдд рдХрд░рд╛;
  • рдПрдХ рдЪрд╛рдВрдЧрд▓реА рдпреЛрдЬрдирд╛ рджреЗрдЦреАрд▓ рдЕрдпрд╢рд╕реНрд╡реА рд╣реЛрдК рд╢рдХрддреЗ;
  • рд░рд┐рдлреЕрдХреНрдЯрд░рд┐рдВрдЧрдордзреНрдпреЗ рддреНрдпрд╛рдЪреЗ рддреЛрдЯреЗ рдЕрд╕реВ рд╢рдХрддрд╛рдд;
  • рд╕реНрдердЧрд┐рдд рд╕реБрд╕рдВрдЧрддрддрд╛ рд╕реБрд╕рдВрдЧрдд рдЖрд╣реЗ... рд╕реНрдердЧрд┐рдд рд╕рд╣.

рдЧрдгрдирд╛ рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рдирд╛ рдорд░реНрдпрд╛рджрд╛ рдЖрд╣реЗрдд

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

  • Count рдЖрдгрд┐ 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_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"
}

рддреБрдореНрд╣реА рдпрд╛ рдХреЛрдбрд╡рд░ рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдкреНрд▓реЕрди рдЪрд╛рд▓рд╡рд▓реНрдпрд╛рд╕, рддреБрдореНрд╣рд╛рд▓рд╛ рдЦрд╛рд▓реАрд▓ рдПрд░рд░ рдорд┐рд│реЗрд▓:

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_autoscaling_schedule рд╕рдВрд╕рд╛рдзрдирд╛рдВрдЪреА рдЬреЛрдбреА рдЕрд╕рддреЗ, рдЬреЗ рд╕рдХрд╛рд│реА 9 рд╡рд╛рдЬрддрд╛ рдХреНрд▓рд╕реНрдЯрд░рдордзреАрд▓ рд╕рд░реНрд╡реНрд╣рд░рдЪреА рд╕рдВрдЦреНрдпрд╛ рджреЛрди рддреЗ рджрд╣рд╛ рдкрд░реНрдпрдВрдд рд╡рд╛рдврд╡рддреЗ. рддреБрдореНрд╣реА рд╕рдХрд╛рд│реА 11 рд╡рд╛рдЬрддрд╛ рддреИрдирд╛рдд рдХреЗрд▓реНрдпрд╛рд╕, рдирд╡реАрди ASG рджрд╣рд╛ рдРрд╡рдЬреА рдлрдХреНрдд рджреЛрди рд╕рд░реНрд╡реНрд╣рд░рд╕рд╣ рдмреВрдЯ рд╣реЛрдИрд▓ рдЖрдгрд┐ рджреБрд╕рд▒реНрдпрд╛ рджрд┐рд╡рд╢реА рд╕рдХрд╛рд│реА 9 рд╡рд╛рдЬреЗрдкрд░реНрдпрдВрдд рддрд╕рд╛рдЪ рд░рд╛рд╣реАрд▓.

рд╣реА рдорд░реНрдпрд╛рджрд╛ рдЕрдиреЗрдХ рдкреНрд░рдХрд╛рд░реЗ рджреВрд░ рдХреЗрд▓реА рдЬрд╛рдК рд╢рдХрддреЗ.

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

рдЕрд░реНрдерд╛рдд, рдЯреЗрд░рд╛рдлреЙрд░реНрдорд▓рд╛ рдЖрджрд░реНрд╢рдкрдгреЗ рд╢реВрдиреНрдп-рдбрд╛рдЙрдирдЯрд╛рдЗрдо рдЙрдкрдпреЛрдЬрдирд╛рдВрд╕рд╛рдареА рдЕрдВрдЧрднреВрдд рд╕рдорд░реНрдерди рдЕрд╕реЗрд▓, рдкрд░рдВрддреБ рдореЗ 2019 рдкрд░реНрдпрдВрдд, HashiCorp рд╕рдВрдШрд╛рдЪреА рд╣реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрдгреНрдпрд╛рдЪреА рдХреЛрдгрддреАрд╣реА рдпреЛрдЬрдирд╛ рдирд╡реНрд╣рддреА (рддрдкрд╢реАрд▓ - рдпреЗрдереЗ).

рдпреЛрдЧреНрдп рдпреЛрдЬрдирд╛ рдЕрдпрд╢рд╕реНрд╡реАрдкрдгреЗ рдЕрдВрдорд▓рд╛рдд рдЖрдгрд▓реА рдЬрд╛рдК рд╢рдХрддреЗ

рдХрд╛рд╣реАрд╡реЗрд│рд╛ рдкреНрд▓реЕрди рдХрдорд╛рдВрдб рдЙрддреНрддрдо рдкреНрд░рдХрд╛рд░реЗ рдпреЛрдЧреНрдп рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рдкреНрд▓реЕрди рддрдпрд╛рд░ рдХрд░рддреЗ, рдкрд░рдВрддреБ рд▓рд╛рдЧреВ рдХрдорд╛рдВрдб рдПрд░рд░ рдкрд░рдд рдХрд░рддреЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рддреБрдореНрд╣реА рдЕрдзреНрдпрд╛рдп 2 рдордзреНрдпреЗ рдЖрдзреА рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ IAM рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗрд▓реНрдпрд╛ рддреНрдпрд╛рдЪ рдирд╛рд╡рд╛рд╕рд╣ aws_iam_user рд╕рдВрд╕рд╛рдзрди рдЬреЛрдбрдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рд╛:

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 рдХрдиреНрд╕реЛрд▓рдордзреНрдпреЗ рдореЕрдиреНрдпреБрдЕрд▓реА рдХреНрд▓рд┐рдХ рдХрд░реВрди), рддреЗ рд╕реНрдЯреЗрдЯ рдлрд╛рдЗрд▓рдордзреНрдпреЗ рд╕рдВрдкрдгрд╛рд░ рдирд╛рд╣реАрдд рдЖрдгрд┐ рдореНрд╣рдгреВрди рдкреНрд▓реЕрди рдХрдорд╛рдВрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддрд╛рдирд╛ рдЯреЗрд░рд╛рдлреЙрд░реНрдо рддреНрдпрд╛рдВрдирд╛ рд╡рд┐рдЪрд╛рд░рд╛рдд рдШреЗрдгрд╛рд░ рдирд╛рд╣реА. рдкрд░рд┐рдгрд╛рдореА, рдкрд╣рд┐рд▓реНрдпрд╛ рджреГрд╖реНрдЯреАрдХреНрд╖реЗрдкрд╛рдд рдпреЛрдЧреНрдп рд╡рд╛рдЯрдгрд╛рд░реА рдпреЛрдЬрдирд╛ рдЕрдпрд╢рд╕реНрд╡реА рдард░реЗрд▓.

рдпрд╛рддреВрди рджреЛрди рдзрдбреЗ рд╢рд┐рдХрд╛рдпрдЪреЗ рдЖрд╣реЗрдд.

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

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

    $ terraform import aws_iam_user.existing_user yevgeniy.brikman

    рдЯреЗрд░рд╛рдлреЙрд░реНрдо рддреБрдордЪрд╛ IAM рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА AWS API рд▓рд╛ рдХреЙрд▓ рдХрд░реЗрд▓ рдЖрдгрд┐ рддреБрдордЪреНрдпрд╛ Terraform рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдордзреНрдпреЗ рддреЗ рдЖрдгрд┐ aws_iam_user.existing_user рд╕рдВрд╕рд╛рдзрди рдпрд╛рдВрдЪреНрдпрд╛рдордзреНрдпреЗ рд╕реНрдЯреЗрдЯ рдлрд╛рдЗрд▓ рдЕрд╕реЛрд╕рд┐рдПрд╢рди рддрдпрд╛рд░ рдХрд░реЗрд▓. рдЖрддрд╛рдкрд╛рд╕реВрди, рдЬреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣реА рдкреНрд▓реЕрди рдХрдорд╛рдВрдб рд░рди рдХрд░рд╛рд▓, рддреЗрд╡реНрд╣рд╛ рдЯреЗрд░рд╛рдлреЙрд░реНрдорд▓рд╛ рдХрд│реЗрд▓ рдХреА IAM рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЖрдзреАрдЪ рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЖрд╣реЗ рдЖрдгрд┐ рддреЛ рдкреБрдиреНрд╣рд╛ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдгрд╛рд░ рдирд╛рд╣реА.

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

    рд░рд┐рдлреЕрдХреНрдЯрд░рд┐рдВрдЧрдордзреНрдпреЗ рддреНрдпрд╛рдЪреЗ рддреЛрдЯреЗ рдЕрд╕реВ рд╢рдХрддрд╛рдд

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

    рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд░рд┐рдлреЕрдХреНрдЯрд░рд┐рдВрдЧрдЪрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рдореНрд╣рдгрдЬреЗ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХрд┐рдВрд╡рд╛ рдлрдВрдХреНрд╢рдиреНрд╕рдЪреА рдирд╛рд╡реЗ рдЕрдзрд┐рдХ рд╕рдордЬрдгреНрдпрд╛рдпреЛрдЧреНрдп рдирд╛рд╡рд╛рдВрдиреА рдмрджрд▓рдгреЗ. рдЕрдиреЗрдХ IDE рдордзреНрдпреЗ рд░реАрдлреЕрдХреНрдЯрд░рд┐рдВрдЧрд╕рд╛рдареА рдЕрдВрдЧрднреВрдд рд╕рдорд░реНрдерди рдЕрд╕рддреЗ рдЖрдгрд┐ рд╕рдВрдкреВрд░реНрдг рдкреНрд░реЛрдЬреЗрдХреНрдЯрдордзреНрдпреЗ рдЖрдкреЛрдЖрдк рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рдЖрдгрд┐ рдлрдВрдХреНрд╢рдиреНрд╕рдЪреЗ рдирд╛рд╡ рдмрджрд▓реВ рд╢рдХрддрд╛рдд. рд╕рд╛рдорд╛рдиреНрдп-рдЙрджреНрджреЗрд╢реАрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдВрдордзреНрдпреЗ, рд╣реА рдПрдХ рдХреНрд╖реБрд▓реНрд▓рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрд╣реЗ рдЬреНрдпрд╛рдЪрд╛ рддреБрдореНрд╣реА рд╡рд┐рдЪрд╛рд░ рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА, рдкрд░рдВрддреБ рдЯреЗрд░рд╛рдлреЙрд░реНрдордордзреНрдпреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдпрд╛рдмрджреНрджрд▓ рдЕрддреНрдпрдВрдд рд╕рд╛рд╡рдзрдЧрд┐рд░реА рдмрд╛рд│рдЧрд╛рд╡реА рд▓рд╛рдЧреЗрд▓, рдЕрдиреНрдпрдерд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрдЙрдЯреЗрдЬрдЪрд╛ рдЕрдиреБрднрд╡ рдпреЗрдК рд╢рдХрддреЛ.

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

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

    рдХрд▓реНрдкрдирд╛ рдХрд░рд╛ рдХреА рддреБрдореНрд╣реА foo рдирд╛рд╡рд╛рдЪреА рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕ рддреИрдирд╛рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╣реЗ рдореЙрдбреНрдпреВрд▓ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕ рд╕реБрд░реБрд╡рд╛рдд рдХреЗрд▓реА рдЖрд╣реЗ. рдирдВрддрд░, рддреБрдореНрд╣рд╛рд▓рд╛ рддреБрдордЪреНрдпрд╛ рд╕реЗрд╡реЗрдЪреЗ рдирд╛рд╡ рдмрд╛рд░рдордзреНрдпреЗ рдмрджрд▓рд╛рдпрдЪреЗ рдЖрд╣реЗ. рд╣рд╛ рдмрджрд▓ рдХреНрд╖реБрд▓реНрд▓рдХ рд╡рд╛рдЯрдд рдЕрд╕рд▓рд╛ рддрд░реА рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рдпрд╛рдореБрд│реЗ рд╕реЗрд╡рд╛ рд╡рд┐рд╕реНрдХрд│реАрдд рд╣реЛрдК рд╢рдХрддреЗ.

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

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

    рдпрд╛ рдЪрд░реНрдЪреЗрддреВрди рддреБрдореНрд╣реА рдЪрд╛рд░ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдзрдбреЗ рдШреЗрддрд▓реЗ рдкрд╛рд╣рд┐рдЬреЗрдд.

    • рдиреЗрд╣рдореА рдкреНрд▓реЕрди рдХрдорд╛рдВрдб рд╡рд╛рдкрд░рд╛. рд╣реЗ рд╕рд░реНрд╡ snags рдкреНрд░рдХрдЯ рдХрд░реВ рд╢рдХрддрд╛. рддреНтАНрдпрд╛рдЪреНтАНрдпрд╛ рдЖрдЙрдЯрдкреБрдЯрдЪреЗ рдХрд╛рд│рдЬреАрдкреВрд░реНрд╡рдХ рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди рдХрд░рд╛ рдЖрдгрд┐ рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдмрд╣реБрдзрд╛ рд╣рдЯрд╡рдгреНтАНрдпрд╛рдЪреА рдирд╕рд▓реЗрд▓реА рд╕рдВрд╕рд╛рдзрдиреЗ рд╣рдЯрд╡рдгреНтАНрдпрд╛рдЪреА рдпреЛрдЬрдирд╛ рдЖрдЦрдд рдЕрд╕рд▓реЗрд▓реНтАНрдпрд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдВрдХрдбреЗ рд▓рдХреНрд╖ рджреНрдпрд╛.
    • рддреБрдореНрд╣реА рд╣рдЯрд╡рдгреНрдпрд╛рдкреВрд░реНрд╡реА рддрдпрд╛рд░ рдХрд░рд╛. рддреБрдореНрд╣рд╛рд▓рд╛ рдПрдЦрд╛рджреЗ рд╕рдВрд╕рд╛рдзрди рдкреБрдирд░реНрд╕реНрдерд┐рдд рдХрд░рд╛рдпрдЪреЗ рдЕрд╕рд▓реНрдпрд╛рд╕, рдореВрд│ рд╣рдЯрд╡рдгреНрдпрд╛рдкреВрд░реНрд╡реА рддреБрдореНрд╣рд╛рд▓рд╛ рдкреБрдирд░реНрд╕реНрдерд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдХрд╛ рдпрд╛рдЪрд╛ рдХрд╛рд│рдЬреАрдкреВрд░реНрд╡рдХ рд╡рд┐рдЪрд╛рд░ рдХрд░рд╛. рдЙрддреНрддрд░ рд╣реЛрдп рдЕрд╕рд▓реНрдпрд╛рд╕, create_before_destroy рдорджрдд рдХрд░реВ рд╢рдХрддреЗ. рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рджреЛрди рдкрд╛рдпрд▒реНрдпрд╛ рдкрд╛рд░ рдкрд╛рдбреВрди рд╡реНрдпрдХреНрддрд┐рдЪрд▓рд┐рддрдкрдгреЗ рдкреНрд░рд╛рдкреНрдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд: рдкреНрд░рдердо рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдордзреНрдпреЗ рдирд╡реАрди рд╕рдВрд╕рд╛рдзрди рдЬреЛрдбрд╛ рдЖрдгрд┐ рд▓рд╛рдЧреВ рдЖрджреЗрд╢ рдЪрд╛рд▓рд╡рд╛, рдЖрдгрд┐ рдирдВрддрд░ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдордзреВрди рдЬреБрдиреЗ рд╕рдВрд╕рд╛рдзрди рдХрд╛рдвреВрди рдЯрд╛рдХрд╛ рдЖрдгрд┐ рдкреБрдиреНрд╣рд╛ рд▓рд╛рдЧреВ рдЖрджреЗрд╢ рд╡рд╛рдкрд░рд╛.
    • рдЕрднрд┐рдЬреНрдЮрд╛рдкрдХ рдмрджрд▓рдгреНрдпрд╛рд╕рд╛рдареА рд╕реНрдерд┐рддреА рдмрджрд▓рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рд░рд┐рд╕реЛрд░реНрд╕рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрдпрдбреА рдмрджрд▓рд╛рдпрдЪрд╛ рдЕрд╕реЗрд▓ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, aws_security_group рдЪреЗ рдирд╛рд╡ рдмрджрд▓реВрди instance рд╡рд░реВрди cluster_instance рдХрд░рд╛) рд░рд┐рд╕реЛрд░реНрд╕ рди рд╣рдЯрд╡рддрд╛ рдЖрдгрд┐ рддреНрдпрд╛рдЪреА рдирд╡реАрди рдЖрд╡реГрддреНрддреА рддрдпрд╛рд░ рдХрд░рд╛, рддреБрдореНрд╣реА рддреНрдпрд╛рдиреБрд╕рд╛рд░ рдЯреЗрд░рд╛рдлреЙрд░реНрдо рд╕реНрдЯреЗрдЯ рдлрд╛рдЗрд▓ рдЕрдкрдбреЗрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рд╣реЗ рдХрдзреАрд╣реА рд╕реНрд╡рд╣рд╕реНрддреЗ рдХрд░реВ рдирдХрд╛ - рддреНрдпрд╛рдРрд╡рдЬреА рдЯреЗрд░рд╛рдлреЙрд░реНрдо рд╕реНрдЯреЗрдЯ рдХрдорд╛рдВрдб рд╡рд╛рдкрд░рд╛. рдЖрдпрдбреЗрдВрдЯрд┐рдлрд╛рдпрд░реНрд╕рдЪреЗ рдирд╛рд╡ рдмрджрд▓рддрд╛рдирд╛, рддреБрдореНрд╣реА рдЯреЗрд░рд╛рдлреЙрд░реНрдо рд╕реНрдЯреЗрдЯ рдПрдорд╡реНрд╣реА рдХрдорд╛рдВрдб рдЪрд╛рд▓рд╡рд╛, рдЬреНрдпрд╛рдордзреНрдпреЗ рдЦрд╛рд▓реАрд▓ рд╡рд╛рдХреНрдпрд░рдЪрдирд╛ рдЖрд╣реЗ:
      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

      рд╣реЗ рдЯреЗрд░рд╛рдлреЙрд░реНрдорд▓рд╛ рд╕рд╛рдВрдЧрддреЗ рдХреА рдкреВрд░реНрд╡реА aws_security_group.instance рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЕрд╕рд▓реЗрд▓реА рд╕реНрдерд┐рддреА рдЖрддрд╛ aws_security_group.cluster_instance рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЕрд╕рд╛рд╡реА. рдпрд╛ рдХрдорд╛рдВрдбрдЪреЗ рдирд╛рд╡ рдмрджрд▓реВрди рдЖрдгрд┐ рдЪрд╛рд▓рд╡рд▓реНрдпрд╛рдирдВрддрд░ рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдкреНрд▓реЕрдирдордзреНрдпреЗ рдХреЛрдгрддреЗрд╣реА рдмрджрд▓ рджрд┐рд╕рдд рдирд╕рд▓реНрдпрд╛рд╕, рддреБрдореНрд╣реА рд╕рд░реНрд╡рдХрд╛рд╣реА рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рдХреЗрд▓реЗ рдЖрд╣реЗ.

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

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

    рдХрд╛рд╣реА рдХреНрд▓рд╛рдЙрдб рдкреНрд░рджрд╛рддреНрдпрд╛рдВрдЪреЗ API, рдЬрд╕реЗ рдХреА AWS, рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдЖрд╣реЗрдд рдЖрдгрд┐ рд╕реБрд╕рдВрдЧрддрддрд╛ рд╡рд┐рд▓рдВрдмрд┐рдд рдЖрд╣реЗ. рдЕрд╕рд┐рдВрдХреНрд░реЛрдиреА рдореНрд╣рдгрдЬреЗ рд╡рд┐рдирдВрддреА рдХреЗрд▓реЗрд▓реА рдХреНрд░рд┐рдпрд╛ рдкреВрд░реНрдг рд╣реЛрдгреНрдпрд╛рдЪреА рд╡рд╛рдЯ рди рдкрд╛рд╣рддрд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рддреНрд╡рд░рд┐рдд рдкреНрд░рддрд┐рд╕рд╛рдж рджреЗрдК рд╢рдХрддреЛ. рд╡рд┐рд▓рдВрдмрд┐рдд рд╕реБрд╕рдВрдЧрддрддреЗрдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рдЖрд╣реЗ рдХреА рдмрджрд▓ рд╕рдВрдкреВрд░реНрдг рдкреНрд░рдгрд╛рд▓реАрдордзреНрдпреЗ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрдгреНрдпрд╛рд╕ рд╡реЗрд│ рд▓рд╛рдЧреВ рд╢рдХрддреЛ; рд╣реЗ рдШрдбрдд рдЕрд╕рддрд╛рдирд╛, рддреБрдордЪреЗ рдкреНрд░рддрд┐рд╕рд╛рдж рд╡рд┐рд╕рдВрдЧрдд рдЕрд╕реВ рд╢рдХрддрд╛рдд рдЖрдгрд┐ рддреБрдордЪреНрдпрд╛ API рдХреЙрд▓рд▓рд╛ рдХреЛрдгрддреНрдпрд╛ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдкреНрд░рддрд┐рдХреГрддреА рдкреНрд░рддрд┐рд╕рд╛рдж рджреЗрдд рдЖрд╣реЗрдд рдпрд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕реВ рд╢рдХрддрд╛рдд.

    рдХрд▓реНрдкрдирд╛ рдХрд░рд╛, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рддреБрдореНрд╣реА AWS рд▓рд╛ EC2 рд╕рд░реНрд╡реНрд╣рд░ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕ рд╕рд╛рдВрдЧреВрди API рдХреЙрд▓ рдХрд░рддрд╛. рд╕рд░реНрд╡реНрд╣рд░ рддрдпрд╛рд░ рд╣реЛрдгреНрдпрд╛рдЪреА рд╡рд╛рдЯ рди рдкрд╛рд╣рддрд╛ API рдЬрд╡рд│рдЬрд╡рд│ рддреНрд╡рд░рд┐рдд "рдпрд╢рд╕реНрд╡реА" рдкреНрд░рддрд┐рд╕рд╛рдж (201 рддрдпрд╛рд░) рджреЗрдИрд▓. рддреБрдореНрд╣реА рд▓рдЧреЗрдЪ рддреНрдпрд╛рдЪреНрдпрд╛рд╢реА рдХрдиреЗрдХреНрдЯ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХреЗрд▓реНрдпрд╛рд╕, рддреЗ рдЬрд╡рд│рдЬрд╡рд│ рдирд┐рд╢реНрдЪрд┐рддрдкрдгреЗ рдЕрдпрд╢рд╕реНрд╡реА рд╣реЛрдИрд▓ рдХрд╛рд░рдг рддреНрдпрд╛ рд╡реЗрд│реА AWS рдЕрдЬреВрдирд╣реА рд╕рдВрд╕рд╛рдзрдиреЗ рд╕реБрд░реВ рдХрд░рдд рдЖрд╣реЗ рдХрд┐рдВрд╡рд╛ рдкрд░реНрдпрд╛рдпрд╛рдиреЗ, рд╕рд░реНрд╡реНрд╣рд░ рдЕрджреНрдпрд╛рдк рдмреВрдЯ рдЭрд╛рд▓реЗрд▓рд╛ рдирд╛рд╣реА. рд╢рд┐рд╡рд╛рдп, рдЖрдкрдг рдпрд╛ рд╕рд░реНрд╡реНрд╣рд░рдмрджреНрджрд▓ рдорд╛рд╣рд┐рддреА рдорд┐рд│рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рджреБрд╕рд░рд╛ рдХреЙрд▓ рдХреЗрд▓реНрдпрд╛рд╕, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдПрдХ рддреНрд░реБрдЯреА (404 рд╕рд╛рдкрдбрд▓реА рдирд╛рд╣реА) рдкреНрд░рд╛рдкреНрдд рд╣реЛрдК рд╢рдХрддреЗ. рдЧреЛрд╖реНрдЯ рдЕрд╢реА рдЖрд╣реЗ рдХреА рдпрд╛ EC2 рд╕рд░реНрд╡реНрд╣рд░рдЪреА рдорд╛рд╣рд┐рддреА рд╕рд░реНрд╡рддреНрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдгреНрдпрд╛рдкреВрд░реНрд╡реА AWS рдордзреНрдпреЗ рдЕрджреНрдпрд╛рдк рдкреНрд░рд╕рд╛рд░рд┐рдд рдХреЗрд▓реА рдЬрд╛рдК рд╢рдХрддреЗ, рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рд╣реА рд╕реЗрдХрдВрдж рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рд╛рд╡реА рд▓рд╛рдЧреЗрд▓.

    рдЬреЗрд╡реНрд╣рд╛рд╣реА рддреБрдореНрд╣реА рдЖрд│рд╢реА рд╕реБрд╕рдВрдЧрддрддреЗрд╕рд╣ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ API рд╡рд╛рдкрд░рддрд╛, рддреЗрд╡реНрд╣рд╛ рдХреНрд░рд┐рдпрд╛ рдкреВрд░реНрдг рд╣реЛрдИрдкрд░реНрдпрдВрдд рдЖрдгрд┐ рд╕рд┐рд╕реНрдЯрдорджреНрд╡рд╛рд░реЗ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрдИрдкрд░реНрдпрдВрдд рддреБрдореНрд╣реА рдард░рд╛рд╡рд┐рдХ рдХрд╛рд│рд╛рдиреЗ рддреБрдордЪреА рд╡рд┐рдирдВрддреА рдкреБрдиреНрд╣рд╛ рдкреНрд░рдпрддреНрди рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рджреБрд░реНрджреИрд╡рд╛рдиреЗ, 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 рд╕рд╣) рдирд┐рд╢реНрдЪрд┐рдд рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗрдд, рдкрд░рдВрддреБ рддрд░реАрд╣реА рддреЗ рд╡реЗрд│реЛрд╡реЗрд│реА рдХреНрд░реЙрдк рд╣реЛрддрд╛рдд, рд╡рд┐рд╢реЗрд╖рддрдГ рдЬреЗрд╡реНрд╣рд╛ рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдирд╡реАрди рд╕рдВрд╕рд╛рдзрди рдкреНрд░рдХрд╛рд░рд╛рд╕рд╛рдареА рд╕рдорд░реНрдерди рдЬреЛрдбрддреЗ. рд╣реЗ рддреНрд░рд╛рд╕рджрд╛рдпрдХ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдмрд╣реБрддреЗрдХ рдкреНрд░рдХрд░рдгрд╛рдВрдордзреНрдпреЗ рдХреЛрдгрддреЗрд╣реА рдиреБрдХрд╕рд╛рди рд╣реЛрдд рдирд╛рд╣реА. рддреБрдореНрд╣реА рдЯреЗрд░рд╛рдлреЙрд░реНрдо рд▓рд╛рдЧреВ рдкреБрдиреНрд╣рд╛ рдЪрд╛рд▓рд╡рддрд╛ рддреЗрд╡реНрд╣рд╛, рд╕рд░реНрд╡рдХрд╛рд╣реА рдХрд╛рд░реНрдп рдХреЗрд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ, рдХрд╛рд░рдг рдпрд╛рд╡реЗрд│реЗрдкрд░реНрдпрдВрдд рдорд╛рд╣рд┐рддреА рд╕рдВрдкреВрд░реНрдг рд╕рд┐рд╕реНрдЯрдордордзреНрдпреЗ рдкрд╕рд░рд▓реЗрд▓реА рдЕрд╕реЗрд▓.

    Evgeniy Brikman рдпрд╛рдВрдЪреНрдпрд╛ рдкреБрд╕реНрддрдХрд╛рддреВрди рд╣рд╛ рдЙрддрд╛рд░рд╛ рд╕рд╛рджрд░ рдХреЗрд▓рд╛ рдЖрд╣реЗ "рдЯреЗрд░рд╛рдлреЙрд░реНрдо: рдХреЛрдб рд╕реНрддрд░рд╛рд╡рд░ рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛".

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛