์ ํ”„ ์Šคํƒ€ํŠธ ์†”๋ฃจ์…˜: BigQuery๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค

Last reviewed 2025-02-03 UTC

์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” 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 ๋ฆฌ์†Œ์Šค์˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค ์†”๋ฃจ์…˜์˜ ์ธํ”„๋ผ ์•„ํ‚คํ…์ฒ˜

์†”๋ฃจ์…˜ ํ๋ฆ„

์ด ์•„ํ‚คํ…์ฒ˜๋Š” ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค์— ๋Œ€ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฑ„์šฐ๊ณ  ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ์ผ๋ฐ˜์ ์ธ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

  1. ๋ฐ์ดํ„ฐ๊ฐ€ Cloud Storage ๋ฒ„ํ‚ท์œผ๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.
  2. ์›Œํฌํ”Œ๋กœ๋Š” ๋ฐ์ดํ„ฐ ์ด๋™์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  3. SQL ์ €์žฅ ํ”„๋Ÿฌ์‹œ์ €๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๊ฐ€ BigQuery์— BigLake ํ…Œ์ด๋ธ”๋กœ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค.
  4. BigQuery์—์„œ SQL ์ €์žฅ ํ”„๋กœ์‹œ์ ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  5. Looker Studio๋กœ ์ถ”๊ฐ€ ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐ์ดํ„ฐ๋กœ๋ถ€ํ„ฐ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  6. BigQuery ML๋กœ ๋นŒ๋“œ๋œ k-ํ‰๊ท  ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค. ๋ถ„์„์€ BigQuery๋ฅผ ํ†ตํ•ด Vertex AI์˜ ์ƒ์„ฑํ˜• AI ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์š”์•ฝํ•˜๋Š” ๊ณตํ†ต ํŒจํ„ด์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.
  7. Cloud Run Functions๋Š” ์ถ”๊ฐ€ ํ•™์Šต ์ฝ˜ํ…์ธ ๊ฐ€ ํฌํ•จ๋œ Python ๋…ธํŠธ๋ถ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๋น„์šฉ

BigQuery๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค ์†”๋ฃจ์…˜์ด ์‚ฌ์šฉํ•˜๋Š” Google Cloud ๋ฆฌ์†Œ์Šค์˜ ์˜ˆ์ƒ ๋น„์šฉ์€ Google Cloud ๊ฐ€๊ฒฉ ๊ณ„์‚ฐ๊ธฐ์—์„œ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐ๋œ ์˜ˆ์ƒ ๋น„์šฉ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์˜ˆ์ƒ ๋น„์šฉ์„ ์‹œ์ž‘์ ์œผ๋กœ ๋ฐฐํฌ ๋น„์šฉ์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์†”๋ฃจ์…˜์— ์‚ฌ์šฉ๋œ ๋ฆฌ์†Œ์Šค์— ์ ์šฉํ•  ๋ชจ๋“  ๊ตฌ์„ฑ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•˜๋„๋ก ์˜ˆ์ƒ ๋น„์šฉ์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์ „ ๊ณ„์‚ฐ๋œ ์˜ˆ์ƒ ๋น„์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ • ์š”์†Œ์— ๋Œ€ํ•œ ๊ฐ€์ •์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ฐฐํฌ๋œ Google Cloud ์œ„์น˜
  • ๋ฆฌ์†Œ์Šค๊ฐ€ ์‚ฌ์šฉ๋œ ์‹œ๊ฐ„์˜ ์–‘

  • ๋ฐ์ดํ„ฐ๊ฐ€ ์Šคํ…Œ์ด์ง•๋œ ๋ฐ์ดํ„ฐ ๋ฆฌ์ „์ž…๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๊ธฐ ์ „์—

์ด ์†”๋ฃจ์…˜์„ ๋ฐฐํฌํ•˜๋ ค๋ฉด ๋จผ์ € Google Cloud ํ”„๋กœ์ ํŠธ์™€ ์ผ๋ถ€ IAM ๊ถŒํ•œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Google Cloud ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๊ธฐ ๋˜๋Š” ์„ ํƒ

์†”๋ฃจ์…˜์„ ๋ฐฐํฌํ•  ๋•Œ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ฐฐํฌ๋˜๋Š” Google Cloud ํ”„๋กœ์ ํŠธ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ ๊ธฐ์กด ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฐฐํฌ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ๋ฐฐํฌ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ๋•์…˜ ์›Œํฌ๋กœ๋“œ์— ์‚ฌ์šฉ๋˜๋Š” ๋ฆฌ์†Œ์Šค์™€ ๊ฐ™์ด ์ด์ „์— ํ”„๋กœ๋น„์ €๋‹๋œ ๋ฆฌ์†Œ์Šค์™€์˜ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  1. In the Google Cloud console, go to the project selector page.

    Go to project selector

  2. Click Create project.

  3. Name your project. Make a note of your generated project ID.

  4. Edit the other fields as needed.

  5. Click Create.

ํ•„์ˆ˜ IAM ๊ถŒํ•œ ๊ฐ€์ ธ์˜ค๊ธฐ

๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋‹ค์Œ ํ‘œ์— ๋‚˜์˜จ Identity and Access Management(IAM) ๊ถŒํ•œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด ์†”๋ฃจ์…˜์— ๋Œ€ํ•ด ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“  ๊ฒฝ์šฐ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ roles/owner ๊ธฐ๋ณธ ์—ญํ• ๊ณผ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. roles/owner ์—ญํ• ์ด ์—†์œผ๋ฉด ๊ด€๋ฆฌ์ž์—๊ฒŒ ์—ฐ๋ฝํ•˜์—ฌ ํ•ด๋‹น ๊ถŒํ•œ(๋˜๋Š” ์ด๋Ÿฌํ•œ ๊ถŒํ•œ์ด ํฌํ•จ๋œ ์—ญํ• )์„ ๋ถ€์—ฌํ•ด ๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•˜์„ธ์š”.

ํ•„์ˆ˜ IAM ๊ถŒํ•œ ํ•„์ˆ˜ ๊ถŒํ•œ์ด ํฌํ•จ๋œ ์‚ฌ์ „ ์ •์˜๋œ ์—ญํ• 

serviceusage.services.enable

์„œ๋น„์Šค ์‚ฌ์šฉ๋Ÿ‰ ๊ด€๋ฆฌ์ž
(roles/serviceusage.serviceUsageAdmin)

iam.serviceAccounts.create

์„œ๋น„์Šค ๊ณ„์ • ๊ด€๋ฆฌ์ž
(roles/iam.serviceAccountAdmin)

resourcemanager.projects.setIamPolicy

ํ”„๋กœ์ ํŠธ 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๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌ์˜ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

์ฝ˜์†”์„ ํ†ตํ•ด ๋ฐฐํฌ

์‚ฌ์ „ ๊ตฌ์„ฑ๋œ ์†”๋ฃจ์…˜์„ ๋ฐฐํฌํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์™„๋ฃŒํ•˜์„ธ์š”.

  1. Google Cloud ์ ํ”„ ์Šคํƒ€ํŠธ ์†”๋ฃจ์…˜ ์นดํƒˆ๋กœ๊ทธ์—์„œ BigQuery๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค ์†”๋ฃจ์…˜์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    BigQuery๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค ์†”๋ฃจ์…˜์œผ๋กœ ์ด๋™

  2. ์†”๋ฃจ์…˜์˜ ์˜ˆ์ƒ ๋น„์šฉ ๋ฐ ์˜ˆ์ƒ ๋ฐฐํฌ ์‹œ๊ฐ„ ๋“ฑ ํŽ˜์ด์ง€์— ์ œ๊ณต๋œ ์ •๋ณด๋ฅผ ๊ฒ€ํ† ํ•ฉ๋‹ˆ๋‹ค.

  3. ์†”๋ฃจ์…˜ ๋ฐฐํฌ๋ฅผ ์‹œ์ž‘ํ•  ์ค€๋น„๊ฐ€ ๋˜๋ฉด ๋ฐฐํฌ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    ๋‹จ๊ณ„๋ณ„ ๊ตฌ์„ฑ ์ฐฝ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  4. ๊ตฌ์„ฑ ์ฐฝ์˜ ๋‹จ๊ณ„๋ฅผ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

    ๋ฐฐํฌ์— ์ž…๋ ฅํ•˜๋Š” ์ด๋ฆ„์„ ๊ธฐ๋กํ•ด ๋‘ก๋‹ˆ๋‹ค. ์ด ์ด๋ฆ„์€ ๋‚˜์ค‘์— ๋ฐฐํฌ๋ฅผ ์‚ญ์ œํ•  ๋•Œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

    ๋ฐฐํฌ๋ฅผ ํด๋ฆญํ•˜๋ฉด ์†”๋ฃจ์…˜ ๋ฐฐํฌ ํŽ˜์ด์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด ํŽ˜์ด์ง€์˜ ์ƒํƒœ ํ•„๋“œ์— ๋ฐฐํฌ ์ค‘์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  5. ์†”๋ฃจ์…˜์ด ๋ฐฐํฌ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.

    ๋ฐฐํฌ๊ฐ€ ์‹คํŒจํ•˜๋ฉด ์ƒํƒœ ํ•„๋“œ์— ์‹คํŒจ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. Cloud Build ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜ค๋ฅ˜๋ฅผ ์ง„๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ฝ˜์†”์„ ํ†ตํ•ด ๋ฐฐํฌ ์‹œ ์˜ค๋ฅ˜๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

    ๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ƒํƒœ ํ•„๋“œ๊ฐ€ ๋ฐฐํฌ๋จ์œผ๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

  6. ๋ฐฐํฌ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด ์ž‘์—… ๋ฉ”๋‰ด๋ฅผ ํด๋ฆญํ•œ ํ›„ ๋ฆฌ์†Œ์Šค ๋ณด๊ธฐ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    Google Cloud ์ฝ˜์†”์˜ ์• ์…‹ ์ธ๋ฒคํ† ๋ฆฌ ํŽ˜์ด์ง€๊ฐ€ ์ƒˆ ๋ธŒ๋ผ์šฐ์ € ํƒญ์œผ๋กœ ์—ด๋ฆฝ๋‹ˆ๋‹ค. ํŽ˜์ด์ง€์—๋Š” ์†”๋ฃจ์…˜์œผ๋กœ ๋ฐฐํฌ๋˜๋Š” BigQuery ๊ฐ์ฒด, Cloud Run Functions, Workflows ์›Œํฌํ”Œ๋กœ, Pub/Sub ์ฃผ์ œ, Eventarc ํŠธ๋ฆฌ๊ฑฐ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋‚˜์—ด๋ฉ๋‹ˆ๋‹ค.

    ๊ฐ ๋ฆฌ์†Œ์Šค์˜ ์„ธ๋ถ€์ •๋ณด๋ฅผ ๋ณด๋ ค๋ฉด ํ‘œ์‹œ ์ด๋ฆ„ ์—ด์—์„œ ๋ฆฌ์†Œ์Šค ์ด๋ฆ„์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  7. ์†”๋ฃจ์…˜์„ ๋ณด๊ณ  ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ฝ˜์†”์—์„œ ์†”๋ฃจ์…˜ ๋ฐฐํฌ ํŽ˜์ด์ง€๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

    1. ์ž‘์—… ๋ฉ”๋‰ด๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    2. Looker Studio ๋Œ€์‹œ๋ณด๋“œ ๋ณด๊ธฐ๋ฅผ ์„ ํƒํ•˜์—ฌ ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€ํ™˜๋œ ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ๋กœ ๋นŒ๋“œ๋œ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ์—ฝ๋‹ˆ๋‹ค.
    3. BigQuery ํŽธ์ง‘๊ธฐ ์—ด๊ธฐ๋ฅผ ์„ ํƒํ•˜์—ฌ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์†”๋ฃจ์…˜์˜ ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋จธ์‹ ๋Ÿฌ๋‹(ML) ๋ชจ๋ธ์„ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.

