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