Terraform 101
Reference: Terraform docs, blog.naver.com/alice_k106, [์ธํ๋ฐ] DevOps : Infrastructure as Code with Terraform and AWS ๊ฐ์ข by ์ก์ฃผ์๋
Before getting started
์ธํ๋ฐ ๊ฐ์ข๋ฅผ ๋ฃ๊ณ ์ถ๊ฐํ ๋ด์ฉ
IaC (Infrastructure as code)
์ธํ๋ผ๋ฅผ ์ด๋ฃจ๋ ์๋ฒ, ๋ฏธ๋ค์จ์ด, ์๋น์ค ๋ฑ ์ธํ๋ผ ๊ตฌ์ฑ์์๋ค์ ์ฝ๋๋ฅผ ํตํด ๊ตฌ์ถํ๋ ๊ฒ
IaC๋ ์ฝ๋๋ก์จ์ ์ฅ์
์์ฑ์ฉ์ด์ฑ
์์ฑํ๋ ๊ฒ์ด ๋นจ๋ผ์ง๋ค!
์ฌ์ฌ์ฉ์ฑ
์ ์ง๋ณด์ ๋ฑ์ ์ฅ์ ์ ๊ฐ์ง๋ค
Terraform by Hashicorp
Terraform is a tool for building, changing, and versioning infrastructure safely and efficiently
Terraform์ ์ธํ๋ผ๋ฅผ ๋ง๋ค๊ณ , ๋ณ๊ฒฝํ๊ณ ๊ธฐ๋กํ๋ IaC๋ฅผ ์ํด ๋ง๋ค์ด์ง ๋๊ตฌ๋ก์จ
๋ฌธ๋ฒ์ด ์ฌ์ ๋น๊ต์ ๋ค๋ฃจ๊ธฐ ์ฝ๊ณ , ์ฌ์ฉ์๊ฐ ๋งค์ฐ ๋ง์ ์ฐธ๊ณ ํ ์ ์๋ ์์ ๊ฐ ๋ง๋ค
.tf
ํ์์ ํ์ผ ํ์ฅ์๋ฅผ ๊ฐ๋๋คAWS, Azure, GCP ๊ฐ์ Public Cloud ๋ฟ๋ง์ด ์๋ ๋ค์ํ Provider๋ฅผ ์ง์ํ๋ค
Terraform ๊ธฐ๋ณธ ๊ตฌ์ฑ ์์
provider
Terraform์ผ๋ก ์์ฑํ Infra์ ์ข ๋ฅ
Terraform ์ ์ ๋ง ๋ค์ํ provider๋ฅผ ์ง์ํ๋ค!
๋ณดํต
provider.tf
๋ก ํ์ผ์ ์์ฑํ๋คex)
provider "aws" { region = "ap-northeast-2" version = "~> 3.0" }
Provider ์์์ ๋ค์ํ argument๋ฅผ ๊ฐ์ง๋ค
AWS resource๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํ ํ์ผ๋ค์ ๋ค์ด๋ก๋ํ๋ ์ญํ ์ ํ๋ค
resource
Terraform์ผ๋ก ์ค์ ๋ก ์์ฑํ ์ธํ๋ผ ์์
์ํ๋ ํํ๋ก ํ์ผ ์ด๋ฆ์ ์ฌ์ฉํ๋ค
ex)
resource "aws_vpc" "example" { cidr_block = "10.0.0.0/16" # cidr_block ์ธ์๋ ์๋ง์ ์ธ์๊ฐ ์กด์ฌํ๋ค }
Terraform์ผ๋ก VPC๋ฅผ ์์ฑํ๋ ์ฝ๋์ด๋ค
VPC ์ญ์ ๋ค์ํ argument์ ๋ค๋ฅธ ๊ตฌ์ฑ์์๊ฐ ์กด์ฌํ๋ค
state
Terrafrom์ ํตํด ์์ฑํ ์์์ ์ํ
์ค์ ๋ก Terraform ์ฝ๋๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ฌผ
terraform.tfstate
๋ผ๋ ํ์ผ๋ช ์ ๊ฐ์ง์ค์ ๋ก๋ ์ฝ๋๊ฐ ๊ต์ฅํ ๊ธธ์ด์ง ์ ์์
ex)
{ "version": 4, "terraform_version": "0.12.24", "serial": 3, "lineage": "3c77xxxx-2de4-7736-1447-038974a3c187", "outputs": {}, "resources": [ {...}, {...} ] }
Terraform์ state์ด๋ค
ํ์ฌ ์ธํ๋ผ์ ์ํ๋ฅผ ์๋ฏธํ๋ ๊ฒ์ ์๋!!
Terraform ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ ์์ฑํ resource๋ค์ ๊ฒฐ๊ณผ๋ฌผ์ด๊ณ , ์ธํ๋ผ์ ์ค์ ์ํ๋ ์๋!!
๊ทธ๋์ state ํ์ผ๊ณผ ํ์ฌ ์ธํ๋ผ์ ์ํ๋ฅผ ๋์ผํ๊ฒ ์ ์งํ๋ ๊ฒ์ด ์ค์ํ๋ค!
state๋ ์๊ฒฉ ์ ์ฅ์์ backend์ ์ ์ฅ ๋ ์ ์๋ค
ํ์ฌ ํ์ ์์๋ ๋๋ถ๋ถ backend๋ฅผ ์ฌ์ฉํ๋ค
output
Terraform์ผ๋ก ๋ง๋ ์์์ ๋ณ์ ํํ๋ก state ํ์ผ์ ์ ์ฅํ๋ ๊ฒ
ex)
resource "aws_vpc" "default" { cidr_block = "10.0.0.0/16" # cidr_block ์ธ์๋ ์๋ง์ ์ธ์๊ฐ ์กด์ฌํ๋ค } output "vpc_id" { value = aws_vpc.default.id } output "cidr_block" { value = aws_vpc.default.cidr_block }
vpc id ๋ cidr๊ฐ์ ์ฐธ์กฐํด์
vpc_id
๋ผ๋ ๋ณ์๋ฅผ state ํ์ผ๋ก ์ ์ฅํ๋ ๊ฒoutput์ผ๋ก ์ถ์ถ๋ ๋ถ๋ถ์ ์ดํ์
remote state
๋ฅผ ํ์ฉํด์ ์ฌ์ฌ์ฉ ํ ์ ์๋ค
backend
terraform ์ํ๋ฅผ ์ ์ฅํ ๊ณต๊ฐ์ ์ง์ ํ๋ ๋ถ๋ถ
์์ฑ๋ output, ์ฆ variable๋ก ์์ฑ๋ state file์ ์ ์ฅํ๋ ๊ณต๊ฐ
backend๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ฌ ๋ฐฐํฌ๋ ์ต์ ์ํ๋ฅผ ์ธ๋ถ์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์ฌ๋๊ณผ์ ํ์ ์ด ๊ฐ๋ฅํ๋ค!
๋ํ์ ์ผ๋ก AWS S3๊ฐ ์๋ค
module
๊ณตํต์ ์ผ๋ก ํ์ฉํ ์ ์๋ code๋ฅผ ๋ง๊ทธ๋๋ก module ํํ๋ก ์ ์ํ๋ ๊ฒ
์ฌ์ฌ์ฉ ํ๋๋ฐ ๊ฐ์ ์ด ์๋ค
์ผ์ข ์ ํจ์๋ผ๊ณ ์๊ฐํ๋ฉด ํธํ๋ค
์ฌ๋ฌ terraform code๋ฅผ ๋ณ์๋ง ๋ฐ๊พธ์ด์ ํ๋์ module๋ก ์์ฑํ๋ ๊ฒ์ ์๋ฏธ
ex)
module "vpc" { source = ":./_modulesvpc" cidr_block = "1.0.0.0/16" }
ํ ๋ฒ ๋ง๋ค์ด์ง Terraform ์ฝ๋๋ก ๊ฐ์ ํํ๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ๋ง๋ค์ด๋ผ ๋ ์ฃผ๋ก ์ฌ์ฉ
remote state
๋ค๋ฅธ ๊ฒฝ๋ก์ state๋ฅผ ์ฐธ์กฐํ๋ ๊ฒ
์๊ฒฉ ์ฐธ์กฐ ๊ฐ๋
output
๋ณ์๋ฅผ ๋ถ๋ฌ์ฌ ๋ ์ฃผ๋ก ์ฌ์ฉ
remote state๋ฅผ ์ฌ์ฉํ๋ฉด
VPC
,IAM
๋ฑ๊ณผ ๊ฐ์ ๊ณต์ฉ service๋ฅผ ๋ค๋ฅธ service ์์ ์ฐธ์กฐํ ์ ์๋คtfstate ํ์ผ (์ต์ terraform ์ํ ์ ๋ณด) ์ด ์ ์ฅ๋์ด ์๋ backend ์ ๋ณด๋ฅผ ๋ช ์ํ๋ฉด,
ํด๋น backend์์ output ์ ๋ณด๋ค์ ๊ฐ์ ธ์จ๋ค
ex)
data "terraform_remote_state" "vpc"{ backend = "remote" config = { bucket = "terraform-s3-bucket" region = "ap-northeast-2" key = "terraform/vpc/terraform.tfstate" } }
remote state ๋ key ๊ฐ์ ๋ช ์ํ state ์์ output์ ํตํด ์์ฑ๋ ๋ณ์๋ฅผ ๊ฐ์ ธ์จ๋ค
Terraform ์๋ ์๋ฆฌ
Terraform์๋ 3๊ฐ์ง ํ์์ด ์กด์ฌํ๋ค
Local code
ํ์ฌ ๊ฐ๋ฐ์๊ฐ ์์ฑ/์์ ํ๊ณ ์๋ code
AWS ์ค์ ์ธํ๋ผ
์ค์ ๋ก AWS์ ๋ฐฐํฌ๋์ด ์๋ ์ธํ๋ผ
Backend์ ์ ์ฅ๋ ์ํ
๊ฐ์ฅ ์ต๊ทผ์ ๋ฐฐํฌํ terraform code ํ์
tfstate
ํ์ผ
์ฌ๊ธฐ์ ๊ฐ์ฅ ์ค์ํ ๊ฒ์
AWS ์ค์ ์ธํ๋ผ
์Backend์ ์ ์ฅ๋ ์ํ
๊ฐ 100% ์ผ์นํ๋๋ก ๋ง๋๋ ๊ฒ ์ด๋ค!!!Terraform์ ์ด์ํ๋ฉด์ ์ต๋ํ ์ด ๋๊ฐ์ง๊ฐ 100% ๋์ผํ๋๋ก ์ ์งํ๋ ๊ฒ์ด ์ค์ํ๋ฐ,
Terraform์์๋ ์ด๋ฅผ ์ํด import, state ๋ฑ ์ฌ๋ฌ ๋ช ๋ น์ด๋ฅผ ์ ๊ณตํ๋ค
์ธํ๋ผ ์ ์๋ ๋จผ์
Local code
์์ ์์ํ๋ค๊ฐ๋ฐ์๋ local์์ terraform code๋ฅผ ์ ์ํ ํ์
ํด๋น ์ฝ๋๋ฅผ ์ค์ ์ธํ๋ผ๋ก ํ๋ก๋น์ ํ๋ค
์ด ๋, backend๋ฅผ ๊ตฌ์ฑํ์ฌ ์ต์ ์ฝ๋๋ฅผ ์ ์ฅํ๋ค
Terraform ๊ธฐ๋ณธ ๋ช
๋ น์ด
init
Terraform ๋ช ๋ น์ด ์ฌ์ฉ์ ์ํ ๊ฐ์ข ์ค์ ์ ์งํ
์ง์ ํ backend์ ์ํ ์ ์ฅ์ ์ํ
.tfstate
ํ์ผ์ ์์ฑํ๋ค์ฌ๊ธฐ์๋ ๊ฐ์ฅ ๋ง์ง๋ง์ ์ ์ฉํ terraform ๋ด์ญ์ด ์ ์ฅ๋๋ค
init ์์ ์ ์๋ฃํ๋ฉด, local์๋
.tfstate
์ ์ ์๋ ๋ด์ฉ์ ๋ด์.terraform
ํ์ผ์ด ์์ฑ๋๋ค๊ธฐ์กด์ ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ์ด๋ฏธ
.tfstate
์ ์ธํ๋ผ๋ฅผ ์ ์ํด ๋์ ๊ฒ์ด ์๋ค๋ฉด, ๋ค๋ฅธ ๊ฐ๋ฐ์๋ init ์์ ์ ํตํด์ local์ sync๋ฅผ ๋ง์ถ ์ ์๋ค
plan
Terraform์ผ๋ก ์์ฑํ ์ฝ๋๊ฐ ์ค์ ๋ก ์ด๋ป๊ฒ ๋ง๋ค์ด์ง์ง์ ๋ํ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค
๋จ, plan์ ํ ๋ด์ฉ์ error๊ฐ ์์ด๋, ์ค์ ์ ์ฉ๋์์ ๋๋ error๊ฐ ๋ฐ์ ํ ์ ์์ผ๋ฏ๋ก ์ ์ํด์ผ ํ๋ค!
Plan ๋ช ๋ น์ด๋ ์ด๋ ํ ํ์์๋ ๋ณํ๋ฅผ ์ฃผ์ง ์๋๋ค
apply
Terraform ์ฝ๋๋ฅผ ๋ฐํ์ผ๋ก ์ค์ ๋ก ์ธํ๋ผ๋ฅผ ์์ฑํ๋ ๋ช ๋ น์ด
apply๋ฅผ ์๋ฃํ๋ฉด AWS ์์ ์ค์ ๋ก ํด๋น ์ธํ๋ผ๊ฐ ์์ฑ๋๊ณ ,
์์ ๊ฒฐ๊ณผ๊ฐ backend์
.tfstate
ํ์ผ์ ์ ์ฅ๋๋คํด๋น ๊ฒฐ๊ณผ๋ local์
.terraform
ํ์ผ์๋ ์ ์ฅ๋๋ค
์ค์ ์ธํ๋ผ์ ์ํฅ์ ๋ผ์น๋ ๋ช ๋ น์ด์ด๊ธฐ๋๋ฌธ์ ์ฃผ์๊น๊ฒ ์คํํด์ผํจ!
๊ทธ๋์
apply
์ ์ ๊ผญplan
์ ํด์ผํจ!
import
์ด๋ฏธ ๋ง๋ค์ด์ง ์์์
terraform state
ํ์ผ๋ก ์ฎ๊ฒจ์ฃผ๋ ๋ช ๋ น์ด์ด๋ฏธ ๋ง๋ค์ด์ง ์์์ code๋ก ์ฎ๊ธฐ๊ณ ์ถ์ ๋ ์ฌ์ฉ
local์
.terraform
์ ํด๋น resource์ ์ํ ์ ๋ณด๋ฅผ ์ ์ฅํด์ฃผ๋ ์ญํ ์ ํ๋ค๋จ, code๋ฅผ ์์ฑํด์ฃผ์ง ์๋๋ค!!
apply ์ ๊น์ง๋ backend์ ์ ์ฅ๋์ง ์๋๋ค
import ์ดํ์ plan ์ ํ๋ฉด local์ ํด๋น ์ฝ๋๊ฐ ์๊ธฐ ๋๋ฌธ์ resource๊ฐ ์ญ์ ๋๋ ๋ณ๊ฒฝ๋๋ค๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค๋ค
์ด ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ์ผ๋ก code๋ฅผ ์์ฑํ ์ ์๋ค
ex)
terraform import [options] ADDRESS ID
state
Terraform state๋ฅผ ๋ค๋ฃจ๋ ๋ช ๋ น์ด
์ค์ ๋ก ์์ฑ๋ ์ธํ๋ผ๋ฅผ ๋ณผ ์ ์๋ค
ex)
terraform state list
ํ์ ๋ช ๋ น์ด๋ก mv, push ๊ฐ์ ๋ช ๋ น์ด๊ฐ ์์
destroy
์์ฑ๋ ์์๋ค์ state ํ์ผ ๊ธฐ์ค์ผ๋ก ๋ชจ๋ ์ญ์ ํ๋ ๋ฐฉ๋ฒ
workspace
workspace๋ฅผ ๊ด๋ฆฌํ ๋ ์ฐ์ด๋ ๋ช ๋ น์ด
ex1)
$ terraform workspace list default * product
workspace ๋ชฉ๋ก์ ๋ณด์ฌ์ค๋ค
ํ์ฌ ์ฌ์ฉ์ค์ธ workspace๋ asterisk(
*
)๋ก ํ์๋๋ค
ex2)
terraform workspace select [NAME]
๋ค๋ฅธ workspace๋ก ์ด๋ ํ ๋ ์ฌ์ฉํ๋ค
ex3)
terraform workspace new [NAME]
์๋ก์ด workspace๋ฅผ ์์ฑํ ๋ ์ฌ์ฉํ๋ค
What is Terraform?
Terraform docs์ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ ๋ฆฌํ ๋ด์ฉ
Infrastructure๋ฅผ ์์ ํ๊ณ ํจ์จ์ ์ผ๋ก ๋น๋, ์์ ํ๊ณ versioning ํ ์ ์๋ tool
Terraform์ด
Ansible
์ด๋Chef
์ ๋น์ทํ๋ค๊ณ ์๊ฐํ ์ ์์ผ๋, Terraform์ ํน์ Cloud ํ๊ฒฝ ์ ์ด์ ์ด ๋ง์ถฐ์ ธ ์๋ค๋ ๊ฒ์ด ๋ค๋ฅด๋คAnsible
์ ์ผ๋ฐ ์๋ฒ, ๊ฐ์ ๋จธ์ , ์ฌ์ง์ด ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด์์๋ SSH๋ฅผ ํตํด ๋์ผํ ํ๊ฒฝ ์ ๋ฐฐํฌํ ์ ์๋ ๋ฐ๋ฉด,Terraform
์ AWS, GCP ๋ฑ์ Cloud platform ์์์ ํ๊ฒฝ์ ๋ฐฐํฌํ ๋ ์ฃผ๋ก ์ฌ์ฉํ๋คCode ๋ก์ Infra๋ฅผ ์ ์ํ๋ค๋ ๊ฐ๋ ์์ฒด๋
Ansible
๊ณผ ๊ฐ์ ํ๊ฒฝ ๋ฐฐํฌ tool๊ณผ ๋์ผํ๋ฉฐ,์ผ๋ฐ Bare Metal Server ๊ฐ ์๋ ํน์ Cloud Platform ์ ๋ง๋ ํ๊ฒฝ์ code๋ก์ ๋ฐฐํฌํ๋ค๋ ์ ์ด ๋ค๋ฅด๋ค
Code๋ก์ Infra๋ฅผ ์ ์ํ๊ธฐ & ์ฌํ ๊ฐ๋ฅํ Infra
ํ ๋ผํผ์ ์นํ์ด์ง์์ ๊ฐ์กฐํ๋ ๊ฒ์ด
Infrastructure as a Code (์ฝ๋๋ก์ ์ธํ๋ผ๋ฅผ ์ ์ํ๊ธฐ)
Reproducible Infrastructure (์ฌํ ๊ฐ๋ฅํ ์ธํ๋ผ) ์ด๋ค
AWS๋ , GCP๋ , Azure๋ Cloud Infra ํ๊ฒฝ์ ์ฝ๋๋ก์ ์ ์ํด ์ฌ์ฉํจ์ผ๋ก์จ ๋์ผํ ์ธํ๋ผ๋ฅผ ์ฌํํ ์ ์๋ค๋ ๋ป์ด๋ค
๋์ผ ํด๋ผ์ฐ๋ ๋ด์์!
ํด๋ผ์ฐ๋ ์ธํ๋ผ๋ฅผ ์ฝ๋๋ก ๋ช ์์ ์ผ๋ก ์ ์ํ๋ ์์ญ๋ฒ์ ์คํํด๋ ๋์ผํ ํ๊ฒฝ์ด ์์ฑ๋ ๊ฒ์ด๋ค.
Terraform ๋์
์ workflow
๋ฏธ๋ฆฌ ์ค๋นํ Terraform template๋ค์ ์ฌ์ฉํ๋ฉด ์ํ๋ ํ๊ฒฝ์ cloud์ ๋ฐฐํฌํ ์ ์๋ค
์๋ฅผ๋ค์ด VPC๋
vpc.tf
๋ผ๋ ํ์ผ์, EC2 instance๋instance.tf
ํ์ผ์, subnet์subnet.tf
ํ์ผ์ ์ ์ฅํ ๋ค Terraform ์ ์คํ์ํค๊ธฐ๋ง ํ๋ฉด ๋์ผํ ํ๊ฒฝ์ cloud์์ ์๋ฒฝํ๊ฒ ์ฌํํ ์ ์๋ค์ด๋ฌํ cloud ํ๊ฒฝ ์ค์ ์ ์ฌ๋์ด ์ง์ ์ผ์ผ์ด ์์ ํ๋ ๊ฒ์ด ์๋๋ผ, HCL (Hashicorp Configuration Language) ๋ผ๋ ์ธ์ด๋ก ์์ฑ๋ ์ฝ๋๋ฅผ Terraform์ ์ ๋ ฅํจ์ผ๋ก์จ ๊ตฌ์ฑ๋๋ค
๋ชจ๋ cloud ์ค์ ์ code์ ์ํด ๋ช ์์ ์ผ๋ก ์์ฑ๋๊ธฐ ๋๋ฌธ์ cloud infra๋ฅผ ๋์ผํ๊ฒ ๋ฐฐํฌํ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ง๋ค
๋ค์ํ ์๊ตฌ์ฌํญ์ ๋ง๋๋ก ์ฌ๋ฌ version์ code๋ฅผ ์์ฑํด cloud infra์ revision ์ ๊ด๋ฆฌํ ์๋ ์๋ค
๋ฏธ๋ฆฌ ์ค๋นํด๋ Terrafrom ์ค์ ํ์ผ์ Terraform์์ ์ฌ์ฉํ๊ธฐ๋ง ํ๋ฉด ๋ณต์กํ AWS cloud ํ๊ฒฝ์ ํ๊บผ๋ฒ์ ์์์๊ณ ํ๊บผ๋ฒ์ ์ญ์ ํ ์๋ ์๋ค
Terraform Quickstart
0. Terraform ํ์ผ์ ๊ตฌ์ฑ
Terraform ํ์ผ์ธ
.tf
ํ์ผ์ ์ผ๋ฐ์ ์ผ๋ก ์๋์ ๊ฐ์ด ๊ตฌ์ฑ๋๋ค