์†”๋ฃจ์…˜์ด ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉด Google Cloud ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์š”๊ธˆ์ด ๊ณ„์† ์ฒญ๊ตฌ๋˜์ง€ ์•Š๋„๋ก ๋ฐฐํฌ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฐฐํฌ ์‚ญ์ œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Terraform CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌ

์ด ์„น์…˜์—์„œ๋Š” ์†”๋ฃจ์…˜์„ ๋งž์ถค์„ค์ •ํ•˜๊ฑฐ๋‚˜ Terraform CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์†”๋ฃจ์…˜ ํ”„๋กœ๋น„์ €๋‹๊ณผ ๊ด€๋ฆฌ๋ฅผ ์ž๋™ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. Terraform CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌํ•˜๋Š” ์†”๋ฃจ์…˜์€ Google Cloud ์ฝ˜์†”์˜ ์†”๋ฃจ์…˜ ๋ฐฐํฌ ํŽ˜์ด์ง€์— ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Terraform ํด๋ผ์ด์–ธํŠธ ์„ค์ •

Cloud Shell ๋˜๋Š” ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ์—์„œ Terraform์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” Google Cloud์—์„œ ์ธ์ฆ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด Terraform์ด ์‚ฌ์ „ ์„ค์น˜๋˜์–ด ๊ตฌ์„ฑ๋œ Cloud Shell์—์„œ Terraform์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์ด ์†”๋ฃจ์…˜์˜ Terraform ์ฝ”๋“œ๋Š” GitHub ์ €์žฅ์†Œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. GitHub ์ €์žฅ์†Œ๋ฅผ Cloud Shell์— ํด๋ก ํ•ฉ๋‹ˆ๋‹ค.

    Cloud Shell์—์„œ ์—ด๊ธฐ

    GitHub ์ €์žฅ์†Œ๋ฅผ Cloud Shell๋กœ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  2. ํ™•์ธ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    Cloud Shell์ด ๋ณ„๋„์˜ ๋ธŒ๋ผ์šฐ์ € ํƒญ์—์„œ ์‹œ์ž‘๋˜๊ณ  Terraform ์ฝ”๋“œ๊ฐ€ Cloud Shell ํ™˜๊ฒฝ์˜ $HOME/cloudshell_open ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋‹ค์šด๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค.

  3. Cloud Shell์—์„œ ํ˜„์žฌ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ $HOME/cloudshell_open/terraform-google-bigquery/modules/data_warehouse์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์†”๋ฃจ์…˜์— ๋Œ€ํ•œ Terraform ๊ตฌ์„ฑ ํŒŒ์ผ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    cd $HOME/cloudshell_open/terraform-google-bigquery/modules/data_warehouse
    
  4. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ Terraform์„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

    terraform init
    

    ๋‹ค์Œ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.

    Terraform has been successfully initialized!
    

Terraform ๋ณ€์ˆ˜ ๊ตฌ์„ฑ

