์ด ๊ฐ์ด๋์์๋ BigQuery๋ฅผ ์ฌ์ฉํ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค ์ ํ ์คํํธ ์๋ฃจ์ ์ ์ดํดํ๊ณ ๋ฐฐํฌ ๋ฐ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์๋ดํฉ๋๋ค. ์ด ์๋ฃจ์ ์ Looker Studio๋ฅผ ๋์๋ณด๋ ๋ฐ ์๊ฐํ ๋๊ตฌ๋ก ์ฌ์ฉํ๊ณ Google Cloud BigQuery๋ฅผ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค๋ก ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค๋ฅผ ๋น๋ํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. ๋ํ ์ด ์๋ฃจ์ ์ Vertex AI์ ์์ฑํ AI ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ๋ถ์์ ์์ฝํ๋ ํ ์คํธ๋ฅผ ์์ฑํฉ๋๋ค.
๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค๋ฅผ ๋น๋ํ๋ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์์ต ๋๋ ๊ธฐํ ๊ณ ๊ฐ ์ธก์ ํญ๋ชฉ ๊ฐ์ ์ ์ํด ๋ง์ผํ ๋ถ์ ์จ์ดํ์ฐ์ค๋ฅผ ์ง๊ณํ๊ณ ๋ง๋ญ๋๋ค.
- ์ฌ๋ฌด ๋ณด๊ณ ์ ๋ฐ ๋ถ์์ ๋น๋ํฉ๋๋ค.
- ๊ธฐ์ ์ฑ๊ณผ ๊ฐ์ ์ ์ํด ์ด์ ๋์๋ณด๋๋ฅผ ๋น๋ํฉ๋๋ค.
์ด ๋ฌธ์๋ ๋ฐ์ดํฐ ๋ถ์์ ๋ํ ๋ฐฐ๊ฒฝ ์ง์์ด ์๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ์์ ์ํํ ๊ฒฝํ์ด ์๋ ๊ฐ๋ฐ์๋ฅผ ๋์์ผ๋ก ํฉ๋๋ค. ์ฌ๊ธฐ์์๋ ์ฌ์ฉ์๊ฐ ๊ธฐ๋ณธ ํด๋ผ์ฐ๋ ๊ฐ๋ ์ ์ต์ํ๋ค๊ณ ๊ฐ์ ํ์ง๋ง ๋ฐ๋์ Google Cloud์ผ ํ์๋ ์์ต๋๋ค. Terraform ๊ฒฝํ๋ ๋์์ ๋์ง๋ง ์ฝ์์ ํตํด ์ด ์๋ฃจ์ ์ ๋ฐฐํฌํ๋ ๋ฐ ํ์๋ ์๋๋๋ค.
๋ชฉํ
- ๋ฐ์ดํฐ๊ฐ ํด๋ผ์ฐ๋ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค๋ก ์ ๋ฌ๋๋ ๋ฐฉ์๊ณผ SQL์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ณํํ๋ ๋ฐฉ๋ฒ ์์๋ณด๊ธฐ
- ๋ฐ์ดํฐ์์ ๋์๋ณด๋๋ฅผ ๋น๋ํ์ฌ ๋ฐ์ดํฐ ๋ถ์ ์ํํ๊ธฐ
- ๋ฐ๋ณต์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธํ๋๋ก SQL ๋ฌธ ์์ฝํ๊ธฐ
- ์๊ฐ ๊ฒฝ๊ณผ์ ๋ฐ๋ผ ๋ฐ์ดํฐ ๊ฐ์ ์์ธกํ๊ธฐ ์ํ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ ๋ง๋ค๊ธฐ
- ์์ฑํ AI๋ฅผ ์ฌ์ฉํ์ฌ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ๊ฒฐ๊ณผ ์์ฝํ๊ธฐ
์ฌ์ฉ ์ ํ
์ด ์๋ฃจ์ ์์๋ ๋ค์ Google Cloud ์ ํ์ ์ฌ์ฉํฉ๋๋ค.
- BigQuery: ๋จธ์ ๋ฌ๋ ๊ธฐ๋ฅ์ด ๊ธฐ๋ณธ ์ ๊ณต๋๋ ์์ ๊ด๋ฆฌํ์ ๊ณ ํ์ฅ์ฑ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค์ ๋๋ค.
- Cloud Storage: ๋ค์ํ ๋ฐ์ดํฐ ์ ํ์ ๋ง๊ฒ ์ ๋น์ฉ, ๋ฌด์ ํ ๊ฐ์ฒด ์คํ ๋ฆฌ์ง๋ฅผ ์ ๊ณตํ๋ ์ํฐํ๋ผ์ด์ฆ๊ธ ์๋น์ค์ ๋๋ค.Google Cloud ๋ด๋ถ ๋ฐ ์ธ๋ถ์์ ๋ฐ์ดํฐ์ ์ก์ธ์คํ ์ ์๊ณ ์ง๋ฆฌ์ ์ผ๋ก ์ค๋ณต๋๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณต์ ํ ์ ์์ต๋๋ค.
- Looker Studio: ๋ฐ์ดํฐ ํต๊ณ๋ฅผ ๋ง๋ค๊ณ ๊ณต์ ํ๋ ๋ฐ ๋์์ด ๋๋ ์ ํ ์๋น์ค ๋ฐฉ์์ ๋น์ฆ๋์ค ์ธํ ๋ฆฌ์ ์ค ํ๋ซํผ์ ๋๋ค.
- Vertex AI๋ ML ๋ชจ๋ธ๊ณผ AI ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ต์ํค๊ณ ๋ฐฐํฌํ ์ ์๋ ๋จธ์ ๋ฌ๋(ML) ํ๋ซํผ์ ๋๋ค.
์ฒ์์ผ๋ก ์๋ฃจ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด์๋ ๋ค์๊ณผ ๊ฐ์ Google Cloud ์ ํ์ด ์ฌ์ฉ๋ฉ๋๋ค.
- Workflows: ์ง์ ๋ ์์๋ก ์๋น์ค๋ฅผ ์ํฌํ๋ก๋ก ์คํํ๋ ์์ ๊ด๋ฆฌํ ์กฐ์ ํ๋ซํผ์ ๋๋ค. ์ํฌํ๋ก๋ Cloud Run ๋๋ Cloud Run ํจ์์์ ํธ์คํ ๋๋ ์ปค์คํ ์๋น์ค, BigQuery์ ๊ฐ์Google Cloud ์๋น์ค, ๋ชจ๋ HTTP ๊ธฐ๋ฐ API๋ฅผ ๋น๋กฏํ ์๋น์ค๋ฅผ ๊ฒฐํฉํ ์ ์์ต๋๋ค.
- Cloud Run Functions: ํด๋ผ์ฐ๋ ์๋น์ค๋ฅผ ๋น๋ํ๊ณ ์ฐ๊ฒฐํ๊ธฐ ์ํ ์๋ฒ๋ฆฌ์ค ์คํ ํ๊ฒฝ์ ๋๋ค.
์ํคํ ์ฒ
์ด ์๋ฃจ์ ์์ ๋ฐฐํฌํ๋ ์์ ์จ์ดํ์ฐ์ค๋ TheLook์ ๊ฐ์ ์ ์์๊ฑฐ๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ์ฌ ์ผ์ ๊ธฐ๊ฐ ๋์์ ๊ธฐ์ ์ค์ ์ ํ์ ํฉ๋๋ค. ๋ค์ ๋ค์ด์ด๊ทธ๋จ์ ์ด ์๋ฃจ์ ์ผ๋ก ๋ฐฐํฌ๋๋ Google Cloud ๋ฆฌ์์ค์ ์ํคํ ์ฒ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
์๋ฃจ์ ํ๋ฆ
์ด ์ํคํ ์ฒ๋ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค์ ๋ํด ๋ฐ์ดํฐ๋ฅผ ์ฑ์ฐ๊ณ ๋ณํํ๊ธฐ ์ํ ์ผ๋ฐ์ ์ธ ๋ฐ์ดํฐ ํ๋ฆ์ ๋ณด์ฌ์ค๋๋ค.
- ๋ฐ์ดํฐ๊ฐ Cloud Storage ๋ฒํท์ผ๋ก ์ ์ก๋ฉ๋๋ค.
- ์ํฌํ๋ก๋ ๋ฐ์ดํฐ ์ด๋์ ์ง์ํฉ๋๋ค.
- SQL ์ ์ฅ ํ๋ฌ์์ ๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํฐ๊ฐ BigQuery์ BigLake ํ ์ด๋ธ๋ก ๋ก๋๋ฉ๋๋ค.
- BigQuery์์ SQL ์ ์ฅ ํ๋ก์์ ธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ณํํฉ๋๋ค.
- Looker Studio๋ก ์ถ๊ฐ ๋ถ์์ ์ํํ ์ ์๋๋ก ๋ฐ์ดํฐ๋ก๋ถํฐ ๋์๋ณด๋๋ฅผ ์์ฑํฉ๋๋ค.
- BigQuery ML๋ก ๋น๋๋ k-ํ๊ท ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํฉ๋๋ค. ๋ถ์์ BigQuery๋ฅผ ํตํด Vertex AI์ ์์ฑํ AI ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์์ฝํ๋ ๊ณตํต ํจํด์ ์๋ณํฉ๋๋ค.
- Cloud Run Functions๋ ์ถ๊ฐ ํ์ต ์ฝํ ์ธ ๊ฐ ํฌํจ๋ Python ๋ ธํธ๋ถ์ ๋ง๋ญ๋๋ค.
๋น์ฉ
BigQuery๋ฅผ ์ฌ์ฉํ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค ์๋ฃจ์ ์ด ์ฌ์ฉํ๋ Google Cloud ๋ฆฌ์์ค์ ์์ ๋น์ฉ์ Google Cloud ๊ฐ๊ฒฉ ๊ณ์ฐ๊ธฐ์์ ๋ฏธ๋ฆฌ ๊ณ์ฐ๋ ์์ ๋น์ฉ์ ์ฐธ์กฐํ์ธ์.
์์ ๋น์ฉ์ ์์์ ์ผ๋ก ๋ฐฐํฌ ๋น์ฉ์ ๊ณ์ฐํฉ๋๋ค. ์๋ฃจ์ ์ ์ฌ์ฉ๋ ๋ฆฌ์์ค์ ์ ์ฉํ ๋ชจ๋ ๊ตฌ์ฑ ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ์ํ๋๋ก ์์ ๋น์ฉ์ ์์ ํ ์ ์์ต๋๋ค.
์ฌ์ ๊ณ์ฐ๋ ์์ ๋น์ฉ์ ๋ค์๊ณผ ๊ฐ์ ํน์ ์์์ ๋ํ ๊ฐ์ ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
- ๋ฆฌ์์ค๊ฐ ๋ฐฐํฌ๋ Google Cloud ์์น
๋ฆฌ์์ค๊ฐ ์ฌ์ฉ๋ ์๊ฐ์ ์
๋ฐ์ดํฐ๊ฐ ์คํ ์ด์ง๋ ๋ฐ์ดํฐ ๋ฆฌ์ ์ ๋๋ค.
์์ํ๊ธฐ ์ ์
์ด ์๋ฃจ์ ์ ๋ฐฐํฌํ๋ ค๋ฉด ๋จผ์ Google Cloud ํ๋ก์ ํธ์ ์ผ๋ถ IAM ๊ถํ์ด ํ์ํฉ๋๋ค.
Google Cloud ํ๋ก์ ํธ ๋ง๋ค๊ธฐ ๋๋ ์ ํ
์๋ฃจ์ ์ ๋ฐฐํฌํ ๋ ๋ฆฌ์์ค๊ฐ ๋ฐฐํฌ๋๋ Google Cloud ํ๋ก์ ํธ๋ฅผ ์ ํํฉ๋๋ค. ์ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ฑฐ๋ ๊ธฐ์กด ํ๋ก์ ํธ๋ฅผ ๋ฐฐํฌ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๋ ค๋ฉด ๋ฐฐํฌ๋ฅผ ์์ํ๊ธฐ ์ ์ ๋ง๋ญ๋๋ค. ์ ํ๋ก์ ํธ๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ก๋์ ์ํฌ๋ก๋์ ์ฌ์ฉ๋๋ ๋ฆฌ์์ค์ ๊ฐ์ด ์ด์ ์ ํ๋ก๋น์ ๋๋ ๋ฆฌ์์ค์์ ์ถฉ๋์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ์ํํฉ๋๋ค.
-
In the Google Cloud console, go to the project selector page.
-
Click Create project.
-
Name your project. Make a note of your generated project ID.
-
Edit the other fields as needed.
-
Click Create.
ํ์ IAM ๊ถํ ๊ฐ์ ธ์ค๊ธฐ
๋ฐฐํฌ ํ๋ก์ธ์ค๋ฅผ ์์ํ๋ ค๋ฉด ๋ค์ ํ์ ๋์จ Identity and Access Management(IAM) ๊ถํ์ด ํ์ํฉ๋๋ค.
์ด ์๋ฃจ์
์ ๋ํด ์ ํ๋ก์ ํธ๋ฅผ ๋ง๋ ๊ฒฝ์ฐ ํด๋น ํ๋ก์ ํธ์ ๋ํ roles/owner
๊ธฐ๋ณธ ์ญํ ๊ณผ ํ์ํ ๋ชจ๋ ๊ถํ์ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค. roles/owner
์ญํ ์ด ์์ผ๋ฉด ๊ด๋ฆฌ์์๊ฒ ์ฐ๋ฝํ์ฌ ํด๋น ๊ถํ(๋๋ ์ด๋ฌํ ๊ถํ์ด ํฌํจ๋ ์ญํ )์ ๋ถ์ฌํด ๋ฌ๋ผ๊ณ ์์ฒญํ์ธ์.
ํ์ IAM ๊ถํ | ํ์ ๊ถํ์ด ํฌํจ๋ ์ฌ์ ์ ์๋ ์ญํ |
---|---|
|
์๋น์ค ์ฌ์ฉ๋ ๊ด๋ฆฌ์ ( roles/serviceusage.serviceUsageAdmin ) |
|
์๋น์ค ๊ณ์ ๊ด๋ฆฌ์ ( roles/iam.serviceAccountAdmin ) |
|
ํ๋ก์ ํธ IAM ๊ด๋ฆฌ์ ( roles/resourcemanager.projectIamAdmin ) |
config.deployments.create config.deployments.list |
Cloud Infrastructure Manager ๊ด๋ฆฌ์ ( roles/config.admin ) |
iam.serviceAccount.actAs |
์๋น์ค ๊ณ์ ์ฌ์ฉ์ ( roles/iam.serviceAccountUser ) |
์์ ์๋น์ค ๊ณ์ ๊ถํ ์ ๋ณด
์ฝ์์ ํตํด ๋ฐฐํฌ ํ๋ก์ธ์ค๋ฅผ ์์ํ๋ฉด Google์ด ์๋ฃจ์ ๋ฐฐํฌ๋ฅผ ์ํด ์๋น์ค ๊ณ์ ์ ์๋์ผ๋ก ์์ฑํฉ๋๋ค(์ดํ ํ์ํ ๋ ๋ฐฐํฌ ์ญ์ ๊ฐ๋ฅ). ์ด ์๋น์ค ๊ณ์ ์๋ ํน์ ์ผ์์ ์ผ๋ก IAM ๊ถํ์ด ํ ๋น๋ฉ๋๋ค. ์ฆ, ์๋ฃจ์ ๋ฐฐํฌ ๋ฐ ์ญ์ ์์ ์ด ์๋ฃ๋๋ฉด ๊ถํ์ด ์๋์ผ๋ก ์ทจ์๋ฉ๋๋ค. ์ด ๊ฐ์ด๋ ๋ท๋ถ๋ถ์์ ์ค๋ช ํ ๋๋ก ๋ฐฐํฌ๋ฅผ ์ญ์ ํ ํ์๋ ์๋น์ค ๊ณ์ ์ ์ญ์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์๋น์ค ๊ณ์ ์ ํ ๋น๋ ์ญํ ๋ณด๊ธฐ
Google Cloud ํ๋ก์ ํธ ๋๋ ์กฐ์ง ๊ด๋ฆฌ์์๊ฒ ์ด ์ ๋ณด๊ฐ ํ์ํ ๊ฒฝ์ฐ๋ฅผ ๋๋นํด ์ฌ๊ธฐ์ ์ญํ ์ด ๋์ ์์ต๋๋ค.
roles/aiplatform.admin
roles/bigquery.admin
roles/cloudfunctions.admin
roles/config.agent
roles/datalineage.viewer
roles/dataform.admin
roles/iam.serviceAccountAdmin
roles/iam.serviceAccountUser
roles/iam.serviceAccountTokenCreator
roles/logging.configWriter
roles/resourcemanager.projectIamAdmin
roles/run.invoker
roles/serviceusage.serviceUsageAdmin
roles/storage.admin
roles/workflows.admin
์๋ฃจ์ ๋ฐฐํฌ
์ต์ํ์ ๋ ธ๋ ฅ์ผ๋ก ์ด ์๋ฃจ์ ์ ๋ฐฐํฌํ ์ ์๋๋ก GitHub์์ Terraform ๊ตฌ์ฑ์ ์ ๊ณตํฉ๋๋ค. Terraform ๊ตฌ์ฑ์ ์๋ฃจ์ ์ ํ์ํ ๋ชจ๋ Google Cloud ๋ฆฌ์์ค๋ฅผ ์ ์ํฉ๋๋ค.
๋ค์ ๋ฐฉ๋ฒ ์ค ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฃจ์ ์ ๋ฐฐํฌํ ์ ์์ต๋๋ค.
์ฝ์์ ํตํด: ๊ธฐ๋ณธ ๊ตฌ์ฑ์ผ๋ก ์๋ฃจ์ ์ ์ฌ์ฉํด ๋ณด๊ณ ์๋ ๋ฐฉ์์ ํ์ธํ๋ ค๋ฉด ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํฉ๋๋ค. Cloud Build์์ ์๋ฃจ์ ์ ํ์ํ ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ๋ฐฐํฌํฉ๋๋ค. ๋ฐฐํฌ๋ ์๋ฃจ์ ์ด ๋ ์ด์ ํ์ํ์ง ์์ผ๋ฉด ์ฝ์์ ํตํด ์ด ์๋ฃจ์ ์ ์ญ์ ํ ์ ์์ต๋๋ค. ์๋ฃจ์ ์ ๋ฐฐํฌํ ํ ๋ง๋ ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์ญ์ ํด์ผ ํ ์๋ ์์ต๋๋ค.
์ด ๋ฐฐํฌ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ค๋ฉด ์ฝ์์ ํตํด ๋ฐฐํฌ์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์.
Terraform CLI ์ฌ์ฉ: ์๋ฃจ์ ์ ๋ง์ถค์ค์ ํ๊ฑฐ๋ ์ฝ๋ํ ์ธํ๋ผ(IaC) ๋ฐฉ์์ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค ํ๋ก๋น์ ๋๊ณผ ๊ด๋ฆฌ๋ฅผ ์๋ํํ๋ ค๋ฉด ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํฉ๋๋ค. GitHub์์ Terraform ๊ตฌ์ฑ์ ๋ค์ด๋ก๋ํ๊ณ ์ํ๋ ๊ฒฝ์ฐ ํ์์ ๋ฐ๋ผ ์ฝ๋๋ฅผ ๋ง์ถค์ค์ ํ ํ Terraform CLI๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฃจ์ ์ ๋ฐฐํฌํฉ๋๋ค. ์๋ฃจ์ ์ ๋ฐฐํฌํ ํ์๋ ๊ณ์ Terraform์ ์ฌ์ฉํ์ฌ ์๋ฃจ์ ์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
์ด ๋ฐฐํฌ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ค๋ฉด Terraform CLI๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฐํฌ์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์.
์ฝ์์ ํตํด ๋ฐฐํฌ
์ฌ์ ๊ตฌ์ฑ๋ ์๋ฃจ์ ์ ๋ฐฐํฌํ๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ์๋ฃํ์ธ์.
Google Cloud ์ ํ ์คํํธ ์๋ฃจ์ ์นดํ๋ก๊ทธ์์ BigQuery๋ฅผ ์ฌ์ฉํ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค ์๋ฃจ์ ์ผ๋ก ์ด๋ํฉ๋๋ค.
BigQuery๋ฅผ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค ์๋ฃจ์ ์ผ๋ก ์ด๋
์๋ฃจ์ ์ ์์ ๋น์ฉ ๋ฐ ์์ ๋ฐฐํฌ ์๊ฐ ๋ฑ ํ์ด์ง์ ์ ๊ณต๋ ์ ๋ณด๋ฅผ ๊ฒํ ํฉ๋๋ค.
์๋ฃจ์ ๋ฐฐํฌ๋ฅผ ์์ํ ์ค๋น๊ฐ ๋๋ฉด ๋ฐฐํฌ๋ฅผ ํด๋ฆญํฉ๋๋ค.
๋จ๊ณ๋ณ ๊ตฌ์ฑ ์ฐฝ์ด ํ์๋ฉ๋๋ค.
๊ตฌ์ฑ ์ฐฝ์ ๋จ๊ณ๋ฅผ ์๋ฃํฉ๋๋ค.
๋ฐฐํฌ์ ์ ๋ ฅํ๋ ์ด๋ฆ์ ๊ธฐ๋กํด ๋ก๋๋ค. ์ด ์ด๋ฆ์ ๋์ค์ ๋ฐฐํฌ๋ฅผ ์ญ์ ํ ๋ ํ์ํฉ๋๋ค.
๋ฐฐํฌ๋ฅผ ํด๋ฆญํ๋ฉด ์๋ฃจ์ ๋ฐฐํฌ ํ์ด์ง๊ฐ ํ์๋ฉ๋๋ค. ์ด ํ์ด์ง์ ์ํ ํ๋์ ๋ฐฐํฌ ์ค์ด ํ์๋ฉ๋๋ค.
์๋ฃจ์ ์ด ๋ฐฐํฌ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค.
๋ฐฐํฌ๊ฐ ์คํจํ๋ฉด ์ํ ํ๋์ ์คํจ๊ฐ ํ์๋ฉ๋๋ค. Cloud Build ๋ก๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ฅ๋ฅผ ์ง๋จํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์ฝ์์ ํตํด ๋ฐฐํฌ ์ ์ค๋ฅ๋ฅผ ์ฐธ์กฐํ์ธ์.
๋ฐฐํฌ๊ฐ ์๋ฃ๋๋ฉด ์ํ ํ๋๊ฐ ๋ฐฐํฌ๋จ์ผ๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค.
๋ฐฐํฌ๋ ๋ฆฌ์์ค๋ฅผ ํ์ธํ๋ ค๋ฉด
์์ ๋ฉ๋ด๋ฅผ ํด๋ฆญํ ํ ๋ฆฌ์์ค ๋ณด๊ธฐ๋ฅผ ์ ํํฉ๋๋ค.Google Cloud ์ฝ์์ ์ ์ ์ธ๋ฒคํ ๋ฆฌ ํ์ด์ง๊ฐ ์ ๋ธ๋ผ์ฐ์ ํญ์ผ๋ก ์ด๋ฆฝ๋๋ค. ํ์ด์ง์๋ ์๋ฃจ์ ์ผ๋ก ๋ฐฐํฌ๋๋ BigQuery ๊ฐ์ฒด, Cloud Run Functions, Workflows ์ํฌํ๋ก, Pub/Sub ์ฃผ์ , Eventarc ํธ๋ฆฌ๊ฑฐ ๋ฆฌ์์ค๊ฐ ๋์ด๋ฉ๋๋ค.
๊ฐ ๋ฆฌ์์ค์ ์ธ๋ถ์ ๋ณด๋ฅผ ๋ณด๋ ค๋ฉด ํ์ ์ด๋ฆ ์ด์์ ๋ฆฌ์์ค ์ด๋ฆ์ ํด๋ฆญํฉ๋๋ค.
์๋ฃจ์ ์ ๋ณด๊ณ ์ฌ์ฉํ๋ ค๋ฉด ์ฝ์์์ ์๋ฃจ์ ๋ฐฐํฌ ํ์ด์ง๋ก ๋์๊ฐ๋๋ค.
- ์์ ๋ฉ๋ด๋ฅผ ํด๋ฆญํฉ๋๋ค.
- Looker Studio ๋์๋ณด๋ ๋ณด๊ธฐ๋ฅผ ์ ํํ์ฌ ์๋ฃจ์ ์ ์ฌ์ฉํ์ฌ ๋ณํ๋ ์ํ ๋ฐ์ดํฐ๋ก ๋น๋๋ ๋์๋ณด๋๋ฅผ ์ฝ๋๋ค.
- BigQuery ํธ์ง๊ธฐ ์ด๊ธฐ๋ฅผ ์ ํํ์ฌ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ณ ์๋ฃจ์ ์ ์ํ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋จธ์ ๋ฌ๋(ML) ๋ชจ๋ธ์ ๋น๋ํฉ๋๋ค.
์๋ฃจ์ ์ด ๋ ์ด์ ํ์ํ์ง ์์ผ๋ฉด Google Cloud ๋ฆฌ์์ค์ ๋ํ ์๊ธ์ด ๊ณ์ ์ฒญ๊ตฌ๋์ง ์๋๋ก ๋ฐฐํฌ๋ฅผ ์ญ์ ํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ฐฐํฌ ์ญ์ ๋ฅผ ์ฐธ์กฐํ์ธ์.
Terraform CLI๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฐํฌ
์ด ์น์ ์์๋ ์๋ฃจ์ ์ ๋ง์ถค์ค์ ํ๊ฑฐ๋ Terraform CLI๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฃจ์ ํ๋ก๋น์ ๋๊ณผ ๊ด๋ฆฌ๋ฅผ ์๋ํํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค. Terraform CLI๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฐํฌํ๋ ์๋ฃจ์ ์ Google Cloud ์ฝ์์ ์๋ฃจ์ ๋ฐฐํฌ ํ์ด์ง์ ํ์๋์ง ์์ต๋๋ค.
Terraform ํด๋ผ์ด์ธํธ ์ค์
Cloud Shell ๋๋ ๋ก์ปฌ ํธ์คํธ์์ Terraform์ ์คํํ ์ ์์ต๋๋ค. ์ด ๊ฐ์ด๋์์๋ Google Cloud์์ ์ธ์ฆ์ ์ํํ๊ธฐ ์ํด Terraform์ด ์ฌ์ ์ค์น๋์ด ๊ตฌ์ฑ๋ Cloud Shell์์ Terraform์ ์คํํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
์ด ์๋ฃจ์ ์ Terraform ์ฝ๋๋ GitHub ์ ์ฅ์์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
GitHub ์ ์ฅ์๋ฅผ Cloud Shell์ ํด๋ก ํฉ๋๋ค.
GitHub ์ ์ฅ์๋ฅผ Cloud Shell๋ก ๋ค์ด๋ก๋ํ๋ ๊ฒ์ ํ์ธํ๋ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค.
ํ์ธ์ ํด๋ฆญํฉ๋๋ค.
Cloud Shell์ด ๋ณ๋์ ๋ธ๋ผ์ฐ์ ํญ์์ ์์๋๊ณ Terraform ์ฝ๋๊ฐ Cloud Shell ํ๊ฒฝ์
$HOME/cloudshell_open
๋๋ ํฐ๋ฆฌ์ ๋ค์ด๋ก๋๋ฉ๋๋ค.Cloud Shell์์ ํ์ฌ ์์ ๋๋ ํฐ๋ฆฌ๊ฐ
$HOME/cloudshell_open/terraform-google-bigquery/modules/data_warehouse
์ธ์ง ํ์ธํฉ๋๋ค. ์ด ๋๋ ํฐ๋ฆฌ์ ์๋ฃจ์ ์ ๋ํ Terraform ๊ตฌ์ฑ ํ์ผ์ด ํฌํจ๋์ด ์์ต๋๋ค. ํด๋น ๋๋ ํฐ๋ฆฌ๋ก ๋ณ๊ฒฝํด์ผ ํ๋ ๊ฒฝ์ฐ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.cd $HOME/cloudshell_open/terraform-google-bigquery/modules/data_warehouse
๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ Terraform์ ์ด๊ธฐํํฉ๋๋ค.
terraform init
๋ค์ ๋ฉ์์ง๊ฐ ํ์๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค.
Terraform has been successfully initialized!
Terraform ๋ณ์ ๊ตฌ์ฑ
๋ค์ด๋ก๋ํ Terraform ์ฝ๋์๋ ์๊ตฌ์ฌํญ์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฅผ ๋ง์ถค์ค์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๋ณ์๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์๋ฃจ์ ์ ๋ฐฐํฌํ Google Cloud ํ๋ก์ ํธ์ ๋ฆฌ์ ์ ์ง์ ํ ์ ์์ต๋๋ค.
ํ์ฌ ์์ ๋๋ ํฐ๋ฆฌ๊ฐ
$HOME/cloudshell_open/terraform-google-bigquery/modules/data_warehouse
์ธ์ง ํ์ธํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ํด๋น ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ํฉ๋๋ค.๋์ผํ ๋๋ ํฐ๋ฆฌ์์
terraform.tfvars
๋ผ๋ ํ ์คํธ ํ์ผ์ ๋ง๋ญ๋๋ค.terraform.tfvars
ํ์ผ์์ ๋ค์ ์ฝ๋ ์ค๋ํซ์ ๋ณต์ฌํ๊ณ ํ์ ๋ณ์์ ๊ฐ์ ์ค์ ํฉ๋๋ค.- ์ฝ๋ ์ค๋ํซ์์ ์ฃผ์์ผ๋ก ์ ๊ณต๋ ์๋ด๋ฅผ ๋ฐ๋ฆ ๋๋ค.
- ์ด ์ฝ๋ ์ค๋ํซ์๋ ๊ฐ์ ์ค์ ํด์ผ ํ๋ ๋ณ์๋ง ํฌํจ๋ฉ๋๋ค. Terraform ๊ตฌ์ฑ์๋ ๊ธฐ๋ณธ๊ฐ์ด ์๋ ๋ค๋ฅธ ๋ณ์๊ฐ ํฌํจ๋ฉ๋๋ค. ๋ชจ๋ ๋ณ์ ๋ฐ ๊ธฐ๋ณธ๊ฐ์ ๊ฒํ ํ๋ ค๋ฉด
$HOME/cloudshell_open/terraform-google-bigquery/modules/data_warehouse
๋๋ ํฐ๋ฆฌ์์ ์ฌ์ฉํ ์ ์๋variables.tf
ํ์ผ์ ์ฐธ์กฐํ์ธ์. terraform.tfvars
ํ์ผ์ ์ค์ ํ ๊ฐ ๊ฐ์ดvariables.tf
ํ์ผ์ ์ ์ธ๋ ๋ณ์ ์ ํ๊ณผ ์ผ์นํ๋์ง ํ์ธํฉ๋๋ค. ์๋ฅผ ๋ค์ดvariables.tf
ํ์ผ์ ๋ณ์์ ์ ์๋ ์ ํ์ดbool
์ธ ๊ฒฝ์ฐterraform.tfvars
ํ์ผ์์ ํด๋น ๋ณ์ ๊ฐ์ผ๋กtrue
๋๋false
๋ฅผ ์ง์ ํด์ผ ํฉ๋๋ค.
# This is an example of the terraform.tfvars file. # The values in this file must match the variable types declared in variables.tf. # The values in this file override any defaults in variables.tf. # ID of the project in which you want to deploy the solution project_id = "PROJECT_ID" # Google Cloud region where you want to deploy the solution # Example: us-central1 region = "REGION" # Whether or not to enable underlying apis in this solution. # Example: true enable_apis = true # Whether or not to protect BigQuery resources from deletion when solution is modified or changed. # Example: false force_destroy = false # Whether or not to protect Cloud Storage resources from deletion when solution is modified or changed. # Example: true deletion_protection = true # Name of the BigQuery ML GenAI remote model used for text generation # Example: "text_generate_model" text_generation_model_name = "text_generate_model"
ํ์ ๋ณ์์ ํ ๋นํ ์ ์๋ ๊ฐ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ค์์ ์ฐธ์กฐํ์ธ์.
project_id
: ํ๋ก์ ํธ ์๋ณregion
: ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฆฌ์ ๋ฐ ์์ญ
Terraform ๊ตฌ์ฑ ๊ฒ์ฆ ๋ฐ ๊ฒํ
ํ์ฌ ์์ ๋๋ ํฐ๋ฆฌ๊ฐ
$HOME/cloudshell_open/terraform-google-bigquery/modules/data_warehouse
์ธ์ง ํ์ธํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ํด๋น ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ํฉ๋๋ค.Terraform ๊ตฌ์ฑ์ ์ค๋ฅ๊ฐ ์๋์ง ํ์ธํฉ๋๋ค.
terraform validate
๋ช ๋ น์ด๊ฐ ์ค๋ฅ๋ฅผ ๋ฐํํ๋ฉด ๊ตฌ์ฑ์์ ์์ ์ด ํ์ํ ํญ๋ชฉ์ ๋ณ๊ฒฝํ ํ
terraform validate
๋ช ๋ น์ด๋ฅผ ๋ค์ ์คํํฉ๋๋ค. ๋ช ๋ น์ด๊ฐ ๋ค์ ๋ฉ์์ง๋ฅผ ๋ฐํํ ๋๊น์ง ์ด ๋จ๊ณ๋ฅผ ๋ฐ๋ณตํฉ๋๋ค.Success! The configuration is valid.
๊ตฌ์ฑ์์ ์ ์๋ ๋ฆฌ์์ค๋ฅผ ๊ฒํ ํฉ๋๋ค.
terraform plan
์์์ ์ค๋ช ํ ๋๋ก
terraform.tfvars
ํ์ผ์ ๋ง๋ค์ง ์์ ๊ฒฝ์ฐ Terraform์์ ๊ธฐ๋ณธ๊ฐ์ด ์๋ ๋ณ์์ ๊ฐ์ ์ ๋ ฅํ๋ผ๋ ๋ฉ์์ง๋ฅผ ํ์ํฉ๋๋ค. ํ์ ๊ฐ์ ์ ๋ ฅํฉ๋๋ค.terraform plan
๋ช ๋ น์ด ์ถ๋ ฅ์ ๊ตฌ์ฑ์ ์ ์ฉํ ๋ Terraform์ด ํ๋ก๋น์ ๋ํ๋ ๋ฆฌ์์ค ๋ชฉ๋ก์ ๋๋ค.๋ณ๊ฒฝํ๋ ค๋ฉด ๊ตฌ์ฑ์ ์์ ํ ํ
terraform validate
๋ฐterraform plan
๋ช ๋ น์ด๋ฅผ ๋ค์ ์คํํฉ๋๋ค.
๋ฆฌ์์ค ํ๋ก๋น์ ๋
Terraform ๊ตฌ์ฑ์ ๋ ์ด์ ๋ณ๊ฒฝํ ํ์๊ฐ ์์ผ๋ฉด ๋ฆฌ์์ค๋ฅผ ๋ฐฐํฌํฉ๋๋ค.
ํ์ฌ ์์ ๋๋ ํฐ๋ฆฌ๊ฐ
$HOME/cloudshell_open/terraform-google-bigquery/modules/data_warehouse
์ธ์ง ํ์ธํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ํด๋น ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ํฉ๋๋ค.Terraform ๊ตฌ์ฑ์ ์ ์ฉํฉ๋๋ค.
terraform apply
์์์ ์ค๋ช ํ ๋๋ก
terraform.tfvars
ํ์ผ์ ๋ง๋ค์ง ์์ ๊ฒฝ์ฐ Terraform์์ ๊ธฐ๋ณธ๊ฐ์ด ์๋ ๋ณ์์ ๊ฐ์ ์ ๋ ฅํ๋ผ๋ ๋ฉ์์ง๋ฅผ ํ์ํฉ๋๋ค. ํ์ ๊ฐ์ ์ ๋ ฅํฉ๋๋ค.Terraform์์ ์์ฑ๋ ๋ฆฌ์์ค ๋ชฉ๋ก์ ํ์ํฉ๋๋ค.
์์ ์ ์ํํ๋ผ๋ ๋ฉ์์ง๊ฐ ํ์๋๋ฉด
yes
๋ฅผ ์ ๋ ฅํฉ๋๋ค.Terraform์์ ๋ฐฐํฌ ์งํ ์ํฉ์ ๋ณด์ฌ์ฃผ๋ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค.
๋ฐฐํฌ๋ฅผ ์๋ฃํ ์ ์์ผ๋ฉด Terraform์์ ์คํจ๋ฅผ ์ผ์ผํจ ์ค๋ฅ๊ฐ ํ์๋ฉ๋๋ค. ์ค๋ฅ ๋ฉ์์ง๋ฅผ ๊ฒํ ํ๊ณ ๊ตฌ์ฑ์ ์ ๋ฐ์ดํธํ์ฌ ์ค๋ฅ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ๊ทธ๋ฐ ํ
terraform apply
๋ช ๋ น์ด๋ฅผ ๋ค์ ์คํํฉ๋๋ค. Terraform ์ค๋ฅ ํด๊ฒฐ์ ๋์์ด ํ์ํ๋ฉด Terraform CLI๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฃจ์ ๋ฐฐํฌ ์ ์ค๋ฅ๋ฅผ ์ฐธ์กฐํ์ธ์.๋ชจ๋ ๋ฆฌ์์ค๊ฐ ๋ง๋ค์ด์ง๋ฉด Terraform์ ๋ค์ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค.
Apply complete!
๋ํ ๋ค์๊ณผ ๊ฐ์ด Terraform ์ถ๋ ฅ์ ํ์ํ ์ถ๊ฐ ์ ๋ณด๊ฐ ๋์ด๋ฉ๋๋ค.
- ๋ฐฐํฌ๋ ๋์๋ณด๋์ Looker Studio URL
- ์ผ๋ถ ์ํ ์ฟผ๋ฆฌ์ ๋ํด BigQuery ํธ์ง๊ธฐ๋ฅผ ์ด๊ธฐ ์ํ ๋งํฌ
๋ค์ ์์๋ ์ถ๋ ฅ ๋ชจ์์ ๋ณด์ฌ์ค๋๋ค.
lookerstudio_report_url = "https://lookerstudio.google.com/reporting/create?c.reportId=8a6517b8-8fcd-47a2-a953-9d4fb9ae4794&ds.ds_profit.datasourceName=lookerstudio_report_profit&ds.ds_profit.projectId=my-cloud-project&ds.ds_profit.type=TABLE&ds.ds_profit.datasetId=ds_edw&ds.ds_profit.tableId=lookerstudio_report_profit&ds.ds_dc.datasourceName=lookerstudio_report_distribution_centers&ds.ds_dc.projectId=my-cloud-project&ds.ds_dc.type=TABLE&ds.ds_dc.datasetId=ds_edw&ds.ds_dc.tableId=lookerstudio_report_distribution_centers" bigquery_editor_url = "https://console.cloud.google.com/bigquery?project=my-cloud-project&ws=!1m5!1m4!6m3!1smy-cloud-project!2sds_edw!3ssp_sample_queries"
๋์๋ณด๋๋ฅผ ํ์ ๋ฐ ์ฌ์ฉํ๊ณ BigQuery์์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ค๋ฉด ์ด์ ๋จ๊ณ์์ ์ถ๋ ฅ URL์ ๋ณต์ฌํ๊ณ ์ ๋ธ๋ผ์ฐ์ ํญ์์ URL์ ์ฝ๋๋ค.
๋์๋ณด๋ ๋ฐ BigQuery ํธ์ง๊ธฐ๊ฐ ์ ํญ์ ํ์๋ฉ๋๋ค.
๋ฐฐํฌ๋ ๋ชจ๋ Google Cloud ๋ฆฌ์์ค๋ฅผ ๋ณด๋ ค๋ฉด ๋ํํ ๋๋ฌ๋ณด๊ธฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์๋ฃจ์ ์ด ๋ ์ด์ ํ์ํ์ง ์์ผ๋ฉด Google Cloud ๋ฆฌ์์ค์ ๋ํ ์๊ธ์ด ๊ณ์ ์ฒญ๊ตฌ๋์ง ์๋๋ก ๋ฐฐํฌ๋ฅผ ์ญ์ ํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ฐฐํฌ ์ญ์ ๋ฅผ ์ฐธ์กฐํ์ธ์.
์๋ฃจ์ ๋ง์ถค์ค์
์ด ์น์ ์์๋ Terraform ๊ฐ๋ฐ์๊ฐ ์์ฒด ๊ธฐ์ ๋ฐ ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํ๊ธฐ ์ํด BigQuery๋ฅผ ์ฌ์ฉํ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค ์๋ฃจ์ ์ ์์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด ์น์ ์ ์๋ด๋ Terraform CLI๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฃจ์ ์ ๋ฐฐํฌํ๋ ๊ฒฝ์ฐ์๋ง ๊ด๋ จ์ฑ์ด ์์ต๋๋ค.
์ํ ๋ฐ์ดํฐ๋ก ์๋ฃจ์
์๋ ๋ฐฉ์์ ํ์ธํ ํ ์์ฒด ๋ฐ์ดํฐ๋ก ์์
์ ์ํํ ์ ์์ต๋๋ค. ์์ฒด ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด edw-raw-hash
๋ผ๋ Cloud Storage ๋ฒํท์ ๋ฐฐ์นํฉ๋๋ค. ์ด ํด์๋ ๋ฐฐํฌ ์ค ์์ฑ๋๋ ๋ฌด์์ 8์ ์งํฉ์
๋๋ค. ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก Terraform ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
- ๋ฐ์ดํฐ ์ธํธ ID. ์ฝ๋๋ก BigQuery ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์์ฑํ ๋ ๋ฐ์ดํฐ์ ์ฌ์ฉํ๋ ค๋ ๋ฐ์ดํฐ ์ธํธ ID๊ฐ ์ฌ์ฉ๋๋๋ก Terraform ์ฝ๋๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
- ์คํค๋ง. ๋ฐ์ดํฐ ์ ์ฅ์ ์ฌ์ฉํ๋ ค๋ BigQuery ํ ์ด๋ธ ID๊ฐ ์์ฑ๋๋๋ก Terraform ์ฝ๋๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค. ์ฌ๊ธฐ์๋ BigQuery๊ฐ Cloud Storage์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ์๋๋ก ์ธ๋ถ ํ ์ด๋ธ ์คํค๋ง๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
- ์์ฝ๋ ์ฟผ๋ฆฌ. ์ํ๋ ๋ถ์์ ์ํํ๋ ์ ์ฅ ํ๋ก์์ ธ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
- Looker ๋์๋ณด๋. ์ฌ์ฉ ์ค์ธ ๋ฐ์ดํฐ๊ฐ ๋์๋ณด๋์ ๋ฐ์๋๋๋ก Looker ๋์๋ณด๋๋ฅผ ๋ง๋๋ Terraform ์ฝ๋๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
๋ค์์ main.tf
์์ Terraform ์์ ์ฝ๋๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ผ๋ฐ์ ์ธ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค ๊ฐ์ฒด์
๋๋ค.
-
BigQuery ๋ฐ์ดํฐ ์ธํธ: ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด๊ฐ ๊ทธ๋ฃนํ๋๊ณ ์ ์ฅ๋๋ ์คํค๋ง์ ๋๋ค.
resource "google_bigquery_dataset" "ds_edw" { project = module.project-services.project_id dataset_id = "DATASET_PHYSICAL_ID" friendly_name = "DATASET_LOGICAL_NAME" description = "DATASET_DESCRIPTION" location = "REGION" labels = var.labels delete_contents_on_destroy = var.force_destroy }
-
BigQuery ํ ์ด๋ธ: BigQuery์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๋ํ๋ด๊ฑฐ๋ Cloud Storage์ ์ ์ฅ๋ ๋ฐ์ดํฐ ์คํค๋ง๋ฅผ ๋ํ๋ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด์ ๋๋ค.
resource "google_bigquery_table" "tbl_edw_inventory_items" { dataset_id = google_bigquery_dataset.ds_edw.dataset_id table_id = "TABLE_NAME" project = module.project-services.project_id deletion_protection = var.deletion_protection ... }
-
BigQuery ์ ์ฅ ํ๋ก์์ : ํธ์ถ ์ ์คํํ ํ๋ ์ด์์ SQL ๋ฌธ์ ๋ํ๋ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด์ ๋๋ค. ํ ํ ์ด๋ธ์์ ๋ค๋ฅธ ํ ์ด๋ธ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณํํ๊ฑฐ๋ ์ธ๋ถ ํ ์ด๋ธ์์ ํ์ค ํ ์ด๋ธ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๊ธฐ ์ํ ๊ฒ์ผ ์ ์์ต๋๋ค.
resource "google_bigquery_routine" "sp_sample_translation_queries" { project = module.project-services.project_id dataset_id = google_bigquery_dataset.ds_edw.dataset_id routine_id = "sp_sample_translation_queries" routine_type = "PROCEDURE" language = "SQL" definition_body = templatefile("${path.module}/assets/sql/sp_sample_translation_queries.sql", { project_id = module.project-services.project_id }) }
-
BigQuery ์์ฝ๋ ์ฟผ๋ฆฌ: ์ง์ ๋ ๋น๋๋ก ์คํํ๋๋ก ์ฟผ๋ฆฌ ๋๋ ์ ์ฅ ํ๋ก์์ ธ๋ฅผ ์์ฝํ๊ธฐ ์ํ ์ ํธ๋ฆฌํฐ์ ๋๋ค.
resource "google_bigquery_data_transfer_config" "dts_config" { display_name = "TRANSFER_NAME" project = module.project-services.project_id location = "REGION" data_source_id = "scheduled_query" schedule = "every day 00:00" params = { query = "CALL
${module.project-services.project_id}.ds_edw.sp_lookerstudio_report
()" } }
์๋ฃจ์ ์ ๋ง์ถค์ค์ ํ๋ ค๋ฉด Cloud Shell์์ ๋ค์ ๋จ๊ณ๋ฅผ ์๋ฃํฉ๋๋ค.
ํ์ฌ ์์ ๋๋ ํฐ๋ฆฌ๊ฐ
$HOME/cloudshell_open/terraform-google-bigquery/modules/data_warehouse
์ธ์ง ํ์ธํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ํด๋น ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ํฉ๋๋ค.cd $HOME/cloudshell_open/terraform-google-bigquery/modules/data_warehouse
main.tf
๋ฅผ ์ด๊ณ ์ํ๋ ํญ๋ชฉ์ ๋ณ๊ฒฝํฉ๋๋ค.์์ ์ฑ, ๋ณด์, ์ฑ๋ฅ, ๋น์ฉ, ์์ ์ ๊ดํ ์ด๋ฌํ ๋ง์ถค์ค์ ํจ๊ณผ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ค๊ณ ๊ถ์ฅ์ฌํญ์ ์ฐธ์กฐํ์ธ์.
์ค๊ณ ๊ถ์ฅ์ฌํญ
์ด ์น์ ์์๋ BigQuery๋ฅผ ์ฌ์ฉํ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค ์๋ฃจ์ ์ ์ฌ์ฉํ์ฌ ๋ณด์, ์์ ์ฑ, ๋น์ฉ, ์ฑ๋ฅ์ ๋ํ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํ๋ ์ํคํ ์ฒ๋ฅผ ๊ฐ๋ฐํ๊ธฐ ์ํ ๊ถ์ฅ์ฌํญ์ ์ ๊ณตํฉ๋๋ค.
BigQuery๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฅ์ ์์ํ ๋๋ ๋ค์ํ ๋ฐฉ๋ฒ์ ํตํด ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ๊ฐ์ ํ๊ณ ์ด ์ง์ถ์ ์ค์ผ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ฐฉ๋ฒ์๋ ๋ฐ์ดํฐ๊ฐ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ ์ฅ๋๋ ๋ฐฉ๋ฒ์ ๋ณ๊ฒฝํ๊ฑฐ๋, SQL ์ฟผ๋ฆฌ๋ฅผ ์์ ํ๊ฑฐ๋, ์ฌ๋กฏ ์์ฝ์ ์ฌ์ฉํด์ ๋น์ฉ ์ฑ๋ฅ์ ๋ณด์ฅํ๋ ๋ฐฉ๋ฒ ๋ฑ์ด ์์ต๋๋ค. ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค ํ์ฅ ๋ฐ ์คํ์ ์ ์ฉํ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฟผ๋ฆฌ ์ฑ๋ฅ ์ต์ ํ ์๊ฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
๋ค์์ ์ ์ํ์ธ์.
- ์ค๊ณ๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ ์ ๋น์ฉ ์ํฅ์ ํ๊ฐํ๊ณ ๋ค๋ฅธ ๊ธฐ๋ฅ๊ณผ์ ์ ์ฌ์ ์ฅ๋จ์ ์ ๊ณ ๋ คํ์ธ์. Google Cloud ๊ฐ๊ฒฉ ๊ณ์ฐ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ค๊ณ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ๋น์ฉ ์ํฅ์ ํ๊ฐํ ์ ์์ต๋๋ค.
- ์๋ฃจ์ ์ ์ค๊ณ ๋ณ๊ฒฝ์ฌํญ์ ๊ตฌํํ๋ ค๋ฉด Terraform ์ฝ๋ฉ์ ๋ํ ์ ๋ฌธ ์ง์๊ณผ ์๋ฃจ์ ์ ์ฌ์ฉ๋๋ Google Cloud ์๋น์ค์ ๋ํ ๊ณ ๊ธ ์ง์์ด ํ์ํฉ๋๋ค.
- Google ์ ๊ณต Terraform ๊ตฌ์ฑ์ ์์ ํ ํ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด GitHub์์ ๋ฌธ์ ๋ฅผ ๋ง๋ญ๋๋ค. GitHub ๋ฌธ์ ๋ ์ต์ ์ ๋คํด ๊ฒํ ๋๋ฉฐ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ง๋ฌธ์ ์ํ ๊ฒ์ด ์๋๋๋ค.
- Google Cloud์์ ํ๋ก๋์ ์ฉ ํ๊ฒฝ์ ์ค๊ณํ๊ณ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ Google Cloud์์ ์์ ์์ญ ์ค๊ณ ๋ฐ Google Cloud ์ค์ ์ฒดํฌ๋ฆฌ์คํธ๋ฅผ ์ฐธ์กฐํ์ธ์.
๋ฐฐํฌ ์ญ์
์๋ฃจ์ ๋ฐฐํฌ๊ฐ ๋ ์ด์ ํ์ํ์ง ์์ผ๋ฉด ๋ง๋ ๋ฆฌ์์ค์ ๋ํด ์๊ธ์ด ๊ณ์ ์ฒญ๊ตฌ๋์ง ์๋๋ก ๋ฐฐํฌ๋ฅผ ์ญ์ ํฉ๋๋ค.
์ฝ์์ ํตํด ์ญ์
์ฝ์์ ํตํด ์๋ฃจ์ ์ ๋ฐฐํฌํ ๊ฒฝ์ฐ ๋ค์ ์ ์ฐจ๋ฅผ ๋ฐ๋ฆ ๋๋ค.
Google Cloud ์ฝ์์์ ์๋ฃจ์ ๋ฐฐํฌ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
์ญ์ ํ ๋ฐฐํฌ๊ฐ ํฌํจ๋ ํ๋ก์ ํธ๋ฅผ ์ ํํฉ๋๋ค.
์ญ์ ํ ๋ฐฐํฌ๋ฅผ ์ฐพ์ต๋๋ค.
๋ฐฐํฌ ํ์์
์์ ์ ํด๋ฆญํ ํ ์ญ์ ๋ฅผ ์ ํํฉ๋๋ค.ํ์์ ์์ ์ ๋ณด๋ ค๋ฉด ์คํฌ๋กคํด์ผ ํ ์๋ ์์ต๋๋ค.
๋ฐฐํฌ ์ด๋ฆ์ ์ ๋ ฅํ ํ ํ์ธ์ ํด๋ฆญํฉ๋๋ค.
์ํ ํ๋์ ์ญ์ ์ค์ด ํ์๋ฉ๋๋ค.
์ญ์ ๊ฐ ์คํจํ๋ฉด ๋ฐฐํฌ ์ญ์ ์ ์ค๋ฅ์ ๋ฌธ์ ํด๊ฒฐ ์๋ด๋ฅผ ์ฐธ์กฐํ์ธ์.
์๋ฃจ์ ์ ์ฌ์ฉํ Google Cloud ํ๋ก์ ํธ๊ฐ ๋ ์ด์ ํ์ํ์ง ์์ผ๋ฉด ํ๋ก์ ํธ๋ฅผ ์ญ์ ํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์ ํ์ฌํญ: ํ๋ก์ ํธ ์ญ์ ๋ฅผ ์ฐธ๊ณ ํ์ธ์.
Terraform CLI๋ฅผ ์ฌ์ฉํ์ฌ ์ญ์
Terraform CLI๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฃจ์ ์ ๋ฐฐํฌํ ๊ฒฝ์ฐ ๋ค์ ์ ์ฐจ๋ฅผ ์ํํฉ๋๋ค.
Cloud Shell์์ ํ์ฌ ์์ ๋๋ ํฐ๋ฆฌ๊ฐ
$HOME/cloudshell_open/terraform-google-bigquery/modules/data_warehouse
์ธ์ง ํ์ธํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ํด๋น ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ํฉ๋๋ค.Terraform์์ ํ๋ก๋น์ ๋ํ ๋ฆฌ์์ค๋ฅผ ์ญ์ ํฉ๋๋ค.
terraform destroy
Terraform์์ ์๋ฉธ๋ ๋ฆฌ์์ค ๋ชฉ๋ก์ ํ์ํฉ๋๋ค.
์์ ์ ์ํํ๋ผ๋ ๋ฉ์์ง๊ฐ ํ์๋๋ฉด
yes
๋ฅผ ์ ๋ ฅํฉ๋๋ค.Terraform์์ ์งํ ์ํฉ์ ๋ณด์ฌ์ฃผ๋ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค. ๋ชจ๋ ๋ฆฌ์์ค๊ฐ ์ญ์ ๋๋ฉด Terraform์ ๋ค์ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค.
Destroy complete!
์ญ์ ๊ฐ ์คํจํ๋ฉด ๋ฐฐํฌ ์ญ์ ์ ์ค๋ฅ์ ๋ฌธ์ ํด๊ฒฐ ์๋ด๋ฅผ ์ฐธ์กฐํ์ธ์.
์๋ฃจ์ ์ ์ฌ์ฉํ Google Cloud ํ๋ก์ ํธ๊ฐ ๋ ์ด์ ํ์ํ์ง ์์ผ๋ฉด ํ๋ก์ ํธ๋ฅผ ์ญ์ ํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์ ํ์ฌํญ: ํ๋ก์ ํธ ์ญ์ ๋ฅผ ์ฐธ๊ณ ํ์ธ์.
์ ํ์ฌํญ: ํ๋ก์ ํธ ์ญ์
์ Google Cloud ํ๋ก์ ํธ์ ์๋ฃจ์ ์ ๋ฐฐํฌํ๊ณ ํ๋ก์ ํธ๊ฐ ๋ ์ด์ ํ์ํ์ง ์์ผ๋ฉด ๋ค์ ๋จ๊ณ์ ๋ฐ๋ผ ์ด๋ฅผ ์ญ์ ํฉ๋๋ค.
- Google Cloud ์ฝ์์์ ๋ฆฌ์์ค ๊ด๋ฆฌ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
- ํ๋ก์ ํธ ๋ชฉ๋ก์์ ์ญ์ ํ ํ๋ก์ ํธ๋ฅผ ์ ํํ๊ณ ์ญ์ ๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ํ๋กฌํํธ์์ ํ๋ก์ ํธ ID๋ฅผ ์ ๋ ฅํ ํ ์ข ๋ฃ๋ฅผ ํด๋ฆญํฉ๋๋ค.
ํ๋ก์ ํธ๋ฅผ ๋ณด์กดํ๊ธฐ๋ก ๊ฒฐ์ ํ ๊ฒฝ์ฐ์๋ ๋ค์ ์น์ ์ ์ค๋ช ๋ ๋๋ก ์ด ์๋ฃจ์ ์ ์ํด ๋ง๋ ์๋น์ค ๊ณ์ ์ ์ญ์ ํฉ๋๋ค.
์ ํ์ฌํญ: ์๋น์ค ๊ณ์ ์ญ์
์๋ฃจ์ ์ ์ฌ์ฉํ ํ๋ก์ ํธ๋ฅผ ์ญ์ ํ ๊ฒฝ์ฐ์๋ ์ด ์น์ ์ ๊ฑด๋๋๋๋ค.
์ด ๊ฐ์ด๋์ ์์์ ์ค๋ช ํ ๊ฒ์ฒ๋ผ ์๋ฃจ์ ์ ๋ฐฐํฌํ ๋ ์๋น์ค ๊ณ์ ์ด ์๋์ผ๋ก ์์ฑ๋์์ต๋๋ค. ์๋น์ค ๊ณ์ ์ ์ผ์์ ์ผ๋ก ํน์ IAM ๊ถํ์ด ํ ๋น๋์์ต๋๋ค. ์ฆ, ์๋ฃจ์ ๋ฐฐํฌ ๋ฐ ์ญ์ ์์ ์ด ์๋ฃ๋ ํ ๊ถํ์ด ์๋์ผ๋ก ์ทจ์๋์์ง๋ง ์๋น์ค ๊ณ์ ์ ์ญ์ ๋์ง ์์์ต๋๋ค. ์ด ์๋น์ค ๊ณ์ ์ ์ญ์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
Google Cloud ์ฝ์์ ํตํด ์๋ฃจ์ ์ ๋ฐฐํฌํ ๊ฒฝ์ฐ ์๋ฃจ์ ๋ฐฐํฌ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค. ์ด๋ฏธ ํด๋น ํ์ด์ง์ ์์ผ๋ฉด ๋ธ๋ผ์ฐ์ ๋ฅผ ์๋ก๊ณ ์นจํฉ๋๋ค. ๋ฐฑ๊ทธ๋ผ์ด๋์์ ํ๋ก์ธ์ค๊ฐ ํธ๋ฆฌ๊ฑฐ๋์ด ์๋น์ค ๊ณ์ ์ด ์ญ์ ๋ฉ๋๋ค. ์ถ๊ฐ ์์ ์ ํ์ ์์ต๋๋ค.
Terraform CLI๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฃจ์ ์ ๋ฐฐํฌํ ๊ฒฝ์ฐ ๋ค์ ๋จ๊ณ๋ฅผ ์๋ฃํฉ๋๋ค.
Google Cloud ์ฝ์์์ ์๋น์ค ๊ณ์ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
์๋ฃจ์ ์ ์ฌ์ฉํ ํ๋ก์ ํธ๋ฅผ ์ ํํฉ๋๋ค.
์ญ์ ํ๋ ค๋ ์๋น์ค ๊ณ์ ์ ์ ํํฉ๋๋ค.
์๋ฃจ์ ์์ ๋ง๋ ์๋น์ค ๊ณ์ ์ ์ด๋ฉ์ผ ID ํ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
goog-sc-DEPLOYMENT_NAME-NNN@PROJECT_ID.iam.gserviceaccount.com
์ด๋ฉ์ผ ID์๋ ๋ค์ ๊ฐ์ด ํฌํจ๋ฉ๋๋ค.
- DEPLOYMENT_NAME: ๋ฐฐํฌ ์ด๋ฆ์ ๋๋ค.
- NNN: ์์์ 3์๋ฆฌ ์ซ์์ ๋๋ค.
- PROJECT_ID: ์๋ฃจ์ ์ ๋ฐฐํฌํ ํ๋ก์ ํธ์ ID์ ๋๋ค.
์ญ์ ๋ฅผ ํด๋ฆญํฉ๋๋ค.
์ค๋ฅ ๋ฌธ์ ํด๊ฒฐํ๊ธฐ
์ค๋ฅ ์ง๋จ ๋ฐ ํด๊ฒฐ์ ์ํด ์ํํ ์ ์๋ ์์ ์ ๋ฐฐํฌ ๋ฐฉ๋ฒ ๋ฐ ์ค๋ฅ ๋ณต์ก์ฑ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
์ฝ์์ ํตํด ๋ฐฐํฌ ์ ์ค๋ฅ
์ฝ์์ ์ฌ์ฉํ ๋ ๋ฐฐํฌ๊ฐ ์คํจํ๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
์๋ฃจ์ ๋ฐฐํฌ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
๋ฐฐํฌ๊ฐ ์คํจํ๋ฉด ์ํ ํ๋์ ์คํจ๊ฐ ํ์๋ฉ๋๋ค.
์คํจ๋ฅผ ์ผ์ผํจ ์ค๋ฅ์ ๋ํ ์ธ๋ถ์ ๋ณด๋ฅผ ๋ณด๋ ค๋ฉด ๋ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์.
๋ฐฐํฌ ํ์์
์์ ์ ํด๋ฆญํฉ๋๋ค.ํ์์ ์์ ์ ๋ณด๋ ค๋ฉด ์คํฌ๋กคํด์ผ ํ ์๋ ์์ต๋๋ค.
Cloud Build ๋ก๊ทธ ๋ณด๊ธฐ๋ฅผ ์ ํํฉ๋๋ค.
Cloud Build ๋ก๊ทธ๋ฅผ ๊ฒํ ํ๊ณ ์ ์ ํ ์กฐ์น์ ๋ฐ๋ผ ์คํจ๋ฅผ ์ผ์ผํจ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
Terraform CLI๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฐํฌ ์ ์ค๋ฅ
Terraform ์ฌ์ฉ ์ ๋ฐฐํฌ๊ฐ ์คํจํ๋ฉด terraform
apply
๋ช
๋ น์ด ์ถ๋ ฅ์ ๋ฌธ์ ์ง๋จ์ ์ํด ๊ฒํ ํ ์ ์๋ ์ค๋ฅ ๋ฉ์์ง๊ฐ ํฌํจ๋ฉ๋๋ค.
๋ค์ ์น์ ์ ์์์์๋ Terraform์ ์ฌ์ฉํ ๋ ๋ฐ์ํ ์ ์๋ ๋ฐฐํฌ ์ค๋ฅ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
API๊ฐ ์ฌ์ฉ ์ค์ ๋์ง ์์ ์ค๋ฅ
ํ๋ก์ ํธ๋ฅผ ๋ง๋ ํ ์๋ฃจ์ ์ ์ ํ๋ก์ ํธ์ ์ฆ์ ๋ฐฐํฌํ๋ ค๊ณ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ๊ฐ ํ์๋๋ฉด์ ๋ฐฐํฌ๊ฐ ์คํจํ ์ ์์ต๋๋ค.
Error: Error creating Network: googleapi: Error 403: Compute Engine API has not
been used in project PROJECT_ID before or it is disabled. Enable it by visiting
https://console.developers.google.com/apis/api/compute.googleapis.com/overview?project=PROJECT_ID
then retry. If you enabled this API recently, wait a few minutes for the action
to propagate to our systems and retry.
์ด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ๋ช ๋ถ ์ ๋ ๊ธฐ๋ค๋ฆฐ ํ terraform apply
๋ช
๋ น์ด๋ฅผ ๋ค์ ์คํํฉ๋๋ค.
์์ฒญํ ์ฃผ์๋ฅผ ํ ๋นํ์ง ๋ชปํ๋ ์ค๋ฅ
terraform apply
๋ช
๋ น์ด๋ฅผ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฉ์์ง์ ํจ๊ป cannot assign requested address
์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
Error: Error creating service account:
Post "https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts:
dial tcp [2001:db8:ffff:ffff::5f]:443:
connect: cannot assign requested address
์ด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด terraform apply
๋ช
๋ น์ด๋ฅผ ๋ค์ ์คํํฉ๋๋ค.
BigQuery ๋๋ Looker Studio์์ ๋ฐ์ดํฐ ์ก์ธ์ค ์ค๋ฅ
Terraform ํ๋ก๋น์ ๋ ๋จ๊ณ ์ดํ ๋ฐ์ดํฐ๋ฅผ ํ๊ฒฝ์ ๋ก๋ํ๋ ์คํ๋๋ ํ๋ก๋น์ ๋ ๋จ๊ณ๊ฐ ์์ต๋๋ค. ๋ฐ์ดํฐ๊ฐ Looker Studio ๋์๋ณด๋์ ๋ก๋๋ ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ฑฐ๋ BigQuery ๋ด๋ณด๋ด๊ธฐ๋ฅผ ์์ํ ๋ ๊ฐ์ฒด๊ฐ ์์ผ๋ฉด ๋ช ๋ถ ์ ๋ ๊ธฐ๋ค๋ฆฐ ํ ๋ค์ ์๋ํ์ธ์.
๋ฐฐํฌ ์ญ์ ์ ์ค๋ฅ
๊ฒฝ์ฐ์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฅผ ์ญ์ ํ๋ ค๋ ์๋๊ฐ ์คํจํ ์ ์์ต๋๋ค.
- ์ฝ์์ ํตํด ์๋ฃจ์ ์ ๋ฐฐํฌํ ํ ์๋ฃจ์ ์์ ํ๋ก๋น์ ๋ํ ๋ฆฌ์์ค๋ฅผ ๋ณ๊ฒฝํ ํ ๋ฐฐํฌ๋ฅผ ์ญ์ ํ๋ ค๊ณ ํ๋ฉด ์ญ์ ๊ฐ ์คํจํ ์ ์์ต๋๋ค. ์๋ฃจ์ ๋ฐฐํฌ ํ์ด์ง์ ์ํ ํ๋์ ์คํจ๊ฐ ํ์๋๊ณ Cloud Build ๋ก๊ทธ์ ์ค๋ฅ์ ์์ธ์ด ํ์๋ฉ๋๋ค.
- Terraform CLI๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฃจ์
์ ๋ฐฐํฌํ ํ Terraform์ด ์๋ ์ธํฐํ์ด์ค(์: ์ฝ์)๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค๋ฅผ ๋ณ๊ฒฝํ ํ ๋ฐฐํฌ๋ฅผ ์ญ์ ํ๋ ค๊ณ ํ๋ฉด ์ญ์ ๊ฐ ์คํจํ ์ ์์ต๋๋ค.
terraform destroy
๋ช ๋ น์ด ์ถ๋ ฅ์ ๋ฉ์์ง์ ์ค๋ฅ ์์ธ์ด ํ์๋ฉ๋๋ค.
์ค๋ฅ ๋ก๊ทธ์ ๋ฉ์์ง๋ฅผ ๊ฒํ ํ๊ณ ์ค๋ฅ๋ฅผ ์ผ์ผํจ ๋ฆฌ์์ค๋ฅผ ์๋ณ ๋ฐ ์ญ์ ํ ํ ๋ฐฐํฌ๋ฅผ ๋ค์ ์ญ์ ํฉ๋๋ค.
์ฝ์ ๊ธฐ๋ฐ ๋ฐฐํฌ๊ฐ ์ญ์ ๋์ง ์๊ณ Cloud Build ๋ก๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ฅ๋ฅผ ์ง๋จํ ์ ์์ผ๋ฉด ๋ค์ ์น์ ์ ์ค๋ช ๋๋ก Terraform CLI๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฐํฌ๋ฅผ ์ญ์ ํ ์ ์์ต๋๋ค.
Terraform CLI๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ์ ๊ธฐ๋ฐ ๋ฐฐํฌ ์ญ์
์ด ์น์ ์์๋ ์ฝ์์ ํตํด ์ญ์ ๋ฅผ ์๋ํ ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ ์ฝ์ ๊ธฐ๋ฐ ๋ฐฐํฌ๋ฅผ ์ญ์ ํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์์๋ ์ญ์ ํ๋ ค๋ ๋ฐฐํฌ์ Terraform ๊ตฌ์ฑ์ ๋ค์ด๋ก๋ํ ํ Terraform CLI๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฐํฌ๋ฅผ ์ญ์ ํฉ๋๋ค.
๋ฐฐํฌ์ Terraform ์ฝ๋, ๋ก๊ทธ ๋ฐ ๊ธฐํ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ๋ฆฌ์ ์ ์๋ณํฉ๋๋ค. ์ด ๋ฆฌ์ ์ ์๋ฃจ์ ๋ฐฐํฌ ์ค ์ ํํ ๋ฆฌ์ ๊ณผ ๋ค๋ฅผ ์ ์์ต๋๋ค.
Google Cloud ์ฝ์์์ ์๋ฃจ์ ๋ฐฐํฌ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
์ญ์ ํ ๋ฐฐํฌ๊ฐ ํฌํจ๋ ํ๋ก์ ํธ๋ฅผ ์ ํํฉ๋๋ค.
๋ฐฐํฌ ๋ชฉ๋ก์์ ์ญ์ ํ๋ ค๋ ๋ฐฐํฌ์ ๋ํ ํ์ ์๋ณํฉ๋๋ค.
๋ชจ๋ ํ ์ฝํ ์ธ ๋ณด๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
์์น ์ด์์ ๋ค์ ์์์ ๊ฐ์กฐ ํ์๋ ๋ ๋ฒ์งธ ์์น๋ฅผ ๊ธฐ๋กํด ๋ก๋๋ค.
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
ํ๋ก์ ํธ ID, ๋ฆฌ์ , ์ญ์ ํ๋ ค๋ ๋ฐฐํฌ ์ด๋ฆ์ ๋ํด ํ๊ฒฝ ๋ณ์๋ฅผ ๋ง๋ญ๋๋ค.
export REGION="REGION" export PROJECT_ID="PROJECT_ID" export DEPLOYMENT_NAME="DEPLOYMENT_NAME"
์ด ๋ช ๋ น์ด์์ ๋ค์ ํญ๋ชฉ์ ๋ฐ๊ฟ๋๋ค.
- REGION: ์ด ์ ์ฐจ์ ์ ๋ถ๋ถ์์ ๊ธฐ๋กํด ๋ ์์น
- PROJECT_ID: ์๋ฃจ์ ์ ๋ฐฐํฌํ ํ๋ก์ ํธ์ ID
- DEPLOYMENT_NAME: ์ญ์ ํ๋ ค๋ ๋ฐฐํฌ์ ์ด๋ฆ
์ญ์ ํ๋ ค๋ ๋ฐฐํฌ์ ์ต์ ๋ฒ์ ์ ๋ํ ID๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
export REVISION_ID=$(curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://config.googleapis.com/v1alpha2/projects/${PROJECT_ID}/locations/${REGION}/deployments/${DEPLOYMENT_NAME}" \ | jq .latestRevision -r) echo $REVISION_ID
์ถ๋ ฅ์ ๋ค์๊ณผ ๋น์ทํฉ๋๋ค.
projects/PROJECT_ID/locations/REGION/deployments/DEPLOYMENT_NAME/revisions/r-0
๋ฐฐํฌ์ ๋ํ Terraform ๊ตฌ์ฑ์ Cloud Storage ์์น๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
export CONTENT_PATH=$(curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://config.googleapis.com/v1alpha2/${REVISION_ID}" \ | jq .applyResults.content -r) echo $CONTENT_PATH
๋ค์์ ์ด ๋ช ๋ น์ด์ ์ถ๋ ฅ ์์์ ๋๋ค.
gs://PROJECT_ID-REGION-blueprint-config/DEPLOYMENT_NAME/r-0/apply_results/content
Cloud Storage์์ Cloud Shell๋ก Terraform ๊ตฌ์ฑ์ ๋ค์ด๋ก๋ํฉ๋๋ค.
gcloud storage cp $CONTENT_PATH $HOME --recursive cd $HOME/content/modules/data_warehouse
๋ค์ ์์์ ํ์๋ ๊ฒ์ฒ๋ผ
Operation completed
๋ฉ์์ง๊ฐ ํ์๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค.Operation completed over 45 objects/268.5 KiB
Terraform์ ์ด๊ธฐํํฉ๋๋ค.
terraform init
๋ค์ ๋ฉ์์ง๊ฐ ํ์๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค.
Terraform has been successfully initialized!
๋ฐฐํฌ๋ ๋ฆฌ์์ค๋ฅผ ์ญ์ ํฉ๋๋ค.
terraform destroy
Terraform์์ ์๋ฉธ๋ ๋ฆฌ์์ค ๋ชฉ๋ก์ ํ์ํฉ๋๋ค.
์ ์ธ๋์ง ์์ ๋ณ์์ ๋ํ ๊ฒฝ๊ณ ๊ฐ ํ์๋๋ฉด ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์ํฉ๋๋ค.
์์ ์ ์ํํ๋ผ๋ ๋ฉ์์ง๊ฐ ํ์๋๋ฉด
yes
๋ฅผ ์ ๋ ฅํฉ๋๋ค.Terraform์์ ์งํ ์ํฉ์ ๋ณด์ฌ์ฃผ๋ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค. ๋ชจ๋ ๋ฆฌ์์ค๊ฐ ์ญ์ ๋๋ฉด Terraform์ ๋ค์ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค.
Destroy complete!
๋ฐฐํฌ ์ํฐํฉํธ๋ฅผ ์ญ์ ํฉ๋๋ค.
curl -X DELETE \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://config.googleapis.com/v1alpha2/projects/${PROJECT_ID}/locations/${REGION}/deployments/${DEPLOYMENT_NAME}?force=true&delete_policy=abandon"
๋ช ์ด ์ ๋ ๊ธฐ๋ค๋ฆฐ ํ ๋ฐฐํฌ ์ํฐํฉํธ๊ฐ ์ญ์ ๋์๋์ง ํ์ธํฉ๋๋ค.
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://config.googleapis.com/v1alpha2/projects/${PROJECT_ID}/locations/${REGION}/deployments/${DEPLOYMENT_NAME}" \ | jq .error.message
์ถ๋ ฅ์
null
์ด ํ์๋๋ฉด ๋ช ์ด ์ ๋ ๊ธฐ๋ค๋ฆฐ ํ ๋ช ๋ น์ด๋ฅผ ๋ค์ ์คํํฉ๋๋ค.๋ฐฐํฌ ์ํฐํํธ๊ฐ ์ญ์ ๋ ํ ๋ค์ ์์์ ๊ฐ์ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค.
Resource 'projects/PROJECT_ID/locations/REGION/deployments/DEPLOYMENT_NAME' was not found
- ๋ฌธ์, ์ฝ์ ๋ด ํํ ๋ฆฌ์ผ, ์๋ฃจ์ ์ ๊ฒฝ์ฐ ํ์ด์ง์์ ์๊ฒฌ ๋ณด๋ด๊ธฐ ๋ฒํผ์ ์ฌ์ฉํฉ๋๋ค.
- ์์ ๋์ง ์์ Terraform ์ฝ๋์ ๋ํด์๋ GitHub ์ ์ฅ์์์ ๋ฌธ์ ๋ฅผ ๋ง๋์ธ์. GitHub ๋ฌธ์ ๋ ์ต์ ์ ๋คํด ๊ฒํ ๋๋ฉฐ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ง๋ฌธ์ ์ํ ๊ฒ์ด ์๋๋๋ค.
- ์๋ฃจ์ ์์ ์ฌ์ฉ๋๋ ์ ํ ๊ด๋ จ ๋ฌธ์ ๋ Cloud Customer Care์ ๋ฌธ์ํ์ธ์.
- BigQuery ์์๋ณด๊ธฐ
- ML.GENERATE_TEXT ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํ ์คํธ ์์ฑ
- Looker Studio ์์๋ณด๊ธฐ
์๊ฒฌ ๋ณด๋ด๊ธฐ
์ ํ ์คํํธ ์๋ฃจ์ ์ ์ ๋ณด ์ ๊ณต๋ง์ ๋ชฉ์ ์ผ๋ก ํ๋ฉฐ ๊ณต์์ ์ผ๋ก ์ง์๋๋ ์ ํ์ ์๋๋๋ค. Google์ ์ฌ์ ํต์ง ์์ด ์๋ฃจ์ ์ ๋ณ๊ฒฝํ๊ฑฐ๋ ์ญ์ ํ ์ ์์ต๋๋ค.
์ค๋ฅ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด Cloud Build ๋ก๊ทธ ๋ฐ Terraform ์ถ๋ ฅ์ ๊ฒํ ํฉ๋๋ค.
์๊ฒฌ์ ์ ์ถํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.