resource
Terraform ํ์ผ์์ ์ฌ์ฉ๋๋ object ์ข ๋ฅ
๋ณ์๋ฅผ ๋ํ๋ด๋
resource
Data๋ฅผ ๋ํ๋ด๋
data
๋ฑ์ด ์๋ค
aws_key_par
AWS์ SSH key pair๋ฅผ ์ํ resource ์ด๋ฆ
AWS์์ ์ฌ์ฉ๋๋ object๋ฅผ terraform์์ ๋ถ๋ฅด๋ ์ด๋ฆ
์ด๋ฌํ ์ด๋ฆ๋ค์ Terraform ๊ณต์ docs ์ ์ ๋ฆฌ๋์ด ์๋ค
terraform-key
Terraform ํ์ผ์์ ์ด object๋ฅผ ๊ณ ์ ํ๊ฒ ์๋ณํ๊ฒ ๋ ์ด๋ฆ
๊ฐ๋ฅํ๋ฉด ๋ชจ๋ ํ์ผ ๋ด์์ ๊ณ ์ ํ ์ด๋ฆ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค
1. tf init
terraform project์ root์์ ์คํํ๋ค
Terraform์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ Terraform ์ด๊ธฐํ ์์ ์ด ํ์ํ๋ค
terraform init ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด terraform directory๋ฅผ ์ด๊ธฐํํ๋ค
์ฌ์ฉํ๋ ๊ฒฝ์ฐ
์ฒ์ ํ๋ก์ ํธ๋ฅผ ์์ํ ๊ฒฝ์ฐ
module
์ด ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ
ex)
~/workspace/monocoque/dev-musinsa-main master* โฃ 17s โฏ tf init Initializing modules... Initializing the backend... Initializing provider plugins... Terraform has been successfully initialized! You may now begin working with Terraform. Try running "terraform plan" to see any changes that are required for your infrastructure. All Terraform commands should now work. If you ever set or change modules or backend configuration for Terraform, rerun this command to reinitialize your working directory. If you forget, other commands will detect it and remind you to do so if necessary.
2. tf workspace
๋ง์ฐฌ๊ฐ์ง๋ก ํด๋น ํ๋ก์ ํธ์ root ๊ฒฝ๋ก์์ ์คํํ๋ค
Commands
tf workspace list
workspace ๋ชฉ๋ก ๋ณด๊ธฐ
ex)
~/workspace/monocoque/dev-musinsa-main master* โฃ โฏ tf workspace list * default main
tf workspace select main
workspace ์ ํํ๊ธฐ
ex)
~/workspace/monocoque/dev-musinsa-main master* โฃ โฏ tf workspace select main Switched to workspace "main".
3. tf plan
๋ง์ฐฌ๊ฐ์ง๋ก ํด๋น ํ๋ก์ ํธ์ root ๊ฒฝ๋ก์์ ์คํํ๋ค
Terraform project directory ๋ด์ ๋ชจ๋
.tf
ํ์ผ์ ๋ด์ฉ์ ์ค์ ๋ก ์ ์ฉ ๊ฐ๋ฅํ์ง ํ์ธํ๋ ์์ ์ ๊ณํ ์ด๋ผ๊ณ ํ๋คterraform plan ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด
์ด๋ค resource๊ฐ ์์ฑ๋๊ณ
์์ ๋๊ณ
์ญ์ ๋ ์ง ๊ณํ์ ๋ณด์ฌ์ค๋ค
ex)
~/workspace/monocoque/dev-musinsa-main master* โฏ tf plan Refreshing Terraform state in-memory prior to plan... The refreshed state will be used to calculate this plan, but will not be persisted to local or remote state storage. ... Plan: 6 to add, 0 to change, 0 to destroy. ------------------------------------------------------------------------ Note: You didn't specify an "-out" parameter to save this plan, so Terraform can't guarantee that exactly these actions will be performed if "terraform apply" is subsequently run.
์คํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ , ๊ณํํ ๋๋ก ์์ฑ๋๋ ์ง ํ์ธํ๋ค
4. tf apply
๋ง์ฐฌ๊ฐ์ง๋ก ํ๋ก์ ํธ root ๊ฒฝ๋ก์์ ์คํํ๋ค
Terraform project directory ๋ด์ ๋ชจ๋
.tf
ํ์ผ์ ๋ด์ฉ๋๋ก resource๋ฅผ ์์ฑ, ์์ , ์ญ์ ํ๋์ผ์ ์ ์ฉ์ด๋ผ๊ณ ํ๋ค์ด ๋ช ๋ น์ด๋ฅผ ์คํํ๊ธฐ ์ ์ ๋ณ๊ฒฝ ์์ ์ฌํญ์ ์์ plan ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด ํ์ธํ ์ ์๋ค
5. tf force-unlock [ID]
terraform state lock ๊ฑธ๋ ธ์ ๋ ์ฌ์ฉ
์๋์ error message ์ถ๋ ฅ ์ ID ๊ฐ์ tf force-unlock ๋ค์ ์ ๋ ฅํ๋ค
Error: Error locking state: Error acquiring the state lock: ConditionalCheckFailedException: The conditional request failed
Lock Info:
ID: ID ๊ฐ
Path: PATH
Operation: OperationTypePlan
Who: chloe@Chloes-MacBookPro.local
Version: 0.12.26
Created: 2021-02-05 03:26:02.065859 +0000 UTC
Info:
Terraform acquires a state lock to protect the state from being written
by multiple users at the same time. Please resolve the issue above and try
again. For most commands, you can disable locking with the "-lock=false"
flag, but this is not recommended.
Last updated
Was this helpful?