๊ฐ์
Google Cloud Policy Intelligence๋ ๊ธฐ์ ์์ ์ ์ฑ ์ ์ดํดํ๊ณ ๊ด๋ฆฌํ์ฌ ์ํ์ ์ค์ผ ์ ์๋๋ก ๋์์ค๋๋ค. ์ฐ์ํ ๊ฐ์์ฑ๊ณผ ์๋ํ ๋๋ถ์ ๊ณ ๊ฐ์ด ์ํฌ๋ก๋๋ฅผ ๋๋ฆฌ์ง ์๊ณ ๋ ๋ณด์์ ๊ฐํํ ์ ์์ต๋๋ค.
์ถ์ฒ์๋ฅผ ์ฌ์ฉํ๋ฉด Google Cloud ๋ฆฌ์์ค ๊ถ์ฅ์ฌํญ์ ๊ฒ์ํ ์ ์์ผ๋ฏ๋ก ํด๋ผ์ฐ๋ ๋ณด์์ ๊ฐํํ๊ณ ๋น์ฉ์ ์ ์ฝํ ์ ์์ต๋๋ค. ์ง์๋๋ ๊ถ์ฅ์ฌํญ ๋ชฉ๋ก์ ์ถ์ฒ์ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์. ์ด ํํ ๋ฆฌ์ผ์์๋ VM ์ธ์คํด์ค์ ๋ํ ํฌ๊ธฐ ๊ถ์ฅ์ฌํญ ๋ฐ Identity and Access Management(IAM) ๊ถ์ฅ์ฌํญ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค. ์ถ์ฒ์๋ ๋จธ์ ๋ฌ๋์ ์ฌ์ฉํ์ฌ ๊ด๋ฆฌ์์๊ฒ ๋ฆฌ์์ค๋ฅผ ๋์ฑ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก Google Cloud ๋ฆฌ์์ค์ ๋ํ ๋ถํ์ํ ์ก์ธ์ค ์ญ์ ๋ฐ Compute Engine ์ธ์คํด์ค ํฌ๊ธฐ ์กฐ์ ์ ๋ํ ๊ถ์ฅ์ฌํญ์ ์ ๊ณตํฉ๋๋ค.
๊ฐ ๊ถ์ฅ์ฌํญ์๋ ์ ์ ์์ ๊ณผ ๊ทธ ์ํฅ์ด ํฌํจ๋ฉ๋๋ค. ํ์ธ๋ ์ํฅ๊ณผ ํ๊ฒฝ๋ณ ๊ธฐํ ๊ณ ๋ ค์ฌํญ์ ๋ํ ๊ถ์ฅ์ฌํญ์ ๊ฒํ ํ ํ ์ ์ฉํ ๊ถ์ฅ์ฌํญ์ ์ ํํ ์ ์์ต๋๋ค. Google Cloud ์ฝ์์์ ์๋์ผ๋ก ์ถ์ฒ์ ์ ์ฉํ๊ฑฐ๋ ์ฝ๋ํ ์ธํ๋ผ(IaC) ํ์ดํ๋ผ์ธ์ ํตํฉํ์ฌ ํ๋ก๊ทธ๋๋งคํฑ ๋ฐฉ์์ผ๋ก ์ ์ฉํ ์ ์์ต๋๋ค.
IaC๋ฅผ ์ฌ์ฉํ๋ฉด Google Cloud ๋ฆฌ์์ค๋ฅผ ์๋์ผ๋ก ๋ง๋ค ์ ์์ต๋๋ค. IaC ์ ์ฅ์๋ฅผ ์ต์ ์ํ๋ก ์ ์งํ๊ณ ์ด ์ ์ฅ์๋ฅผ ํตํด ์ํ๋ ๋ณ๊ฒฝ์ฌํญ์Google Cloud ์กฐ์ง์ ๋ผ์ฐํ ํด์ผ ํฉ๋๋ค. ์กฐ์ง์ IaC ์ ๋ต์ ์ผ๋ฐ์ ์ผ๋ก ์๊ฒฉํ๊ฒ ๊ตฌํ๋๊ณ ํด๋ผ์ฐ๋ ์ธํ๋ผ์ ๋จ์ผ ๋ฒ์ ์ญํ ์ ํ ๋ ์ ์ฉํ ๊ฒ์ผ๋ก ํ๋ช ๋ฉ๋๋ค. IaC ์ ์ฅ์๊ฐ ๋ฐ์๋ ์ธํ๋ผ ๋ฒ์ ๊ณผ ์กฐ์ง์ ์๋ ์ธํ๋ผ ์ฌ์ด์ ๋๋ฆฌํํธ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด์ IaC ์ ์ฅ์๋ฅผ ์ต์ ์ํ๋ก ์ ์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
IAM ๊ถ์ฅ์ฌํญ
๋ ๋ค๋ฅธ ์ฃผ์ ๊ถ์ฅ์ฌํญ ์ค ์ผ๋ฐ์ ์ธ ๊ฒ์ ์ต์ ๊ถํ์ ๋ณด์ ์์น๊ณผ ์กฐ์ง ๋ณ๊ฒฝ์ฌํญ์ ์ถ์ํ๊ณ IaC ์ ์ฅ์์ ๋๊ธฐํํ๋ ๋ฐฉ๋ฒ์ ์ ์คํ๊ฒ ๊ณ ๋ คํ๋ ๊ฒ์ ๋๋ค.
VM์ ํฌ๊ธฐ ๊ถ์ฅ์ฌํญ
ํฌ๊ธฐ ๊ถ์ฅ์ฌํญ์ ์ฌ์ฉํ๋ฉด ์ธ์คํด์ค ๋ฆฌ์์ค๋ฅผ ๋ณด๋ค ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ์ธ์คํด์ค์ ๋จธ์ ์ ํ ํฌ๊ธฐ ์กฐ์ ํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ฌ ๋น์ฉ์ ์ ๊ฐํ ์ ์์ต๋๋ค.
์ด ๊ฐ์ด๋์์๋ Policy Intelligence ๊ถ์ฅ์ฌํญ์ ํ๋ก๊ทธ๋๋งคํฑ ๋ฐฉ์์ผ๋ก ์ ์ฉํ๊ธฐ ์ํด ์๋ํ ํ์ดํ๋ผ์ธ์ ์ค๊ณํ๊ณ ๋น๋ํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค. ์ด ์๋ํ ํ์ดํ๋ผ์ธ์ ์ผ๋ถ๋ก ์ถ์ฒ์๊ฐ ์ ๊ณตํ๋ VM ํฌ๊ธฐ ์กฐ์ ๋ฐ IAM ์ ์ฑ ๋ฐ์ธ๋ฉ ๊ถ์ฅ์ฌํญ์ ๋ฐ๋ผ Google Cloud ์กฐ์ง์ ์ ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ ๋ณ๊ฒฝ์ฌํญ์ผ๋ก IaC ์ ์ฅ์๋ฅผ ์ต์ ์ํ๋ก ์ ์งํ๋ ๋ฐฉ๋ฒ์ ์์๋ด ๋๋ค.
์ด ํํ ๋ฆฌ์ผ์์๋ Hashicorp Terraform์ IaC ๋๊ตฌ๋ก ์ฌ์ฉํฉ๋๋ค. ํ์ง๋ง Deployment Manager์ ๊ฐ์ ๋ค๋ฅธ IaC ๊ด๋ฆฌ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ์ค๋ช ๋ ์๋ ํ์ดํ๋ผ์ธ์ ์ฌ์ฉ๋ ์ํคํ ์ฒ ํจํด๊ณผ ๊ตฌ์ฑ์์๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค. ํน์ IaC ๊ตฌํ์ ์ ํฉํ๋๋ก ์ด ๊ฐ์ด๋์์ ์ฌ์ฉํ ์ ์๊ฒ ๋ง๋ ์คํ์์ค ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์์ ํด์ผ ํฉ๋๋ค.
์ด ๊ฐ์ด๋๋Google Cloud์ ๊ด๋ฆฌ, ๋ณด์, ์ธํ๋ผ ๊ณํ์ ๋ด๋นํ๋ ์ค๊ณ์, ์ ํ ์์ ์, ๊ฐ๋ฐ์๋ฅผ ๋์์ผ๋ก ํฉ๋๋ค.
์๋ํ ํ์ดํ๋ผ์ธ ์ํคํ ์ฒ
๋ค์ ๋ค์ด์ด๊ทธ๋จ์์๋ ์ด ์๋ํ ํ์ดํ๋ผ์ธ์์ ์ฌ์ฉํ๋ ๊ตฌ์ฑ์์๋ฅผ ๋ณด์ฌ์ค๋๋ค.
์์ฝ๋ Cloud Scheduler ์์ ์ Recommender Parser ์๋น์ค๋ฅผ ์คํํฉ๋๋ค. ์๋น์ค๋ Recommender API๋ฅผ ํธ์ถํ์ฌ ์ง์ ํ ํ๋ก์ ํธ์ ์ถ์ฒ์ ๊ถ์ฅ์ฌํญ์ ๊ฐ์ ธ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ด๋ฌํ VM ํฌ๊ธฐ ์กฐ์ ๋ฐ IAM ๊ถ์ฅ์ฌํญ์ ํ์ฑํ์ฌ Terraform ๋งค๋ํ์คํธ์ ์๋ ๊ตฌ์ฑ์ ๋งคํํฉ๋๋ค. ์๋น์ค๊ฐ ์ด๋ฌํ ๊ถ์ฅ์ฌํญ์ ๋ฐ์ํ๋๋ก IaC ๋งค๋ํ์คํธ๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค. ๋ณ๊ฒฝ์ฌํญ์ ๊ฒํ ํ ์ ์๋๋ก ๋ณ๊ฒฝ์ฌํญ์ด ํฌํจ๋ pull ์์ฒญ์ ์์ฑํฉ๋๋ค. pull ์์ฒญ์ ๊ฒํ ํ๊ณ ๋ณํฉํ๋ฉด Cloud Build ์์ ์์ ๋ณ๊ฒฝ์ฌํญ์Google Cloud ์กฐ์ง์ ์ธํ๋ผ์ ์ ์ฉํฉ๋๋ค.
์ฒ๋ฆฌ๋ ๊ถ์ฅ์ฌํญ ์ถ์ , ๋น๋ ์๋ฃ์ ๋ํ ์๋ฆผ ์์ฑ, Terraform ์ํ ์ ์ฅ์ ์ํด ํ์ดํ๋ผ์ธ์์ ์ฌ๋ฌ ๊ฐ์ง ๊ธฐ๋ณธ Google Cloud ์๋น์ค๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ํํ ๋ฆฌ์ผ์ ํตํด ์ด๋ฌํ ์๋น์ค๋ฅผ ์์ธํ ์์๋ด ๋๋ค.
๋ค์ ๋ชฉ๋ก์์๋ ๊ตฌ์ฑ์์ ์ฉ๋์ ์ก์ธ์ค ์ ์ด ์๊ตฌ์ฌํญ์ ์ค๋ช ํฉ๋๋ค.
- ํ๋ซํผ ์ธํ ๋ฆฌ์ ์ค ์ถ์ฒ์
- ์ฉ๋: ๋ณด์ ๋ฐ VM ํฌ๊ธฐ ๊ถ์ฅ์ฌํญ์ ์์ฑํฉ๋๋ค.
์ก์ธ์ค ์ ์ด: Google Cloud ์๋น์ค ๊ณ์ ์๋ Recommender API๋ฅผ ์ฌ์ฉํ์ฌ ๊ถ์ฅ์ฌํญ์ ๊ฒ์ํ๋ ๋ฐ ํ์ํ IAM ๊ถํ์ด ์์ด์ผ ํฉ๋๋ค.
์ถ์ฒ์ ์ญํ ๋ฐ ๊ถํ์ ๊ฒํ ํ์ฌ recommender-parser ์๋น์ค๋ฅผ ์คํํ๋ ๋ฐ ์ฌ์ฉํ๋ ์๋น์ค ๊ณ์ ์ ๊ฐ์ฅ ์ ํฉํ ์ญํ ์ ์ ํํฉ๋๋ค.
- Cloud Scheduler
์ฉ๋: Cloud Scheduler๊ฐ Recommender Parser ์๋น์ค๋ฅผ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค. Cloud Scheduler๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ํ ๋งํผ์ ํ์ ์๋น์ค์ ์ธ์คํด์ค๋ฅผ ํธ์ถํ๋ ์ฌ๋ฌ ์์ ์ ์ค์ ํ ์ ์์ต๋๋ค. ๊ฐ ํธ์ถ์ ๋ค์ ์ ๋ ฅ์ ์ ๋ฌํด์ผ ํฉ๋๋ค.
- ๊ถ์ฅ์ฌํญ์ ์ฒ๋ฆฌํด์ผ ํ๋ ํ๋ก์ ํธ ๋ชฉ๋ก
- ์ถ์ฒ ์ ํ
- IaC ์ ์ฅ์ ์ด๋ฆ
์ก์ธ์ค ์ ์ด: Cloud Scheduler์์ ์ถ์ฒ์ ํ์ ์๋น์ค๋ก์ ํธ์ถ์ ์ฌ์ฉํ Google Cloud ์๋น์ค ๊ณ์ ์ ๋ง๋ค๊ฑฐ๋ ์๋ณํฉ๋๋ค.
์๋น์ค ๊ณ์ ์ด Cloud Scheduler ์์ ์ ์คํํ ์ ์๋๋ก ์ด ๊ณ์ ์ Cloud Scheduler ์๋น์ค ์์ด์ ํธ ์ญํ ์ ๋ถ์ฌํฉ๋๋ค. ๋ํ ์๋น์ค ๊ณ์ ์์ Cloud Run ์๋น์ค๋ฅผ ํธ์ถํ๋ฏ๋ก ์ด ๊ณ์ ์ Cloud Run ํธ์ถ์ ์ญํ ์ ๋ถ์ฌํฉ๋๋ค.
์์ธํ ๋ด์ฉ์ ์ค์ผ์ค๋ฌ ์์ ์ ๋ํ ์ธ์ฆ๋ ์ก์ธ์ค ๊ตฌ์ฑ์ ๋ํ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
- Cloud Run
์ฉ๋: recommender-parser ์๋น์ค๋ ๋ชจ๋ ์ฒ๋ฆฌ ๋ก์ง์ด ์์ฃผํ๋ ๊ณณ์ ๋๋ค. ์ฌ๊ธฐ์๋ ์ฌ๋ฌ ๊ฒฝ๋ก๊ฐ ์์ผ๋ฉฐ ๊ฐ ๊ฒฝ๋ก๋ ํน์ ์ฉ๋๋ก ์ฌ์ฉ๋ฉ๋๋ค.
- ๊ฐ ๊ถ์ฅ์ฌํญ ์ ํ์ ๊ถ์ฅ์ฌํญ ํ์ฑ
- ์ฒ๋ฆฌ ์ค์ธ ๊ถ์ฅ์ฌํญ์ ์ํ ์ ๋ฐ์ดํธ
์ก์ธ์ค ์ ์ด: IAM์ ์ฌ์ฉํ์ฌ ์ด ์๋น์ค์ ๋ํ ์ก์ธ์ค ๊ถํ์ ๊ด๋ฆฌํฉ๋๋ค.
๋ํ ์ ์ฉ ์๋น์ค ๊ณ์ ์ ์๋น์ค๋ฅผ ํ ๋นํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์๋น์ค๋ง Firestore์ ๊ฐ์ ๋ค๋ฅธ ์๋น์ค๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค.
- Hashicorp Terraform
์ฉ๋: Terraform 0.12๋ IaC ๋๊ตฌ์ ๋๋ค.
Terraform์ฉ Cloud Build ๋น๋๋ Terraform ๋ช ๋ น์ด๋ฅผ ํธ์ถํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ Cloud Build ์๋น์ค ๊ณ์ ์ ์ด๋ฌํ ์ฉ๋๋ก ์ฌ์ฉ๋ฉ๋๋ค.
- Cloud Build
์ฉ๋: Google Cloud Build๋ Policy Intelligence ๊ถ์ฅ์ฌํญ์ ๋ฐ๋ผ IaC ๋งค๋ํ์คํธ์ ๋ณ๊ฒฝ์ฌํญ์ ๊ธฐ์ค์ผ๋ก ์ธํ๋ผ ๋ฐฐํฌ๋ฅผ ์๋ํํฉ๋๋ค.
์ก์ธ์ค ์ ์ด: Cloud Build ์๋น์ค ๊ณ์ ์ ํ ์คํธ ํ๋ก์ ํธ์ ๋ฆฌ์์ค์ ์ํธ์์ฉํ ์ ์๋ ์ ์ ํ ๊ถํ ์งํฉ์ด ์์ด์ผ ํฉ๋๋ค.
Cloud Build ์๋น์ค ๊ณ์ ๊ตฌ์ฑ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
- GitHub
์ฉ๋: IaC ์ ์ฅ์๋ ์์ค ์ ์ด๋ฅผ ์ํด GitHub๋ฅผ ์ฌ์ฉํฉ๋๋ค. GitHub์ IaC ์ ์ฅ์๋ Cloud Build์ ํตํฉ๋ฉ๋๋ค. ๋ง์คํฐ ๋ธ๋์น์ ์ปค๋ฐ์ด ์ํ๋๋ฉด ์ฌ์ ๊ตฌ์ฑ๋ ์์ ์งํฉ์ ์คํํ๋๋ก Cloud Build ์์ ์ด ํธ๋ฆฌ๊ฑฐ๋ฉ๋๋ค.
์ก์ธ์ค ์ ์ด: IaC ์ ์ฅ์์ ๋ํ ์ก์ธ์ค๋ฅผ ์ฌ์ฉ ์ค์ ํ๋ ค๋ฉด SSH ํค๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค.
๋ํ GitHub์์ ์ปค๋ฐ์ ํธ์ํ๋ ค๋ฉด ๊ฐ์ธ ์ก์ธ์ค ํ ํฐ์ ์์ฑํด์ผ ํฉ๋๋ค.
- Firestore
Firestore๋ ์ด ์ํคํ ์ฒ์์ ์ฌ์ฉ๋๋ ์์ ๊ด๋ฆฌํ ํ์ฅํ NoSQL ๋ฌธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก, Git ์ปค๋ฐ๊ณผ ๊ด๋ จ๋ ํด๋น ์ธ๋ถ์ ๋ณด์ ํจ๊ป Recommender Parser ์๋น์ค์์ ํ์ฑํ ๊ถ์ฅ์ฌํญ ID์ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ์ ์งํฉ๋๋ค.
Firestore์ ์ ์ง๋๋ ์ธ๋ถ์ ๋ณด๋ ์๋ ํฌ ์๋ ํ์ดํ๋ผ์ธ์ ์ผ๋ถ์ธ ํผ๋๋ฐฑ ๋ฃจํ์์ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. Recommender API๊ฐ ์์ฑํ ๊ถ์ฅ์ฌํญ์ ์ ํํ๊ณ ๊ถ์ฅ์ฌํญ์ ์ฒ๋ฆฌํ๊ธฐ ์ ์ ์๋น์ค๊ฐ ๊ถ์ฅ์ฌํญ ์ํ๋ฅผ
CLAIMED
๋ก ํ์ํฉ๋๋ค. ๊ถ์ฅ์ฌํญ์ด ์ฑ๊ณต์ ์ผ๋ก ์ ์ฉ๋๋ฉด ์๋น์ค๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฟผ๋ฆฌํ์ฌ Cloud Build ์์ ์์ ์ฑ๊ณต์ ์ผ๋ก ์ ์ฉ๋ ๊ถ์ฅ์ฌํญ ID๋ฅผ ๊ฒ์ํ๊ณ ๊ถ์ฅ์ฌํญ ์ํ๋ฅผSUCCEEDED
๋ก ๋ณ๊ฒฝํฉ๋๋ค. Cloud Build ์์ ์ด ์คํจํ๋ฉด ๊ถ์ฅ์ฌํญ ์ํ๊ฐFAILED
๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค.์ก์ธ์ค ์ ์ด: ์์ธํ ๋ด์ฉ์ Firestore ์ญํ ์ ์ฐธ์กฐํ์ธ์. recommender-parser ์๋น์ค๋ Firestore์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ด๋ฅผ ์ํด roles/datastore.user ์ญํ ์ด ํ์ํฉ๋๋ค.
- Pub/Sub
์ฉ๋: Cloud Build๋ ๋น๋ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๋(์: ๋น๋๊ฐ ์์ฑ๋ ๋, ๋น๋๊ฐ ์๋ ์ํ๋ก ์ ํ๋ ๋, ๋น๋๊ฐ ์๋ฃ๋ ๋) Pub/Sub ์ฃผ์ ์ ๋ฉ์์ง๋ฅผ ๊ฒ์ํฉ๋๋ค.
Cloud Build๊ฐ ๋ฉ์์ง๋ฅผ ๊ฒ์ํ๋ Pub/Sub ์ฃผ์ ๋ฅผ cloud-builds๋ผ๊ณ ํ๊ณ ํ๋ก์ ํธ์์ Cloud Build API๋ฅผ ์ฌ์ฉ ์ค์ ํ๋ฉด ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค.
์ก์ธ์ค ์ ์ด: ํธ์ ๊ตฌ๋ ์ ์๋น์ค์์ ์์ฒญ์ ์น์ธํ๋๋ก ์ธ์ฆ ํค๋๋ฅผ ์ ๊ณตํ๋๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ํธ์ ๊ตฌ๋ ์ฌ์ฉ์ ์ฐธ์กฐํ์ธ์.
๋ชฉํ
- ๋ค์์ ์ํ ์๋ํ ํ์ดํ๋ผ์ธ ๋น๋
- ํ๋ซํผ Policy Intelligence ๊ถ์ฅ์ฌํญ ์ฌ์ ๋ชจ๋ํฐ๋ง
- ๊ถ์ฅ์ฌํญ ํ์ฑ ๋ฐ ๊ธฐ์กด IaC ์ ์ฅ์์ ์ ๋ฐ์ดํธ ์ ์ฉ
- Google Cloud ์๋น์ค ๋ชจ์์ธ Hashicorp Terraform ๋ฐ GitHub๋ฅผ ์ฌ์ฉํ์ฌ ์ด ํ์ดํ๋ผ์ธ์ ๋น๋ํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์ธ์.
- ์ด ํ์ดํ๋ผ์ธ์ ๋น๋ํ๊ธฐ ์ํด ์ผ๋์ ๋์ด์ผ ํ๋ ๊ฐ์ ๊ณผ ๊ถ์ฅ์ฌํญ ์ดํด
- ํ์ดํ๋ผ์ธ ํ ์คํธ
๋น์ฉ
์ด ๋ฌธ์์์๋ ๋น์ฉ์ด ์ฒญ๊ตฌ๋ ์ ์๋ ๋ค์๊ณผ ๊ฐ์ Google Cloud๊ตฌ์ฑ์์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- Cloud Run
- Cloud Build
- Compute Engine
- Cloud Storage
- Firestore
- Pub/Sub
- Cloud Scheduler
- Recommender
ํ๋ก์ ํธ ์ฌ์ฉ๋์ ๊ธฐ์ค์ผ๋ก ์์ ๋น์ฉ์ ์ฐ์ถํ๋ ค๋ฉด ๊ฐ๊ฒฉ ๊ณ์ฐ๊ธฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์์ํ๊ธฐ ์ ์
์ด ํํ ๋ฆฌ์ผ์์๋ GitHub ๊ณ์ ์ด ์๊ณ Git, Node.js, Terraform, Docker์ ์ต์ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
์ถ์ ๋ ธํธ ๋ฐ ๊ฐ์
IaC ๋๊ตฌ ๋ฐ ๋งค๋ํ์คํธ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์๋ ๋ง์ ๋ณ์๊ฐ ์์ต๋๋ค.
๋ค์ ์ ๋ณด๋ฅผ ๊ฒํ ํ์ฌ ์ด ํํ ๋ฆฌ์ผ์ IaC ํ์ดํ๋ผ์ธ์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ ํ์ํ ๋ณ๊ฒฝ์ฌํญ ์ข ๋ฅ๋ฅผ ํ์ธํฉ๋๋ค.
- ์ด ํ์ดํ๋ผ์ธ์ Terraform ๋ฒ์ 0.12๋ฅผ ์ฌ์ฉํฉ๋๋ค. HCL ๊ตฌ์ฑ ๊ตฌ๋ฌธ์ ์ค์ ๋ณ๊ฒฝ์ฌํญ์ด๋ Terraform ์ํ ํ์ผ์ ๊ตฌ์กฐ ๋ณ๊ฒฝ์ฌํญ์ผ๋ก ์ธํด ํธํ๋์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ์ด ํ์ดํ๋ผ์ธ์ IaC ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ๊ฐ ์ค์ฒฉ๋์ง ์์ผ๋ฉฐ IaC ์ ์ฅ์ ํ๋๊ฐ Google Cloud ํ๋ก์ ํธ ํ๋ ์ด์์ ์๋ ๋ฆฌ์์ค๋ฅผ ๊ด๋ฆฌํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
- ํ๊ฒฝ ๋ณ์๋ก ์ ๋ฌ๋ Terraform ๋ณ์๋ ๋ช ๋ น์ค ์ธ์๊ฐ ์ง์๋์ง ์์ต๋๋ค. ํ๋กํ ํ์ ์ tfvars ํ์ผ์ ์๋ Terraform ๋ณ์์ ์ ์ธ์ ๊ตฌ์ฑ์ ๊ฐ์ ํฉ๋๋ค.
- ์ญํ ์ ๊ถํ ํ์ ์งํฉ์ด 60์ผ ๋์ ์ฌ์ฉ๋์ง ์์๊ณ VM ํฌ๊ธฐ ๊ถ์ฅ์ฌํญ์ด ์ ์ฌํ ํจํด์ ๋ฐ๋ฅด๋ ๊ฒฝ์ฐ ์ถ์ฒ์๋ IAM ๊ถ์ฅ์ฌํญ์ ์์ฑํฉ๋๋ค. ์ด ํํ ๋ฆฌ์ผ์ ๋ชฉ์ ์ ์ํด ํ์ดํ๋ผ์ธ์ ํ ์คํธํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ์ํ ์ถ์ฒ ํ์ด๋ก๋๊ฐ ์ ๊ณต๋ฉ๋๋ค.
- ์ด ์ถ์ ๋ฒ์ ์์๋ Terraform ๋ด ๋ฃจํ๊ฐ ์ง์๋์ง ์์ต๋๋ค.
- Terraform ๋ชจ๋์ ์ง์๋์ง ์์ต๋๋ค. ์ฝ๋๋ฒ ์ด์ค๋ ์คํ์์ค์ด๋ฉฐ, ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ์ ๋ชจ๋ ์ฌ์ฉ๋ฒ์ ๋ง์ถ๋๋ก ํ์ฑ ํ๋ฆ์ ํ์ํ ํน์ ๊ฐํ๋ฅผ ์ํํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
ํ์ฌ ์คํ์์ค Recommender Parser ์๋น์ค ๋ฒ์ ์ ๋ค์๊ณผ ๊ฐ์ ์๋ ค์ง IAM ๊ถ์ฅ์ฌํญ ์ ํ์ฌํญ์ ๋ง๊ฒ ์กฐ์ ๋ฉ๋๋ค.
- ๊ถ์ฅ์ฌํญ์ ๋ค์์ ํด๋นํ๋ Cloud IAM ์ ์ฑ
binding์ ๋์์ผ๋ก๋ง ๊ฐ๋ฅํฉ๋๋ค.
- ํ๋ก์ ํธ ์์ค
- ์ฌ์ฉ์ ๊ณ์ ๋ฐ ์ฌ์ฉ์ ๊ด๋ฆฌ ์๋น์ค ๊ณ์ ๊ณผ ์ฐ๊ฒฐ๋จ
- IAM ๊ถ์ฅ์ฌํญ์ ๊ธฐ๋ณธ ์ญํ ๊ณผ ์ฌ์ ์ ์๋ ์ญํ ๋ง ์ง์ํฉ๋๋ค. ์ปค์คํ ์ญํ ๊ณผ ์กฐ๊ฑด๋ถ binding์ ํ๊ฐ ๋ฐ ๊ถ์ฅ๋์ง ์์ต๋๋ค.
- ๊ถ์ฅ์ฌํญ ์ญํ ์๋ ํ์ฌ ์ญํ ๊ถํ์ ํ์ ์งํฉ๋ง ํฌํจ๋ฉ๋๋ค. ๊ถ์ฅ์ฌํญ ์ญํ ๋ก ์ ๊ถํ์ด ์ถ๊ฐ๋์ง๋ ์์ต๋๋ค.
๊ธฐ๋ณธ ์๊ฑด
- Google Cloud ํ๋ก์ ํธ ๋ ๊ฐ๋ฅผ ์ ํํ๊ฑฐ๋ ๋ง๋ญ๋๋ค.
ํ๋ก์ ํธ ์ ํ๊ธฐ ํ์ด์ง๋ก ์ด๋
- ์๋ํ ํ์ดํ๋ผ์ธ์ ํธ์คํ ํ๊ณ ์คํํ๋ build ํ๋ก์ ํธ
- ์๋ํ ํ์ดํ๋ผ์ธ์ ํ ์คํธํ๋ ๋ฐ ์ฌ์ฉ๋๋ Google Cloud ๋ฆฌ์์ค๋ฅผ ํธ์คํ ํ๋ test ํ๋ก์ ํธ
-
Verify that billing is enabled for your Google Cloud project.
- test ํ๋ก์ ํธ์์ Recommender ๋ฐ Compute Engine API๋ฅผ ์ฌ์ฉ ์ค์ ํฉ๋๋ค.
- build ํ๋ก์ ํธ์์ Cloud Run, Firestore, Pub/Sub, Cloud Scheduler, IAM, CloudResourceManager API๋ฅผ ์ฌ์ฉ ์ค์ ํฉ๋๋ค.
์ด ํํ ๋ฆฌ์ผ์ ๋ง์น๋ฉด ๋ง๋ ๋ฆฌ์์ค๋ฅผ ์ญ์ ํ์ฌ ๋น์ฉ์ด ๊ณ์ ์ฒญ๊ตฌ๋์ง ์๋๋ก ํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์ญ์ ๋ฅผ ์ฐธ์กฐํ์ธ์.
ํ๊ฒฝ ์ค์ ํ๊ธฐ
- Google Cloud ์ฝ์์์
build
ํ๋ก์ ํธ๋ฅผ ์ ํํฉ๋๋ค. Google Cloud ์ฝ์์์ Cloud Shell๋ก ์ด๋ํฉ๋๋ค.
Google Cloud ์ฝ์ ํ๋จ์์ Cloud Shell ์ธ์ ์ด ์ด๋ฆฌ๊ณ ๋ช ๋ น์ค ํ๋กฌํํธ๊ฐ ํ์๋ฉ๋๋ค. Cloud Shell์ Google Cloud CLI๊ฐ ์ฌ์ ์ค์น๋ ์ ํ๊ฒฝ์ผ๋ก, ํ์ฌ ํ๋ก์ ํธ์ ๊ฐ์ด ์ด๋ฏธ ์ค์ ๋์ด ์์ต๋๋ค. ์ธ์ ์ด ์ด๊ธฐํ๋๋ ๋ฐ ๋ช ์ด ์ ๋ ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
์ด ํํ ๋ฆฌ์ผ์ ๋ชจ๋ ํฐ๋ฏธ๋ ๋ช ๋ น์ด์ Cloud Shell์ ์ฌ์ฉํฉ๋๋ค.
๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ
build
ํ๋ก์ ํธ์ ํ๋ก์ ํธ ๋ฒํธ๋ฅผ ์ ์ฅํ ํ๊ฒฝ ๋ณ์๋ฅผ ๋ง๋ญ๋๋ค.export BUILD_PROJECT_ID=$DEVSHELL_PROJECT_ID
test
ํ๋ก์ ํธ์ ํ๋ก์ ํธ ๋ฒํธ๋ฅผ ์ ์ฅํ ํ๊ฒฝ ๋ณ์๋ฅผ ๋ง๋ญ๋๋ค. ํ ์คํธ ํ๋ก์ ํธ ID๋ฅผ ์๋์ผ๋ก ๋ณต์ฌํ๊ณ PROJECT-ID๋ฅผ ๋ฐ๊ฟ๋๋ค.export TEST_PROJECT_ID=PROJECT-ID
๋ฆฌ์ ๋ฐ ์์ญ๊ณผ ๊ฐ์ด ๊ฐ์ด๋ ์ ๋ฐ์ ์ฌ์ฉ๋๋ ๊ฐ์ ๊ธฐ๋ณธ ์ค์ ์ ํ ๋นํฉ๋๋ค. ์ด ํํ ๋ฆฌ์ผ์์๋ us-central1์ ๊ธฐ๋ณธ ๋ฆฌ์ ์ผ๋ก, us-central1-b๋ฅผ ๊ธฐ๋ณธ ์์ญ์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ์ด ํํ ๋ฆฌ์ผ์ ๊ธฐ๋ณธ ๋ฆฌ์ ๊ณผ ์์ญ์ ์ค์ ํฉ๋๋ค.
gcloud config set compute/zone us-central1-b --project $BUILD_PROJECT_ID gcloud config set compute/zone us-central1-b --project $TEST_PROJECT_ID
build
ํ๋ก์ ํธ๋ฅผ ๊ธฐ๋ณธ ํ๋ก์ ํธ๋ก ์ค์ ํฉ๋๋ค.gcloud config set project $BUILD_PROJECT_ID
build
ํ๋ก์ ํธ ๋ฒํธ์ ๋ํBUILD_PROJECT_NUMBER
๋ผ๋ ํ๊ฒฝ ๋ณ์ ๋ง๋ค๊ธฐexport BUILD_PROJECT_NUMBER=$(gcloud projects describe $DEVSHELL_PROJECT_ID --format='value(projectNumber)')
์ด ํํ ๋ฆฌ์ผ์ GitHub ์ ์ฅ์๋ฅผ ํด๋ก ํฉ๋๋ค.
Terraform ์ํ์ฉ ๋ฒํท ๋ง๋ค๊ธฐ
build ํ๋ก์ ํธ์์ Terraform ์ํ ํ์ผ์ ์ ์ฅํ Cloud Storage ๋ฒํท์ ๋ง๋ญ๋๋ค.
gcloud storage buckets create gs://recommender-tf-state-$BUILD_PROJECT_ID \
--project=${BUILD_PROJECT_ID} --location=us-central1
GitHub ์ ์ฅ์ ๋ง๋ค๊ธฐ
์ํ IaC ์ ์ฅ์๋ก ์ฌ์ฉํ GitHub ์ ์ฅ์๋ฅผ ๋ง๋ญ๋๋ค.
์ ๋น๊ณต๊ฐ GitHub ์ ์ฅ์๋ฅผ ๋ง๋ญ๋๋ค. ์ด IAC-REPO-NAME ์ ์ฅ์๋ ์ด ํํ ๋ฆฌ์ผ์ ๋ชฉ์ ์ ๋ฐ๋ผ IaC ์ ์ฅ์ ์ญํ ์ ํฉ๋๋ค.
๋ค์ ๋จ๊ณ์์๋ ํด๋ก ๋ ์ ์ฅ์์
sample-iac
ํ์ ๋๋ ํฐ๋ฆฌ์ ์๋ ํ์ผ์ GitHub ๊ณ์ ์ผ๋ก ํธ์ํฉ๋๋ค.Cloud Shell์์
sample-iac
๋๋ ํฐ๋ฆฌ๋ฅผ ํ ๋๋ ํฐ๋ฆฌ์ ๋ณต์ฌํฉ๋๋ค. ์ด ๋๋ ํฐ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ก์ปฌ ์ ์ฅ์๋ฅผ ๋ง๋ค๊ณ GitHub๋ก ํธ์ํฉ๋๋ค.cp -r recommender-iac-pipeline-nodejs-tutorial/sample-iac $HOME
์ ๋๋ ํฐ๋ฆฌ๋ก ์ด๋
cd $HOME/sample-iac
๋ก์ปฌ ๋จธ์ ์์ ์ ์ฅ์๋ฅผ ์ด๊ธฐํํฉ๋๋ค.
git init
IAC-REPO-NAME์ ์๊ฒฉ ์ ์ฅ์๋ก ์ถ๊ฐํ๊ณ IAC-REPO-NAME ๋ฐ GITHUB-ACCOUNT๋ฅผ ์ ์ ํ ๊ฐ์ผ๋ก ๋ฐ๊ฟ๋๋ค.
git remote add origin https://github.com/GITHUB-ACCOUNT/IAC-REPO-NAME
์ด ์ ์ฅ์์ ํ์ผ์ ์๋ ์๋ฆฌํ์์๋ฅผ
test
ํ๋ก์ ํธ ID์ Terraform Cloud Storage ๋ฒํท ์ด๋ฆ์ผ๋ก ๋ฐ๊ฟ๋๋ค.sed -i "s|__PROJECT_ID__|${TEST_PROJECT_ID}|g" ./terraform.tfvars sed -i "s|__STATE_BUCKET_NAME__|recommender-tf-state-$BUILD_PROJECT_ID|g" ./backend.tf
GitHub์ ์ถ๊ฐ, ์ปค๋ฐ, ํธ์ํฉ๋๋ค.
git add . git commit -m "First Commit" git push origin master
๋ฉ์์ง๊ฐ ํ์๋๋ฉด GitHub ๊ณ์ ์ ๋ก๊ทธ์ธํฉ๋๋ค.
์ ์ฅ์์ฉ SSH ํค ์์ฑ
GitHub์์ IaC ์ ์ฅ์๋ก SSH ํค ์ธ์ฆ์ ์ค์ ํ๊ณ Cloud Storage์ ํค๋ฅผ ์ ๋ก๋ํฉ๋๋ค.
GitHub ์ ์ฅ์์ฉ SSH ํค๋ฅผ ์์ฑํฉ๋๋ค.
SSH ํค ์์ ์์ฑํฉ๋๋ค. your_email@example.com์ GitHub ์ด๋ฉ์ผ ์ฃผ์๋ก ๋ฐ๊ฟ๋๋ค. Cloud Shell์์ ๋ค์์ ์คํํฉ๋๋ค.
ssh-keygen -t rsa -b 4096 -m PEM -C "your_email@example.com"
'ํค๋ฅผ ์ ์ฅํ ํ์ผ์ ์ ๋ ฅํ์ธ์' ๋ฉ์์ง๊ฐ ๋ํ๋๋ฉด Enter ํค๋ฅผ ๋๋ฆ ๋๋ค. ๊ทธ๋ฌ๋ฉด ๊ธฐ๋ณธ ํ์ผ ์์น๊ฐ ํ์ฉ๋ฉ๋๋ค.
์ํธ๋ฅผ ์ ๋ ฅํ๋ผ๋ ๋ฉ์์ง๊ฐ ํ์๋๋ฉด Enter๋ฅผ ๋๋ฆ ๋๋ค.
๋ค์ด๋ก๋ํ SSH ํค๋ฅผ ์ ์ฅํ SSH-KEYS-DIR ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ธฐ๋กํด ๋ก๋๋ค. ๊ธฐ๋ณธ ์์น๋
$HOME/.ssh/
์ ๋๋ค.์์ฑํ SSH ๊ณต๊ฐ ํค๋ฅผ GitHub ์ ์ฅ์์ ๋ฐฐํฌ ํค๋ก ๋ณต์ฌํฉ๋๋ค.
Cloud Shell์์ ์์ฑํ SSH ๊ณต๊ฐ ํค๋ฅผ ๋ณต์ฌํฉ๋๋ค. SSH-KEYS-DIR๋ฅผ ๋๋ ํฐ๋ฆฌ ๊ฒฝ๋ก๋ก ๋ฐ๊ฟ๋๋ค.
cat SSH-KEYS-DIR/id_rsa.pub
GitHub ๊ณ์ ์์ IAC-REPO-NAME ์ ์ฅ์๋ก ์ด๋ํฉ๋๋ค.
์ค์ > ํค ๋ฐฐํฌ๋ฅผ ํด๋ฆญํฉ๋๋ค.
๋ฐฐํฌ ํค ์ถ๊ฐ๋ฅผ ํด๋ฆญํ๊ณ ๋ณต์ฌํ SSH ๊ณต๊ฐ ํค๋ฅผ ๋ถ์ฌ๋ฃ์ต๋๋ค. ํค์ ์ ๋ชฉ์ ์ ํํฉ๋๋ค.
'์ฐ๊ธฐ ์ก์ธ์ค ํ์ฉ' ์ฒดํฌ๋ฐ์ค๋ฅผ ์ ํํฉ๋๋ค.
์ ์ฅ์ ํด๋ฆญํฉ๋๋ค.
Cloud Shell ์ธ์ ์ผ๋ก ๋์๊ฐ๊ธฐ
GitHub์ฉ
known_hosts
ํ์ผ์ ๋ง๋ญ๋๋ค. Cloud Shell ์ธ์ ์์ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.ssh-keyscan github.com >> ~/.ssh/known_hosts
build
ํ๋ก์ ํธ์ Cloud Storage ๋ฒํท์ ๋ง๋ค๊ณ SSH ํค์known_hosts
ํ์ผ์ ๋ฒํท์ ์ ๋ก๋ํฉ๋๋ค. SSH-KEYS-DIR๋ฅผ SSH ํค๋ฅผ ์์ฑํ ๋๋ ํฐ๋ฆฌ์ ๊ฒฝ๋ก๋ก ๋ฐ๊ฟ๋๋ค.gcloud storage buckets create gs://github-keys-$BUILD_PROJECT_ID --project=${BUILD_PROJECT_ID} --location=us-central1 gcloud storage cp SSH-KEYS-DIR/id_rsa* gs://github-keys-$BUILD_PROJECT_ID gcloud storage cp SSH-KEYS-DIR/known_hosts gs://github-keys-$BUILD_PROJECT_ID
GitHub์ฉ ๊ฐ์ธ ์ก์ธ์ค ํ ํฐ์ ์์ฑํฉ๋๋ค. ์ด ํ ํฐ์ recommender-parser ์๋น์ค๊ฐ pull ์์ฒญ, ์ ๋ฐ์ดํธ๋ ์ฒดํฌ์ธ IaC ๋งค๋ํ์คํธ๋ฅผ ์์ฑํ๋ API ํธ์ถ์ ์ฌ์ฉํ์ฌ Git ์์ ์ ์ํํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
GitHub ๊ณ์ ์ ํ์ด์ง ์ค๋ฅธ์ชฝ ์๋จ์ ์๋ ํ๋กํ ์ฌ์ง์ ํด๋ฆญํ ํ ์ค์ ์ ํด๋ฆญํฉ๋๋ค.
์ผ์ชฝ ์ฌ์ด๋๋ฐ์์ ๊ฐ๋ฐ์ ์ค์ ์ ํด๋ฆญํฉ๋๋ค.
์ผ์ชฝ ์ฌ์ด๋๋ฐ์์ ๊ฐ์ธ ์ก์ธ์ค ํ ํฐ์ ํด๋ฆญํฉ๋๋ค.
์ ํ ํฐ ์์ฑ์ ํด๋ฆญํฉ๋๋ค.
ํ ํฐ์ ์ค๋ช ์ด ํฌํจ๋ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.
๋ฒ์๋ฅผ ์ ์ฅ์๋ก ์ ํํฉ๋๋ค.
ํ ํฐ ์์ฑ์ ํด๋ฆญํฉ๋๋ค.
ํด๋ฆฝ๋ณด๋์ ํ ํฐ์ ๋ณต์ฌํฉ๋๋ค.
Cloud Shell ์ธ์ ์์ ํ๊ฒฝ ๋ณ์๋ฅผ ๋ง๋ญ๋๋ค.
export GITHUB_PAT=personal-access-token-you-copied
Cloud Build ์ค์
IAC-REPO-NAME Git ์ ์ฅ์๋ฅผ ์ฐ๊ฒฐํ์ฌ Cloud Build์ ํตํฉํฉ๋๋ค.
- GitHub Marketplace์ Cloud Build ์ฑ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
- ์๋๋ก ์คํฌ๋กคํ์ฌ ํ์ด์ง ํ๋จ์ ์๋ Google Cloud Build๋ก ์ค์ ์ ํด๋ฆญํฉ๋๋ค.
- ๋ฉ์์ง๊ฐ ํ์๋๋ฉด GitHub์ ๋ก๊ทธ์ธํฉ๋๋ค.
- ์ ์ฅ์๋ง ์ ํ์ ์ ํํฉ๋๋ค. ์ ์ฅ์ ์ ํ ๋๋กญ๋ค์ด ๋ชฉ๋ก์ ์ฌ์ฉํ์ฌ Cloud Build ์ฑ์์ IAC-REPO-NAME์ ๋ํ ์ก์ธ์ค ๊ถํ๋ง ์ฌ์ฉ ์ค์ ํฉ๋๋ค.
- ์ค์น๋ฅผ ํด๋ฆญํฉ๋๋ค.
Google Cloud์ ๋ก๊ทธ์ธํฉ๋๋ค.
์น์ธ ํ์ด์ง๊ฐ ํ์๋๊ณ ์ฌ๊ธฐ์ Google Cloud Build ์ฑ์ด Google Cloud์ ์ฐ๊ฒฐ๋๋๋ก ์น์ธํ๋ผ๋ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค.
Authorize Google Cloud Build by GoogleCloudBuild(GoogleCloudBuild๋ก Google Cloud Build ์น์ธ)๋ฅผ ํด๋ฆญํฉ๋๋ค. Google Cloud Console๋ก ๋ฆฌ๋๋ ์ ๋ฉ๋๋ค.
Google Cloud ํ๋ก์ ํธ๋ฅผ ์ ํํฉ๋๋ค.
๋์ ์ฒดํฌ๋ฐ์ค๋ฅผ ์ฌ์ฉ ์ค์ ํ๊ณ ๋ค์์ ํด๋ฆญํฉ๋๋ค.
์ ์ฅ์ ์ ํ ํ์ด์ง๊ฐ ํ์๋๋ฉด IAC-REPO-NAME GitHub ์ ์ฅ์๋ฅผ ์ ํํฉ๋๋ค.
์ ์ฅ์ ์ฐ๊ฒฐ์ ํด๋ฆญํฉ๋๋ค.
ํธ๋ฆฌ๊ฑฐ ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค. ์๋์ผ๋ก ํธ๋ฆฌ๊ฑฐ ์ ์๊ฐ ์์ฑ๋ฉ๋๋ค.
๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํ์ฌ ๋น๋ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ ์ฅํฉ๋๋ค.
์์ธํ ๋ด์ฉ์ GitHub์์ ๋น๋ ์คํ์ ์ฐธ์กฐํ์ธ์.
๋ณต์ฌํ ๋๋ ํฐ๋ฆฌ์๋
cloudbuild.yaml
ํ์ผ์ด ์์ต๋๋ค. ์ด ๊ตฌ์ฑ ํ์ผ์ Cloud Build ์์ ์ด ํธ๋ฆฌ๊ฑฐ๋ ๋ ์คํํ๋ ๋จ๊ณ๋ฅผ ๊ฐ๋ตํ๊ฒ ์ค๋ช ํฉ๋๋ค.steps: - name: hashicorp/terraform:0.12.0 args: ['init'] - name: hashicorp/terraform:0.12.0 args: ['apply', '-auto-approve']
Cloud Build ์๋น์ค ๊ณ์ ์ ๊ถํ์ ์ถ๊ฐํ์ฌ ํ ์คํธ ํ๋ก์ ํธ์์ ์๋น์ค ๊ณ์ , ์ฐ๊ฒฐ ์ญํ , ๊ฐ์ ๋จธ์ (Compute Engine ์ธ์คํด์ค)์ ๋ง๋ค ์ ์์ต๋๋ค.
gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \ --member serviceAccount:$BUILD_PROJECT_NUMBER@cloudbuild.gserviceaccount.com \ --role roles/compute.admin \ --project $TEST_PROJECT_ID gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \ --member serviceAccount:$BUILD_PROJECT_NUMBER@cloudbuild.gserviceaccount.com \ --role roles/iam.serviceAccountAdmin \ --project $TEST_PROJECT_ID gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \ --member serviceAccount:$BUILD_PROJECT_NUMBER@cloudbuild.gserviceaccount.com \ --role roles/iam.securityAdmin \ --project $TEST_PROJECT_ID
Google Cloud ์ฝ์์์ ํธ๋ฆฌ๊ฑฐ ํ์ด์ง๋ฅผ ์ฝ๋๋ค.
build
ํ๋ก์ ํธ๋ฅผ ์ ํํ๊ณ ์ด๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.ํธ๋ฆฌ๊ฑฐ ์ ์๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
- ๋ฉ๋ด๋ฅผ ํด๋ฆญํ ๋ค์ ์์ ์ ํด๋ฆญํฉ๋๋ค.
- ๊ตฌ์ฑ์์ Cloud Build ๊ตฌ์ฑ ํ์ผ(yaml ๋๋ json) ์ต์
์ ์ ํํ๊ณ ํ
์คํธ ์
๋ ฅ๋์
cloudbuild.yaml
์ ์ ๋ ฅํฉ๋๋ค. - ์ ์ฅ์ ํด๋ฆญํฉ๋๋ค.
๋น๋ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์๋์ผ๋ก ํ ์คํธํ๋ ค๋ฉด ํธ๋ฆฌ๊ฑฐ ๋ชฉ๋ก์ ํธ๋ฆฌ๊ฑฐ ํญ๋ชฉ์์ ์คํ์ ํด๋ฆญํฉ๋๋ค.
tf-compute-1
์ด๋ผ๋ Compute Engine ์ธ์คํด์ค์Terraform Recommender Test
๋ผ๋ ์๋น์ค ๊ณ์ ์ด ์ด์ ๋จ๊ณ์์ ์คํํ Cloud Build ์์ ์ผ๋ก ํ ์คํธ ํ๋ก์ ํธ์ ์์ฑ๋์๋์ง ํ์ธํฉ๋๋ค.
recommender-parser Cloud Run ์๋น์ค ๋ฐฐํฌ
Cloud Shell์์ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ ์ฅ์๋ฅผ ํด๋ก ํ์ฌ ๋ง๋ ๋๋ ํฐ๋ฆฌ๋ก ๋ณ๊ฒฝํฉ๋๋ค.
cd $HOME/recommender-iac-pipeline-nodejs-tutorial/parser-service
Cloud Run ์๋น์ค์ ๊ธฐ๋ณธ ๋ฆฌ์ ์ ์ฌ์ฉํ๋๋ก Google Cloud ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ์ด ํํ ๋ฆฌ์ผ์์๋ us-central1 ๋ฆฌ์ ์ ์ฌ์ฉํ์ง๋ง ์ํ๋ ๊ฒฝ์ฐ ์ง์๋๋ ๋ค๋ฅธ ๋ฆฌ์ ์ ์ ํํ ์ ์์ต๋๋ค.
gcloud config set run/region us-central1
parser-service
๋๋ ํฐ๋ฆฌ์๋ recommender-parser ์๋น์ค๋ฅผ ํ ์คํธํ ์ ์๋ ์ํ ํ์ด๋ก๋ JSON์ด ๋ช ๊ฐ ์๋ ์คํฐ๋ธ ํ์ ๋๋ ํฐ๋ฆฌ๊ฐ ์์ต๋๋ค. ๋ค์ sed ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ์ด๋ฌํ JSON์ PROJECT_ID ์๋ฆฌํ์์๋ฅผ ํ ์คํธ ํ๋ก์ ํธ ID๋ก ๋ฐ๊ฟ๋๋ค.sed -i "s|__PROJECT_ID__|${TEST_PROJECT_ID}|g" ./stub/iam.json sed -i "s|__PROJECT_ID__|${TEST_PROJECT_ID}|g" ./stub/vm.json
๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ Docker ์ด๋ฏธ์ง์ ํ๊ฒฝ ๋ณ์๋ฅผ ๋ง๋ญ๋๋ค.
export IMAGE=gcr.io/$BUILD_PROJECT_ID/recommender-parser:1.0
์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๊ณ Container Registry์ ์ ๋ก๋ํฉ๋๋ค.
gcloud builds submit --tag $IMAGE .
recommender-parser ์๋น์ค์ ์๋น์ค ๊ณ์ ์ ๋ง๋ค์ด ํ์ดํ๋ผ์ธ์ ๋ค๋ฅธ Google Cloud ์๋น์ค์ ์ํธ์์ฉํฉ๋๋ค. Cloud Run ์๋น์ค์ ๋ณด๋ค ์ธ๋ถํ๋ ๊ถํ์ ๋ถ์ฌํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์์ธํ ๋ด์ฉ์ Cloud Run ์๋น์ค ID๋ฅผ ์ฐธ์กฐํ์ธ์.
gcloud beta iam service-accounts create recommender-parser-sa \ --description "Service account that the recommender-parser service uses to invoke other Google Cloud services" \ --display-name "recommender-parser-sa" \ --project $BUILD_PROJECT_ID
recommender-parser ์๋น์ค๋ ์์์ ๋ง๋ Cloud Storage ๋ฒํท์ ์ ๋ก๋ํ GitHub SSH ํค์ Terraform ์ํ์ ์ก์ธ์คํด์ผ ํฉ๋๋ค. ์๋น์ค ๊ณ์ ์ Cloud Storage ๋ฒํท์ ๊ตฌ์ฑ์์ผ๋ก ์ถ๊ฐํฉ๋๋ค.
gcloud storage buckets add-iam-policy-binding gs://github-keys-$BUILD_PROJECT_ID \ --member=serviceAccount:recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \ --role=roles/storage.objectUser gcloud storage buckets add-iam-policy-binding gs://recommender-tf-state-$BUILD_PROJECT_ID \ --member=serviceAccount:recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \ --role=roles/storage.objectUser
recommender-parser ์๋น์ค์ ์๋น์ค ๊ณ์ ์ Firestore, Recommender, Service Usage API์ ๋ํ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํฉ๋๋ค.
gcloud projects add-iam-policy-binding $BUILD_PROJECT_ID \ --member serviceAccount:recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \ --role roles/datastore.user gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \ --member serviceAccount:recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \ --role roles/recommender.iamAdmin gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \ --member serviceAccount:recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \ --role roles/recommender.iamViewer gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \ --member serviceAccount:recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \ --role roles/recommender.computeAdmin gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \ --member serviceAccount:recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \ --role roles/serviceusage.serviceUsageConsumer
๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ recommender-parser๋ผ๋ Cloud Run ์๋น์ค๋ฅผ ๋ฐฐํฌํฉ๋๋ค. GITHUB-ACCOUNT๋ฅผ ์ด๋ฉ์ผ์ด ์๋ GitHub ๊ณ์ ์ฌ์ฉ์ ์ด๋ฆ์ผ๋ก ๋ฐ๊ฟ๋๋ค. ์์คํ ํ๋กฌํํธ๋ฅผ ํ์ฉํฉ๋๋ค.
gcloud run deploy \ --image=${IMAGE} \ --no-allow-unauthenticated \ --region us-central1 \ --platform managed \ --service-account recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \ --set-env-vars="GITHUB_ACCOUNT=github.com:GITHUB-ACCOUNT,GITHUB_PAT=${GITHUB_PAT},SSH_KEYS_BUCKET=github-keys-${BUILD_PROJECT_ID},TERRAFORM_STATE_BUCKET=recommender-tf-state-$BUILD_PROJECT_ID" \ --project $BUILD_PROJECT_ID \ recommender-parser
Firestore ์ค์
- Google Cloud Console์
build
ํ๋ก์ ํธ์์ Firestore ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค. - ๋ชจ๋ ์ ํ ๋ฉ์์ง๊ฐ ํ์๋๋ฉด ๊ธฐ๋ณธ ๋ชจ๋ ์ ํ์ ํด๋ฆญํฉ๋๋ค.
- ๊ธฐ๋ณธ ์์น๋ก
us-east1
์ ์ ํํฉ๋๋ค. - ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
recommender-parser
์๋น์ค๋ ๋ค์ ๋ชฉ์ ์ผ๋ก ๋ฌธ์๋ฅผ ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋๋ค.
- Recommender API์์ ๊ฒ์ํ ๊ถ์ฅ์ฌํญ์ ์ถ์ ํ๋ ค๋ฉด ๋ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์.
- ๊ถ์ฅ์ฌํญ์ด ์ฒ๋ฆฌ๋๋ฉด ๊ฐ ์ฒ๋ฆฌ๋ ๊ถ์ฅ์ฌํญ์ ์ํ๋ฅผ ์ ์ ํ๊ฒ
SUCCEEDED
๋๋FAILED
๋ก ์ ๋ฐ์ดํธํ๊ธฐ ์ํด Recommender API๋ฅผ ํธ์ถํฉ๋๋ค. ์ด๋ ๊ถ์ฅ์ฌํญ์ด ๋ถ์์ ํ๊ฒ ๋๋ ์ฌ๋ฌ ๋ฒ ์ฒ๋ฆฌ๋์ง ์๋๋ก ํ์ฌ ํ์ดํ๋ผ์ธ์ด ๋ฉฑ๋ฑ์ฑ์ ๊ฐ๋๋ก ํ๋ ํต์ฌ ๋จ๊ณ์ ๋๋ค.
Cloud Scheduler ์์ ์ค์
Cloud Scheduler ์์ ์ด recommender-parser ์๋น์ค๋ฅผ ์คํํ๋ ๋ฐ ์ฌ์ฉํ๋ ์๋น์ค ๊ณ์ ์ ๋ง๋ญ๋๋ค.
gcloud beta iam service-accounts create recommender-scheduler-sa \ --description "Service Account used by Cloud Scheduler to invoke the recommender-parser service" \ --display-name "recommender-scheduler-sa" \ --project $BUILD_PROJECT_ID
์๋น์ค ๊ณ์ ์ Cloud Run ์๋น์ค๋ฅผ ํธ์ถํ ์ ์๋ run/invoker ์ญํ ์ ๋ถ์ฌํฉ๋๋ค.
gcloud beta run services add-iam-policy-binding recommender-parser \ --member=serviceAccount:recommender-scheduler-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \ --role=roles/run.invoker \ --region=us-central1
recommender-service URL์ ๊ฐ์ ธ์ต๋๋ค.
gcloud beta run services list --platform managed --project $BUILD_PROJECT_ID
Cloud Scheduler ์์ ์ IAM ๊ถ์ฅ์ฌํญ ํญ๋ชฉ์ ํ์ฑํ๊ธฐ ์ํ recommender-parser ์๋น์ค์ /recommendation/iam ๊ฒฝ๋ก๋ฅผ ํธ์ถํ๊ณ VM ํฌ๊ธฐ ๊ถ์ฅ์ฌํญ์ ํ์ฑํ๊ธฐ ์ํ /recommender/vm ๊ฒฝ๋ก๋ฅผ ํธ์ถํฉ๋๋ค.
Cloud Scheduler ์์ ์ด ํธ์ถํ๋ ์๋ํฌ์ธํธ์ ๋ณ์๋ฅผ ๋ง๋ญ๋๋ค. RECOMMENDER-SERVICE-URL์ ์ด์ ๋จ๊ณ์์ ๋ณต์ฌํ recommender-service URL๋ก ๋ฐ๊ฟ๋๋ค.
export RECOMMENDER_ROUTE_TO_INVOKE_IAM=RECOMMENDER-SERVICE-URL/recommendation/iam
๊ฒฝ๋ก ์ ๋ณด๋ฅผ ์ถ๊ฐํ ํ์ URL์ด ์ด ์ํ URL๊ณผ ๊ฐ์์ผ ํฉ๋๋ค.
RECOMMENDER-SERVICE-URL/recommendation/iam
recommender-iam-scheduler.
๋ผ๋ Cloud Scheduler ์์ ์ ๋ง๋ญ๋๋ค.- ๊ฐ๋ฐ์ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ํ๋ ์๊ฐ๋๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
- IAC-REPO-NAME๋ฅผ ์์ฑํ GitHub ์ ์ฅ์์ ์ด๋ฆ์ผ๋ก ๋ฐ๊ฟ๋๋ค.
๋ฉ์์ง ๋ณธ๋ฌธ์ ์ธ ๊ฐ์ง ์ ๋ ฅ์ ์ฌ์ฉํ๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์ฑ๋์ด์ผ ํฉ๋๋ค.
repo
: GitHub ์ ์ฅ์ ๋ง๋ค๊ธฐ์์ ๋ง๋ GitHub ์ ์ฅ์ IAC-REPO-NAME์ ์ด๋ฆ์ ๋๋ค.projects
: ์ด IaC GitHub ์ ์ฅ์๊ฐ ๋งคํ๋๋ Google Cloud ํ๋ก์ ํธ ID์ ๋ชฉ๋ก/๋ฐฐ์ด์ ๋๋ค. ์ด ํํ ๋ฆฌ์ผ์์๋test
ํ๋ก์ ํธ์ ๋๋ค.stub
: ์ญํ ์ ๊ถํ ํ์ ์งํฉ์ด 60์ผ ๋์ ์ฌ์ฉ๋์ง ์๊ณ VM ํฌ๊ธฐ ๊ถ์ฅ์ฌํญ์ด ์ ์ฌํ ํจํด์ ๋ฐ๋ฅด๋ ๊ฒฝ์ฐ ์ถ์ฒ์๋ IAM ๊ถ์ฅ์ฌํญ์ ์์ฑํฉ๋๋ค. ์์ฒญ ์ ์ด ํ์ดํ๋ผ์ธ์ ํ ์คํธํ ์ ์๋๋กstub
์true
๋ก ์ ๋ฌํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ์ด ํํ ๋ฆฌ์ผ์์ ํด๋ก ํ ์ ์ฅ์์ ์ ๊ณต๋๋ ์ํ ์ถ์ฒ์ ํ์ด๋ก๋๋ฅผ ์ฌ์ฉํ์ฌ ํ์ดํ๋ผ์ธ์ ํ ์คํธํ ์ ์์ต๋๋ค.
gcloud beta scheduler jobs create http recommender-iam-scheduler \ --project $BUILD_PROJECT_ID \ --time-zone "America/Los_Angeles" \ --schedule="0 */3 * * *" \ --uri=$RECOMMENDER_ROUTE_TO_INVOKE_IAM \ --description="Scheduler job to invoke recommendation pipeline" \ --oidc-service-account-email="recommender-scheduler-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com" \ --headers="Content-Type=application/json" \ --http-method="POST" \ --message-body="{ \"repo\": \"IAC-REPO-NAME\", \"projects\": [\"$TEST_PROJECT_ID\"], \"location\": \"global\", \"stub\": true }"
์ถ๊ฐ ๋จ๊ณ
Cloud Build๋ ๋น๋ ํ๋ก์ ํธ์์ Cloud Build API๋ฅผ ์ฌ์ฉ ์ค์ ํ ๋ ์๋์ผ๋ก ์์ฑ๋ cloud-builds๋ผ๋ Pub/Sub ์ฃผ์ ์ ๋น๋ ์ ๋ณด๋ฅผ ๊ฒ์ํฉ๋๋ค.
๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ
build
ํ๋ก์ ํธ์ cloud-builds ์ฃผ์ ๊ฐ ์๋์ง ํ์ธํฉ๋๋ค.gcloud pubsub topics describe cloud-builds
์ฃผ์ ๊ฐ ์์ผ๋ฉด ๋ค์ ์ถ๋ ฅ์ด ํ์๋ฉ๋๋ค. ์ฌ๊ธฐ์ BUILD-PROJECT-ID๋ ๋น๋ ํ๋ก์ ํธ ID์ ๋๋ค.
name: projects/BUILD-PROJECT-ID/topics/cloud-builds
๋ฆฌ์์ค๋ฅผ ์ฐพ์ ์ ์๋ค๋ ์ค๋ฅ ๋ฉ์์ง๊ฐ ํ์๋๋ฉด ๋น๋ ์๋ฆผ ๊ตฌ๋ ์ ์๋ด์ ๋ฐ๋ผ ์ฃผ์ ๋ฅผ ์๋์ผ๋ก ๋ง๋ญ๋๋ค.
Pub/Sub์ด recommender-parser ์๋น์ค ์๋ํฌ์ธํธ๋ฅผ ํธ์ถํ๋ ๋ฐ ์ฌ์ฉํ๋ ์๋น์ค ๊ณ์ ์ ๋ง๋ญ๋๋ค.
gcloud beta iam service-accounts create recommender-ci-subscription-sa \ --description "Service Account used by Cloud Pub/Sub to push Cloud Build events to the recommender-parser service" \ --display-name "recommender-ci-subscription-sa" \ --project $BUILD_PROJECT_ID
Pub/Sub ์๋น์ค ๊ณ์ ์ ๋ฉ์์ง๋ฅผ ๊ฒ์ํ๊ณ recommender-parser ์๋น์ค๋ฅผ ํธ์ถํ๋ ๋ฐ ํ์ํ ์ญํ ๊ณผ ์ฐ๊ฒฐ๋์ด์ผ ํฉ๋๋ค.
gcloud projects add-iam-policy-binding $BUILD_PROJECT_ID \ --member serviceAccount:recommender-ci-subscription-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \ --role roles/pubsub.publisher \ --project $BUILD_PROJECT_ID gcloud projects add-iam-policy-binding $BUILD_PROJECT_ID \ --member serviceAccount:recommender-ci-subscription-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \ --role roles/pubsub.subscriber \ --project $BUILD_PROJECT_ID gcloud projects add-iam-policy-binding $BUILD_PROJECT_ID \ --member serviceAccount:recommender-ci-subscription-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \ --role roles/run.invoker \ --project $BUILD_PROJECT_ID
์์ฑํ
recommender-ci-subscription-sa
์๋น์ค ๊ณ์ ์invoker
์ญํ ์ด ์๋ recommender-parser ์๋น์ค์ ๊ตฌ์ฑ์์ผ๋ก ์ถ๊ฐํฉ๋๋ค.gcloud beta run services add-iam-policy-binding recommender-parser \ --member=serviceAccount:recommender-ci-subscription-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \ --role=roles/run.invoker --region=us-central1
Google Cloud Console์์ Pub/Sub๋ก ์ด๋ํฉ๋๋ค.
cloud-builds ์ฃผ์ ๋ฅผ ํด๋ฆญํฉ๋๋ค.
๊ตฌ๋ ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
๊ตฌ๋ ID์
recommender-service-build-events
๋ฅผ ์ ๋ ฅํฉ๋๋ค.์ ์ก ์ ํ์์ ํธ์๋ฅผ ์ ํํฉ๋๋ค.
์๋ํฌ์ธํธ์
/ci
์์ ์ถ๊ฐ๋ recommender-service URL์ ์ ๋ ฅํฉ๋๋ค.์ธ์ฆ ์ฌ์ฉ ์ค์ ์ ์ ํํฉ๋๋ค.
- ๋ง๋ ์๋น์ค ๊ณ์
recommender-ci-subscription-sa
๋ฅผ ์ ํํฉ๋๋ค. - ํ๋กฌํํธ ๋ฉ์์ง์ ๋ํ ์๋ต์ผ๋ก ๊ถํ ๋ถ์ฌ๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ๋ง๋ ์๋น์ค ๊ณ์
ํ์ธ ๊ธฐํ 60์ด๋ฅผ ์ ํํฉ๋๋ค.
๋๋จธ์ง ๊ธฐ๋ณธ๊ฐ์ ์ ์งํฉ๋๋ค.
๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
ํ์ดํ๋ผ์ธ ํ ์คํธ
์ญํ ์ ๊ถํ ํ์ ์งํฉ์ด 60์ผ ๋์ ์ฌ์ฉ๋์ง ์์ ๊ฒฝ์ฐ ์ถ์ฒ์๋ IAM ๊ถ์ฅ์ฌํญ์ ์์ฑํฉ๋๋ค. VM ํฌ๊ธฐ ๊ถ์ฅ์ฌํญ์ ์ ์ฌํ ํจํด์ ๋ฐ๋ฆ
๋๋ค. ์์ฒญ ์ ์ด ํ์ดํ๋ผ์ธ์ ํ
์คํธํ ์ ์๋๋ก ์ด ํํ ๋ฆฌ์ผ์ ํด๋ก ๋ ์ ์ฅ์์ ์ ๊ณต๋ stub
ํ์ ๋๋ ํฐ๋ฆฌ์ ์ ๊ณต๋ ์ํ ๊ถ์ฅ์ฌํญ JSON ํ์ด๋ก๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด recommender-parser๊ฐ Recommender API ์๋ํฌ์ธํธ์ ์ํํ API ํธ์ถ์ ์ ์ธํ๊ณ ํ์ดํ๋ผ์ธ์ ํ
์คํธํ์ฌ ์ฑ๊ณต์ ์ผ๋ก ์ ์ฉ๋ ๊ถ์ฅ์ฌํญ ์ํ๋ฅผ ์
๋ฐ์ดํธํ ์ ์์ต๋๋ค.
๋๋ Google Cloudํ๋ก์ ํธ์ ํ์ฑ ๊ถ์ฅ์ฌํญ์ด ์๋ ๊ฒฝ์ฐ ์คํ ์ ์ฌ์ฉํ์ง ์๊ณ ๋ ํ์ดํ๋ผ์ธ์ ์๋ ํฌ ์๋๋ก ํ ์คํธํ ์ ์์ต๋๋ค. ์๋ ์ค๋ช ๋ ๊ฒฐ๊ณผ๋ ์ํ ํ์ด๋ก๋๋ฅผ ์ฌ์ฉํ์ฌ ํ์ดํ๋ผ์ธ์ ํ ์คํธํ๋ ๊ฒฝ์ฐ์ ๊ด๋ จ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ํ ์์ด ์ด ํ์ดํ๋ผ์ธ์ ํ ์คํธํ๋ ๋จ๊ณ๋ ๋์ผํฉ๋๋ค.
Google Cloud ์ฝ์์์ ํ ์คํธ ํ๋ก์ ํธ๋ก ์ด๋ํ์ฌ ์์ฑ๋ ๋ฆฌ์์ค๋ฅผ ๊ฒํ ํฉ๋๋ค. ๋ค์ ํญ๋ชฉ์ด ์์ด์ผ ํฉ๋๋ค.
- ๋จธ์ ์ ํ์ด
g1-small
์ธtf-compute-1
์ด๋ผ๋ Compute Engine ์ธ์คํด์ค - ํ
์คํธ ํ๋ก์ ํธ์
editor
์ญํ ๋กTerraform Recommender Test
๋ผ๋ ์๋น์ค ๊ณ์
- ๋จธ์ ์ ํ์ด
build
ํ๋ก์ ํธ์ Cloud Scheduler ์ฝ์ ํ์ด์ง์์ recommender-iam-scheduler ์์ ์ ๋ํ ์ง๊ธ ์คํ์ ํด๋ฆญํฉ๋๋ค.์์ ์ ํด๋ฆญํ์ฌ ๋ก๊ทธ๋ฅผ ๋ด ๋๋ค. recommender-parser ์๋น์ค ๋ก๊ทธ๋ฅผ ๋ณด๊ณ ์๋น์ค์์ ์คํ๋๋ ๋จ๊ณ๋ฅผ ์์ธํ ์ดํด๋ณผ ์๋ ์์ต๋๋ค.
์๋น์ค ์คํ์ด ์๋ฃ๋๋ฉด GitHub IAC-REPO-NAME ์ ์ฅ์๋ก ์ด๋ํฉ๋๋ค.
recommender-parser
์๋น์ค๊ฐ ์๋์ผ๋ก pull ์์ฒญ์ ์์ฑํ์ต๋๋ค. ์ด pull ์์ฒญ์ ๊ตฌ์ฑํ๋ ์์ ๋ IaC ๋งค๋ํ์คํธ๋ฅผ ๊ฒํ ํ๊ณ IaC ๋งค๋ํ์คํธ์ ๋ณ๊ฒฝ์ฌํญ์ด ๋ง์กฑ์ค๋ฌ์ฐ๋ฉด pull ์์ฒญ ๋ณํฉ์ ํด๋ฆญํฉ๋๋ค.pull ์์ฒญ์ ๋ณํฉํ๋ฉด ๋ง์คํฐ ๋ธ๋์น์ ๋ํ ์ ์ปค๋ฐ์ด ์์ฑ๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด
test
ํ๋ก์ ํธ์ Google Cloud ๋ฆฌ์์ค์ ๋ํ ์์ ์ฌํญ์ด ์ถ์๋๋ Cloud Build ์์ ์ด ํธ๋ฆฌ๊ฑฐ๋ฉ๋๋ค. Cloud Build ์์ ์ด ์๋ฃ๋ ๋๊น์ง ์ ์ ๊ธฐ๋ค๋ฆฝ๋๋ค. Google Cloud ์ฝ์์์ ์ํ๋ฅผ ๊ฒํ ํ ์ ์์ต๋๋ค.์์ ์ด ์๋ฃ๋๋ฉด ํ ์คํธ ํ๋ก์ ํธ๋ก ์ด๋ํฉ๋๋ค. ์ ๊ณต๋ ์ํ ํ์ด๋ก๋๋ ํ ์คํธ ํ๋ก์ ํธ์ ๋ฆฌ์์ค๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝํฉ๋๋ค.
- ๋ฐฐํฌ ์ ์ญํ ์ด
editor
์ธ Terraform Test ์๋น์ค ๊ณ์ ์ดviewer
๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค.
- ๋ฐฐํฌ ์ ์ญํ ์ด
์ญ์
์ด ํํ ๋ฆฌ์ผ์์ ์ฌ์ฉํ ๋ฆฌ์์ค์ ๋ํ ๋น์ฉ์ด Google Cloud ๊ณ์ ์ ์ฒญ๊ตฌ๋์ง ์๊ฒ ํ๋ ค๋ฉด ๋ง๋ ๋ ํ๋ก์ ํธ๋ฅผ ๋ชจ๋ ์ญ์ ํฉ๋๋ค.
๋น์ฉ์ด ์ฒญ๊ตฌ๋์ง ์๋๋ก ํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ํํ ๋ฆฌ์ผ์์ ๋ง๋ ํ๋ก์ ํธ๋ฅผ ์ญ์ ํ๋ ๊ฒ์ ๋๋ค.
ํ๋ก์ ํธ๋ฅผ ์ญ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
๋ค์ ๋จ๊ณ
- Google Cloud์ ๋ํ ์ฐธ์กฐ ์ํคํ ์ฒ, ๋ค์ด์ด๊ทธ๋จ, ๊ถ์ฅ์ฌํญ ์ดํด๋ณด๊ธฐ. Cloud ์ํคํ ์ฒ ์ผํฐ ์ดํด๋ณด๊ธฐ
- ๋ฌธ์์์ Google Cloud ์ ์ฑ ์ธํ ๋ฆฌ์ ์ค ์์ธํ ์์๋ณด๊ธฐ