๐ Terraform Day 22: AWS์์ ๋ณด์๋ 2๊ณ์ธต ์ํคํ ์ฒ (EC2 + RDS)
Source: Dev.to

๐งฑ ์ํคํ ์ฒ ๊ฐ์
๋ฐฐํฌ๋ ์ํคํ ์ฒ๋ ๋ค์์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค:
๐ ์น ํฐ์ด
- ํผ๋ธ๋ฆญ ์๋ธ๋ท์ ์์นํ EC2 ์ธ์คํด์ค
- ํผ๋ธ๋ฆญ DNS๋ฅผ ํตํด ์ ๊ทผ ๊ฐ๋ฅ
- Flask ์ ํ๋ฆฌ์ผ์ด์ ์คํ
- ์ธ๋ฐ์ด๋ ์ ๊ทผ์ ์ ํํ๋ ๋ณด์ ๊ทธ๋ฃน ์ฌ์ฉ
๐๏ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํฐ์ด
- MySQL RDS ์ธ์คํด์ค
- ํ๋ผ์ด๋น ์๋ธ๋ท์ ํธ์คํ
- ์ง์ ์ ์ธ ์ธํฐ๋ท ์ ๊ทผ ๋ถ๊ฐ
- ์น ํฐ์ด ๋ณด์ ๊ทธ๋ฃน์์๋ง ํธ๋ํฝ ํ์ฉ
๐ ์ํฌ๋ฆฟ ๊ด๋ฆฌ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ์๋ช ๋ฐ ๋น๋ฐ๋ฒํธ๋ฅผ ๋์ ์ผ๋ก ์์ฑ
- AWS Secrets Manager์ ์์ ํ๊ฒ ์ ์ฅ
- EC2๊ฐ ๋ถํ ์ ์ฌ์ฉ์ ๋ฐ์ดํฐ(user data)๋ฅผ ํตํด ์กฐํ
๐งฉ Terraform ๋ชจ๋ ์ค๊ณ
์ด ํ๋ก์ ํธ๋ ์ค์ ํ์ ์์ ์ค์ํ ๋ง์ถคํ Terraform ๋ชจ๋์ ์ฌ์ฉํ์ฌ ๊ตฌ์ถ๋์์ต๋๋ค.
์ฌ์ฉ๋ ๋ชจ๋:
- VPC ๋ชจ๋ โ VPC, ํผ๋ธ๋ฆญ ๋ฐ ํ๋ผ์ด๋น ์๋ธ๋ท, ์ธํฐ๋ท ๊ฒ์ดํธ์จ์ด, NAT ๊ฒ์ดํธ์จ์ด, ๋ผ์ฐํธ ํ ์ด๋ธ
- ๋ณด์ ๊ทธ๋ฃน ๋ชจ๋ โ ์น SG(HTTP ์ ๊ทผ), DB SG(MySQL ์ ๊ทผ์ ์น SG์์๋ง)
- ์ํฌ๋ฆฟ ๋ชจ๋ โ ๋๋ค ๋น๋ฐ๋ฒํธ ์์ฑ, Secrets Manager ์ ์ฅ
- RDS ๋ชจ๋ โ MySQL ์ธ์คํด์ค, ํ๋ผ์ด๋น ์๋ธ๋ท ๋ฐฐ์น, Secrets Manager์์ ์ฃผ์ ๋ ์๊ฒฉ ์ฆ๋ช
๋ฃจํธ ๋ชจ๋์ ๋ชจ๋ ๊ฐ ์ถ๋ ฅ๊ฐ์ ์ ๋ฌํ๋ฉด์ ์ ์ฒด๋ฅผ ์ค์ผ์คํธ๋ ์ด์ ํฉ๋๋ค.
๐ ๋ณด์ ์๊ฒฉ ์ฆ๋ช ์ฒ๋ฆฌ (ํต์ฌ)
Dayโฏ22์์ ๊ฐ์ฅ ์ค์ํ ๊ตํ ์ค ํ๋:
-
โ Terraform ์ฝ๋์ ์๊ฒฉ ์ฆ๋ช ํฌํจ ๊ธ์ง
-
โ
variables.tf์ ์๊ฒฉ ์ฆ๋ช ํฌํจ ๊ธ์ง -
โ ์ฌ์ฉ์ ๋ฐ์ดํฐ ์คํฌ๋ฆฝํธ์ ์๊ฒฉ ์ฆ๋ช ํฌํจ ๊ธ์ง
-
โ
random_password๋ฅผ ์ฌ์ฉํด ๋น๋ฐ๋ฒํธ ์์ฑ -
โ AWS Secrets Manager์ ์ ์ฅ
-
โ ๋ฐํ์์ ์์ ํ๊ฒ ์กฐํ
์ค์ ํ๋ก๋์ ํ๊ฒฝ์์๋ ๋ฐ๋์ ์ง์ผ์ผ ํ ์ฌํญ์ ๋๋ค.
โ๏ธ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ก ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ
EC2 ์ธ์คํด์ค๋ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํด ๋ค์์ ์ํํฉ๋๋ค:
- ์์คํ ์์กด์ฑ ์ค์น
- Python ๋ฐ Flask ์ค์น
- Secrets Manager์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๊ฒฉ ์ฆ๋ช ๊ฐ์ ธ์ค๊ธฐ
- ํ๊ฒฝ ๋ณ์ ์ค์
- Flask ์ ํ๋ฆฌ์ผ์ด์ ์๋ ์์
๊ฒฐ๊ณผ: ์ธํ๋ผ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ํจ๊ป ๋ฐฐํฌ๋์ด ์์ ์๋ํ๋ฉ๋๋ค.
๐ ์ฌ์ฉ๋ Terraform ์ํฌํ๋ก์ฐ
ํ์ค์ด๋ฉฐ ํ๋ก๋์ ์ ์์ ํ ์ํฌํ๋ก์ฐ:
terraform init
terraform plan
terraform apply
์ฃผ์ ์ฌํญ:
- RDS ํ๋ก๋น์ ๋์๋ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ฉฐ ์ด๋ ์ ์์ ์ธ ๋์์ ๋๋ค.
- ์ถ๋ ฅ๊ฐ์ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์๋ํฌ์ธํธ๋ฅผ ์์ ํ๊ฒ ๋ ธ์ถํฉ๋๋ค.
- ๋น์ฉ ๋ฐ์์ ๋ฐฉ์งํ๊ธฐ ์ํด ํ ์คํธ ํ ์ธํ๋ผ๋ฅผ ๋ฐ๋์ ํ๊ดดํด์ผ ํฉ๋๋ค.