๐กcloudNet@ ํ์ ๊ฐ์๋ค ๋์ด ์งํํ๋ Terraform 101 Study 4๊ธฐ 1์ฃผ์ฐจ ๋ด์ฉ์ผ๋ก,
[ํ ๋ผํผ์ผ๋ก ์์ํ๋ IaC] ๋์๋ฅผ ์ฐธ์กฐํ์์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค..
Terraform์ HashiCorp์์ ๊ฐ๋ฐํ ์ธํ๋ผ ์๋ํ ๋๊ตฌ๋ก, ์ฝ๋ํ ์ธํ๋ผ(Infrastructure as Code, IaC)์ ์์น์ ๋ฐ๋ผ ์ธํ๋ผ๋ฅผ ์ฝ๋๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ ๋ชฉ์ ์ผ๋ก ํฉ๋๋ค. ์ด ๋๊ตฌ๋ ์ํฌํ๋ก ์ง์ค, ์ฝ๋ํ๋ ์ธํ๋ผ, ์ค์ฉ์ฃผ์๋ฅผ ์ค์์ํ๋ฉฐ, AWS ์ธํ๋ผ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํ ํ๊ฒฝ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ์ค์น ๊ณผ์ ์์๋ WSL์ ํตํด Terraform์ ์ค์นํ๊ณ , Visual Studio Code๋ฅผ ์ค์ ํ๋ฉฐ, AWS CLI๋ฅผ ์ค์นํ๊ณ IAM ์ฌ์ฉ์๋ฅผ ์ฐ๋ํ๋ ๋ฐฉ๋ฒ์ ์์ธํ ์ค๋ช ํ์ต๋๋ค.
1. Terraform์ด๋?
ํ ๋ผํผ(Terraform)์ HashiCorp๊ฐ Go ์ธ์ด๋ก ๊ฐ๋ฐํ ์คํ ์์ค *์ฝ๋ํ ์ธํ๋ผ์คํธ๋ญ์ฒ๋ค.
ํ ๋ผํผ์ ์ํฌํ๋ก ์ง์ค, ์ฝ๋ํ ์ธํ๋ผ, ์ค์ฉ์ฃผ์์ 3๊ฐ์ง ์ฒ ํ์ ์ค์ ์ผ๋ก ์ค๊ณ๋์๋ค.
- ์ํฌํ๋ก : ํ ๋ผํผ์ ์ํฌํ๋ก๋ฅผ ํตํด ํ๊ฒฝ์ ๋ณํ์ ํฌ๊ฒ ๊ตฌ์ ๋ฐ์ง ์๋๋ก ์ค๊ณ๋จ. ์ฆ, ์ธํ๋ผ ํ๊ฒฝ์ด ๋ณ๊ฒฝ๋์ด๋ ์ํฌํ๋ก๋ ๊ทธ๋๋ก ์ ์ง๋ ์ ์์
- ์ฝ๋ํ ์ธํ๋ผ(IaC) : ๊ตฌํ๋๊ฑฐ๋ ๊ตฌ์ฑ๋๋ ๋ชจ๋ ๊ฒ์ด ์ฝ๋๋ก ํํ๋์ด์ผ ํ๋ค๋ ์๋ฏธ
- ์ค์ฉ์ฃผ์(pragmastism) : ์ฝ๊ฒ ์ ์ ๋ฅ๋ ฅ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๊ฒ ๋ค.
*IaC(Infrastrucere as Code) : ์ฝ๋ํ ์ธํ๋ผ ์ฆ, ์ธํ๋ผ๊ฐ ์ฝ๋๋ก ํํ๋๋ฉฐ ์ฝ๋๋ก์ ์ธํ๋ผ๋ฅผ ๊ด๋ฆฌํ๋ค.
1.1 ํ ๋ผํผ(IaC)์ ์ฅ์
ํ ๋ผํผ์ ์์คํ ์ ๋ํ ์ผ๊ด๋ ๊ด๋ฆฌ ๋ฐ ์๋ํ์ ์ฃผ ๋ชฉ์ ์ด ์๋ค.
- ์ํฌํ๋ก
- ์ธํ๋ผ ํ๋ก๋น์ ๋์ ์ํด ์ฒด๊ณํ๋ ์ํฌํ๋ก๋ฅผ ์ ๊ณตํ๋ค. ํ ๋ผํผ ๋ฑ IaC ๋๊ตฌ ์ด์ ํ๋ก๋น์ ๋ ์์ ์ GUI ํน์ CLI ํ๊ฒฝ์ ํตํด ์๋์ผ๋ก ์งํ๋์๋๋ฐ, ์ด๋ ์ผ๊ด๋ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ํ๊ธฐ ์ด๋ ต๋ค.
- ์์ฐํ
- ํ ๋ผํผ์ ํตํด ํ๋ก๋น์ ๋ ์์ ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๊ณ ์์ ๋ ธํ์ฐ(ํ์คํ ๋ฆฌ) ๋ฑ์ ์์ฐํ ํ ์ ์๋ค. ์ฝ๋ ํํ๋ก ๋์ํ๋ฏ๋ก ์ฝ๋ ๊ธฐ๋ฐ์ ๊ณต์ ๋๊ตฌ์ ํตํฉ๋์ด ๊ณต์ ๋ฐ ์ฌ์ฌ์ด ์์ํ๋ค.
- ํ์คํ
- ์์ฑ๋ ํ ๋ผํผ ์ฝ๋๋ ์กฐ์ง ๋ด๋ถ์ ํ์คํ๋ฅผ ๊ฑฐ์น ์ํ๋ก, ์๋ จ์๊ฐ ์๋๋๋ผ๋ ์ด๋ฏธ ์์ฑ๋ ์ฝ๋ ์งํฉ์ ์ฌ์ฉํ์ฌ ์ฝ๊ฒ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค. ์ธ๋ถ ํ๊ณผ์ ๊ณต๋ ์์ ์ ์ํ ์ ์ฑ ๋ ์ ์ํ ์ ์๋ค.
- ํ๋ก๋น์ ๋ ์๋ํ
- ํ ๋ผํผ์ ๊ธฐ์กด ์ฝ๋ ์ํฌํ๋ก ๋๊ตฌ(๊น, CI/CD, Jira ๋ฑ)์ ํตํฉํ ์ ์๋ค. ์์ ์ํ ์ ์คํ ๊ณํ์ ์์ฑํ์ฌ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฏธ๋ฆฌ ํ์ธํ๋ฏ๋ก ์์ ํ๊ณ ๋น ๋ฅธ ํ๋ก๋น์ ๋์ ์ํํ๋ค.
1.2 ์ฌ์ฉ ๋์?
ํ ๋ผํผ์ ์ธํ๋ผ๋ฅผ ์๊ณ ์๋ก์ด ํ๋ก์ ํธ๊ฐ ์งํ๋ ๋ ์ค๊ณ์ ๊ตฌ์ถ์ ๋ด๋นํ๋ ์ฌ๋์๊ฒ ์ ์ฉํ๋ค.
(๋ฌผ๋ก ์ดํ ์ด์ ๋ฐ ์ ์ง ๋ณด์๋ฅผ ์งํํ๋ฌ๋ฉด ์ด์ ๋ด๋น์๋ ํ ๋ผํผ ์ง์์ ๊ฐ์ถฐ์ผ ํ๋ค)
์ฆ, ์ธํ๋ผ๋ฅผ ์์ฃผ ์์ฑํ๊ณ ์ด์ํ๋ ์ฌ๋์ผ์๋ก ์๋ํ๋ฅผ ์ํด ํ ๋ผํผ์ด ๊ฐ๋ ์ฌ์ฌ์ฉ์ฑ๊ณผ ํ์คํ๋ ์ฌ์ฉ ๋ฐฉ์์ ์๋ก์ด ์ธํ๋ผ๋ฅผ ๋จ๊ธฐ๊ฐ์ ๋น ๋ฅด๊ณ ์์ ํ๊ฒ ๊ตฌ์ฑํ๊ธฐ์ ์ ํฉํ๋ค.
2. ์คํ ํ๊ฒฝ ๊ตฌ์ฑ
์ด์ Terraform ์ฌ์ฉ์ ์ํด ์คํ ํ๊ฒฝ์ ๊ตฌ์ฑํ๊ฒ ๋ค.
(์ด๋ฒ ๊ธ์์ wls ์ค์น ๊ธฐ๋ฐ์ผ๋ก ์งํ๋์๋ค. windows์ ์ง์ path๋ฅผ ์ค์ ํ์ฌ ๊ตฌ์ฑ ๊ฐ๋ฅํ๋ค.
ํด๋น ๋ฐฉ๋ฒ์ ๋์ค์ ๋ค์ ๋ค๋ค๋ณด๊ฒ ๋ค.)
2.1 wsl ๋ฆฌ๋ ์ค ํ๊ฒฝ ์ค์น
windows cmd๋ก ์ง์ ์ค์นํ ์ ์์ง๋ง, ๊ฐํธํ๊ฒ wsl ๋ฆฌ๋ ์ค ํ๊ฒฝ์ผ๋ก ์ค์นํ๊ฒ ๋ค.
wsl --list --online
cmd ํ๊ฒฝ์์ ํด๋น ๋ช ๋ น์ผ๋ก wsl ์ค์นํ ์ ์๋ ๋ฆฌ์คํธ ๋ชฉ๋ก์ ๋ํ๋ธ๋ค.
wsl --install
wsl ์ค์น๋ฅผ ์งํํ๋ค.
(๊ธฐ๋ณธ ์ค์น ์ ubuntu๊ฐ ์ค์น๋๋ค.)
๋ค์ wsl์์ terraform์ ์ค์นํ๋ค.
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install terraform
# ํ
๋ผํผ ๋ฒ์ ์ ๋ณด ํ์ธ
**terraform version**
์ค์น๊ฐ ์ ์์ ์ผ๋ก ์๋ฃ๋์๋ค.
2.2 visualstudio ์ธํ
visualstudio์์ ์ข์ธก Extentions์ ์ ํํ๋ค.
์ดํ HashiCorp HCL๋ฅผ ๊ฒ์ ํ ์ค์น๋ฅผ ์งํํ๋ค.
3. AWS CLI ์ค์น
๋ณธ์ธ์ ์ด๋ฏธ AWS ๊ณ์ ์ ์์ฑํ์๋ค.
AWS ๊ณ์ ์์ฑ ํ iam user๋ฅผ ์์ฑํ๋ค. ์์ฑํ user์ accesskey ๊ถํ์ ๋ถ์ฌํ๋ค.
์ดํ cli๋ฅผ ์ค์นํ๋ค.
# Linux(WSL2) ์ค์น ๋ฐฉ๋ฒ
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
wsl ํ๊ฒฝ์ aws cli ์ค์น๊ฐ ์๋ฃ๋์๋ค.
๋ค์, ์์ฑํ iam user accesskey ์ ๋ณด๋ฅผ ๋ฑ๋กํ๋ค.
cli ๊ณ์ ์ ๋ณด ์ฐ๋์ด ์๋ฃ๋์๋ค.
์ดํ ๊ธฐ๋ณธ vpc ์ ๋ณด๋ฅผ ํ์ธํ์ฌ ์ ์์ ์ผ๋ก ๊ณ์ ์ด ์ฐ๋๋์๋์ง ํ์ธํ๋ค.
CLI ์ฐ๊ฒฐ ์ ๋์๋ค
์ด๋ก์ Terraform์ ์ฌ์ฉํ ์์ฃผ ๊ธฐ์ด์ ์ธ ์ค๋น๊ฐ ์๋ฃ๋์๋ค.
๋ค์์๋ ํ ๋ผํผ์ผ๋ก ๊ธฐ๋ณธ์ ์ธ ๋ฆฌ์์ค(EC2 ๋ฑ)์ ์ค์น, ์์ , ์ญ์ ํ๋ ์ค์ต์ ์งํํด๋ณด๊ฒ ๋ค.