๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

๐Ÿ’ป Lab - Setup and Basic Usage

์•ฝ 11 ๋ถ„ncloudncpterraformworkshop

๐Ÿ’ป Lab - Setup and Basic Usage


๐Ÿก Moving in - Explore Your Workspace

@slidestart blood

Terraform ๋ช…๋ น์ค„ ๋„๊ตฌ๋Š” MacOS, FreeBSD, OpenBSD, Windows, Solaris ๋ฐ Linux์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


Terraform ์–ธ์–ด๋Š” ์‚ฌ๋žŒ๊ณผ ๊ธฐ๊ณ„๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


๋Œ€๋ถ€๋ถ„์˜ ์ตœ์‹  ์ฝ”๋“œ ํŽธ์ง‘๊ธฐ๋Š” Terraform ๊ตฌ๋ฌธ ๊ฐ•์กฐ ํ‘œ์‹œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

@slideend

ํ…Œ๋ผํผ ์„ค์น˜ ๋ฐ ๊ตฌ์„ฑ

  1. ํ…Œ๋ผํผ ๋‹ค์šด๋กœ๋“œ ์‚ฌ์ดํŠธ https://www.terraform.io/downloads.htmlopen in new window ๋กœ ์ ‘์†ํ•˜์—ฌ, ์ž์‹ ์˜ ํ™˜๊ฒฝ์— ๋งž๋Š” Terraform์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์Šต๋‹ˆ๋‹ค.

  2. ์••์ถ•์„ ํ•ด์ œํ•˜์—ฌ terraform ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  • Linux/Mac : terraform
  • Windows : terraform.exe
  1. ํŒŒ์ผ์„ ์ ์ ˆํ•œ ์œ„์น˜์— ๋„ฃ๊ณ  PATH๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
bash
mkdir ~/hashicorp/bin
mv terraform ~/hashicorp/bin
cd ~/hashicorp/bin
echo $(pwd) >> ~/.bash_profile
source ~/.bash_profile

ํŽธ์ง‘๊ธฐ ๊ตฌ์„ฑ

VSCode ํŽธ์ง‘๊ธฐ๋ฅผ ์‚ฌ์šฉํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ๋‹ค๋ฉด, ์ฝ”๋“œ์˜ ์‹œ์ธ์„ฑ์„ ์œ„ํ•ด extension์„ ์„ค์น˜ ํ•ฉ๋‹ˆ๋‹ค.

1. Extention ์„ค์น˜
  • ์ขŒ์ธก ์‚ฌ์ด๋“œ ๋ฉ”๋‰ด์—์„œ Extentions ๋ฅผ ํด๋ฆญํ•˜์—ฌ Terraform์„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.
  • HashiCorp Terraform์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์Šต์„ ์œ„ํ•œ ์ฝ”๋“œ ๋ฐ›๊ธฐ

์ด ์‹ค์Šต์—์„œ๋Š” Terraform์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ IDE ์„ค์ •๊ณผ Terraform CLI๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , NCP๋ฅผ ์œ„ํ•œ ๊ธฐ๋ณธ ๊ตฌ์„ฑ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์Šต์—์„œ ์‚ฌ์šฉํ•  ์ฝ”๋“œ๋Š” github์—์„œ ๋ฐ›์Šต๋‹ˆ๋‹ค.

๋งํฌ : https://github.com/ncp-hc/workshop-ossopen in new window

  • git ์ด ์„ค์น˜๋˜์–ด์žˆ๋Š” ๊ฒฝ์šฐ git clone์„ ํ†ตํ•ด ์ฝ”๋“œ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.
    $ git clone https://github.com/ncp-hc/workshop-oss.git

  • Download๋งŒ์„ ์›ํ•˜๋Š” ๊ฒฝ์šฐ ์•„๋ž˜ Download ZIP์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

ํŽธ์ง‘๊ธฐ์—์„œ ์—ด๊ธฐ

  • VSCode๋ฅผ ์‹คํ–‰ํ•˜๊ณ  File(ํŒŒ์ผ) ๋ฉ”๋‰ด์—์„œ Open Folder... ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  • ์•ž์„œ ๋ฐ›์€ ๋””๋ ‰ํ† ๋ฆฌ๋‚ด์˜ lab01์„ ์—ด์–ด์ค๋‹ˆ๋‹ค.

๐Ÿ‘‹ Getting to Know Terraform

@slidestart blood

Terraform ์˜คํ”ˆ ์†Œ์Šค๋Š” ๋žฉํ†ฑ ๋˜๋Š” ๊ฐ€์ƒ ์›Œํฌ์Šคํ…Œ์ด์…˜์—์„œ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์ค„ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.


