๋ฃจํ, if ๋ฌธ, ๋ฐฐํฌ ๊ธฐ์ ๊ณผ ๊ด๋ จ๋ ํจ์ ์ ๋น๋กฏํ์ฌ Terraform ์ ์ฒด์ ์ํฅ์ ๋ฏธ์น๋ ๋ณด๋ค ์ผ๋ฐ์ ์ธ ๋ฌธ์ ๋ฅผ ํฌํจํ์ฌ ๋ช ๊ฐ์ง ํจ์ ์ ๊ฐ์กฐํด ๋ณด๊ฒ ์ต๋๋ค.
- count ๋ฐ for_each ๋งค๊ฐ๋ณ์์๋ ์ ํ์ด ์์ต๋๋ค.
- ๋ค์ดํ์ ์๋ ๋ฐฐํฌ ์ ํ
- ์ข์ ๊ณํ์ด๋ผ๋ ์คํจํ ์ ์๋ค.
- ๋ฆฌํฉํ ๋ง์๋ ํจ์ ์ด ์์ ์ ์์ต๋๋ค.
- ์ง์ฐ๋ ์ผ๊ด์ฑ์ ์ง์ฐ๊ณผ ์ผ์นํฉ๋๋ค.
count ๋ฐ for_each ๋งค๊ฐ๋ณ์์๋ ์ ํ์ด ์์ต๋๋ค.
์ด ์ฅ์ ์์ ์์๋ ๋ฃจํ์ ์กฐ๊ฑด ๋ ผ๋ฆฌ์์ count ๋งค๊ฐ๋ณ์์ for_each ํํ์์ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉํฉ๋๋ค. ์ด๋ฌํ ๊ธฐ์ ์ ์ข์ ์ฑ๊ณผ๋ฅผ ๋ณด์ด์ง๋ง, ๋ ๊ฐ์ง ์ค์ํ ํ๊ณ๊ฐ ์๋ค๋ ์ ์ ์์์ผ ํฉ๋๋ค.
- count๋ for_each์์๋ ๋ฆฌ์์ค ์ถ๋ ฅ ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์์ต๋๋ค.
- ๋ชจ๋ ๊ตฌ์ฑ์์๋ count์ for_each๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
count ๋๋ for_each์์๋ ๋ฆฌ์์ค ์ถ๋ ฅ ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์์ต๋๋ค.
์ฌ๋ฌ ๋์ EC2 ์๋ฒ๋ฅผ ๋ฐฐํฌํด์ผ ํ์ง๋ง ์ด๋ค ์ด์ ์์์ธ์ง ASG๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ง ์์ ๊ฒฝ์ฐ๋ฅผ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๊ทํ์ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ ์ ์์ต๋๋ค.
resource "aws_instance" "example_1" {
count = 3
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
}
ํ๋์ฉ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
count ๋งค๊ฐ๋ณ์๊ฐ ์ ์ ๊ฐ์ผ๋ก ์ค์ ๋์์ผ๋ฏ๋ก ์ด ์ฝ๋๋ ์๋ฌด ๋ฌธ์ ์์ด ์๋ํฉ๋๋ค. ์ฆ, apply ๋ช ๋ น์ ์คํํ๋ฉด ์ธ ๊ฐ์ EC2 ์๋ฒ๊ฐ ์์ฑ๋ฉ๋๋ค. ํ์ง๋ง ํ์ฌ AWS ์ง์ญ ๋ด์ ๊ฐ ๊ฐ์ฉ ์์ญ(AZ)์ ํ๋์ ์๋ฒ๋ฅผ ๋ฐฐํฌํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น์? aws_availability_zones ๋ฐ์ดํฐ ์์ค์์ ์์ญ ๋ชฉ๋ก์ ๋ก๋ํ ๋ค์ ๊ฐ ์์ญ์ "๋ฃจํ"๋ก ์คํํ๊ณ count ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ 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" {}
์ด ์ฝ๋๋ 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๋ฅผ ์ฌ์ฉํ์ฌ ์น ์๋ฒ ํด๋ฌ์คํฐ ๋ฆฌ์์ค์ ์ฌ๋ณธ์ ์ธ ๊ฐ ์์ฑํ๋ ค๊ณ ์๋ํฉ๋๋ค. ๋๋ ๋ชจ๋์ count ๋งค๊ฐ๋ณ์๋ฅผ 0์ผ๋ก ์ค์ ํ์ฌ ๋ถ์ธ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ชจ๋์ ์ ํ ์ฌํญ์ผ๋ก ๋ง๋ค ์ ์์ต๋๋ค. ์ด ์ฝ๋๋ ๊ด์ฐฎ์ ๋ณด์ด์ง๋ง terraform plan์ ์คํํ๋ฉด ๋ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
Error: Reserved argument name in module block
on main.tf line 13, in module "count_example":
13: count = 3
The name "count" is reserved for use in a future version of Terraform.
์ํ๊น๊ฒ๋ Terraform 0.12.6๋ถํฐ ๋ชจ๋ ๋ฆฌ์์ค์์ count๋ for_each๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ง์๋์ง ์์ต๋๋ค. 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๊ฐ๋ก ํฌ๊ฒ ๋๋ฆฌ๊ฑฐ๋ ์ค์ด๋ ๊ฒ๋ ์ฌ์ฉ์์๊ฒ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ต๋๋ค.
- ASG์ ์๋ ํ์ฑ ์๋ฒ ์๋ฅผ ํ์ธํ๊ธฐ ์ํด AWS API๋ฅผ ์ฌ์ฉํ๋ ์ฌ์ฉ์ ์ง์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค๊ณ , ์ธ๋ถ ๋ฐ์ดํฐ ์์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ํธ์ถํ๊ณ (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์ plan ๋ช ๋ น์ ์คํํ ๋ ํด๋น ๋ฆฌ์์ค๋ฅผ ๊ณ ๋ คํ์ง ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก, ์ฒซ๋์ ์ณ์ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ๊ณํ๋ ์คํจ๋ก ๋๋ ๊ฐ๋ฅ์ฑ์ด ํฝ๋๋ค.
์ฌ๊ธฐ์์ ์ป์ ์ ์๋ ๊ตํ์ ๋ ๊ฐ์ง์ ๋๋ค.
- ์ด๋ฏธ Terraform์ ์ฌ์ฉํ๊ธฐ ์์ํ๋ค๋ฉด ๋ค๋ฅธ ๊ฒ์ ์ฌ์ฉํ์ง ๋ง์ธ์. ์ธํ๋ผ์ ์ผ๋ถ๊ฐ Terraform์ ์ฌ์ฉํ์ฌ ๊ด๋ฆฌ๋๋ ๊ฒฝ์ฐ ๋ ์ด์ ์๋์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ด์ํ Terraform ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ํ์ด ์์ ๋ฟ๋ง ์๋๋ผ, ์ฝ๋๊ฐ ๋ ์ด์ ์ธํ๋ผ๋ฅผ ์ ํํ๊ฒ ํํํ์ง ๋ชปํ๋ฏ๋ก IaC์ ๋ง์ ์ด์ ์ ์ป์ ์ ์์ต๋๋ค.
- ์ด๋ฏธ ์ธํ๋ผ๊ฐ ์๋ ๊ฒฝ์ฐ import ๋ช
๋ น์ ์ฌ์ฉํ์ธ์. ๊ธฐ์กด ์ธํ๋ผ์ ํจ๊ป Terraform์ ์ฌ์ฉํ๋ ค๋ฉด terraform import ๋ช
๋ น์ ์ฌ์ฉํ์ฌ ์ํ ํ์ผ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด Terraform์์ ์ด๋ค ์ธํ๋ผ๋ฅผ ๊ด๋ฆฌํด์ผ ํ ์ง ์ ์ ์์ต๋๋ค. import ๋ช
๋ น์ ๋ ๊ฐ์ ์ธ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ฒซ ๋ฒ์งธ๋ ๊ตฌ์ฑ ํ์ผ์ ๋ฆฌ์์ค ์ฃผ์์
๋๋ค. ์ฌ๊ธฐ์ ๊ตฌ๋ฌธ์ ๋ฆฌ์์ค ๋งํฌ์ ๋์ผํฉ๋๋ค: _. (aws_iam_user.existing_user์ ๊ฐ์). ๋ ๋ฒ์งธ ์ธ์๋ ๊ฐ์ ธ์ฌ ๋ฆฌ์์ค ID์
๋๋ค. aws_iam_user ๋ฆฌ์์ค ID๊ฐ ์ฌ์ฉ์ ์ด๋ฆ(์: yevgeniy.brikman)์ด๊ณ , aws_instance ๋ฆฌ์์ค ID๊ฐ EC2 ์๋ฒ ID(์: i-190e22e5)๋ผ๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ ์ผ๋ฐ์ ์ผ๋ก ํด๋น ํ์ด์ง ํ๋จ์ ์ค๋ช
์์ ๋ช
์๋์ด ์์ต๋๋ค.
๋ค์์ 2์ฅ์์ Terraform ๊ตฌ์ฑ์ ์ถ๊ฐํ aws_iam_user ๋ฆฌ์์ค์ IAM ์ฌ์ฉ์๋ฅผ ๋๊ธฐํํ๋ ๊ฐ์ ธ์ค๊ธฐ ๋ช ๋ น์ ๋๋ค(๋ฌผ๋ก yevgeniy.brikman ๋์ ์ฌ์ฉ์ ์ด๋ฆ์ ์ฌ์ฉํ์ธ์).
$ terraform import aws_iam_user.existing_user yevgeniy.brikmanTerraform์ 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๋ก ๋ฐ๊พธ๊ณ ์ถ์ด์ก์ด์. ์ด๋ฐ ๋ณํ๋ ์ฌ์ํ ๊ฒ์ฒ๋ผ ๋ณด์ผ ์ ์์ง๋ง, ์ค์ ๋ก๋ ์๋น์ค ์ค๋จ์ ์ด๋ํ ์ ์์ต๋๋ค.
์์ ์ ์น ์๋ฒ-ํด๋ฌ์คํฐ ๋ชจ๋์ด ๋ ๋ณด์ ๊ทธ๋ฃน์ ์ด๋ฆ ๋งค๊ฐ๋ณ์์ ALB๋ฅผ ํฌํจํ ์ฌ๋ฌ ๋ฆฌ์์ค์์ 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] }๋ฆฌ์์ค์ ์ด๋ฆ ๋งค๊ฐ๋ณ์๋ฅผ ๋ณ๊ฒฝํ๋ฉด Terraform์ ํด๋น ๋ฆฌ์์ค์ ์ด์ ๋ฒ์ ์ ์ญ์ ํ๊ณ ๊ทธ ์๋ฆฌ์ ์ ๋ฒ์ ์ ๋ง๋ญ๋๋ค. ํ์ง๋ง ํด๋น ๋ฆฌ์์ค๊ฐ ALB์ธ ๊ฒฝ์ฐ, ํด๋น ๋ฆฌ์์ค๊ฐ ์ ๊ฑฐ๋ ์๊ฐ๊ณผ ์ ๋ฒ์ ์ด ๋ก๋๋ ์๊ฐ ์ฌ์ด์๋ ์น ์๋ฒ๋ก ํธ๋ํฝ์ ๋ฆฌ๋๋ ์ ํ ๋ฉ์ปค๋์ฆ์ด ์์ต๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก, ๋ณด์ ๊ทธ๋ฃน์ด ์ญ์ ๋๋ฉด ์๋ฒ๋ ์ ๊ทธ๋ฃน์ด ์์ฑ๋ ๋๊น์ง ๋ชจ๋ ๋คํธ์ํฌ ํธ๋ํฝ์ ๊ฑฐ๋ถํ๊ธฐ ์์ํฉ๋๋ค.
์ฌ๋ฌ๋ถ์ด ๊ด์ฌ์ ๊ฐ์ง ๋งํ ๋ ๋ค๋ฅธ ๋ฆฌํฉํ ๋ง์ Terraform ์๋ณ์๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด 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์ ๊ฒฝ์ฐ instance์์ cluster_instance๋ก ๋ณ๊ฒฝ) Terraform์์๋ ๊ธฐ์กด ๋ฆฌ์์ค๋ฅผ ์ญ์ ํ๊ณ ์ ๋ฆฌ์์ค๋ฅผ ์ถ๊ฐํ ๊ฒ์ผ๋ก ๊ฐ์ฃผํฉ๋๋ค. ์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ๋ฉด Terraform์ ๊ธฐ์กด ๋ณด์ ๊ทธ๋ฃน์ ์ญ์ ํ๊ณ ์ ๋ณด์ ๊ทธ๋ฃน์ ๋ง๋ค๋ฉฐ, ๊ทธ๋์ ์๋ฒ๋ ๋ชจ๋ ๋คํธ์ํฌ ํธ๋ํฝ์ ๊ฑฐ๋ถํ๊ธฐ ์์ํฉ๋๋ค.
์ด ํ ๋ก ์์ ์ป์ ์ ์๋ ๋ค ๊ฐ์ง ์ฃผ์ ๊ตํ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ํญ์ plan ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ธ์. ์ด๋ ๋ชจ๋ ๋ฌธ์ ์ ์ ๋๋ฌ๋ผ ์ ์์ต๋๋ค. ์ถ๋ ฅ์ ์ฃผ์ ๊น๊ฒ ๊ฒํ ํ๊ณ Terraform์ด ์ญ์ ํด์๋ ์ ๋ ๋ฆฌ์์ค๋ฅผ ์ญ์ ํ ๊ณํ์ธ ์ํฉ์ ํ์ ํ์ธ์.
- ์ญ์ ํ๊ธฐ ์ ์ ๋ง๋์ธ์. ๋ฆฌ์์ค๋ฅผ ๊ต์ฒดํ๋ ค๋ฉด ์๋ณธ์ ์ญ์ ํ๊ธฐ ์ ์ ๊ต์ฒด ๋ฆฌ์์ค๋ฅผ ๋ง๋ค์ด์ผ ํ๋์ง ์ ์คํ๊ฒ ์๊ฐํด๋ณด์ธ์. ๋ง์ฝ ๋๋ต์ด '์'๋ผ๋ฉด, create_before_destroy๊ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ ๋จ๊ณ๋ก ์๋์ผ๋ก ์ป์ ์ ์์ต๋๋ค. ๋จผ์ , ๊ตฌ์ฑ์ ์ ๋ฆฌ์์ค๋ฅผ ์ถ๊ฐํ๊ณ ์ ์ฉ ๋ช ๋ น์ ์คํํ ๋ค์, ๊ตฌ์ฑ์์ ์ด์ ๋ฆฌ์์ค๋ฅผ ์ ๊ฑฐํ๊ณ ์ ์ฉ ๋ช ๋ น์ ๋ค์ ์คํํฉ๋๋ค.
- ์๋ณ์๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด ์ํ๋ ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค. ๋ฆฌ์์ค๋ฅผ ์ญ์ ํ๊ณ ์ ๋ฒ์ ์ ๋ง๋ค์ง ์๊ณ ๋ฆฌ์์ค์ ์ฐ๊ฒฐ๋ ์๋ณ์๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ ๊ฒฝ์ฐ(์: aws_security_group์ ์ด๋ฆ์ instance์์ cluster_instance๋ก ๋ณ๊ฒฝ) Terraform ์ํ ํ์ผ์ ๊ทธ์ ๋ง๊ฒ ์
๋ฐ์ดํธํด์ผ ํฉ๋๋ค. ์ด ์์
์ ์ ๋๋ก ์๋์ผ๋ก ํ์ง ๋ง์ธ์. ๋์ terraform state ๋ช
๋ น์ ์ฌ์ฉํ์ธ์. ์๋ณ์์ ์ด๋ฆ์ ๋ฐ๊ฟ ๋๋ ๋ค์ ๊ตฌ๋ฌธ์ ๊ฐ๋ terraform state mv ๋ช
๋ น์ ์คํํด์ผ ํฉ๋๋ค.
terraform state mv <ORIGINAL_REFERENCE> <NEW_REFERENCE>ORIGINAL_REFERENCE๋ ๋ฆฌ์์ค๋ฅผ ํ์ฌ ํํ๋ก ์ฐธ์กฐํ๋ ํํ์์ด๊ณ , NEW_REFERENCE๋ ๋ฆฌ์์ค๋ฅผ ์ด๋ํ๋ ค๋ ์์น์ ๋๋ค. ์๋ฅผ ๋ค์ด, aws_security_group์ ์ด๋ฆ์ instance์์ cluster_instance๋ก ๋ฐ๊พธ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค.
$ terraform state mv aws_security_group.instance aws_security_group.cluster_instance์ด๋ ์ด์ ์ 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๋ฅผ ์คํํ๋ฉด ๋ชจ๋ ๊ฒ์ด ์ ๋๋ก ์๋ํ ๊ฒ์ ๋๋ค. ์ด ์์ ์๋ ์ ๋ณด๊ฐ ์์คํ ์ ์ฒด์ ํผ์ก์ ๊ฒ์ ๋๋ค.
์ด ๋ฐ์ท๋ฌธ์ Evgeny Brickman์ ์ฑ ์์ ๋ฐ์ทํ ๊ฒ์ ๋๋ค. .
์ถ์ฒ : habr.com