๋‹ค์šด๋กœ๋“œํ•œ Terraform ์ฝ”๋“œ์—๋Š” ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฅผ ๋งž์ถค์„ค์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์†”๋ฃจ์…˜์„ ๋ฐฐํฌํ•  Google Cloud ํ”„๋กœ์ ํŠธ์™€ ๋ฆฌ์ „์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ํ˜„์žฌ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ $HOME/cloudshell_open/terraform-google-bigquery/modules/data_warehouse์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

  2. ๋™์ผํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ terraform.tfvars๋ผ๋Š” ํ…์ŠคํŠธ ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  3. 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"
    

    ํ•„์ˆ˜ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

Terraform ๊ตฌ์„ฑ ๊ฒ€์ฆ ๋ฐ ๊ฒ€ํ† 

  1. ํ˜„์žฌ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ $HOME/cloudshell_open/terraform-google-bigquery/modules/data_warehouse์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

  2. Terraform ๊ตฌ์„ฑ์— ์˜ค๋ฅ˜๊ฐ€ ์—†๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

    terraform validate
    

    ๋ช…๋ น์–ด๊ฐ€ ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๊ตฌ์„ฑ์—์„œ ์ˆ˜์ •์ด ํ•„์š”ํ•œ ํ•ญ๋ชฉ์„ ๋ณ€๊ฒฝํ•œ ํ›„ terraform validate ๋ช…๋ น์–ด๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ น์–ด๊ฐ€ ๋‹ค์Œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•  ๋•Œ๊นŒ์ง€ ์ด ๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

    Success! The configuration is valid.
    
  3. ๊ตฌ์„ฑ์—์„œ ์ •์˜๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฒ€ํ† ํ•ฉ๋‹ˆ๋‹ค.

    terraform plan
    
  4. ์•ž์—์„œ ์„ค๋ช…ํ•œ ๋Œ€๋กœ terraform.tfvars ํŒŒ์ผ์„ ๋งŒ๋“ค์ง€ ์•Š์€ ๊ฒฝ์šฐ Terraform์—์„œ ๊ธฐ๋ณธ๊ฐ’์ด ์—†๋Š” ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์ž…๋ ฅํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ํ•„์ˆ˜ ๊ฐ’์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    terraform plan ๋ช…๋ น์–ด ์ถœ๋ ฅ์€ ๊ตฌ์„ฑ์„ ์ ์šฉํ•  ๋•Œ Terraform์ด ํ”„๋กœ๋น„์ €๋‹ํ•˜๋Š” ๋ฆฌ์†Œ์Šค ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.

    ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ๊ตฌ์„ฑ์„ ์ˆ˜์ •ํ•œ ํ›„ terraform validate ๋ฐ terraform plan ๋ช…๋ น์–ด๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋ฆฌ์†Œ์Šค ํ”„๋กœ๋น„์ €๋‹

Terraform ๊ตฌ์„ฑ์„ ๋” ์ด์ƒ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉด ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.

  1. ํ˜„์žฌ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ $HOME/cloudshell_open/terraform-google-bigquery/modules/data_warehouse์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

  2. Terraform ๊ตฌ์„ฑ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

    terraform apply
    
  3. ์•ž์—์„œ ์„ค๋ช…ํ•œ ๋Œ€๋กœ terraform.tfvars ํŒŒ์ผ์„ ๋งŒ๋“ค์ง€ ์•Š์€ ๊ฒฝ์šฐ Terraform์—์„œ ๊ธฐ๋ณธ๊ฐ’์ด ์—†๋Š” ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์ž…๋ ฅํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ํ•„์ˆ˜ ๊ฐ’์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    Terraform์—์„œ ์ƒ์„ฑ๋  ๋ฆฌ์†Œ์Šค ๋ชฉ๋ก์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

  4. ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด 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"
    
  5. ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ํ‘œ์‹œ ๋ฐ ์‚ฌ์šฉํ•˜๊ณ  BigQuery์—์„œ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์ด์ „ ๋‹จ๊ณ„์—์„œ ์ถœ๋ ฅ URL์„ ๋ณต์‚ฌํ•˜๊ณ  ์ƒˆ ๋ธŒ๋ผ์šฐ์ € ํƒญ์—์„œ URL์„ ์—ฝ๋‹ˆ๋‹ค.

    ๋Œ€์‹œ๋ณด๋“œ ๋ฐ BigQuery ํŽธ์ง‘๊ธฐ๊ฐ€ ์ƒˆ ํƒญ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  6. ๋ฐฐํฌ๋œ ๋ชจ๋“  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์—์„œ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

  1. ํ˜„์žฌ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ $HOME/cloudshell_open/terraform-google-bigquery/modules/data_warehouse์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    cd $HOME/cloudshell_open/terraform-google-bigquery/modules/data_warehouse
    
  2. main.tf๋ฅผ ์—ด๊ณ  ์›ํ•˜๋Š” ํ•ญ๋ชฉ์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

    ์•ˆ์ •์„ฑ, ๋ณด์•ˆ, ์„ฑ๋Šฅ, ๋น„์šฉ, ์ž‘์—…์— ๊ด€ํ•œ ์ด๋Ÿฌํ•œ ๋งž์ถค์„ค์ • ํšจ๊ณผ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„ค๊ณ„ ๊ถŒ์žฅ์‚ฌํ•ญ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

  3. Terraform ๊ตฌ์„ฑ์„ ๊ฒ€์ฆ ๋ฐ ๊ฒ€ํ† ํ•ฉ๋‹ˆ๋‹ค.

  4. ๋ฆฌ์†Œ์Šค๋ฅผ ํ”„๋กœ๋น„์ €๋‹ํ•ฉ๋‹ˆ๋‹ค.