Go๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ macOS, Linux ๋˜๋Š” Windows์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.


https://www.terraform.io/downloads.htmlopen in new window ์—์„œ ํ•ญ์ƒ ์ตœ์‹  ๋ฒ„์ „์˜ Terraform์„ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๋…ธํŠธ๋ถ์ด๋‚˜ ์›Œํฌ์Šคํ…Œ์ด์…˜์— Terraform์„ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์€ ์‰ฝ์Šต๋‹ˆ๋‹ค. zip ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์••์ถ•์„ ํ’€๊ณ  PATH์˜ ์–ด๋”˜๊ฐ€์— ๋ฐฐ์น˜ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.


๋‹จ๊ณ„๋ณ„ ์ง€์นจ์€ ์ด ํŠœํ† ๋ฆฌ์–ผ์„ ํ™•์ธํ•˜์„ธ์š”. https://learn.hashicorp.com/terraform/getting-started/install.htmlopen in new window

@slideend

ํŽธ์ง‘๊ธฐ๊ฐ€ ์ค€๋น„๊ฐ€ ๋˜์—ˆ์œผ๋ฉด ํ„ฐ๋ฏธ๋„์„ ์—ด๊ณ  ๋ช‡๊ฐ€์ง€ ๊ธฐ๋ณธ์ ์ธ Terraform ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • Linux/Mac์˜ ๊ฒฝ์šฐ ํ„ฐ๋ฏธ๋„์—์„œ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ Windows์˜ ๊ฒฝ์šฐ ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ์—์„œ ์‹คํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • VSCode ํŽธ์ง‘๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด, ํŽธ์ง‘๊ธฐ์˜ ํ„ฐ๋ฏธ๋„(Terminal) ๊ธฐ๋Šฅ์œผ๋กœ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ป ์ปดํ“จํ„ฐ์—์„œ Terraform์˜ ๋ฒ„์ „์„ ํ™•์ธ ํ•˜์„ธ์š”.

terraform version

๐Ÿ’ป ๋ช…๋ น ๊ตฌ๋ฌธ์ด ๊ถ๊ธˆํ•˜๋ฉด ์–ธ์ œ๋“ ์ง€ ๋„์›€์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

terraform help

๐Ÿ” Terraform์„ NCP์— ์—ฐ๊ฒฐํ•˜๊ธฐ

@slidestart blood

HCL์ด

"HashiCorp Configuration Language"

์˜ ์•ฝ์ž๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ๊ณ„์‹ ๊ฐ€์š”?

@slideend

NCP ์ž๊ฒฉ์ฆ๋ช… ๋ฐ›๊ธฐ

NCP์— ์ธ์ฆํ•˜๊ณ  ๋ฆฌ์†Œ์Šค๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•ด Terraform์€ ์ ์ ˆํ•œ ์ž๊ฒฉ ์ฆ๋ช… ์„ธํŠธ๋ฅผ ์ œ๊ณตํ•˜๋„๋ก ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ป Terraform์—์„œ ์‚ฌ์šฉํ•  NCP์˜ ์ž๊ฒฉ์ฆ๋ช…์„ ์–ป๊ธฐ์œ„ํ•ด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

1. ์ธ์ฆํ‚ค ๊ด€๋ฆฌ
  • https://www.ncloud.com/open in new window์— ๋กœ๊ทธ์ธํ•˜์—ฌ ๋งˆ์ดํŽ˜์ด์ง€ ๋ฉ”๋‰ด์—์„œ ์ธ์ฆํ‚ค ๊ด€๋ฆฌ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์‚ฌ์šฉ์ž ํŒจ์Šค์›Œ๋“œ๋ฅผ ์š”๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

NCP ์ž๊ฒฉ์ฆ๋ช… ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์ €์žฅํ•˜๊ธฐ

์ด ๊ต์œก ํ™˜๊ฒฝ์„ ์œ„ํ•ด NCP์˜ ์ž๊ฒฉ ์ฆ๋ช…์„ ์ค€๋น„ํ•˜์—ฌ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. Terraform์€ ์‰˜ ํ™˜๊ฒฝ์— ๊ตฌ์„ฑ๋œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ž๋™์œผ๋กœ ์ฝ๊ณ  ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ป ํ„ฐ๋ฏธ๋„์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • NCLOUD_ACCESS_KEY NCLOUD_SECRET_KEY NCLOUD_REGION ๋ฅผ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.
bash
export NCLOUD_ACCESS_KEY="XXXXXXXXXXXXX"
export NCLOUD_SECRET_KEY="XXXXXXXXXXXXXXXXXXXXXXXXXX"

