๐ป Lab - Terraform in Action
๐ป Lab - Terraform in Action
ํธ์ง๊ธฐ์์ ์ด๊ธฐ
- VSCode๋ฅผ ์คํํ๊ณ File(ํ์ผ) ๋ฉ๋ด์์
Open Folder...
๋ฅผ ํด๋ฆญํฉ๋๋ค. - ์์ ๋ฐ์ ๋๋ ํ ๋ฆฌ๋ด์
lab02
์ ์ด์ด์ค๋๋ค.
๐ Terraform Graph
@slidestart blood
Terraform Graph๋ ๋ชจ๋ ์ธํ๋ผ์ ๋ํ ์๊ฐ์ ํํ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
์ด๋ ๋ณ๊ฒฝ์ ์ํฅ์ ๋ฐ์ ์ข ์์ฑ ๋ฌธ์ ๋๋ ๋ฆฌ์์ค๋ฅผ ์ฐพ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
@slideend
๐ป ๋ค์ terraform graph๋ช ๋ น์ ์คํํด ๋ณด์ธ์.
์๋ก์ด Workspace ์ด๋ฏ๋ก, terraform init
์ ์ํํฉ๋๋ค.
terraform init
terraform graph
๋ฅผ ์ํํฉ๋๋ค.
terraform graph
๊ทธ๋ฌ๋ฉด digraph
๋ก ์์ํ๋ ์ธํ๋ผ์ ์๊ฐ์ ๋งต์ ๋ง๋๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ์ฝ๋๊ฐ ์์ฑ๋ฉ๋๋ค. ๊ทธ๋ํ ๋ฐ์ดํฐ๋ DOT ๊ทธ๋ํ ์ค๋ช
์ธ์ด ํ์ ์
๋๋ค. ๋ฌด๋ฃ Blast Radius ๋๊ตฌ๋ฅผ ํฌํจํ์ฌ ์ด ๋ฐ์ดํฐ๋ฅผ ์๊ฐํํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๋ช ๊ฐ์ง ๊ทธ๋ํ ๋๊ตฌ๊ฐ ์์ต๋๋ค.
- Blast Radius๋ ์ค์นํ ํด์ ๋๋ค.
- Graphviz๋ DOT ๊ทธ๋ํ ์ค๋ช
์ธ์ด๋ฅผ ํ์ํด์ฃผ๋ ํด์
๋๋ค.
- https://dreampuf.github.io/GraphvizOnline/ ์ ์์
digraph
๋ก ์์ํ๋ ๋ด์ฉ์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ๊ณ ์ด๋ค ๊ทธ๋ฆผ์ด ๋์ค๋์ง ํ์ธํด ๋ด ๋๋ค. - ์ธํ๋ผ์ ๋ํ Terraform ๊ทธ๋ํ๋ฅผ ์ดํด๋ณด์ญ์์ค. ์ข
์์ฑ์ด ์๋์ผ๋ก ๋งคํ๋ฉ๋๋ค.
- https://dreampuf.github.io/GraphvizOnline/ ์ ์์
์จ๋ผ์ธ์ Terraform์ ์์ ์ ์๊ฐํํด์ฃผ๋ ์ฌ๋ฌ๊ฐ์ง ํด์ด ์์ต๋๋ค. ๊ฐํน plan ํ์ผ์ ์๊ตฌํ๋ ํด์ด ์๋ค๋ฉด ์ฃผ์ํ์ญ์์ค. ๋ฏผ๊ฐํ ์ ๋ณด๊ฐ ํฌํ๋ plan์ ๊ฒฝ์ฐ ๋ณด์์ ์ผ๋ก ์ํํ ์ ์์ต๋๋ค. ์ฃผ์ํ์ฌ ์ฌ์ฉํ์ธ์.
๊ฒฝ๊ณ
plan ์ ๋ณด์๋ ์ธ์ฆํค, ํจ์ค์๋๊ฐ์ ๋ ธ์ถํ๊ณ ์ถ์ง ์์ ์ ๋ณด๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค.
๐จโ๐ป Terraform Plan & Terraform Apply
@slidestart blood
๊ธฐ๋ณธ์ ์ผ๋ก terraform apply
๋ช
๋ น์ Terraform Plan
์ ์คํํ์ฌ ์ํ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ณด์ฌ์ค๋๋ค.
์ด๋ ๋ณ๊ฒฝ์ ์ํฅ์ ๋ฐ์ ์ข ์์ฑ ๋ฌธ์ ๋๋ ๋ฆฌ์์ค๋ฅผ ์ฐพ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
@slideend
๐ป ํ์ ๋ณ์๋ฅผ ๊ตฌ์ฑํ์ผ๋ฏ๋ก ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ ์ ์์ต๋๋ค.
์ด๋ค ์ผ์ด ์ผ์ด๋ ์ง ๋ณด๋ ค๋ฉด ๋จผ์ terraform plan
๋ช
๋ น์ ์คํํ์ญ์์ค .
terraform plan
๊ณํ ์ถ๋ ฅ์ ์ ์ ํ prefix, subnet cidr์ด ํ์๋๋์ง ํ์ธํฉ๋๋ค. ์ํ๋ค๋ฉด terraform.tfvars
ํน์ variables.tf
์ ์ ์๋ default
๊ฐ์ ๋ณ๊ฒฝํด๋ณด์ธ์.
๊ทธ๋ฐ ๋ค์ terraform apply
๋ฅผ ์คํํ๊ณ ๋ฆฌ์์ค๊ฐ ๊ตฌ์ถ๋๋ ๊ฒ์ ์ง์ผ๋ณด์ญ์์ค.
terraform apply
Terraform์์ "Do you want to perform these actions?"๋ผ๋ ๋ฉ์์ง๊ฐ ํ์๋๋ฉด yes
๋ฅผ ์
๋ ฅํด์ผ ํฉ๋๋ค.
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
๋ฉ์์ง๋ฅผ ํ์ธํ์์ต๋๊น? ์๋ฌ๊ฐ ๋ฐ์ํ์๋ค๋ฉด ๋ฌด์์ด ๋ฌธ์ ์ธ์ง ์ฐพ์๋ณด์ธ์.
์ง๊ธ ์ฐ๋ฆฌ ์ฝ๋๋ VPC๋ง ์ ์ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์งํ๋๋ ์ค์ต์์ ์ด ์ฝ๋์ ํ๋ก๋น์ ๋๋ ์ํ ๊ธฐ๋ฐ์ผ๋ก ์์ ํ ๊ฒ์ ๋๋ค.
NCP Consul ํ๋ฉด์ ์ ์ํด ๋ณด์ธ์. ๊ตฌ์ฑํ ์์์ด ์์ฑ๋ ๊ฒ์ด ํ์ธ๋๋์?
๐ฉโ๐ป Test and Repair
@slidestart blood
Terraform์ ๋ฉฑ๋ฑ์ฑ(idempotent)์ ๊ฐ์ต๋๋ค.
๋ฉฑ๋ฑ์ ์ํ ๋ฐ ์ปดํจํฐ ๊ณผํ์ ํน์ ์ฐ์ฐ์ ์์ฑ์ผ๋ก, ์ด๊ธฐ ์ ์ฉ์ ๋์ด ๋์ผํ๋ค๋ฉด ๊ฒฐ๊ณผ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ์ฌ๋ฌ ๋ฒ ์ ์ฉํ ์ ์์ต๋๋ค.
์ฐธ๊ณ : https://en.wikipedia.org/wiki/Idempotence
@slideend
๐ป ๋ฉฑ๋ฑ์ฑ์ ๊ฒ์ฆ์ ํด๋ด ๋๋ค.
์ด๋ค ์ผ์ด ์ผ์ด๋ ์ง ๋ณด๋ ค๋ฉด ๋จผ์ terraform plan
๋ช
๋ น์ ์คํํ์ญ์์ค.
terraform plan
VPC๊ฐ ์ด๋ฏธ ๊ตฌ์ถ๋์์ผ๋ฏ๋ก Terraform์ ๋ณ๊ฒฝ์ด ํ์ํ์ง ์๋ค๊ณ ๋ณด๊ณ ํฉ๋๋ค.
์ด๋ ์ ์์ ์ด๋ฉฐ ์์๋ ๊ฒ์
๋๋ค. ์ด์ ๋ค๋ฅธ ๋ช
๋ น์ธ terraform apply
๋ฅผ ์คํํ๊ณ ์ง์ผ๋ณด์ญ์์ค.
terraform apply
์ด๋ฏธ ์ฌ๋ฐ๋ฅด๊ฒ ํ๋ก๋น์ ๋๋ ๊ฒฝ์ฐ VPC๋ฅผ ๋ค์ ์์ฑํ์ง ์์ต๋๋ค.
Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
๐ซ Change Your Prefix
@slidestart blood
Terraform์ ์ธํ๋ผ๋ฅผ Create, Destroy, Update, re-Create ํฉ๋๋ค.
๋ฆฌ์์ค ๋ด์ฉ ๋ณ๊ฒฝ ์
- ์ผ๋ถ ์ ํ์ ๋ฆฌ์์ค๋ ๋ด์ฉ ๋ณ๊ฒฝ ์ ์ญ์ ํ์ง ์๊ณ ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค.
- ๋ ์ด๋ค ๊ฒฝ์ฐ๋ Destroy ํ Create ๋๋ ๊ณผ์ ์ด ๋ฐ์ํฉ๋๋ค.
Terraform์ ํญ์ ํ์ฌ ์ธํ๋ผ๋ฅผ ์ฝ๋์ ์ ์๋ ๊ฒ๊ณผ ์ผ์น์ํค๋ ค๊ณ ํฉ๋๋ค.
@slideend
๐ป terraform.tfvars
๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
terraform.tfvars
ํ์ผ์ ํธ์งํ์ฌ prefix
๋ฅผ ๊ธฐ์กด๊ณผ ๋ค๋ฅธ ๊ฐ์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค.
๋ณ๊ฒฝ ํ terraform apply
๋ฅผ ์คํํ๊ณ ์ง์ผ๋ณด์ญ์์ค.
terraform plan
VPC๊ฐ ์ด๋ฏธ ๊ตฌ์ถ๋์์ผ๋ฏ๋ก Terraform์ ๋ณ๊ฒฝ์ด ํ์ํ์ง ์๋ค๊ณ ๋ณด๊ณ ํฉ๋๋ค.
์ด๋ ์ ์์ ์ด๋ฉฐ ์์๋ ๊ฒ์
๋๋ค. ์ด์ ๋ค๋ฅธ ๋ช
๋ น์ธ terraform apply
๋ฅผ ์คํํ๊ณ ์ง์ผ๋ณด์ญ์์ค.
terraform apply
Terraform์์ "Do you want to perform these actions?"๋ผ๋ ๋ฉ์์ง๊ฐ ํ์๋๋ฉด yes
๋ฅผ ์
๋ ฅํ๊ณ ์๋ฃ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฝ๋๋ค. ์ถ๋ ฅ์ ๊ฒฐ๊ณผ๊ฐ ์ด๋ค๊ฐ์?
VPC Update
2021๋
10์ 20์ผ ๊ธฐ์ค์ผ๋ก, VPC์ ์ด๋ฆ์ด ๋ณ๊ฒฝ๋๋ฉด NCP์์๋ ์ด ์์์ ์ฌ์์ฑ ํฉ๋๋ค.
๋ฆฌ์์ค์ ๋ํ ๊ตฌ์ฑ๊ฐ์ ๋ณ๊ฒฝ์ด ์ ์ง๋ ์ฑ๋ก ๋ณ๊ฒฝ๋๊ธฐ๋ ํ์ง๋ง, ๋์ ๋ฐ๋ผ์๋ ์ญ์ ํ ์ฌ์์ฑ ํฉ๋๋ค.
$ terraform apply
ncloud_vpc.hashicat: Refreshing state... [id=13888]
Terraform used the selected providers to generate the following execution plan.
Resource actions are indicated with the following symbols:
-/+ destroy and then create replacement
Terraform will perform the following actions:
# ncloud_vpc.hashicat must be replaced
-/+ resource "ncloud_vpc" "hashicat" {
~ default_access_control_group_no = "26594" -> (known after apply)
~ default_network_acl_no = "19325" -> (known after apply)
~ default_private_route_table_no = "25834" -> (known after apply)
~ default_public_route_table_no = "25833" -> (known after apply)
~ id = "13888" -> (known after apply)
~ name = "yourname-vpc-kr" -> "hashicat-vpc-kr" # forces replacement
~ vpc_no = "13888" -> (known after apply)
# (1 unchanged attribute hidden)
}
Plan: 1 to add, 0 to change, 1 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
ncloud_vpc.hashicat: Destroying... [id=13888]
ncloud_vpc.hashicat: Still destroying... [id=13888, 10s elapsed]
ncloud_vpc.hashicat: Still destroying... [id=13888, 20s elapsed]
ncloud_vpc.hashicat: Destruction complete after 23s
ncloud_vpc.hashicat: Creating...
ncloud_vpc.hashicat: Still creating... [10s elapsed]
ncloud_vpc.hashicat: Still creating... [20s elapsed]
ncloud_vpc.hashicat: Creation complete after 23s [id=13902]
Apply complete! Resources: 1 added, 0 changed, 1 destroyed.
๐ซ Create and Change ACL
@slidestart blood
Terraform์ ์ธํ๋ผ๋ฅผ Create, Destroy, Update, re-Create ํฉ๋๋ค.
๋ฆฌ์์ค ๋ด์ฉ ๋ณ๊ฒฝ ์
- ์ผ๋ถ ์ ํ์ ๋ฆฌ์์ค๋ ๋ด์ฉ ๋ณ๊ฒฝ ์ ์ญ์ ํ์ง ์๊ณ ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค.
- ๋ ์ด๋ค ๊ฒฝ์ฐ๋ Destroy ํ Create ๋๋ ๊ณผ์ ์ด ๋ฐ์ํฉ๋๋ค.
Terraform์ ํญ์ ํ์ฌ ์ธํ๋ผ๋ฅผ ์ฝ๋์ ์ ์๋ ๊ฒ๊ณผ ์ผ์น์ํค๋ ค๊ณ ํฉ๋๋ค.
Terraform ์ฝ๋๋ ํ ๋ฒ์ ํ๋ ๋๋ ๋ ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ง์ ์ผ๋ก ๋น๋ํ ์ ์์ต๋๋ค.
@slideend
๐ป ncloud_network_acl
์ ์ถ๊ฐํฉ๋๋ค.
main.tf
ํ์ผ์ ์ด๊ณ ๋ฆฌ์์ค ๋ธ๋ก์ ์ฃผ์์ฒ๋ฆฌ๋ฅผ ์ ๊ฑฐํ๋ ค๊ณ ํฉ๋๋ค.
๋ฆฌ์์ค ์ ํ์ ncloud_network_acl
์ด๊ณ ์ด๋ฆ์ public
์
๋๋ค.
๊ฐ ์ค์ ์์ ๋ถ๋ถ์์
#
๋ฌธ์๋ฅผ ์ ๊ฑฐํ์ฌ ์ฝ๋์ ์ฃผ์ ์ฒ๋ฆฌ๋ฅผ ์ ๊ฑฐํฉ๋๋ค.์ฝ๋ํธ์ง๊ธฐ์์๋ ์ฃผ์์ฒ๋ฆฌ๋ฅผ ์ํด ํด๋น ๋ผ์ธ์ ์ ํํ๊ณ ํ์ฑ/๋นํ์ฑ ํ ์ ์์ต๋๋ค.
Mac : โ + /
Win : Ctrl + /
์ฃผ์ ์ ๊ฑฐ ํ ํ์ผ์ ์ ์ฅํ์ธ์.
๋ณ๊ฒฝ ํ terraform apply
๋ฅผ ์คํํ๊ณ yes
๋ฅผ ์
๋ ฅํ์ฌ ์ถ๊ฐ๋ ๋ฆฌ์์ค๊ฐ ์์ฑ๋๋์ง ํ์ธํ์ธ์.
ncloud_network_acl
๋ฆฌ์์ค ๋ด๋ถ์ vpc_no
ํ๋ผ๋ฉํฐ๋ฅผ ํ์ธํฉ๋๋ค. ์ด๋ป๊ฒ ๊ฐ๋ฅดํค๊ณ ์๋์?
ํด๋น ๋ฆฌ์์ค๋ VPC์ ์ค์ ์ ์์ ๋ฐ์ต๋๋ค.
Terraform์ ์๋ฐฑ๊ฐ์ ์ํธ ์ฐ๊ฒฐ๋ ๋ฆฌ์์ค ๊ฐ์ ๋ณต์กํ ์ข ์ก์์ ๋งตํํ ์ ์์ต๋๋ค.
๐ป ncloud_network_acl
์ ์ค์ ์ ๋ณ๊ฒฝํฉ๋๋ค.
ncloud_network_acl
ํญ๋ชฉ์ ๋ํด description
์ ๋ด์ฉ์ ์์ ํด ๋ณด์ธ์.
resource "ncloud_network_acl" "public" {
vpc_no = ncloud_vpc.hashicat.id
name = "${var.prefix}-acl-public"
description = "for Public"
}
๋ณ๊ฒฝ ํ terraform apply
๋ฅผ ์คํํ๊ณ yes
๋ฅผ ์
๋ ฅํ์ฌ ๋ณ๊ฒฝ๋ ์ฌํญ์ ๋ํด ๋ฆฌ์์ค๊ฐ ์ด๋ป๊ฒ ๋๋์ง ํ์ธํ์ธ์.
์ฌ๋ฐ๋ฅด๊ฒ ํ๋ก๋น์ ๋๋ ๊ฒฝ์ฐ ncloud_network_acl
๋ฅผ ์ญ์ ํ ๋ค์ ์์ฑํ์ง ์์ต๋๋ค.
Apply complete! Resources: 0 added, 1 changed, 0 destroyed.
๐๏ธ Complete the Build
@slidestart blood
-auto-approve
ํ๋๊ทธ
ํด๋น ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ "Do you want to perform these actions?" ์ ํ ์ง๋ฌธ์ ์ค๋ฒ๋ผ์ด๋(Override) ํ ์ ์์ต๋๋ค.
์ฌ์ฉ์ ์ฃผ์๊ฐ ํ์ํ๋๋ค.
๊ฒํ ๋จ๊ณ์ธ Plan์ ๊ฑด๋๋ฐ๊ณ ๋ฐ๋ก Create/Update/Destroy ํฉ๋๋ค.
@slideend
๐ป ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํด๋ณด์ธ์.
main.tf
์ ๋ชจ๋ ์ฃผ์์ ์ ๊ฑฐํ์ธ์.outputs.tf
์ ๋ชจ๋ ์ฃผ์์ ์ ๊ฑฐํ์ธ์.
terraform plan
๋ฅผ ์คํํ์ฌ ๊ตฌ์ฑํ ๋ฆฌ์์ค ํญ๋ชฉ์ ํ์ธํฉ๋๋ค.
terraform plan
์ด์ Apply๋ฅผ ์คํํ์ฌ HashiCat ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋ํฉ๋๋ค.
terraform apply -auto-approve
์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฐฐํฌ๋ฅผ ์๋ฃํ๋๋ฐ 5~10๋ถ์ด ์์๋ ์ ์์ต๋๋ค. ์คํ์ด ๋๋ ๋ ์ ํ๋ฆฌ์ผ์ด์ URL์ด ํฌํจ๋ Terraform ์ถ๋ ฅ์ ๋ณด๋ฉด ์๋ฃ๋์์์ ์ ์ ์์ต๋๋ค.
catapp_url
์ถ๋ ฅ ์์ URL์ ํด๋ฆญํ์ฌ ์ ๋ธ๋ผ์ฐ์ ํญ์์ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ฝ๋๋ค.
๊ฒฝ๊ณ
์์ฉ ํ๋ก๊ทธ๋จ์ด ๋ก๋๋์ง ์์ผ๋ฉด terraform apply
๋ค์ ์คํ ํ์ญ์์ค. ์ด๋ ๊ฒ ํ๋ฉด ์น ์๋ฒ๋ฅผ ๋ค์ ์ค์นํ๊ณ ์คํ ์ค์ด ์๋ ๊ฒฝ์ฐ ์์ฉ ํ๋ก๊ทธ๋จ์ ์์ํ๋ ค๊ณ ํฉ๋๋ค.
๐ป ๋ณ๊ฒฝ๋ ์ฌํญ์ ํ์ธํ๊ธฐ ์ํด ๊ทธ๋ํ๋ฅผ ๋ค์ ์ดํด๋ด ๋๋ค.
terraform graph๋ฅผ ์ํํฉ๋๋ค.
terraform graph
https://dreampuf.github.io/GraphvizOnline/์ ์์ digraph๋ก ์์ํ๋ ๋ด์ฉ์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ๊ณ ์ด๋ค ๊ทธ๋ฆผ์ด ๋์ค๋์ง ํ์ธํด ๋ด ๋๋ค.
์ธํ๋ผ์ ๋ํ Terraform ๊ทธ๋ํ๋ฅผ ์ดํด๋ณด์ญ์์ค. ์ข ์์ฑ์ด ์๋์ผ๋ก ๋งคํ๋ฉ๋๋ค.
Terraform์ ์ด ๊ทธ๋ํ๋ฅผ ์ฌ์ฉํ์ฌ ์ต๋ ํจ์จ์ฑ์ ์ํด ๋ณ๋ ฌ๋ก ๊ตฌ์ถํ ์ ์๋ ๋ฆฌ์์ค๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
๐ฑ Quiz Time 3. Terraform Apply
Q. Plan ํ์ผ์ ์ง์ ํ์ง ์๊ณ terraform apply๋ฅผ ์คํํ๋ฉด ์ด๋ป๊ฒ ๋ฉ๋๊น?
๋ต
์ด ์ฅ์์ ์ฐ๋ฆฌ๋ :
- Terraform ๋ฆฌ์์ค์ ๋ํด ๋ฐฐ์ ์ต๋๋ค.
- Terraform Plan, Graph, Apply, Destory
- ์ข ์์ฑ์ ๋ํด ๋ฐฐ์ ์ต๋๋ค.
- ์ค์ต์์ ๊ทธ๋ํ๋ฅผ ํ์ธํด๋ณด์์ต๋๋ค.
- main.tf, variables.tf, outputs.tf๋ฅผ ์ดํด๋ณด์์ต๋๋ค.
- Meow World ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ์์ต๋๋ค.