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

๐Ÿ’ป Lab - Terraform Cloud ์—ฐ๊ฒฐ

์•ฝ 7 ๋ถ„ncloudncpterraformworkshop

๐Ÿ’ป Lab - Terraform Cloud ์—ฐ๊ฒฐ

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

  • VSCode๋ฅผ ์‹คํ–‰ํ•˜๊ณ  File(ํŒŒ์ผ) ๋ฉ”๋‰ด์—์„œ Open Folder... ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  • ์•ž์„œ ์‹ค์Šต์„ ์ง„ํ–‰ํ•œ lab02์„ ์—ด์–ด์ค๋‹ˆ๋‹ค.

โ˜๏ธ Terraform Configuration

@slidestart blood

Terraform Cloud

Remote State ์ €์žฅ์†Œ๋Š” ๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฌด๋ฃŒ์ž…๋‹ˆ๋‹ค.

@slideend

Terraform Cloud ๊ณ„์ •

Terraform Cloud๋Š” ๋‹ค๋ฅธ SaaS ์„œ๋น„์Šค์™€ ๊ฐ™์ด ๊ฐœ์ธ์„ ์œ„ํ•œ ๋ฌด๋ฃŒ ํ”Œ๋žœ์ด ์ค€๋น„๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.

์•„์ง ๊ณ„์ •์ด ์—†๋Š” ๊ฒฝ์šฐ ๊ณ„์„ฑ์„ ์ƒ์„ฑํ•˜๊ณ  ๋‹ค์Œ ์‹ค์Šต์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  1. ๊ณ„์ • ์ƒ์„ฑ์„ ์œ„ํ•ด https://app.terraform.io/signup/accountopen in new window๋กœ ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค.
  2. ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ํ™•์ธํ•˜์—ฌ ์‹ ๊ทœ ๊ณ„์ •์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ฐ€์ž…ํ•œ ์ด๋ฉ”์ผ๋กœ ๊ณ„์ • ์ƒ์„ฑ ํ™•์ธ ๋ฉ”์‹œ์ง€๊ฐ€ ๋„์ฐฉํ•ฉ๋‹ˆ๋‹ค. ๋งํฌ๋ฅผ ํ™•์ธํ•˜๋ฉด Terraform Cloud๋ฅผ ์‚ฌ์šฉํ•  ์ค€๋น„๊ฐ€ ๋๋‚ฌ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ป Terraform Cloud๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  1. Terraform Cloud์— ๋กœ๊ทธ์ธํ•˜๋ฉด YOURNAME-training ์ด๋ผ๋Š” ์ƒˆ ์กฐ์ง์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. YOURNAME์„ ์ž์‹ ์˜ ์ด๋ฆ„์ด๋‚˜ ๋‹ค๋ฅธ ํ…์ŠคํŠธ๋กœ ๋ฐ”๊พธ์‹ญ์‹œ์˜ค.

  2. ๋‹ค์Œ์œผ๋กœ Workspace๋ฅผ ์ƒ์„ฑํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. CLI ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ ํŒจ๋„์„ ํด๋ฆญํ•˜์—ฌ VCS ํ†ตํ•ฉ ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ์ž‘์—… ๊ณต๊ฐ„์˜ ์ด๋ฆ„์„ hashicat-ncp ๋กœ ์ง€์ • ํ•˜๊ณ  Create workspace๋ฅผ ํด๋ฆญํ•˜์—ฌ ์ƒˆ๋กœ์šด Workspace๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  4. ํ„ฐ๋ฏธ๋„์—์„œ terraform version ์„ ์‹คํ–‰ํ•˜์—ฌ ๋ฒ„์ „์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  5. Terraform Cloud ์ƒ์— ์ƒ์„ฑํ•œ hashicat-ncp ์˜ Settings > General ๋กœ ์ด๋™ํ•˜์—ฌ Terraform Version์„ ๋™์ผํ•œ ๋ฒ„์ „์œผ๋กœ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Execution Mode๋ฅผ Local๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

Setting ์œ„์น˜
  1. Settings ํŽ˜์ด์ง€ ํ•˜๋‹จ์— ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

๐ŸŽ›๏ธ Configure Remote State

@slidestart blood

"Local" ์‹คํ–‰ ๋ชจ๋“œ๋Š” Terraform์˜ ๊ตฌ์„ฑ๊ณผ ๋ณ€์ˆ˜๋Š” ๋ชจ๋‘ ์›Œํฌ์Šคํ…Œ์ด์…˜์— ๋‚จ์•„์žˆ์Šต๋‹ˆ๋‹ค.


"Remote" ์‹คํ–‰ ๋ชจ๋“œ๋กœ ์ „ํ™˜ํ•˜๊ฒŒ ๋˜๋ฉด Terraform Cloud ํ™˜๊ฒฝ์˜ ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.


"Remote" ์‹คํ–‰ ๋ชจ๋“œ๋กœ ์ „ํ™˜ ์‹œ, ๋ณ€์ˆ˜๊ตฌ์„ฑ์€ Terraform Cloud ํ™˜๊ฒฝ์— ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@slideend