์„ค๊ณ„ ๊ถŒ์žฅ์‚ฌํ•ญ

์ด ์„น์…˜์—์„œ๋Š” BigQuery๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณด์•ˆ, ์•ˆ์ •์„ฑ, ๋น„์šฉ, ์„ฑ๋Šฅ์— ๋Œ€ํ•œ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ๊ถŒ์žฅ์‚ฌํ•ญ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

BigQuery๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™•์žฅ์„ ์‹œ์ž‘ํ•  ๋•Œ๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ์ฟผ๋ฆฌ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๊ณ  ์ด ์ง€์ถœ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์—๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ €์žฅ๋˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜, SQL ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜, ์Šฌ๋กฏ ์˜ˆ์•ฝ์„ ์‚ฌ์šฉํ•ด์„œ ๋น„์šฉ ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•˜๋Š” ๋ฐฉ๋ฒ• ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค ํ™•์žฅ ๋ฐ ์‹คํ–‰์— ์œ ์šฉํ•œ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ฟผ๋ฆฌ ์„ฑ๋Šฅ ์ตœ์ ํ™” ์†Œ๊ฐœ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋‹ค์Œ์— ์œ ์˜ํ•˜์„ธ์š”.

  • ์„ค๊ณ„๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์ „์— ๋น„์šฉ ์˜ํ–ฅ์„ ํ‰๊ฐ€ํ•˜๊ณ  ๋‹ค๋ฅธ ๊ธฐ๋Šฅ๊ณผ์˜ ์ž ์žฌ์  ์žฅ๋‹จ์ ์„ ๊ณ ๋ คํ•˜์„ธ์š”. Google Cloud ๊ฐ€๊ฒฉ ๊ณ„์‚ฐ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค๊ณ„ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ๋น„์šฉ ์˜ํ–ฅ์„ ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์†”๋ฃจ์…˜์˜ ์„ค๊ณ„ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด Terraform ์ฝ”๋”ฉ์— ๋Œ€ํ•œ ์ „๋ฌธ ์ง€์‹๊ณผ ์†”๋ฃจ์…˜์— ์‚ฌ์šฉ๋˜๋Š” Google Cloud ์„œ๋น„์Šค์— ๋Œ€ํ•œ ๊ณ ๊ธ‰ ์ง€์‹์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • Google ์ œ๊ณต Terraform ๊ตฌ์„ฑ์„ ์ˆ˜์ •ํ•œ ํ›„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด GitHub์—์„œ ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. GitHub ๋ฌธ์ œ๋Š” ์ตœ์„ ์„ ๋‹คํ•ด ๊ฒ€ํ† ๋˜๋ฉฐ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์งˆ๋ฌธ์„ ์œ„ํ•œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.
  • Google Cloud์—์„œ ํ”„๋กœ๋•์…˜์šฉ ํ™˜๊ฒฝ์„ ์„ค๊ณ„ํ•˜๊ณ  ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ Google Cloud์—์„œ ์‹œ์ž‘ ์˜์—ญ ์„ค๊ณ„ ๋ฐ Google Cloud ์„ค์ • ์ฒดํฌ๋ฆฌ์ŠคํŠธ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ฐฐํฌ ์‚ญ์ œ

์†”๋ฃจ์…˜ ๋ฐฐํฌ๊ฐ€ ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉด ๋งŒ๋“  ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด ์š”๊ธˆ์ด ๊ณ„์† ์ฒญ๊ตฌ๋˜์ง€ ์•Š๋„๋ก ๋ฐฐํฌ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

์ฝ˜์†”์„ ํ†ตํ•ด ์‚ญ์ œ

์ฝ˜์†”์„ ํ†ตํ•ด ์†”๋ฃจ์…˜์„ ๋ฐฐํฌํ•œ ๊ฒฝ์šฐ ๋‹ค์Œ ์ ˆ์ฐจ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

  1. Google Cloud ์ฝ˜์†”์—์„œ ์†”๋ฃจ์…˜ ๋ฐฐํฌ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    ์†”๋ฃจ์…˜ ๋ฐฐํฌ๋กœ ์ด๋™

  2. ์‚ญ์ œํ•  ๋ฐฐํฌ๊ฐ€ ํฌํ•จ๋œ ํ”„๋กœ์ ํŠธ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  3. ์‚ญ์ œํ•  ๋ฐฐํฌ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

  4. ๋ฐฐํฌ ํ–‰์—์„œ ์ž‘์—…์„ ํด๋ฆญํ•œ ํ›„ ์‚ญ์ œ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    ํ–‰์—์„œ ์ž‘์—…์„ ๋ณด๋ ค๋ฉด ์Šคํฌ๋กคํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

  5. ๋ฐฐํฌ ์ด๋ฆ„์„ ์ž…๋ ฅํ•œ ํ›„ ํ™•์ธ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    ์ƒํƒœ ํ•„๋“œ์— ์‚ญ์ œ ์ค‘์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    ์‚ญ์ œ๊ฐ€ ์‹คํŒจํ•˜๋ฉด ๋ฐฐํฌ ์‚ญ์ œ ์‹œ ์˜ค๋ฅ˜์˜ ๋ฌธ์ œ ํ•ด๊ฒฐ ์•ˆ๋‚ด๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์†”๋ฃจ์…˜์— ์‚ฌ์šฉํ•œ Google Cloud ํ”„๋กœ์ ํŠธ๊ฐ€ ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉด ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„ ํƒ์‚ฌํ•ญ: ํ”„๋กœ์ ํŠธ ์‚ญ์ œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

