แแแแ แฎแแแแแกแแแ แแฆแแแแจแแแ แ แแแแแแแแ แฎแแ แแแแ, แแแ แจแแ แแก แแแ แงแฃแแแแแแ แแแแแแจแแ แแแฃแแ, แแฃ แแแแชแฎแแแแแแแ แแ แแแแแแแแแแก แขแแฅแแแแ, แแกแแแ แฃแคแ แ แแแแแแ แกแแแแแฎแแแ, แ แแแแแแแช แแแแแแแแก แแฎแแแแก Terraform-แแ แแแแแแแ:
- count แแ for_each แแแ แแแแขแ แแแก แแฅแแ แจแแแฆแฃแแแแแ;
- แแฃแแแแแแ แจแแคแแ แฎแแแแก แจแแแฆแฃแแแ;
- แแแ แแ แแแแแแช แแ แจแแแซแแแแ แฉแแแแ แแแก;
- แ แแคแแฅแขแแ แแ แแแแก แจแแแซแแแแ แฐแฅแแแแแก แแแแแกแ แแแแแ;
- แแแแแแแแแแฃแแ แแแแแแแแแแ แฃแแแแ แจแแแกแแแแแแแ... แแแแแแแแแแแก.
แ แแแแแแแแแก แแ 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"
}
แแแแแ แจแแแฎแแแแ แแแ แกแแแแแแแ.
แแแแแแแแ แแแแแแแก แแแ แแแแขแ แ แแแงแแแแแฃแแแ แกแขแแขแแแฃแ แแแแจแแแแแแแแแ, แแก แแแแ แแแฃแจแแแแแก แฃแแ แแแแแแแ: แ แแแแกแแช แแฌแแ แแแแแ แแแแแชแฎแแแแก แแ แซแแแแแแก, แแก แจแแฅแแแแก แกแแ EC2 แกแแ แแแ แก. แ แ แแแฎแแแแ, แแฃ แแแแแแแแ แแ แแ แกแแ แแแ แแก แแแแแแแกแแแ แแแแแแฃแ แฎแแแแแกแแฌแแแแแแแแก แแแแแจแ (AZ) แแฅแแแแก แแแแแแแแแแ AWS แ แแแแแแจแ? แแฅแแแ แจแแแแซแแแแ แแฅแแแแ แแแแ แแขแแแ แแแ แแแแแแแก แกแแ aws_availability_zones แแแแแชแแแแ แฌแงแแ แแแแ แแ แจแแแแแ แแแแแฎแแแแแ แแแแแแฃแแจแ แแ แจแแฅแแแแ แแแกแจแ EC2 แกแแ แแแ แ แแแแแแแก แแแ แแแแขแ แแก แแ แแแกแแแแก แแแแแฅแกแแก แฌแแแแแแก แแแแแงแแแแแแ:
resource "aws_instance" "example_2" {
count = length(data.aws_availability_zones.all.names)
availability_zone = data.aws_availability_zones.all.names[count.index]
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
}
data "aws_availability_zones" "all" {}
แแก แแแแ แแกแแแ แแแ แแแ แแแฃแจแแแแแก, แ แแแแแ แแแแแแแก แแแ แแแแขแ แก แจแแฃแซแแแ แฃแแ แแแแแแแ แแแแแ แแแก แแแแแชแแแแ แฌแงแแ แแแแก. แแแแ แแ แ แ แแแฎแแแแ, แแฃ แกแแ แแแ แแแแก แ แแแแแแแแ, แ แแแแแแช แฃแแแ แจแแฅแแแแ, แแแแแแแแแแฃแแแ แแแ แแแแฃแแ แ แแกแฃแ แกแแก แแแแแแฃแจแแแแแแแ? แแแแก แกแแฉแแแแแแแแ, แฃแแแ แขแแแแกแ แแแแ random_integer แ แแกแฃแ แกแแก แแแแแงแแแแแ, แ แแแแแแช, แ แแแแ แช แกแแฎแแแแแแ แฉแแแก, แแแ แฃแแแแก แจแแแแฎแแแแแ แ แแชแฎแแก:
resource "random_integer" "num_instances" {
min = 1
max = 3
}
แแก แแแแ แฌแแ แแแฅแแแแก แจแแแแฎแแแแแ แ แแชแฎแแก 1-แแแ 3-แก แจแแ แแก. แแแแฎแแ, แ แ แแแฎแแแแ, แแฃ แจแแแแชแแแแแ แแ แ แแกแฃแ แกแแก แแแแแแแแแแ แแแแแแแงแแแแ aws_instance แ แแกแฃแ แกแแก count แแแ แแแแขแ แจแ:
resource "aws_instance" "example_3" {
count = random_integer.num_instances.result
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
}
แแฃ แแ แแแแแ แแฌแแ แแแแแ แขแแ แแคแแ แแฃแ แแแแแแก, แแแแฆแแแ แจแแแแแ แจแแชแแแแแก:
Error: Invalid count argument
on main.tf line 30, in resource "aws_instance" "example_3":
30: count = random_integer.num_instances.result
The "count" value depends on resource attributes that cannot be determined until apply, so Terraform cannot predict how many instances will be created. To work around this, use the -target argument to first apply only the resources that the count depends on.
Terraform แแแแแฎแแแก, แ แแ count แแ for_each แแแแแแแแแแแก แแแแแแแแแก แคแแแแจแ, แกแแแแ แ แแแแ แ แแกแฃแ แกแ แจแแแฅแแแแแ แแ แจแแแชแแแแแ. แแก แแแจแแแแก, แ แแ count แแ for_each แจแแแซแแแแ แแฎแแแแแแก แแแขแแ แแแแแก, แชแแแแแแแก, แแแแแชแแแแ แฌแงแแ แแแแก แแ แ แแกแฃแ แกแแแแก แกแแแแกแแช แแ (แกแแแแ แแแแ แกแแแ แซแ แจแแแซแแแแ แแแแแกแแแฆแแ แแก แแแแแแแแแก แแ แแก), แแแแ แแ แแ แ แแแแแแแแแ แ แแกแฃแ แกแแแแก แแแแแแแแแ แชแแแแแแแก.
count แแ for_each แแ แจแแแซแแแแ แแแแแงแแแแแฃแ แแฅแแแก แแแแฃแแแก แแแแคแแแฃแ แแชแแแจแ
แแแแกแแ แจแแแซแแแแ แแแแแฉแแแแ แชแแฃแแแแ, แแแแแแขแแ แแแแแแแก แแแ แแแแขแ แ แแฅแแแแ แแแแฃแแแก แแแแคแแแฃแ แแชแแแจแ:
module "count_example" {
source = "../../../../modules/services/webserver-cluster"
count = 3
cluster_name = "terraform-up-and-running-example"
server_port = 8080
instance_type = "t2.micro"
}
แแก แแแแ แชแแแแแแก แแแแแแงแแแแก แ แแแแแแแแ แแแแฃแแแก แจแแแแแ, แ แแแ แจแแฅแแแแก แแแแกแแ แแแ -แแแแกแขแแ แฃแแ แ แแกแฃแ แกแแก แกแแแ แแกแแ. แแ แจแแแซแแแแ แแแแญแแ แแแ แแแแฃแแแก แแแแแแจแแ แแแ แกแฃแ แแแแแกแแแแแ แแแฎแแแแ แแแแแแฃแ แ แแแ แแแแแแก แกแแคแฃแซแแแแแ แแแกแ แแแแแแแก แแแ แแแแขแ แแก 0-แแ แแแงแแแแแแ. แแก แจแแแซแแแแ แแแแแแ แฃแ แแแแก แฐแแแแก, แแแแ แแ แแฅแแแ แแแแฆแแแ แแ แจแแชแแแแแก แขแแ แแคแแ แแฃแแ แแแแแแก แแแจแแแแแกแแก:
Error: Reserved argument name in module block
on main.tf line 13, in module "count_example":
13: count = 3
The name "count" is reserved for use in a future version of Terraform.
แกแแแฌแฃแฎแแ แแ, Terraform 0.12.6-แแแ แแแแฃแแแก แ แแกแฃแ แกแจแ count แแ for_each-แแก แแแแแงแแแแแ แแ แแ แแก แแฎแแ แแแญแแ แแแ. Terraform 0.12 แแแแแจแแแแแก แจแแแแจแแแแแแก แแแฎแแแแแ (http://bit.ly/3257bv4), HashiCorp แแแแแแแก แแแแแแแแจแ แแ แจแแกแแซแแแแแแแแก แแแแแขแแแแก, แแกแ แ แแ, แแแแกแแ แแแฎแแแแแ, แแฃ แ แแแแก แฌแแแแแแฎแแแ แแ แฌแแแแก, แแก แจแแแซแแแแ แฃแแแ แฎแแแแแกแแฌแแแแแ แแงแแก. แแแแแแแแแแแแแ แแแกแแ แแแแแแ,
แแฃแแแแแแ แจแแคแแ แฎแแแแก แจแแแฆแฃแแแแแ
ASG-แแแ แแแแแแแแชแแแจแ create_before_destroy แแแแแแก แแแแแงแแแแแ แจแแกแแแแจแแแแ แแแแแกแแแแแแ แแฃแแแแแแ แจแแคแแ แฎแแแแก แแแแแแแแแแก แจแแกแแฅแแแแแแ, แแแ แแ แแ แแ แกแแคแ แแฎแแแแกแ: แแแขแแกแแแแแ แแแแก แฌแแกแแแ แแ แแ แแก แแฎแแ แแแญแแ แแแ. แแ แฃแคแ แ แแฃแกแขแแ แ แแ แแแฅแแแ, แแก แแฆแแแแแแก ASG แแแแแก min_size-แแแ แงแแแแ แแแแแแแแแแกแแก, แ แแช แจแแแซแแแแ แแงแแก แแ แแแแแแ, แแฃ แแงแแแแแแแ แแแขแแกแแแแแ แแแแก แฌแแกแแแก แแแจแแแแฃแแ แกแแ แแแ แแแแก แ แแแแแแแแแก แแแกแแแ แแแแแ.
แแแแแแแแแ, webserver-cluster แแแแฃแแ แจแแแชแแแก แฌแงแแแ aws_autoscaling_schedule แ แแกแฃแ แกแก, แ แแแแแแช แแแแแก 9 แกแแแแแ แแ แแแก แกแแ แแแ แแแแก แ แแแแแแแแแก แแแแกแขแแ แจแ แแ แแแแ แแแแแแ. แแฃ แแฅแแแ แแแแแแแแกแแแ, แแแฅแแแ, แแแแแก 11 แกแแแแแ, แแฎแแแ ASG แฉแแแขแแแ แแแแ แแฎแแแแ แแ แ แกแแ แแแ แแ, แแแแ แ แแแ แแ แแกแ แแแ แฉแแแ แแแแ แ แแฆแแก แแแแแก 9 แกแแแแแแแ.
แแ แจแแแฆแฃแแแแก แแแแแแแ แแชแแแแแ แจแแกแแซแแแแแแแ แ แแแแแแแแ แแแแ.
- แจแแชแแแแแ แแแแแแแ แแแแก แแแ แแแแขแ แ aws_autoscaling_schedule-แจแ 0 9 * * * (โแแแแแก 9 แกแแแแแ แกแแ แแแแโ) แแแแฎแแแแแแ 0-59 9-17 * * * (โแแ แแแแแ แงแแแแ แฌแฃแแก แแแแแก 9 แกแแแแแแแ แกแแฆแแแแก 5 แกแแแแแแแโ). แแฃ ASG-แก แฃแแแ แแฅแแก แแแ แกแแ แแแ แ, แแ แแแขแแกแแแแแ แแแแก แฌแแกแแก แฎแแแแฎแแ แแแจแแแแ แแ แแคแแ แก แจแแชแแแแก, แ แแช แฉแแแ แแแแแแ. แแแแ แแ แแฃ ASG แแฎแแแฎแแ แแแแแแแแ, แแก แฌแแกแ แฃแแ แฃแแแแแงแแคแก, แ แแ แแแฅแกแแแฃแ แแ แ แฌแฃแแจแ แแแกแ แกแแ แแแ แแแแก แ แแแแแแแแ แแแก แแแแฆแฌแแแก. แแก แแ แแ แแก แแแแแแแแ แแแแแแแขแฃแ แ แแแแแแแ แแ แแแแแ แแแแแฎแขแแแแแแ แแแแแแ แแ แกแแ แแแ แแ แแ แฃแแแ แแกแแแ แจแแแซแแแแ แแแแแแฌแแแแก แแ แแแแแแแแ แแแแฎแแแ แแแแแแแกแแแแก.
- แจแแฅแแแแแ แแแ แแแแฃแแ แกแแ แแแขแ, แ แแแแแแช แแงแแแแแก AWS API-แก ASG-แจแ แแฅแขแแฃแ แ แกแแ แแแ แแแแก แ แแแแแแแแแก แแแกแแแแแแแ, แแแ แแแแ แแแก แแแแแชแแแแ แแแ แ แฌแงแแ แแก แแแแแงแแแแแแ (แแฎแแแแ โแแแ แ แแแแแชแแแแ แฌแงแแ แโ 249 แแแแ แแแ) แแ แแแแงแแแแ ASG-แแก แกแแกแฃแ แแแแ_แขแแแแแแแแก แแแ แแแแขแ แ แแแแ แฃแแแแฃแ แแแแจแแแแแแแแแ แกแชแแแแ แ. แแ แแแแ, แงแแแแแ แแฎแแแ ASG แแแกแขแแแชแแ แงแแแแแแแแก แแแฃแจแแแแแก แแแแแ แกแแแซแแแแ แแ, แ แแแแ แช แแ แกแแแฃแแ Terraform แแแแ แแ แแ แแฃแแแแก แแแก แจแแแแ แฉแฃแแแแแก.
แ แ แแฅแแ แฃแแแ, Terraform-แก แแแแแแฃแ แแ แแฅแแแแแแ แฉแแจแแแแแฃแแ แแฎแแ แแแญแแ แ แแฃแแแแแแ แจแแคแแ แฎแแแแก แแแแแแแแแแกแแแแก, แแแแ แแ 2019 แฌแแแก แแแแกแแก แแแแแแแ แแแแแ, HashiCorp-แแก แแฃแแแก แแ แฐแฅแแแแ แแแแแแแ แแ แคแฃแแฅแชแแแก แแแแแขแแแแก (
แกแฌแแ แ แแแแแ แจแแแซแแแแ แฌแแ แฃแแแขแแแแแ แแแแฎแแ แชแแแแแแก
แแแแฏแแ แแแแแแก แแ แซแแแแแ แแฌแแ แแแแแก แแแแแแฃแ แแ แกแฌแแ แแแแแแแแแแก แแแแแแก, แแแแ แแ แแแแแชแฎแแแแก แแ แซแแแแแ แแแ แฃแแแแก แจแแชแแแแแก. แกแชแแแแ, แแแแแแแแแ, แแแแแแขแแ aws_iam_user แ แแกแฃแ แกแ แแแแแ แกแแฎแแแแ, แ แแแแแกแแช แแงแแแแแแแ แแ-2 แแแแจแ แแแ แ แจแแฅแแแแแ IAM แแแแฎแแแ แแแแแกแแแแก:
resource "aws_iam_user" "existing_user" {
# ะะพะดััะฐะฒััะต ััะดะฐ ะธะผั ัะถะต ัััะตััะฒัััะตะณะพ ะฟะพะปัะทะพะฒะฐัะตะปั IAM,
# ััะพะฑั ะฟะพะฟัะฐะบัะธะบะพะฒะฐัััั ะฒ ะธัะฟะพะปัะทะพะฒะฐะฝะธะธ ะบะพะผะฐะฝะดั terraform import
name = "yevgeniy.brikman"
}
แแฎแแ, แแฃ แแฅแแแ แแฌแแ แแแแแ แแแแแแก แแ แซแแแแแแก, Terraform แแแแแกแชแแแก แแ แแ แจแแฎแแแแแ แแแแแแ แฃแ แแแแแแแแแแก แแแแแแก:
Terraform will perform the following actions:
# aws_iam_user.existing_user will be created
+ resource "aws_iam_user" "existing_user" {
+ arn = (known after apply)
+ force_destroy = false
+ id = (known after apply)
+ name = "yevgeniy.brikman"
+ path = "/"
+ unique_id = (known after apply)
}
Plan: 1 to add, 0 to change, 0 to destroy.
แแฃ แแฅแแแ แแแฃแจแแแ แแแแแชแฎแแแแก แแ แซแแแแแ, แแแแฆแแแ แจแแแแแ แจแแชแแแแแก:
Error: Error creating IAM User yevgeniy.brikman: EntityAlreadyExists:
User with name yevgeniy.brikman already exists.
on main.tf line 10, in resource "aws_iam_user" "existing_user":
10: resource "aws_iam_user" "existing_user" {
แแ แแแแแแ, แ แ แแฅแแ แฃแแแ, แแก แแ แแก, แ แแ IAM แแแแฎแแแ แแแแแ แแ แกแแฎแแแแ แฃแแแ แแ แกแแแแแก. แแ แแก แจแแแซแแแแ แแแฎแแแก แแ แ แแฎแแแแ IAM-แแก แแแแฎแแแ แแแแแแก, แแ แแแแ แแแแฅแแแก แแแแแกแแแแ แ แแกแฃแ แกแก. แจแแกแแซแแแแแแแ, แ แแ แแแแแแ แจแแฅแแแ แแก แ แแกแฃแ แกแ แฎแแแแ แแ แแ แซแแแแแแก แฎแแแแก แแแแแงแแแแแแ, แแแแ แแ แแแแแกแแแแ แจแแแแฎแแแแแจแ, ID-แแแแก แจแแกแแแแแแกแแแ แแฌแแแแก แแแแคแแแฅแขแแแก. แแ แจแแชแแแแแก แแ แแแแแ แแแ แแแชแแแ, แ แแแแแแช แฎแจแแ แแ แแแแแ แแแแก Terraform-แจแ แแฎแแแแแกแฃแแแแก.
แแแแแแ แ แแก แแ แแก, แ แแ terraform plan แแ แซแแแแแ แแแแแแแกแฌแแแแแก แแฎแแแแ แแ แ แแกแฃแ แกแแแก, แ แแแแแแแช แแแแแแแแฃแแแ Terraform State แคแแแแจแ. แแฃ แ แแกแฃแ แกแแแ แแฅแแแแแ แกแฎแแ แแแแ (แแแแแแแแแ, แฎแแแแ AWS แแแแกแแแแ แแแฌแแแแฃแแแแแ), แแกแแแ แแ แแฆแแแฉแแแแแแแ แกแแฎแแแแฌแแคแ แคแแแแจแ แแ แแแแขแแ Terraform แแ แแแแแแแแแกแฌแแแแแก แแแ แแแแแแก แแ แซแแแแแแก แจแแกแ แฃแแแแแกแแก. แจแแแแแแ, แแแแแ, แ แแแแแแช แแ แแ แจแแฎแแแแแ แกแฌแแ แ แฉแแแก, แฌแแ แฃแแแขแแแแแ แแฆแแแฉแแแแแ.
แแฅแแแแ แแ แ แแแแแแแแแ แฃแแแ แแแกแฌแแแแแ.
- แแฃ แฃแแแ แแแแฌแงแแ Terraform-แแแ แแฃแจแแแแ, แแ แแแแแแงแแแแ แกแฎแแ แแ แแคแแ แ. แแฃ แแฅแแแแ แแแคแ แแกแขแ แฃแฅแขแฃแ แแก แแแฌแแแ แแแแ แแแแ Terraform-แแก แแแแแงแแแแแแ, แแฅแแแ แแฆแแ แจแแแแซแแแแ แแแกแ แฎแแแแ แจแแชแแแ. แฌแแแแแฆแแแแ แจแแแแฎแแแแแจแ, แแฅแแแ แแ แ แแฎแแแแ แ แแกแแแแ Terraform-แแก แฃแชแแแฃแ แจแแชแแแแแแก, แแ แแแแ แฃแแ แงแแคแ IaC-แแก แแแแ แกแแ แแแแแแก, แ แแแแแ แแแแ แแฆแแ แแฅแแแแ แแฅแแแแ แแแคแ แแกแขแ แฃแฅแขแฃแ แแก แแฃแกแขแ แฌแแ แแแแแแแ.
- แแฃ แฃแแแ แแแฅแแ แแแคแ แแกแขแ แฃแฅแขแฃแ แ, แแแแแแงแแแแ แแแแแ แขแแก แแ แซแแแแแ. แแฃ แแฅแแแ แแฌแงแแแ Terraform-แแก แแแแแงแแแแแแก แแ แกแแแฃแแ แแแคแ แแกแขแ แฃแฅแขแฃแ แแ, แจแแแแซแแแแ แแแแแแขแแ แแก แกแแฎแแแแฌแแคแ แคแแแแจแ terraform import แแ แซแแแแแแก แแแแแงแแแแแแ. แแ แแแแ Terraform แแแแแแแก แ แ แแแคแ แแกแขแ แฃแฅแขแฃแ แแก แแแ แแแแ แกแแญแแ แ. แแแแแ แขแแก แแ แซแแแแแ แแฆแแแก แแ แแ แแฃแแแแขแก. แแแ แแแแ แแ แแก แ แแกแฃแ แกแแก แแแกแแแแ แแ แแฅแแแแก แแแแคแแแฃแ แแชแแแก แคแแแแแแจแ. แกแแแขแแฅแกแ แแฅ แแแแแแ, แ แแช แ แแกแฃแ แกแแก แแแฃแแแแแก: _. (แ แแแแ แช aws_iam_user.existing_user). แแแแ แ แแ แแฃแแแแขแ แแ แแก แแแแแ แขแแ แแแฃแแ แ แแกแฃแ แกแแก ID. แแแฅแแแ, แ แแกแฃแ แกแแก ID aws_iam_user แแ แแก แแแแฎแแแ แแแแแก แกแแฎแแแ (แแแแแแแแแ, yevgeniy.brikman), แแ แ แแกแฃแ แกแแก ID aws_instance แแ แแก EC2 แกแแ แแแ แแก ID (แ แแแแ แช i-190e22e5). แ แแแแ แฎแแแแ แ แแกแฃแ แกแแก แแแแแ แขแ, แ แแแแ แช แฌแแกแ, แแแแแแแแฃแแแ แแแแฃแแแแขแแชแแแจแ แแแกแ แแแแ แแแก แแแแแจแ.
แฅแแแแแ แแแชแแแฃแแแ แแแแแ แขแแก แแ แซแแแแแ, แ แแแแแแช แกแแแฅแ แแแแแแแก aws_iam_user แ แแกแฃแ แกแก, แ แแแแแแช แแแแแแขแแ แแฅแแแแก Terraform-แแก แแแแคแแแฃแ แแชแแแจแ IAM แแแแฎแแแ แแแแแแแ แแ แแแ แแ-2 แแแแจแ (แ แ แแฅแแ แฃแแแ, แแฅแแแแ แกแแฎแแแแก แฉแแแแชแแแแแ yevgeniy.brikman-แแ):
$ terraform import aws_iam_user.existing_user yevgeniy.brikman
Terraform แแแฃแ แแแแแก AWS API-แก แแฅแแแแ IAM แแแแฎแแแ แแแแแก แแแกแแซแแแแแ แแ แจแแฅแแแแก แกแแฎแแแแฌแแคแ แคแแแแแก แแกแแชแแแชแแ แแแกแกแ แแ aws_iam_user.existing_user แ แแกแฃแ แกแก แจแแ แแก แแฅแแแแก Terraform-แแก แแแแคแแแฃแ แแชแแแจแ. แแแแแ แแแแ, แ แแชแ แแแแแแก แแ แซแแแแแแก แแแฃแจแแแ, 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. แแแแแแแแแแแ, แแกแฃแ แ แแฅแแแแ แกแแ แแแกแแก แแแแแ แฅแแแแ แแแ แแ. แแก แชแแแแแแแ แจแแแซแแแแ แขแ แแแแแแฃแ แ แฉแแแแแก, แแแแ แแ แกแแแแแแแแแแจแ แจแแแซแแแแ แแแแแแฌแแแแก แกแแ แแแกแแก แจแแคแแ แฎแแแ.
แคแแฅแขแแ, แ แแ webserver-cluster แแแแฃแแ แแงแแแแแก cluster_name แชแแแแแก แแแแ แ แแ แ แแกแฃแ แกแแแจแ, แแแ แจแแ แแก แฃแกแแคแ แแฎแแแแแก แแ แ แฏแแฃแคแแก แกแแฎแแแแก แแแ แแแแขแ แก แแ ALB:
resource "aws_lb" "example" { name = var.cluster_name load_balancer_type = "application" subnets = data.aws_subnet_ids.default.ids security_groups = [aws_security_group.alb.id] }
แแฃ แแฅแแแ แจแแชแแแแ แกแแฎแแแแก แแแ แแแแขแ แก แ แแกแฃแ แกแแ, Terraform แฌแแจแแแก แแ แ แแกแฃแ แกแแก แซแแแ แแแ แกแแแก แแ แแแก แแแชแแแแ แจแแฅแแแแก แแฎแแแก. แแแแ แแ แแฃ แแก แ แแกแฃแ แกแ แแ แแก ALB, แแแก แฌแแจแแแกแ แแ แแฎแแแ แแแ แกแแแก แฉแแแแขแแแ แแแแก แจแแ แแก, แแฅแแแ แแ แแแฅแแแแแ แแแฅแแแแแแ, แ แแ แแแแแแแกแแแแ แแแ แขแ แแคแแแ แแฅแแแแก แแแ แกแแ แแแ แแ. แแแแแแแแฃแ แแ, แแฃ แฃแกแแคแ แแฎแแแแแก แฏแแฃแคแ แฌแแแจแแแแ, แแฅแแแแ แกแแ แแแ แแแ แแแแฌแงแแแแ แแแแแกแแแแ แ แฅแกแแแแก แขแ แแคแแแแก แฃแแ แงแแคแแก แแฎแแแ แฏแแฃแคแแก แจแแฅแแแแแแ.
แ แแคแแฅแขแแ แแ แแแแก แแแแแ แแ แแ แขแแแ, แ แแแแแแช แจแแแซแแแแ แแแแแแแขแแ แแกแแ, แแ แแก Terraform ID-แแก แจแแชแแแ. แแแแแแแแแ, แแแแฆแแ aws_security_group แ แแกแฃแ แกแ แแแ แกแแ แแแ แแก แแแแกแขแแ แจแ:
resource "aws_security_group" "instance" { # (...) }
แแ แ แแกแฃแ แกแแก แแแแแขแแคแแแแขแแ แก แแฌแแแแแ แแแกแขแแแชแแ. แฌแแ แแแแแแแแแ, แ แแ แ แแคแแฅแขแแ แแ แแแแก แแ แแก แแแแแฌแงแแแขแแ แแแกแ แจแแชแแแ แฃแคแ แ แแแกแแแแแ (แแฅแแแแ แแแ แแ) แกแแฎแแแแ cluster_instance:
resource "aws_security_group" "cluster_instance" { # (...) }
แ แ แแแฎแแแแ แแแแแก? แแแ แแแแแ: แจแแคแแ แฎแแแ.
Terraform แแแแแจแแ แแแก แแแแแแฃแแ แ แแกแฃแ แกแแก ID-แก แฆแ แฃแแแแก แแ แแแแแแแ แแก ID-แแแ. แแแแแแแแแ, iam_user แแกแแชแแ แแแแ AWS IAM แแแแฎแแแ แแแแแก ID-แแแ, แฎแแแ aws_instance แแกแแชแแ แแแแ AWS EC2 แกแแ แแแ แแก ID-แแแ. แแฃ แแฅแแแ แจแแชแแแแ แ แแกแฃแ แกแแก ID-แก (แแแฅแแแ, แแแแแแแแแ, cluster_instance-แแ, แ แแแแ แช แแก แฎแแแแ aws_security_group-แแ), Terraform-แแ แแแแแฉแแแแแ, แแแแฅแแก แฌแแจแแแแ แซแแแแ แ แแกแฃแ แกแ แแ แแแแแแขแแ แแฎแแแ. แแฃ แแ แชแแแแแแแแแก แแแแแแงแแแแแ, Terraform แฌแแจแแแก แฃแกแแคแ แแฎแแแแแก แซแแแ แฏแแฃแคแก แแ แจแแฅแแแแก แแฎแแแก, แฎแแแ แแฅแแแแ แกแแ แแแ แแแ แแแแฌแงแแแแ แแแแแกแแแแ แ แฅแกแแแแก แขแ แแคแแแแก แฃแแ แงแแคแแก.
แแฅ แแ แแก แแแฎแ แซแแ แแแแแ แแแแแแแแแ, แ แแแแแแช แฃแแแ แแแแแฆแแ แแ แแแกแแฃแกแแแแแ.
- แงแแแแแแแแก แแแแแแงแแแแ แแแแแแก แแ แซแแแแแ. แแแก แจแแฃแซแแแ แแแแแแแแแแแก แงแแแแ แแก แแแแแ. แงแฃแ แแแฆแแแแ แแแแแฎแแแแ แแแก แจแแแแแแแก แแ แงแฃแ แแแฆแแแ แแแแฅแชแแแ แกแแขแฃแแชแแแแก, แ แแแแกแแช Terraform แแแแแแแก แฌแแจแแแแก แ แแกแฃแ แกแแแ, แ แแแแแแแช, แกแแแแ แแฃแแแ, แแ แฃแแแ แฌแแแจแแแแก.
- แจแแฅแแแแแ แฌแแจแแแแแ. แแฃ แแกแฃแ แ แจแแชแแแแแ แ แแกแฃแ แกแ, แแแ แแแ แแแคแแฅแ แแแ, แแญแแ แแแแแ แแฃ แแ แ แฉแแแแชแแแแแแก แจแแฅแแแ แแ แแแแแแแแก แฌแแจแแแแแ. แแฃ แแแกแฃแฎแ แแแแแแแแแ, create_before_destroy แแแแแฎแแแ แแแแ. แแแแแ แจแแแแแแก แแแฆแฌแแแ แจแแกแแซแแแแแแแ แฎแแแแ แแ แ แแแแแฏแแก แจแแกแ แฃแแแแแ: แฏแแ แแแแแแขแแ แแฎแแแ แ แแกแฃแ แกแ แแแแคแแแฃแ แแชแแแจแ แแ แแแฃแจแแแ แแแแแชแฎแแแแก แแ แซแแแแแ, แจแแแแแ แแแแแฆแแ แซแแแแ แ แแกแฃแ แกแ แแแแคแแแฃแ แแชแแแแแ แแ แแแแแ แแแแแแงแแแแ แแแแแชแฎแแแแก แแ แซแแแแแ.
- แแแแแขแแคแแแแขแแ แแแแก แจแแชแแแ แแแแแฎแแแก แแแแแแแ แแแแแก แจแแชแแแแก. แแฃ แแกแฃแ แ แ แแกแฃแ แกแแแ แแกแแชแแ แแแฃแแ ID-แแก แจแแชแแแ (แแแแแแแแแ, แแแแแ แฅแแแแ aws_security_group แแแแแแแแแแแ cluster_instance-แแ) แ แแกแฃแ แกแแก แฌแแจแแแกแ แแ แแแกแ แแฎแแแ แแแ แกแแแก แจแแฅแแแแก แแแ แแจแ, แแฅแแแ แฃแแแ แแแแแแฎแแแ Terraform State แคแแแแ แจแแกแแแแแแกแแ. แแ แแกแแแแก แแแแแแแแ แแก แฎแแแแ - แแแแแแงแแแแ แขแแ แแคแแ แแฃแแ แแแแแแแ แแแแแก แแ แซแแแแแ. แแแแแขแแคแแแแขแแ แแแแก แกแแฎแแแแก แแแแแ แฅแแแแแกแแก, แแฅแแแ แฃแแแ แแแฃแจแแแ terraform state mv แแ แซแแแแแ, แ แแแแแกแแช แแฅแแก แจแแแแแแ แกแแแขแแฅแกแ:
terraform state mv <ORIGINAL_REFERENCE> <NEW_REFERENCE>
ORIGINAL_REFERENCE แแ แแก แแแแแฎแแขแฃแแแแ, แ แแแแแแช แแฎแแแ แ แแกแฃแ แกแก แแแกแ แแแแแแแแแแแ แคแแ แแแ แแ NEW_REFERENCE แแ แแก แแก, แกแแแแช แแกแฃแ แ แแแกแ แแแแแขแแแ. แแแแแแแแแ, aws_security_group แฏแแฃแคแก แแแกแขแแแชแแแแแ 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 แฌแแจแแแก แซแแแ แ แแกแฃแ แกแก แแ แแแก แแแแแแแก แจแแฅแแแแก แแฎแแแก. แแแแแแฃแแ แ แแกแฃแ แกแแก แแแแ แแ แฉแแแฃแแแแ แแ แแแฃแแแแแแก แแแแแ, แแฃ แ แ แฎแแแแ แแแแแ แแขแฃแแ แแแ แแแแขแ แแก แจแแชแแแแกแแก, แแแแขแแ แแแ แฌแแฃแแแแ, แ แแ แจแแแแแฌแแแ แแแแฃแแแแขแแชแแ. แงแแแแแแแแก แแแแแแงแแแแ แแแแแแก แแ แซแแแแแ แแ แแแแแฎแแแแ แกแขแ แแขแแแแ create_before_destroy.
แแแแแแแแแแฃแแ แแแแแแแแแแ แฃแแแแ แจแแแกแแแแแแแ... แแแแแแแแแแแก
แฆแ แฃแแแแแแแ แแ แแแแแแแ แแแแก แแแแแแ แแ API, แ แแแแ แแชแแ AWS, แแกแแแฅแ แแแฃแแแ แแ แแฅแแก แแแแแแแแแแฃแแ แแแแแแแแแแ แฃแแแแ. แแกแแแฅแ แแแฃแแแแ แแแจแแแแก, แ แแ แแแขแแ แคแแแกแก แจแแฃแซแแแ แแแฃแงแแแแแแแแ แแแแแ แฃแแแก แแแกแฃแฎแ แแแแฎแแแแแแ แแแฅแแแแแแแก แแแกแ แฃแแแแแแแ แแแแแแแแแก แแแ แแจแ. แแแแแแแแแแฃแแ แแแแแแแแแแ แฃแแแแ แแแจแแแแก, แ แแ แชแแแแแแแแแแก แแแแ แชแแแแแแก แจแแแซแแแแ แแ แ แแแกแญแแ แแแก แแแแ แกแแกแขแแแแจแ; แกแแแแ แแก แฎแแแแ, แแฅแแแแ แแแกแฃแฎแแแ แจแแแซแแแแ แแงแแก แแ แแแแแแแแแแแ แฃแแ แแ แแแแแแแแแแฃแแแ แแแแแ, แแฃ แ แแแแแ แแแแแชแแแแ แฌแงแแ แแก แ แแแแแแ แแแกแฃแฎแแแก แแฅแแแแก API แแแ แแแก.
แฌแแ แแแแแแแแแ, แแแแแแแแแ, แ แแ แแฅแแแ แฃแ แแแแแ API AWS-แก แแ แกแแฎแแแ แแแก แจแแฅแแแแก EC2 แกแแ แแแ แ. API แแแแแ แฃแแแแก "แฌแแ แแแขแแแฃแ" แแแกแฃแฎแก (201 แจแแฅแแแแแแ) แแแแฅแแแก แแงแแกแแแ แแ, แแแแแ แกแแ แแแ แแก แจแแฅแแแแก แแแแแแแแแก แแแ แแจแ. แแฃ แแฅแแแ แชแแแแแแ แแแกแแแ แแแแแแจแแ แแแแก, แแก แแแแฅแแแก แแแ แแแฎแแ แฎแแแแ, แ แแแแแ แแ แแ แแก 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 application, แงแแแแแคแแ แ แฃแแแ แแแฃแจแแแก, แ แแแแแ แแ แแ แแแกแแแแก แแแคแแ แแแชแแ แฃแแแ แแแแ แชแแแแแแ แแแแ แกแแกแขแแแแจแ.
แแก แแแฌแงแแแขแ แฌแแ แแแแแแแแแแ แแแแแแ แแ แแแแแแแก แฌแแแแแแแ
"Terraform: แแแคแ แแกแขแ แฃแฅแขแฃแ แ แแแแแก แแแแแแ" .
แฌแงแแ แ: www.habr.com