์ด๋ฒˆ ์‹ค์Šต์—์„œ๋Š” Terraform Cloud๋ฅผ Remote State Backend๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ๊ธฐ์กด State ํŒŒ์ผ์„ Terraform Cloud ํ™˜๊ฒฝ์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ป Remote Backend ๊ตฌ์„ฑํ•˜๊ธฐ

Workspace ๋””๋ ‰ํ† ๋ฆฌ์— (main.tf์™€ ๊ฐ™์€ ์œ„์น˜) ์•„๋ž˜์™€ ๊ฐ™์€ ๋‚ด์šฉ์œผ๋กœ remote_backend.tf ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

# remote_backend.tf
terraform {
  backend "remote" {
    hostname = "app.terraform.io"
    organization = "YOURORGANIZATION"
    workspaces {
      name = "hashicat-ncp"
    }
  }
}

YOURORGANIZATION์„ ์ƒ์„ฑํ•œ Organization ์ด๋ฆ„์œผ๋กœ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

์ดํ›„ ํ„ฐ๋ฏธ๋„์—์„œ terraform login ์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๋กœ์ปฌ ํ™˜๊ฒฝ์— Terraform Cloud์™€ API ์ธ์ฆ์„ ์œ„ํ•œ Token์„ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. yes๋ฅผ ์ž…๋ ฅํ•˜๋ฉด Terraform Cloud์˜ ํ† ํฐ ์ƒ์„ฑํ™”๋ฉด์ด ์—ด๋ฆฝ๋‹ˆ๋‹ค.

$ terraform login
Terraform will request an API token for app.terraform.io using your browser.
...
Do you want to proceed?
  Only 'yes' will be accepted to confirm.

  Enter a value: 
ย 






Create API token ํ™”๋ฉด์ด ๋‚˜์˜ค๋ฉด Description์— ์ ์ ˆํ•œ ๊ฐ’(์˜ˆ: ncp workshop)์„ ์ž…๋ ฅํ•œ ํ›„ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ์ƒˆ๋กœ์šด Token์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

Token ์ƒ์„ฑํ•˜๊ธฐ

์ƒ์„ฑ๋œ Token์„ ๋ณต์‚ฌํ•˜์—ฌ ์•ž์„œ ํ„ฐ๋ฏธ๋„์— ์ƒˆ๋กœ์šด ์ž…๋ ฅ๋ž€์ธ Enter a value: ์— ๋ถ™์—ฌ๋„ฃ๊ณ  โŽ(์—”ํ„ฐ)๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. (์ž…๋ ฅ๋œ ๊ฐ’์€ ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)

...
Generate a token using your browser, and copy-paste it into this prompt.

Terraform will store the token in plain text in the following file
for use by subsequent commands:
    /Users/yourname/.terraform.d/credentials.tfrc.json

Token for app.terraform.io:
  Enter a value: ****************************************** 

ํ•ด๋‹น ํ† ํฐ์€ ํ„ฐ๋ฏธ๋„์— ํ‘œ๊ธฐ๋œ credentials.tfrc.json ํŒŒ์ผ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

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

State๋ฅผ Terraform Cloud๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด "yes"๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

backend๊ฐ€ remote๋กœ ๊ตฌ์„ฑ๋จ์ด ์„ฑ๊ณตํ•จ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

$ terraform init
...
Initializing the backend...

Successfully configured the backend "remote"! Terraform will automatically
use this backend unless the backend configuration changes.
...
ย 






์ด์ œ ์ƒํƒœ๊ฐ€ Terraform Cloud์— ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. TFC UI์—์„œ ์ž‘์—… ์˜์—ญ์˜ "State" ํƒญ์—์„œ ์ด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณ€์ˆ˜๋“ค์„ ๋ณ€๊ฒฝํ•˜๋ฉด์„œ terraform apply -auto-approve๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ์ƒํƒœ ํŒŒ์ผ์ด ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์„ ์ง€์ผœ๋ณด์‹ญ์‹œ์˜ค. Terraform Cloud UI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด์ „ ์ƒํƒœ ํŒŒ์ผ์„ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ”ฅ Terraform Destroy

@slidestart blood

Terraform์€ ์ธํ”„๋ผ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ๋งŒํผ ์‰ฝ๊ฒŒ ์ธํ”„๋ผ๋ฅผ ํŒŒ๊ดดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


"terraform destroy"๋Š” ์ฃผ์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•˜์„ธ์š”.

@slideend

๐Ÿ’ป ๋ฆฌ์†Œ์Šค ์‚ญ์ œํ•˜๊ธฐ

๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ์ธํ”„๋ผ๋ฅผ ์‚ญ์ œํ•˜์„ธ์š”.

terraform destroy

์ธํ”„๋ผ๋ฅผ ์‚ญ์ œํ•œ๋‹ค๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด "yes"๋ฅผ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ๋ฆฌ์†Œ์Šค๊ฐ€ ์‹ค์ˆ˜๋กœ ์‚ญ์ œ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์•ˆ์ „ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

ํ™•์ธ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ธฐ ์ „์— ๋ฆฌ์†Œ์Šค ์‚ญ์ œ ์ž‘์—…์ด ์™„์ „ํžˆ ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์‹ญ์‹œ์˜ค.


Intro
Intro