Terraform CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ญ์ œ

Terraform CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์†”๋ฃจ์…˜์„ ๋ฐฐํฌํ•œ ๊ฒฝ์šฐ ๋‹ค์Œ ์ ˆ์ฐจ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  1. Cloud Shell์—์„œ ํ˜„์žฌ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ $HOME/cloudshell_open/terraform-google-bigquery/modules/data_warehouse์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

  2. Terraform์—์„œ ํ”„๋กœ๋น„์ €๋‹ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

    terraform destroy
    

    Terraform์—์„œ ์†Œ๋ฉธ๋  ๋ฆฌ์†Œ์Šค ๋ชฉ๋ก์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

  3. ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด yes๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    Terraform์—์„œ ์ง„ํ–‰ ์ƒํ™ฉ์„ ๋ณด์—ฌ์ฃผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๊ฐ€ ์‚ญ์ œ๋˜๋ฉด Terraform์— ๋‹ค์Œ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    Destroy complete!
    

    ์‚ญ์ œ๊ฐ€ ์‹คํŒจํ•˜๋ฉด ๋ฐฐํฌ ์‚ญ์ œ ์‹œ ์˜ค๋ฅ˜์˜ ๋ฌธ์ œ ํ•ด๊ฒฐ ์•ˆ๋‚ด๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์†”๋ฃจ์…˜์— ์‚ฌ์šฉํ•œ Google Cloud ํ”„๋กœ์ ํŠธ๊ฐ€ ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉด ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„ ํƒ์‚ฌํ•ญ: ํ”„๋กœ์ ํŠธ ์‚ญ์ œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์„ ํƒ์‚ฌํ•ญ: ํ”„๋กœ์ ํŠธ ์‚ญ์ œ

์ƒˆ Google Cloud ํ”„๋กœ์ ํŠธ์— ์†”๋ฃจ์…˜์„ ๋ฐฐํฌํ–ˆ๊ณ  ํ”„๋กœ์ ํŠธ๊ฐ€ ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„์— ๋”ฐ๋ผ ์ด๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

  1. Google Cloud ์ฝ˜์†”์—์„œ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ๋กœ ์ด๋™

  2. ํ”„๋กœ์ ํŠธ ๋ชฉ๋ก์—์„œ ์‚ญ์ œํ•  ํ”„๋กœ์ ํŠธ๋ฅผ ์„ ํƒํ•˜๊ณ  ์‚ญ์ œ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. ํ”„๋กฌํ”„ํŠธ์—์„œ ํ”„๋กœ์ ํŠธ ID๋ฅผ ์ž…๋ ฅํ•œ ํ›„ ์ข…๋ฃŒ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ๋ฅผ ๋ณด์กดํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•œ ๊ฒฝ์šฐ์—๋Š” ๋‹ค์Œ ์„น์…˜์— ์„ค๋ช…๋œ ๋Œ€๋กœ ์ด ์†”๋ฃจ์…˜์„ ์œ„ํ•ด ๋งŒ๋“  ์„œ๋น„์Šค ๊ณ„์ •์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

์„ ํƒ์‚ฌํ•ญ: ์„œ๋น„์Šค ๊ณ„์ • ์‚ญ์ œ

์†”๋ฃจ์…˜์— ์‚ฌ์šฉํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ญ์ œํ•œ ๊ฒฝ์šฐ์—๋Š” ์ด ์„น์…˜์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

