- CloudNeta์ ๊ฐ์๋ค๋์ด ์งํํ์๋ Terraform 101 Study์ ์ฐธ๊ฐํ๋ฉฐ ์์ฑํ ๋ด์ฉ์ ๋๋ค.
- ์คํฐ๋ ๊ต์ฌ โ ํ ๋ผํผ์ผ๋ก ์์ํ๋ IaC
CH1. IaC์ ํ ๋ผํผ
์ฝ๋๋ก ์ธํ๋ผ๋ฅผ ๊ด๋ฆฌํ๋ค๋ ๊ฒ
โ โ์์ ๋กญ๊ฒ ๋ณ๊ฒฝโํ๊ณ , โํ๊ฒฝ์ ์ดํดโํ๊ณ , โ๋ฐ๋ณต์ ์ผ๋ก ๋์ผํ ์ํโ๋ฅผ ๋ง๋ค์ ์๋ค๋ ์๋ฏธ
โ ๋ช ์ธ๋ฅผ ๋ณ๋์ ๋ฌธ์๋ก ์ ๋ฆฌํ์ง ์์๋ ์ธํ๋ผ๊ฐ ๋ช ํํ๊ฒ ์ ์๋์ด ๋จ๋๋ค๋ ์๋ฏธIaC๋ ์ปดํจํฐ์์ ์ฝ์ ์ ์๋ ํํ์ ํ์ผ์ ์ฌ์ฉํด ์ธํ๋ผ๋ ์๋น์ค๋ฅผ ํ๋ก๋น์ ๋ํ๋ ํ๋ก์ธ์ค
terraform์ ํ์์ฝํ์์ ๊ณต๊ฐํ IaC ๋๊ตฌ
Terraform์ Provider๋ผ๊ณ ํ๋ ํ๋ฌ๊ทธ์ธ์ ํตํด ํด๋ผ์ฐ๋ ์ ๊ณต์(AWS, GCP, โฆ)๋ ๊ธฐํ ์๋น์ค์ ์ํธ ์์ฉํฉ๋๋ค.
ํ ๋ผํผ ์ ๊ณต ์ ํ 3๊ฐ์ง
- On-Premise(์คํ์์ค ์ฌ์ฉ) โ ๋ณ๋๋ก ํ ๋ผํผ ์คํํ๊ฒฝ๊ณผ state ๊ด๋ฆฌ ๋ฐฉ๋ฒ์ ๋ง๋ จํด์ผํฉ๋๋ค
- Terraform Cloud(SaaS) โ ํ ๋ผํผ ์คํํ๊ฒฝ๊ณผ state๊ด๋ฆฌ๋ฅผ ์ง์
- Terraform Enterprise(Private Install) โ ์ฌ๋ด ์ปดํจํ ์์์ ์ค์น
Immutable๊ณผ Mutable
- Immutable Infrastructure๋ originally provisioned๋ ์ดํ๋ก ์์ ํ ์ ์๋ ์ธํ๋ผ ์คํธ๋ญ์ณ์ ๋๋ค.
- Mutable infrastructure๋ originally provisioned ๋ ์ดํ๋ก ์์ ๋๊ฑฐ๋ ์ ๋ฐ์ดํธ ํ ์ ์๋ ์ธํ๋ผ ์คํธ๋ญ์ณ์ ๋๋ค.
- Immutable์ ์์ ์ด๋ ์ ๋ฐ์ดํธํ๋ ๊ฒ์ด ์๋๋ผ ์๋ก์ด ์ธํ๋ผ๋ฅผ ์์ฑํ๊ณ ์ด์ ์ํ์ ์ธํ๋ผ๋ฅผ ๊ต์ฒดํ๋ ๋ฐฉ์
- Immutable Infrastructure๋ ์ธํ๋ผ๋ฅผ ๋ฒ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๊ฒ ํด์ค๋๋ค. ์ด๋ฅผ ํตํด ์ธํ๋ผ๋ฅผ ๋กค๋ฐฑํ๊ฑฐ๋ ์ ๋ฐ์ดํธ ํ ์ ์๊ฒ ํด์ค๋๋ค.
- ํ ๋ผํผ์ immutableํ๊ฒ ์ธํ๋ผ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
- ํ ๋ผํผ์ผ๋ก ๊ตฌ์ฑํ ์ธํ๋ผ๋ฅผ ์๋์ผ๋ก ์์ ํ๊ฑฐ๋ ์ ๋ฐ์ดํธ ํ ์ ์์ง๋ง, ์ด๋ IaC์ ์ด์ ์ธ ์ธํ๋ผ ์ผ๊ด์ฑ์ ์ฝํ์ํต๋๋ค.
CH3. ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ - 1
3-1. ์ฃผ์ ์ปค๋งจ๋
terraform init
- ํ ๋ผํผ configuration ํ์ผ์ด ์๋ ์์ ๋๋ ์ฒ๋ฆฌ๋ฅผ ์ด๊ธฐํ
- init์ ์คํํ๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ฃจํธ๋ชจ๋์ด๋ผ๊ณ ํ๋ค.
- ํ ๋ผํผ์์ ์ฌ์ฉ๋๋ ํ๋ก๋ฐ์ด๋, ๋ชจ๋ ๋ฑ์ ์ง์ ๋ ๋ฒ์ ์ ๋ง์ถฐ ๋ฃจํธ๋ชจ๋์ ๊ตฌ์ฑํ๋ ์ญํ
- -upgrade
- ๋ชจ๋ provider๋ฅผ configuration์ ์ง์ ๋ ๋ฒ์ ์ ์ฝ ์กฐ๊ฑด ๋ด์์(the version constraints sepcified within) ์ต์ ๋ฒ์ ์ผ๋ก ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค.
- ๊ตฌ์ฑ ๋ด์ ๋ฒ์ ์ ์ฝ ์กฐ๊ฑด์ด ํ์ฌ ๊ณต๊ธ์ ๋ฒ์ ๋ณด๋ค ๋ ๋ฎ์ ๋ฒ์ ์ธ ๊ฒฝ์ฐ ๋ค์ด๊ทธ๋ ์ด๋๋ ๊ฐ๋ฅํฉ๋๋ค.
terraform validate
- ํ ๋ผํผ configuration ํ์ผ์ ์ ํจ์ฑ์ ํ์ธํ๋ ์ญํ โ ์ฝ๋์ ์ธ ์ ํจ์ฑ๋ง์ ๊ฒํ
terraform plan
- ์ธํ๋ผ๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ํ ์คํ ๊ณํ์ ์์ฑํ๋ ์ญํ โ ๋ณ๊ฒฝ์ฌํญ์ ์ค์ ์ ์ฉํ์ง๋ ์๋๋ค.
- apply ์ ์ ์๋ํ๋๋ก ์ธํ๋ผ๊ฐ ๋ณ๊ฒฝ๋๋์ง ๊ฒํ ํ๋๋ฐ ์ด์ฉ
- (+)๋ create, (-)๋ delete, (~)๋ update, (-)(+)๋ replace๋ฅผ ์๋ฏธํฉ๋๋ค.
- -detailed-exitcode
- plan์ ๊ฒฐ๊ณผ๋ฅผ ์ข ๋ฃ ์ฝ๋๋ก ๋ฐํํ๋ ์ต์ โ ํ์ดํ๋ผ์ธ ์ค๊ณ์์ ํ์ฉ ๊ฐ๋ฅ
- 0: ๋ณ๊ฒฝ ์์ด ์ฑ๊ณต(Succeeded with empty diff) / 1: ์ค๋ฅ / 2: ๋ณ๊ฒฝ ์๋ ์ฑ๊ณต(Succeeded with non-empty diff)
terraform apply
- ์ธํ๋ผ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ๋ ์ญํ
- apply๋ plan์ผ๋ก ์์ฑ๋๋ ์คํ ๊ณํ์ด ํ์ํ์ง๋ง, ์คํ ๊ณํ์ด ์๋ค๋ฉด ์๋์ผ๋ก ์์ฑํ๊ณ ์น์ธํ ๊ฒ์ธ์ง ๋ฌป๋ ๋ฉ์ธ์ง๊ฐ ์์ฑ๋ฉ๋๋ค.
- -replace
- configuration์ ํธ์งํ์ง ์๊ณ ์ง์ ํ ๋ฆฌ์์ค๋ฅผ recreateํ๋๋ฐ ์ฌ์ฉํฉ๋๋ค.
- plan๊ณผ apply์ ๋ชจ๋ ์ ์ฉ ๊ฐ๋ฅ
- -auto-approve
- ์คํ ๊ณํ์ ์๋ ์น์ธํ๋ ์ต์ ์ ๋๋ค.
- apply์ destroy์ ๋ชจ๋ ์ ์ฉ ๊ฐ๋ฅ
terraform destroy
- ํ ๋ผํผ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ์ญ์ ํ๋ฉฐ ํ ๋ผํผ์ผ๋ก ๊ด๋ฆฌํ์ง ์๋ ๋ฆฌ์์ค๋ ์ญ์ ํ์ง ์์ต๋๋ค.
terraform fmt
- configuration ํ์ผ์ ํ ๋ผํผ ์ปจ๋ฒค์ ๊ณผ ์คํ์ผ์ ์ ์ฉํ๋๋ฐ ์ฌ์ฉ โ ์ฃผ๋ก ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ด๊ธฐ ์ํด ์ฌ์ฉ
- ์ฝ๋ฉ ์คํ์ผ(๋น์นธ, ์ ๋ ฌ ๋ฑ)์ ์ํ ์ปค๋ฐ์ ์ค์ด๊ณ ์ ๋ฐ์ดํธ๋ฅผ ์ต์ํํ ์ ์์ต๋๋ค.
3-2. HCL(HashiCorp configuration Language)
- ํ์์ฝํ์์ ๊ฐ๋ฐํ ์คํ์์ค ๋๊ตฌ โ ํ ๋ผํผ์์๋ HCL์ด ์ฝ๋ ์์ญ์ ๋ด๋น
- JSON์ ๋จ์ โ ๊ตฌ๋ฌธ์ด ๊ธธ์ด์ง๊ณ ์ฃผ์์ด ์ง์๋์ง ์์
- YAML์ ๋จ์ โ ๊ด๋ฆฌ๋์์ด ๋ง์์ง๊ณ ๊ตฌ์ฑ์ด ๋ณต์กํด์ง ๊ฒฝ์ฐ ๋ฆฌ์์ค ๊ตฌ์ฑ์ ํ์ ํ๊ธฐ ์ด๋ ค์
- HCL์ JSON์ ๋นํด ๋์ผํ ๋ด์ฉ์ 50~70% ๊ฐ๊ฒฐํ๊ฒ ์์ฑ ๊ฐ๋ฅ
- HCL์ ์ฃผ์๊ณผ ๋ณ์, function๋ ์ ๊ณต
3-3. ํ ๋ผํผ ๋ธ๋ก
- ํ ๋ผํผ ๋ธ๋ก์ ํ ๋ผํผ ์์ฒด์ ๊ตฌ์ฑ(ํ ๋ผํผ ๋ฒ์ , ํ๋ก๋ฐ์ด๋ ๋ฒ์ ๋ฑ)์ ๋ช ์ํ๋๋ฐ ์ฌ์ฉ โ ๋ฒ์ ์ ๋ช ์์ ์ผ๋ก ์ ์ธํ์ฌ ์คํ ์ค๋ฅ๋ฅผ ์ต์ํํ ๊ฒ์ ๊ถ์ฅ
- ๋ฒ์ ์ฒด๊ณ๋ ์๋งจํฑ ๋ฒ์ ๊ด๋ฆฌ(Semantic Versioning)๋ฅผ ์ฌ์ฉ โ Major.Minor.Patch
- required_version โ ํ ๋ผํผ ๋ฒ์ ์ง์
- required_version โ ํ๋ก๋ฐ์ด๋ ๋ฒ์ ์ง์
terraform {
required_version = ">= 1.0.0"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.2.0"
}
}
}
- cloud ๋ธ๋ก โ TF Cloud ๋๋ TF Enterprise๋ฅผ ์ ์ธ
- backend ๋ธ๋ก โ ํ
๋ผํผ ์คํ ์ ์ ์ฅ๋๋ State์ ์ ์ฅ ์์น๋ฅผ ์ ์ธ
- ํ ๋ผํผ์ State์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํด ์ฝ๋๋ก ๊ด๋ฆฌ๋ ๋ฆฌ์์ค๋ฅผ ํ์ํ๊ณ ์ถ์ ํ๋ค.
- ํ
๋ผํผ์ ์คํ๋๋ ๋์ .terraform.tfstate.lock.info๋ผ๋ ํ์ผ๋ก State๋ฅผ ๋์์ ์ฌ์ฉํ์ง ๋ชปํ๋๋ก ์ ๊ธ ์ฒ๋ฆฌํฉ๋๋ค.
โ -lock=false๋ผ๋ ์ต์ ์ผ๋ก ์ ๊ธ์ ๋ฌด์ํ ์๋ ์์ง๋ง ์ ์์ ์ธ ๊ฒฝ์ฐ๋ผ๋ฉด ๋ค๋ฅธ ์์ ์ด ์ํ ์ค์ผ์ ์์ผ๋ฏ๋ก ์ฃผ์ํด์ผํ๋ค.
- ๋ฐฑ์๋๋ ๋ค์ค์ผ๋ก ์ ํํ ์ ์์ต๋๋ค.
3-4. ๋ฆฌ์์ค(resource)
๋ฆฌ์์ค ๋ธ๋ก โ ์ ์ธ๋ ํญ๋ชฉ ์์ฑ์ ์ํํ๊ณ resource๋ก ์์ํ๋ค.
name์ ๋์ผํ ์ ํ์ ๋ํด ์๋ณ์ ์ญํ ์ ํ๊ธฐ ๋๋ฌธ์ ์ ํ์ด ๊ฐ์ ๊ฒฝ์ฐ์๋ ๊ฐ์ ์ด๋ฆ์ ์ฌ์ฉํ ์ ์๋ค.
resource "<provider>_<resource_type>" "<name>" { <์ธ์> = <๊ฐ> }
์ข ์์ฑ โ ํ ๋ผํผ์ ์ข ์์ฑ์ ๊ณ ๋ คํ์ฌ ๋ฆฌ์์ค๋ฅผ ํ๋ก๋น์ ๋ํฉ๋๋ค.
- ์ข
์์ฑ์๋ ์์์ ์ข
์์ฑ๊ณผ ๋ช
์์ ์ข
์์ฑ์ด ์์ต๋๋ค.
- ์์์ ์ข ์์ฑ์ ํ ๋ผํผ์ ์ํด ์๋์ผ๋ก ๋ถ์ฌ๋ฉ๋๋ค.
- ๋ช ์์ ์ข ์์ฑ์ depends_on์ผ๋ก ๋ถ์ฌํ ์ ์์ต๋๋ค.
- ์ข ์์ฑ์ด ์๋ ๋์ผ ์์ค์ ๋ฆฌ์์ค๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ ๋ณ๋ ฌ์ ์ผ๋ก ํ๋ก๋น์ ๋๋ฉ๋๋ค.
- ์ข
์์ฑ์๋ ์์์ ์ข
์์ฑ๊ณผ ๋ช
์์ ์ข
์์ฑ์ด ์์ต๋๋ค.
๋ฆฌ์์ค argument์ attribute
argument๋ ๋ฆฌ์์ค๋ฅผ ์์ฑํ ๋ ์ง์ ํ๋ ๊ฐ(์ฌ์ฉ์๊ฐ ์ง์ ๊ฐ๋ฅ)
attribute๋ ์์ฑ๋ ๋ฆฌ์์ค๊ฐ ๊ฐ์ง ์์ฑ(์ฌ์ฉ์๊ฐ ์ง์ ๋ถ๊ฐ๋ฅ)
argument์ attribute๋ ์ฐธ์กฐ๊ฐ ๊ฐ๋ฅํ๋ค.
์๋์ ์์์์ ami์ instance_type๋ argument์ด๊ณ , ์์ฑ๋ EC2 ์ธ์คํด์ค์ arn, private ip๋ attribute์ด๋ค.
resource "aws_instance" "example" { ami = "ami-01234567890abcde" instance_type = "t2.micro" }
- lifecycle โ ๋ฆฌ์์ค์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ์ปจํธ๋กคํ๋ ๋ฉํ์ธ์
- create_before_destroy โ ๋ฆฌ์์ค replaceํ๋ ๊ฒฝ์ฐ ์์ฑ ํ ์ญ์ ํ๋๋ก ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก replace๋ ์ญ์ ํ ์์ฑ์ ๋๋ค.
- pervent_destroy โ ๋ฆฌ์์ค ์ญ์ (Destroy)๋ฅผ ๋ช ์์ ์ผ๋ก ๊ฑฐ๋ถ
- ignore_changes โ ๋ณ๊ฒฝ ์ฌํญ์ ์ถ์ ํ์ง ์๊ณ ์ ํ๋ ๋ฆฌ์์ค๋ฅผ ์ ์ธ
- precondition โ ๋ฆฌ์์ค ์์ฑ ์ argument๋ฅผ ๊ฒ์ฆ
- postcondition โ ๋ฆฌ์์ค ์์ฑ ํ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ์ฆ
'๐ IaC > Terraform' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
TF 101 Study 2์ฃผ์ฐจ ์ ๋ฆฌ - data source, variable, local, output, for_each, for, dynamic (0) | 2023.07.14 |
---|---|
Terraform 101 Study - 1์ฃผ์ฐจ(2) ๋์ ๊ณผ์ (0) | 2023.07.09 |
[Terraform] Provider (0) | 2022.09.09 |
[Terraform] ์์กด์ฑ(dependency) ๊ด๋ฆฌ (0) | 2022.09.05 |
[Terraform] data source (0) | 2022.09.04 |