์œ„ํ—˜

API ์ž๊ฒฉ์ฆ๋ช…์ •๋ณด๋Š” ์‹ค์ˆ˜๋กœ ๊ณต๊ฐœ๋œ ์ €์žฅ์†Œ์— ๋…ธ์ถœ๋˜๊ฑฐ๋‚˜ ๋ณต์‚ฌ๋˜๋ฉด ์œ„ํ—ํ•ฉ๋‹ˆ๋‹ค.
์ž๊ฒฉ์ฆ๋ช…(API ์ธ์ฆํ‚ค)๋ฅผ ์ฝ”๋“œ์— ์ €์žฅํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ‘จโ€๐Ÿ’ป Terraform ์ฝ”๋“œ๋Š” ์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ๋‚˜์š”?

@slidestart blood

Terraform์€ ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ *.tf ๋˜๋Š” *.tfvars ๋กœ ๋๋‚˜๋Š” ๋ชจ๋“  ๊ฒƒ์„ ์ฝ์Šต๋‹ˆ๋‹ค.


์ผ๋ฐ˜์ ์œผ๋กœ Terraform Workspace๋Š” main.tf, variables.tf, outputs.tf ํŒŒ์ผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.


Terraform ์ฝ”๋“œ๋ฅผ ๋ชฉ์ ์— ๋”ฐ๋ผ ํŒŒ์ผ๋กœ ๊ทธ๋ฃนํ™”ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋ชจ๋“  ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ๊ตฌ์„ฑ ์ฝ”๋“œ๋ฅผ load_balancer.tf ์— ๊ตฌ์„ฑํ•˜๊ธฐ

@slideend

์ฝ”๋“œ ํŽธ์ง‘๊ธฐ์˜ ํŒŒ์ผ ๋ชฉ๋ก์ด ๋ณด์ด์‹ญ๋‹ˆ๊นŒ?

Terraform ์ฝ”๋“œ๋Š” ํ•ญ์ƒ .tf ํ™•์žฅ์ž๋กœ ๋๋‚ฉ๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ๋งŒํผ Terraform ํŒŒ์ผ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ ์„ธ ๊ฐ€์ง€๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • main.tf - ๋Œ€๋ถ€๋ถ„์˜ Terraform ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋˜๋Š” ์œ„์น˜์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ž์›์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.
  • variables.tf - ์ด ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • output.tf - ์ด ํŒŒ์ผ์—๋Š” ์„ฑ๊ณต์ ์ธ Terraform ์‹คํ–‰์ด ๋๋‚  ๋•Œ ํ‘œ์‹œ๋  ์ถœ๋ ฅ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

Terraform์—์„œ *.tf์™€ *.tfvars๋กœ ๋๋‚˜์ง€ ์•Š๋Š” ํŒŒ์ผ์€ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.


๐Ÿก Terraform Init - Provider ์„ค์น˜

@slidestart blood

Terraform Core ํ”„๋กœ๊ทธ๋žจ์€ ๊ทธ ์ž์ฒด๋กœ๋Š” ๊ทธ๋‹ค์ง€ ์œ ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


Terraform์€ ํด๋ผ์šฐ๋“œ API์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก Provider(๊ณต๊ธ‰์ž) ์˜ ๋„์›€์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.


Terraform์—๋Š” ์ˆ˜๋ฐฑ ๊ฐœ์˜ ๋‹ค์–‘ํ•œ Provider๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ Provider ๋ชฉ๋ก์„ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

https://registry.terraform.io/browse/providersopen in new window


์˜ค๋Š˜ ์šฐ๋ฆฌ๋Š” ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ Provider๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด์ง€๋งŒ ์ฃผ์š” Provider๋Š” ncloud provider ์ž…๋‹ˆ๋‹ค.

@slideend

์šฐ๋ฆฌ๋Š” ์ด ์‹ค์Šต์—์„œ ์‚ฌ์šฉํ•  Terraform ์ฝ”๋“œ๋ฅผ ๋‹ค์šด๋กœ๋“œ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€ ์‹ค์Šต์—์„œ ์ด ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Terraform์œผ๋กœ ๋ฌด์—‡์ด๋“  ํ•˜๊ธฐ ์ „์— Workspace๋ฅผ ์ดˆ๊ธฐํ™” ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ป ํ„ฐ๋ฏธ๋„์—์„œ init ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

terraform init

...
Terraform has been successfully initialized!