์ด ๊ฐ€์ด๋“œ์˜ ์•ž์—์„œ ์„ค๋ช…ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์†”๋ฃจ์…˜์„ ๋ฐฐํฌํ•  ๋•Œ ์„œ๋น„์Šค ๊ณ„์ •์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šค ๊ณ„์ •์— ์ผ์‹œ์ ์œผ๋กœ ํŠน์ • IAM ๊ถŒํ•œ์ด ํ• ๋‹น๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์†”๋ฃจ์…˜ ๋ฐฐํฌ ๋ฐ ์‚ญ์ œ ์ž‘์—…์ด ์™„๋ฃŒ๋œ ํ›„ ๊ถŒํ•œ์ด ์ž๋™์œผ๋กœ ์ทจ์†Œ๋˜์—ˆ์ง€๋งŒ ์„œ๋น„์Šค ๊ณ„์ •์€ ์‚ญ์ œ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ด ์„œ๋น„์Šค ๊ณ„์ •์„ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

  • Google Cloud ์ฝ˜์†”์„ ํ†ตํ•ด ์†”๋ฃจ์…˜์„ ๋ฐฐํฌํ•œ ๊ฒฝ์šฐ ์†”๋ฃจ์…˜ ๋ฐฐํฌ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ํ•ด๋‹น ํŽ˜์ด์ง€์— ์žˆ์œผ๋ฉด ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•ฉ๋‹ˆ๋‹ค. ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํŠธ๋ฆฌ๊ฑฐ๋˜์–ด ์„œ๋น„์Šค ๊ณ„์ •์ด ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์ž‘์—…์€ ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค.

  • Terraform CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์†”๋ฃจ์…˜์„ ๋ฐฐํฌํ•œ ๊ฒฝ์šฐ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

    1. Google Cloud ์ฝ˜์†”์—์„œ ์„œ๋น„์Šค ๊ณ„์ • ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

      ์„œ๋น„์Šค ๊ณ„์ •์œผ๋กœ ์ด๋™

    2. ์†”๋ฃจ์…˜์— ์‚ฌ์šฉํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    3. ์‚ญ์ œํ•˜๋ ค๋Š” ์„œ๋น„์Šค ๊ณ„์ •์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

      ์†”๋ฃจ์…˜์—์„œ ๋งŒ๋“  ์„œ๋น„์Šค ๊ณ„์ •์˜ ์ด๋ฉ”์ผ ID ํ˜•์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

      goog-sc-DEPLOYMENT_NAME-NNN@PROJECT_ID.iam.gserviceaccount.com
      

      ์ด๋ฉ”์ผ ID์—๋Š” ๋‹ค์Œ ๊ฐ’์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

      • DEPLOYMENT_NAME: ๋ฐฐํฌ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
      • NNN: ์ž„์˜์˜ 3์ž๋ฆฌ ์ˆซ์ž์ž…๋‹ˆ๋‹ค.
      • PROJECT_ID: ์†”๋ฃจ์…˜์„ ๋ฐฐํฌํ•œ ํ”„๋กœ์ ํŠธ์˜ ID์ž…๋‹ˆ๋‹ค.
    4. ์‚ญ์ œ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋ฅ˜ ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๊ธฐ

์˜ค๋ฅ˜ ์ง„๋‹จ ๋ฐ ํ•ด๊ฒฐ์„ ์œ„ํ•ด ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์€ ๋ฐฐํฌ ๋ฐฉ๋ฒ• ๋ฐ ์˜ค๋ฅ˜ ๋ณต์žก์„ฑ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

์ฝ˜์†”์„ ํ†ตํ•ด ๋ฐฐํฌ ์‹œ ์˜ค๋ฅ˜

