๐ป Lab - Terraform Cloud ์ฐ๊ฒฐ
๐ป Lab - Terraform Cloud ์ฐ๊ฒฐ
ํธ์ง๊ธฐ์์ ์ด๊ธฐ
- VSCode๋ฅผ ์คํํ๊ณ File(ํ์ผ) ๋ฉ๋ด์์
Open Folder...
๋ฅผ ํด๋ฆญํฉ๋๋ค. - ์์ ์ค์ต์ ์งํํ
lab02
์ ์ด์ด์ค๋๋ค.
โ๏ธ Terraform Configuration
@slidestart blood
Terraform Cloud
Remote State ์ ์ฅ์๋ ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ๋ฌด๋ฃ์ ๋๋ค.
@slideend
Terraform Cloud ๊ณ์
Terraform Cloud๋ ๋ค๋ฅธ SaaS ์๋น์ค์ ๊ฐ์ด ๊ฐ์ธ์ ์ํ ๋ฌด๋ฃ ํ๋์ด ์ค๋น๋์ด์์ต๋๋ค.
์์ง ๊ณ์ ์ด ์๋ ๊ฒฝ์ฐ ๊ณ์ฑ์ ์์ฑํ๊ณ ๋ค์ ์ค์ต์ ์งํํฉ๋๋ค.
- ๊ณ์ ์์ฑ์ ์ํด https://app.terraform.io/signup/account๋ก ์ ์ํฉ๋๋ค.
- ํ์ํ ์ ๋ณด๋ฅผ ์ ๋ ฅํ๊ณ ํ์ธํ์ฌ ์ ๊ท ๊ณ์ ์ ์์ฑํฉ๋๋ค.
- ๊ฐ์ ํ ์ด๋ฉ์ผ๋ก ๊ณ์ ์์ฑ ํ์ธ ๋ฉ์์ง๊ฐ ๋์ฐฉํฉ๋๋ค. ๋งํฌ๋ฅผ ํ์ธํ๋ฉด Terraform Cloud๋ฅผ ์ฌ์ฉํ ์ค๋น๊ฐ ๋๋ฌ์ต๋๋ค.
๐ป Terraform Cloud๋ฅผ ์ค์ ํฉ๋๋ค.
Terraform Cloud์ ๋ก๊ทธ์ธํ๋ฉด
YOURNAME-training
์ด๋ผ๋ ์ ์กฐ์ง์ ๋ง๋ญ๋๋ค.YOURNAME
์ ์์ ์ ์ด๋ฆ์ด๋ ๋ค๋ฅธ ํ ์คํธ๋ก ๋ฐ๊พธ์ญ์์ค.๋ค์์ผ๋ก Workspace๋ฅผ ์์ฑํ๋ผ๋ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค.
CLI ๊ธฐ๋ฐ ์ํฌํ๋ก
ํจ๋์ ํด๋ฆญํ์ฌ VCS ํตํฉ ๋จ๊ณ๋ฅผ ๊ฑด๋๋ธ ์ ์์ต๋๋ค.์์ ๊ณต๊ฐ์ ์ด๋ฆ์
hashicat-ncp
๋ก ์ง์ ํ๊ณCreate workspace
๋ฅผ ํด๋ฆญํ์ฌ ์๋ก์ด Workspace๋ฅผ ์์ฑํฉ๋๋ค.ํฐ๋ฏธ๋์์
terraform version
์ ์คํํ์ฌ ๋ฒ์ ์ ํ์ธํฉ๋๋ค.Terraform Cloud ์์ ์์ฑํ
hashicat-ncp
์Settings > General
๋ก ์ด๋ํ์ฌTerraform Version
์ ๋์ผํ ๋ฒ์ ์ผ๋ก ๊ตฌ์ฑํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ Execution Mode๋ฅผLocal
๋ก ์ค์ ํฉ๋๋ค.
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์ ๋ณต์ฌํ์ฌ ์์ ํฐ๋ฏธ๋์ ์๋ก์ด ์
๋ ฅ๋์ธ 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"๋ฅผ ์ ๋ ฅํด์ผ ํฉ๋๋ค. ์ค์ํ ๋ฆฌ์์ค๊ฐ ์ค์๋ก ์ญ์ ๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํ ์์ ๊ธฐ๋ฅ์ ๋๋ค.
ํ์ธ ๋ฒํผ์ ํด๋ฆญํ๊ธฐ ์ ์ ๋ฆฌ์์ค ์ญ์ ์์ ์ด ์์ ํ ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ญ์์ค.