`terraform init ๋ช…๋ น์€ Terraform ์ฝ”๋“œ๋ฅผ ์Šค์บ”ํ•˜๊ณ  ํ•„์š”ํ•œ Provider๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ป ncloud provider๊ฐ€ .terraform ๋””๋ ‰ํ† ๋ฆฌ์— ์„ค์น˜๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

Linux/Mac
ls .terraform/providers/registry.terraform.io/navercloudplatform

์ด ์ˆจ๊ฒจ์ง„ ๋””๋ ‰ํ† ๋ฆฌ๋Š” ๋ชจ๋“  ๋ชจ๋“ˆ๊ณผ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์ €์žฅ๋˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค.

๐Ÿ˜ฑ Quiz Time 1. Provider์™€ Module

Q. Terraform์€ ๋ชจ๋“ˆ๊ณผ ๊ณต๊ธ‰์ž๋ฅผ ์–ด๋””์— ์ €์žฅํ•ฉ๋‹ˆ๊นŒ?

๋‹ต

๐Ÿ‘ฉโ€โš–๏ธ Terraform Validate - ์ฝ”๋“œ ํ…Œ์ŠคํŠธ

@slidestart blood

Terraform์—๋Š” ๊ตฌ๋ฌธ ๊ฒ€์‚ฌ๊ธฐ๊ฐ€ ๋‚ด์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.


terraform validate ๋ช…๋ น์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@slideend

Terraform์—๋Š” validate ๋ผ๋Š” ํ•˜์œ„ ๋ช…๋ น์ด ๋‚ด์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ฝ”๋“œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ๋ฌธ ๋ถ„์„๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ์˜ ๋น ๋ฅธ ๊ตฌ๋ฌธ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ป main.tfopen in new window ํŒŒ์ผ์„ ํŽธ์ง‘ํ•ฉ๋‹ˆ๋‹ค.

main.tf 16๋ฒˆ์งธ ํ–‰์˜ ์‚ฌ์ด์— ํฐ ๋”ฐ์˜ดํ‘œ๋ฅผ ์ œ๊ฑฐ ncloud_vpc์™€ hashicat ์‚ฌ์ด์˜ ํฐ ๋”ฐ์˜ดํ‘œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

terraform {
  required_providers {
    ncloud = {
      source  = "NaverCloudPlatform/ncloud"
      version = ">= 2.1.2"
    }
  }
}

provider "ncloud" {
  region      = var.region
  site        = var.site
  support_vpc = true
}

resource "ncloud_vpc" "hashicat" { โ†’ resource "ncloud_vpc" hashicat" {
  ipv4_cidr_block = "10.0.0.0/16"
  name            = lower("${var.prefix}-vpc-${var.region}")
}

...์ƒ๋žต...















ย 





terraform validate ๋ช…๋ น์„ ํ„ฐ๋ฏธ๋„์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

terraform validate

๋‹ค์‹œ ๋”ฐ์˜ดํ‘œ ํ‘œ๊ธฐ๋ฅผ ๋„ฃ๊ณ  ์ €์žฅํ•œ ๋‹ค์Œ terraform validate ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” ๊ฒ€์ฆ์„ ํ†ต๊ณผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

terraform validate ๋ช…๋ น์€ ์ž๋™ํ™”๋œ CI/CD ํ…Œ์ŠคํŠธ ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ๊ฐ€์žฅ ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „์— ์ฝ”๋“œ์—์„œ ์˜ค๋ฅ˜๋ฅผ ๋น ๋ฅด๊ฒŒ ํฌ์ฐฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿค” Terraform Plan - Dry run mode

@slidestart blood

terraform plan์„ ํ†ตํ•ด ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์•ˆ์ „ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฏธ๋ฆฌ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ด๋ฏธ ๋นŒ๋“œ๋œ ํ›„๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฐฐํฌํ•˜๊ธฐ ์ „์— ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@slideend

๐Ÿ’ป terraform plan๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

$ terraform plan
var.prefix
  This prefix will be included in the name of most resources.

  Enter a value:
ย 




์ด ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด Terraform์—์„œ prefix๋ณ€์ˆ˜ ๋ฅผ ์ž…๋ ฅํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œ ํ•ฉ๋‹ˆ๋‹ค.

์†Œ๋ฌธ์ž ๋˜๋Š” ์ˆซ์ž์˜ ์งง์€ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์˜๋ฌธ ์ด๋‹ˆ์…œ ์†Œ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

prefix๋Š” ํ˜„์žฌ Terraform ์ฝ”๋“œ ๊ตฌ์„ฑ์—์„œ VPC, ์„œ๋ธŒ๋„ท, ์„œ๋ฒ„ ๋“ฑ์˜ ๋ฆฌ์†Œ์Šค ์ด๋ฆ„์˜ ์ผ๋ถ€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๐ŸŽ›๏ธ Terraform ๋ณ€์ˆ˜๋กœ ์ž‘์—…ํ•˜๊ธฐ

@slidestart blood

terraform.tfvars ํŒŒ์ผ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณ€์ˆ˜๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ํŽธ๋ฆฌํ•œ ์œ„์น˜์ž…๋‹ˆ๋‹ค.

@slideend

Terraform์—์„œ ๋ชจ๋“  ๋ณ€์ˆ˜๋Š” ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ์„ ์–ธ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ณ€์ˆ˜๋Š” ๋‹ค๋ฅธ *.tf ํŒŒ์ผ์—์„œ๋„ ์„ ์–ธ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ variables.tf ํŒŒ์ผ์—์„œ ์„ ์–ธ๋ฉ๋‹ˆ๋‹ค. (default)

variable "address_space" {
  description = "The address space that is used by the virtual network. You can supply more than one address space. Changing this forces a new resource to be created."
  default     = "10.0.0.0/8"
}


ย 

ํ•ด๋‹น ๊ฐ’์€ terraform.tfvars ํŒŒ์ผ ๋ฐ ๋‚˜์ค‘์— ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ป terraform.tfvars ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

terraform.tfvars ํŒŒ์ผ์„ ์—ด๊ณ  prefix์˜ ์ค„ ์‹œ์ž‘ ๋ถ€๋ถ„์— ์ฃผ์„ ๊ธฐํ˜ธ # ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

yourname์„ ์›ํ•˜๋Š” ์†Œ๋ฌธ์ž ๋˜๋Š” ์ˆซ์ž์˜ ์งง์€ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

# terraform.tfvars
prefix = "yourname"

์ด์ œ terraform plan์„ ๋‹ค์‹œ ์‹คํ–‰ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” prefix๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ž…๋ ฅํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๐Ÿ—ผ cidr_block ๋ณ€๊ฒฝ

@slidestart blood

๊ฐœ๊ฐœ์ธ์€ terraform.tfvars ํŒŒ์ผ์— ์„ค์ •ํ•˜์—ฌ variables.tf ํŒŒ์ผ์— ์ •์˜๋œ ๋ชจ๋“  ๋ณ€์ˆ˜๋ฅผ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์ด๋ฒˆ ์‹ค์Šต์—์„œ๋Š” ncloud ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐฐํฌํ•˜๋Š” ์œ„์น˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

@slideend

์ด์ „ ์‹ค์Šต์—์„œ prefix๋ฅผ terraform.tfvars ํŒŒ์ผ์—์„œ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ncloud ์ธํ”„๋ผ๊ฐ€ ๋ฐฐํฌ๋  vpc์˜ cidr๋ฅผ ๊ฒฐ์ •ํ•  ๋˜ ๋‹ค๋ฅธ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋จผ์ € ๋‹ค๋ฅธ ๊ณ„ํš์„ ์‹คํ–‰ํ•˜์—ฌ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•œ ํ›„ ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

terraform plan

๐Ÿ’ป ๊ธฐ๋ณธ address_space ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

default๋กœ ์„ ์–ธ๋˜์–ด์žˆ๋Š” ๊ฐ’ ์™ธ์— ์‚ฌ์šฉ์ž ์ง€์ • ๋ณ€์ˆ˜๋กœ ๋ณ€๊ฒฝํ•ด๋ด…๋‹ˆ๋‹ค. terraform.tfvarsํŒŒ์ผ์„ ์—ด์–ด address_space์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๋‹ค์‹œ terraform plan์„ ์‹คํ–‰ํ•ด ๋ด…๋‹ˆ๋‹ค. ์ด๋ฒˆ์—” ๋ฌด์—‡์ด ๋‹ค๋ฅธ๊ฐ€์š”?

# terraform.tfvars
prefix        = "yourname"
address_space = "10.0.0.0/16"

terraform.tfvars ํŒŒ์ผ์€ variables.tf ํŒŒ์ผ์— ์„ ์–ธ๋œ ๋ชจ๋“  ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ๊ฐ’์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Œ์„ ๊ธฐ์–ตํ•˜์‹ญ์‹œ์˜ค.


๐Ÿ˜ฑ Quiz Time 2. Variables

Q. Terraform ๋ณ€์ˆ˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์–ด๋””์— ์„ ์–ธ ๋ฉ๋‹ˆ๊นŒ?

๋‹ต

์ด ์žฅ์—์„œ ์šฐ๋ฆฌ๋Š” :

  • terraform init ๋ช…๋ น์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.
  • terraform plan ๋ช…๋ น์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค.
  • prefix(์ ‘๋‘์‚ฌ) ์„ค์ •์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.