์ฝ˜์†”์„ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐฐํฌ๊ฐ€ ์‹คํŒจํ•˜๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  1. ์†”๋ฃจ์…˜ ๋ฐฐํฌ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    ๋ฐฐํฌ๊ฐ€ ์‹คํŒจํ•˜๋ฉด ์ƒํƒœ ํ•„๋“œ์— ์‹คํŒจ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  2. ์‹คํŒจ๋ฅผ ์ผ์œผํ‚จ ์˜ค๋ฅ˜์— ๋Œ€ํ•œ ์„ธ๋ถ€์ •๋ณด๋ฅผ ๋ณด๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

    1. ๋ฐฐํฌ ํ–‰์—์„œ ์ž‘์—…์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

      ํ–‰์—์„œ ์ž‘์—…์„ ๋ณด๋ ค๋ฉด ์Šคํฌ๋กคํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

    2. Cloud Build ๋กœ๊ทธ ๋ณด๊ธฐ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  3. 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๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

  1. ๋ฐฐํฌ์˜ Terraform ์ฝ”๋“œ, ๋กœ๊ทธ ๋ฐ ๊ธฐํƒ€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ ๋ฆฌ์ „์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฆฌ์ „์€ ์†”๋ฃจ์…˜ ๋ฐฐํฌ ์ค‘ ์„ ํƒํ•œ ๋ฆฌ์ „๊ณผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    1. Google Cloud ์ฝ˜์†”์—์„œ ์†”๋ฃจ์…˜ ๋ฐฐํฌ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

      ์†”๋ฃจ์…˜ ๋ฐฐํฌ๋กœ ์ด๋™

    2. ์‚ญ์ œํ•  ๋ฐฐํฌ๊ฐ€ ํฌํ•จ๋œ ํ”„๋กœ์ ํŠธ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    3. ๋ฐฐํฌ ๋ชฉ๋ก์—์„œ ์‚ญ์ œํ•˜๋ ค๋Š” ๋ฐฐํฌ์— ๋Œ€ํ•œ ํ–‰์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.

    4. ๋ชจ๋“  ํ–‰ ์ฝ˜ํ…์ธ  ๋ณด๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    5. ์œ„์น˜ ์—ด์—์„œ ๋‹ค์Œ ์˜ˆ์‹œ์— ๊ฐ•์กฐ ํ‘œ์‹œ๋œ ๋‘ ๋ฒˆ์งธ ์œ„์น˜๋ฅผ ๊ธฐ๋กํ•ด ๋‘ก๋‹ˆ๋‹ค.

      ๋ฐฐํฌ ์ฝ”๋“œ, ๋กœ๊ทธ, ๊ธฐํƒ€ ์•„ํ‹ฐํŒฉํŠธ์˜ ์œ„์น˜

  2. In the Google Cloud console, activate Cloud Shell.

    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.

  3. ํ”„๋กœ์ ํŠธ ID, ๋ฆฌ์ „, ์‚ญ์ œํ•˜๋ ค๋Š” ๋ฐฐํฌ ์ด๋ฆ„์— ๋Œ€ํ•ด ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    export REGION="REGION"
    export PROJECT_ID="PROJECT_ID"
    export DEPLOYMENT_NAME="DEPLOYMENT_NAME"
    

    ์ด ๋ช…๋ น์–ด์—์„œ ๋‹ค์Œ ํ•ญ๋ชฉ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • REGION: ์ด ์ ˆ์ฐจ์˜ ์•ž ๋ถ€๋ถ„์—์„œ ๊ธฐ๋กํ•ด ๋‘” ์œ„์น˜
    • PROJECT_ID: ์†”๋ฃจ์…˜์„ ๋ฐฐํฌํ•œ ํ”„๋กœ์ ํŠธ์˜ ID
    • DEPLOYMENT_NAME: ์‚ญ์ œํ•˜๋ ค๋Š” ๋ฐฐํฌ์˜ ์ด๋ฆ„
  4. ์‚ญ์ œํ•˜๋ ค๋Š” ๋ฐฐํฌ์˜ ์ตœ์‹  ๋ฒ„์ „์— ๋Œ€ํ•œ 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
    
  5. ๋ฐฐํฌ์— ๋Œ€ํ•œ 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
    
  6. 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
    
  7. Terraform์„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

    terraform init
    

    ๋‹ค์Œ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.

    Terraform has been successfully initialized!
    
  8. ๋ฐฐํฌ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

    terraform destroy
    

    Terraform์—์„œ ์†Œ๋ฉธ๋  ๋ฆฌ์†Œ์Šค ๋ชฉ๋ก์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

    ์„ ์–ธ๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.

  9. ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด yes๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    Terraform์—์„œ ์ง„ํ–‰ ์ƒํ™ฉ์„ ๋ณด์—ฌ์ฃผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๊ฐ€ ์‚ญ์ œ๋˜๋ฉด Terraform์— ๋‹ค์Œ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    Destroy complete!
    
  10. ๋ฐฐํฌ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

    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"
    
  11. ๋ช‡ ์ดˆ ์ •๋„ ๊ธฐ๋‹ค๋ฆฐ ํ›„ ๋ฐฐํฌ ์•„ํ‹ฐํŒฉํŠธ๊ฐ€ ์‚ญ์ œ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

    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
    
  12. ์˜๊ฒฌ ๋ณด๋‚ด๊ธฐ

    ์ ํ”„ ์Šคํƒ€ํŠธ ์†”๋ฃจ์…˜์€ ์ •๋ณด ์ œ๊ณต๋งŒ์„ ๋ชฉ์ ์œผ๋กœ ํ•˜๋ฉฐ ๊ณต์‹์ ์œผ๋กœ ์ง€์›๋˜๋Š” ์ œํ’ˆ์€ ์•„๋‹™๋‹ˆ๋‹ค. Google์€ ์‚ฌ์ „ ํ†ต์ง€ ์—†์ด ์†”๋ฃจ์…˜์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด Cloud Build ๋กœ๊ทธ ๋ฐ Terraform ์ถœ๋ ฅ์„ ๊ฒ€ํ† ํ•ฉ๋‹ˆ๋‹ค.

    ์˜๊ฒฌ์„ ์ œ์ถœํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    • ๋ฌธ์„œ, ์ฝ˜์†” ๋‚ด ํŠœํ† ๋ฆฌ์–ผ, ์†”๋ฃจ์…˜์˜ ๊ฒฝ์šฐ ํŽ˜์ด์ง€์—์„œ ์˜๊ฒฌ ๋ณด๋‚ด๊ธฐ ๋ฒ„ํŠผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • ์ˆ˜์ •๋˜์ง€ ์•Š์€ Terraform ์ฝ”๋“œ์— ๋Œ€ํ•ด์„œ๋Š” GitHub ์ €์žฅ์†Œ์—์„œ ๋ฌธ์ œ๋ฅผ ๋งŒ๋“œ์„ธ์š”. GitHub ๋ฌธ์ œ๋Š” ์ตœ์„ ์„ ๋‹คํ•ด ๊ฒ€ํ† ๋˜๋ฉฐ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์งˆ๋ฌธ์„ ์œ„ํ•œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.
    • ์†”๋ฃจ์…˜์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ œํ’ˆ ๊ด€๋ จ ๋ฌธ์ œ๋Š” Cloud Customer Care์— ๋ฌธ์˜ํ•˜์„ธ์š”.

    ๋‹ค์Œ ๋‹จ๊ณ„