์Šฌ๋กฏ ์˜ˆ์•ฝ ์ž‘์—…

BigQuery Reservation API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ „์šฉ ์Šฌ๋กฏ(์•ฝ์ •)์„ ๊ตฌ์ž…ํ•˜๊ณ , ์Šฌ๋กฏ ํ’€(์˜ˆ์•ฝ)์„ ๋งŒ๋“ค๊ณ , ์ด๋Ÿฌํ•œ ์˜ˆ์•ฝ์— ํ”„๋กœ์ ํŠธ, ํด๋”, ์กฐ์ง์„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์•ฝ์„ ์‚ฌ์šฉํ•˜๋ฉด ์›Œํฌ๋กœ๋“œ์— ์ „์šฉ ์Šฌ๋กฏ ์ˆ˜๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ”„๋กœ๋•์…˜ ์›Œํฌ๋กœ๋“œ๊ฐ€ ํ…Œ์ŠคํŠธ ์›Œํฌ๋กœ๋“œ์™€ ์Šฌ๋กฏ์„ ๊ฒฝํ•ฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•„์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” prod๋ผ๋Š” ์˜ˆ์•ฝ์„ ๋งŒ๋“ค๊ณ  ์ด ์˜ˆ์•ฝ์— ํ”„๋กœ๋•์…˜ ์›Œํฌ๋กœ๋“œ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์˜ˆ์•ฝ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์˜ˆ์•ฝ ์ž‘์„ฑ

ํ•„์ˆ˜ ๊ถŒํ•œ

์˜ˆ์•ฝ์„ ๋งŒ๋“ค๋ ค๋ฉด Identity and Access Management(IAM) ๊ถŒํ•œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์ „ ์ •์˜๋œ ๋‹ค์Œ์˜ ๊ฐ IAM ์—ญํ• ์—๋Š” ์ด ๊ถŒํ•œ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • BigQuery Resource Editor
  • BigQuery Resource Admin

BigQuery์—์„œ IAM ์—ญํ• ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์‚ฌ์ „ ์ •์˜๋œ ์—ญํ•  ๋ฐ ๊ถŒํ•œ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ „์šฉ ์Šฌ๋กฏ์ด ์žˆ๋Š” ์˜ˆ์•ฝ ๋งŒ๋“ค๊ธฐ

๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

์ฝ˜์†”

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

    BigQuery๋กœ ์ด๋™

  2. ํƒ์ƒ‰ ๋ฉ”๋‰ด์—์„œ ์šฉ๋Ÿ‰ ๊ด€๋ฆฌ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  3. ์˜ˆ์•ฝ ์ƒ์„ฑ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  4. ์˜ˆ์•ฝ ์ด๋ฆ„ ํ•„๋“œ์— ์˜ˆ์•ฝ ์ด๋ฆ„์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

  5. ์œ„์น˜ ๋ชฉ๋ก์—์„œ ์œ„์น˜๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. BigQuery Omni ์œ„์น˜๋ฅผ ์„ ํƒํ•˜๋ฉด ๋ฒ„์ „ ์˜ต์…˜์ด Enterprise ๋ฒ„์ „์œผ๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.

  6. ๋ฒ„์ „ ๋ชฉ๋ก์—์„œ ๋ฒ„์ „์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ž๋™ ํ™•์žฅ๊ณผ ๊ฐ™์€ BigQuery ๋ฒ„์ „ ๊ธฐ๋Šฅ์€ ํ•œ ๋ฒ„์ „ ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ BigQuery ๋ฒ„์ „ ์†Œ๊ฐœ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

  7. ์ตœ๋Œ€ ์˜ˆ์•ฝ ํฌ๊ธฐ ์„ ํƒ๊ธฐ ๋ชฉ๋ก์—์„œ ์ตœ๋Œ€ ์˜ˆ์•ฝ ํฌ๊ธฐ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  8. (์„ ํƒ์‚ฌํ•ญ) ๊ธฐ์ค€ ์Šฌ๋กฏ ํ•„๋“œ์— ์˜ˆ์•ฝ์˜ ๊ธฐ์ค€ ์Šฌ๋กฏ ์ˆ˜๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ž๋™ ํ™•์žฅ ์Šฌ๋กฏ ์ˆ˜๋Š” ์ตœ๋Œ€ ์˜ˆ์•ฝ ํฌ๊ธฐ์—์„œ ๊ธฐ์ค€ ์Šฌ๋กฏ ๊ฐ’์„ ๋นผ์„œ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ธฐ์ค€ ์Šฌ๋กฏ์ด 100๊ฐœ์ด๊ณ  ์ตœ๋Œ€ ์˜ˆ์•ฝ ํฌ๊ธฐ๊ฐ€ 400๊ฐœ์ธ ์˜ˆ์•ฝ์„ ๋งŒ๋“ค๋ฉด ์˜ˆ์•ฝ์˜ ์ž๋™ ํ™•์žฅ ์Šฌ๋กฏ์€ 300๊ฐœ์ž…๋‹ˆ๋‹ค. ๊ธฐ์ค€ ์Šฌ๋กฏ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ธฐ์ค€ ๋ฐ ์ž๋™ ํ™•์žฅ ์Šฌ๋กฏ์ด ์žˆ๋Š” ์˜ˆ์•ฝ ์‚ฌ์šฉ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

  9. ์œ ํœด ์Šฌ๋กฏ ๊ณต์œ ๋ฅผ ์‚ฌ์šฉ ์ค‘์ง€ํ•˜๊ณ  ์ง€์ •๋œ ์Šฌ๋กฏ ์šฉ๋Ÿ‰๋งŒ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์œ ํœด ์Šฌ๋กฏ ๋ฌด์‹œ ์ „ํ™˜ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  10. ๊ณ ๊ธ‰ ์„ค์ • ์„น์…˜์„ ํŽผ์น˜๋ ค๋ฉด ํŽผ์น˜๊ธฐ ํ™”์‚ดํ‘œ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  11. (์„ ํƒ์‚ฌํ•ญ): ๋Œ€์ƒ ์ž‘์—… ๋™์‹œ ์‹คํ–‰์„ ์„ค์ •ํ•˜๋ ค๋ฉด ์ž๋™ ๋Œ€์ƒ ์ž‘์—… ๋™์‹œ ์‹คํ–‰ ์žฌ์ •์˜ ์ „ํ™˜ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ๋Œ€์ƒ ์ž‘์—… ๋™์‹œ ์‹คํ–‰์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

  12. ์Šฌ๋กฏ ๋ถ„์„์€ ์˜ˆ์ƒ ๋น„์šฉ ํ…Œ์ด๋ธ”์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์•ฝ ์š”์•ฝ์€ ์šฉ๋Ÿ‰ ์š”์•ฝ ํ…Œ์ด๋ธ”์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  13. ์ €์žฅ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ ์˜ˆ์•ฝ์ด ์Šฌ๋กฏ ์˜ˆ์•ฝ ํƒญ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

SQL

์˜ˆ์•ฝ์„ ๋งŒ๋“ค๋ ค๋ฉด CREATE RESERVATION DDL ๋ฌธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

    BigQuery๋กœ ์ด๋™

  2. ์ฟผ๋ฆฌ ํŽธ์ง‘๊ธฐ์—์„œ ๋‹ค์Œ ๋ฌธ์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    CREATE RESERVATION
      `ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME`
    OPTIONS (
      slot_capacity = NUMBER_OF_BASELINE_SLOTS,
      edition = EDITION,
      autoscale_max_slots = NUMBER_OF_AUTOSCALING_SLOTS);

    ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • ADMIN_PROJECT_ID: ์˜ˆ์•ฝ ๋ฆฌ์†Œ์Šค๋ฅผ ์†Œ์œ ํ•˜๋Š” ๊ด€๋ฆฌ ํ”„๋กœ์ ํŠธ์˜ ํ”„๋กœ์ ํŠธ ID
    • LOCATION: ์˜ˆ์•ฝ ์œ„์น˜. BigQuery Omni ์œ„์น˜๋ฅผ ์„ ํƒํ•˜๋ฉด ๋ฒ„์ „ ์˜ต์…˜์ด Enterprise ๋ฒ„์ „์œผ๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.
    • RESERVATION_NAME: ์˜ˆ์•ฝ ์ด๋ฆ„

      ์ด๋ฆ„์—๋Š” ์†Œ๋ฌธ์ž ์˜์ˆซ์ž ๋ฌธ์ž ๋˜๋Š” ๋Œ€์‹œ๋งŒ ํฌํ•จํ•  ์ˆ˜ ์žˆ๊ณ , ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋ฉฐ ๋Œ€์‹œ๋กœ ๋๋‚˜์„œ๋Š” ์•ˆ ๋˜๊ณ , ์ตœ๋Œ€ ๊ธธ์ด๋Š” 64์ž์ž…๋‹ˆ๋‹ค.

    • NUMBER_OF_BASELINE_SLOTS: ์˜ˆ์•ฝ์— ํ• ๋‹นํ•  ๊ธฐ์ค€ ์Šฌ๋กฏ ์ˆ˜. ๋™์ผํ•œ ์˜ˆ์•ฝ์— slot_capacity ์˜ต์…˜ ๋ฐ edition ์˜ต์…˜์„ ์„ค์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
    • EDITION: ์˜ˆ์•ฝ ๋ฒ„์ „. ๋ฒ„์ „์— ์˜ˆ์•ฝ์„ ํ• ๋‹นํ•˜๋ฉด ๊ธฐ๋Šฅ ๋ฐ ๊ฐ€๊ฒฉ์ด ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ BigQuery ๋ฒ„์ „ ์†Œ๊ฐœ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
    • NUMBER_OF_AUTOSCALING_SLOTS: ์˜ˆ์•ฝ์— ํ• ๋‹น๋œ ์ž๋™ ํ™•์žฅ ์Šฌ๋กฏ ์ˆ˜. ์ตœ๋Œ€ ์˜ˆ์•ฝ ํฌ๊ธฐ ๊ฐ’์—์„œ ๊ธฐ์ค€ ์Šฌ๋กฏ ์ˆ˜๋ฅผ ๋บ€ ๊ฐ’๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

  3. ์‹คํ–‰์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋Œ€ํ™”ํ˜• ์ฟผ๋ฆฌ ์‹คํ–‰์„ ์ฐธ์กฐํ•˜์„ธ์š”.

bq

์˜ˆ์•ฝ์„ ๋งŒ๋“ค๋ ค๋ฉด bq mk ๋ช…๋ น์–ด๋ฅผ --reservation ํ”Œ๋ž˜๊ทธ์™€ ํ•จ๊ป˜ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

bq mk \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --reservation \
    --slots=NUMBER_OF_BASELINE_SLOTS \
    --ignore_idle_slots=false \
    --edition=EDITION \
    --autoscale_max_slots=NUMBER_OF_AUTOSCALING_SLOTS \
    --max_slots=MAXIMUM_NUMBER_OF_SLOTS
    --scaling_mode=SCALING_MODE
    RESERVATION_NAME

๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • ADMIN_PROJECT_ID: ํ”„๋กœ์ ํŠธ ID
  • LOCATION: ์˜ˆ์•ฝ ์œ„์น˜ BigQuery Omni ์œ„์น˜๋ฅผ ์„ ํƒํ•˜๋ฉด ๋ฒ„์ „ ์˜ต์…˜์ด Enterprise ๋ฒ„์ „์œผ๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.
  • NUMBER_OF_BASELINE_SLOTS: ์˜ˆ์•ฝ์— ํ• ๋‹นํ•  ๊ธฐ์ค€ ์Šฌ๋กฏ ์ˆ˜

  • RESERVATION_NAME: ์˜ˆ์•ฝ ์ด๋ฆ„. ์ด๋ฆ„์—๋Š” ์†Œ๋ฌธ์ž ์˜์ˆซ์ž ๋ฌธ์ž ๋˜๋Š” ๋Œ€์‹œ๋งŒ ํฌํ•จํ•  ์ˆ˜ ์žˆ๊ณ , ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋ฉฐ ๋Œ€์‹œ๋กœ ๋๋‚˜์„œ๋Š” ์•ˆ ๋˜๊ณ , ์ตœ๋Œ€ ๊ธธ์ด๋Š” 64์ž์ž…๋‹ˆ๋‹ค.

  • EDITION: ์˜ˆ์•ฝ ๋ฒ„์ „. ๋ฒ„์ „์— ์˜ˆ์•ฝ์„ ํ• ๋‹นํ•˜๋ฉด ๊ธฐ๋Šฅ ๋ฐ ๊ฐ€๊ฒฉ์ด ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ BigQuery ๋ฒ„์ „ ์†Œ๊ฐœ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

  • NUMBER_OF_AUTOSCALING_SLOTS: ์˜ˆ์•ฝ์— ํ• ๋‹น๋œ ์ž๋™ ํ™•์žฅ ์Šฌ๋กฏ ์ˆ˜. ์ตœ๋Œ€ ์˜ˆ์•ฝ ํฌ๊ธฐ ๊ฐ’์—์„œ ๊ธฐ์ค€ ์Šฌ๋กฏ ์ˆ˜๋ฅผ ๋บ€ ๊ฐ’๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. --max_slots ๋˜๋Š” --scaling_mode ํ”Œ๋ž˜๊ทธ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • MAXIMUM_NUMBER_OF_SLOTS: ์˜ˆ์•ฝ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์Šฌ๋กฏ ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ --scaling_mode ํ”Œ๋ž˜๊ทธ(ํ”„๋ฆฌ๋ทฐ)๋กœ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • SCALING_MODE: ์˜ˆ์•ฝ์˜ ํ™•์žฅ ๋ชจ๋“œ์ž…๋‹ˆ๋‹ค. ์˜ต์…˜์€ ALL_SLOTS, IDLE_SLOTS_ONLY ๋˜๋Š” AUTOSCALE_ONLY์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ --scaling_mode ํ”Œ๋ž˜๊ทธ(ํ”„๋ฆฌ๋ทฐ)๋กœ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

--ignore_idle_slots ํ”Œ๋ž˜๊ทธ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์œ ํœด ์Šฌ๋กฏ์„ ์ฐธ์กฐํ•˜์„ธ์š”. ๊ธฐ๋ณธ๊ฐ’์€ false์ž…๋‹ˆ๋‹ค.

Terraform

google_bigquery_reservation ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

๋‹ค์Œ ์˜ˆ์‹œ์—์„œ๋Š” my-reservation์ด๋ผ๋Š” ์˜ˆ์•ฝ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

resource "google_bigquery_reservation" "default" {
  name              = "my-reservation"
  location          = "us-central1"
  slot_capacity     = 100
  edition           = "ENTERPRISE"
  ignore_idle_slots = false # Use idle slots from other reservations
  concurrency       = 0     # Automatically adjust query concurrency based on available resources
  autoscale {
    max_slots = 200 # Allow the reservation to scale up to 300 slots (slot_capacity + max_slots) if needed
  }
}

ํ”„๋กœ์ ํŠธ์— Terraform ๊ตฌ์„ฑ์„ ์ ์šฉํ•˜๋ ค๋ฉด Google Cloud ๋‹ค์Œ ์„น์…˜์˜ ๋‹จ๊ณ„๋ฅผ ์™„๋ฃŒํ•˜์„ธ์š”.

Cloud Shell ์ค€๋น„

  1. Cloud Shell์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  2. Terraform ๊ตฌ์„ฑ์„ ์ ์šฉํ•  ๊ธฐ๋ณธ Google Cloud ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    ์ด ๋ช…๋ น์–ด๋Š” ํ”„๋กœ์ ํŠธ๋‹น ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰ํ•˜๋ฉด ๋˜๋ฉฐ ์–ด๋–ค ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ๋„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Terraform ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ ๋ช…์‹œ์  ๊ฐ’์„ ์„ค์ •ํ•˜๋ฉด ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์žฌ์ •์˜๋ฉ๋‹ˆ๋‹ค.

๋””๋ ‰ํ„ฐ๋ฆฌ ์ค€๋น„

๊ฐ Terraform ๊ตฌ์„ฑ ํŒŒ์ผ์—๋Š” ์ž์ฒด ๋””๋ ‰ํ„ฐ๋ฆฌ(๋ฃจํŠธ ๋ชจ๋“ˆ์ด๋ผ๊ณ ๋„ ํ•จ)๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. Cloud Shell์—์„œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  ํ•ด๋‹น ๋””๋ ‰ํ„ฐ๋ฆฌ ๋‚ด์— ์ƒˆ ํŒŒ์ผ์„ ๋งŒ๋“œ์„ธ์š”. ํŒŒ์ผ ์ด๋ฆ„์—๋Š” .tf ํ™•์žฅ์ž๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: main.tf). ์ด ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š” ํŒŒ์ผ์„ main.tf๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. ํŠœํ† ๋ฆฌ์–ผ์„ ๋”ฐ๋ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐ ์„น์…˜์ด๋‚˜ ๋‹จ๊ณ„์—์„œ ์ƒ˜ํ”Œ ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์ƒ˜ํ”Œ ์ฝ”๋“œ๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“  main.tf์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

    ํ•„์š”ํ•œ ๊ฒฝ์šฐ GitHub์—์„œ ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” Terraform ์Šค๋‹ˆํŽซ์ด ์—”๋“œ ํˆฌ ์—”๋“œ ์†”๋ฃจ์…˜์˜ ์ผ๋ถ€์ธ ๊ฒฝ์šฐ์— ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค.

  3. ํ™˜๊ฒฝ์— ์ ์šฉํ•  ์ƒ˜ํ”Œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฒ€ํ† ํ•˜๊ณ  ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  5. Terraform์„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ ๋””๋ ‰ํ„ฐ๋ฆฌ๋‹น ํ•œ ๋ฒˆ๋งŒ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
    terraform init

    ์›ํ•˜๋Š” ๊ฒฝ์šฐ ์ตœ์‹  Google ๊ณต๊ธ‰์—…์ฒด ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด -upgrade ์˜ต์…˜์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

    terraform init -upgrade

๋ณ€๊ฒฝ์‚ฌํ•ญ ์ ์šฉ

  1. ๊ตฌ์„ฑ์„ ๊ฒ€ํ† ํ•˜๊ณ  Terraform์—์„œ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ•  ๋ฆฌ์†Œ์Šค๊ฐ€ ์˜ˆ์ƒ๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    terraform plan

    ํ•„์š”์— ๋”ฐ๋ผ ๊ตฌ์„ฑ์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

  2. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํ”„๋กฌํ”„ํŠธ์— yes๋ฅผ ์ž…๋ ฅํ•˜์—ฌ Terraform ๊ตฌ์„ฑ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
    terraform apply

    Terraform์— '์ ์šฉ ์™„๋ฃŒ' ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.

  3. ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ ค๋ฉด Google Cloud ํ”„๋กœ์ ํŠธ๋ฅผ ์—ฝ๋‹ˆ๋‹ค. Google Cloud ์ฝ˜์†”์—์„œ UI์˜ ๋ฆฌ์†Œ์Šค๋กœ ์ด๋™ํ•˜์—ฌ Terraform์ด ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŒ๋“ค์—ˆ๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ–ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

Python

์ด ์ฝ”๋“œ ์ƒ˜ํ”Œ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— google-cloud-bigquery-reservation ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ReservationServiceClient๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์•ฝ์„ ์‚ฌ์šฉํ•ด์„œ ๋งŒ๋“ค๋ ค๋Š” ์˜ˆ์•ฝ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. create_reservation ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜ˆ์•ฝ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
# TODO(developer): Set project_id to the project ID containing the
# reservation.
project_id = "your-project-id"

# TODO(developer): Set location to the location of the reservation.
# See: https://cloud.google.com/bigquery/docs/locations for a list of
# available locations.
location = "US"

# TODO(developer): Set reservation_id to a unique ID of the reservation.
reservation_id = "sample-reservation"

# TODO(developer): Set slot_capicity to the number of slots in the
# reservation.
slot_capacity = 100

# TODO(developer): Choose a transport to use. Either 'grpc' or 'rest'
transport = "grpc"

# ...

from google.cloud.bigquery_reservation_v1.services import reservation_service
from google.cloud.bigquery_reservation_v1.types import (
    reservation as reservation_types,
)

reservation_client = reservation_service.ReservationServiceClient(
    transport=transport
)

parent = reservation_client.common_location_path(project_id, location)

reservation = reservation_types.Reservation(slot_capacity=slot_capacity)
reservation = reservation_client.create_reservation(
    parent=parent,
    reservation=reservation,
    reservation_id=reservation_id,
)

print(f"Created reservation: {reservation.name}")

์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์˜ˆ์•ฝ ๋งŒ๋“ค๊ธฐ

์ตœ๋Œ€ ์Šฌ๋กฏ ์ˆ˜๋กœ ์˜ˆ์•ฝ์„ ๋งŒ๋“ค๊ธฐ ์ „์— ๋จผ์ € ์˜ˆ์•ฝ ๊ธฐ๋ฐ˜ ๊ณต์ •์„ฑ์„ ์‚ฌ์šฉ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์•ฝ ๊ธฐ๋ฐ˜ ๊ณต์ •์„ฑ ์‚ฌ์šฉ ์„ค์ •

์˜ˆ์•ฝ ๊ธฐ๋ฐ˜ ๊ณต์ •์„ฑ์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ ค๋ฉด enable_reservation_based_fairness ํ”Œ๋ž˜๊ทธ๋ฅผ true๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ์˜ ์˜ˆ์•ฝ ๊ธฐ๋ฐ˜ ๊ณต์ •์„ฑ์„ ์—…๋ฐ์ดํŠธํ•˜๋ ค๋ฉด ์˜ˆ์•ฝ ์†Œ์œ ๊ถŒ์„ ์œ ์ง€ํ•˜๋Š” ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ bigquery.config.update ๊ถŒํ•œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์ „ ์ •์˜๋œ BigQuery Admin ์—ญํ• ์— ์ด ๊ถŒํ•œ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ๋ณธ ๊ตฌ์„ฑ์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ตฌ์„ฑ ์„ค์ • ๊ด€๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

ALTER PROJECT `PROJECT_NAME` SET OPTIONS (
    `region-LOCATION.enable_reservation_based_fairness`= true);

๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์˜ˆ์•ฝ ๋งŒ๋“ค๊ธฐ

์ตœ๋Œ€ ์Šฌ๋กฏ ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์˜ˆ์•ฝ์„ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

์ฝ˜์†”

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

    BigQuery๋กœ ์ด๋™

  2. ํƒ์ƒ‰ ํŒจ๋„์—์„œ ์šฉ๋Ÿ‰ ๊ด€๋ฆฌ ์„น์…˜์œผ๋กœ ์ด๋™ํ•˜๊ณ  ์˜ˆ์•ฝ ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  3. ์˜ˆ์•ฝ ์ด๋ฆ„ ํ•„๋“œ์— ์˜ˆ์•ฝ ์ด๋ฆ„์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

  4. ์œ„์น˜ ๋ชฉ๋ก์—์„œ ์œ„์น˜๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. BigQuery Omni ์œ„์น˜๋ฅผ ์„ ํƒํ•˜๋ฉด ๋ฒ„์ „ ์˜ต์…˜์ด Enterprise ๋ฒ„์ „์œผ๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.

  5. ๋ฒ„์ „ ๋ชฉ๋ก์—์„œ ๋ฒ„์ „์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ž๋™ ํ™•์žฅ์€ ํ•œ ๋ฒ„์ „ ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ BigQuery ๋ฒ„์ „ ์ดํ•ด๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

  6. ์ตœ๋Œ€ ์˜ˆ์•ฝ ํฌ๊ธฐ ์„ ํƒ๊ธฐ ๋ชฉ๋ก์—์„œ ์ตœ๋Œ€ ์˜ˆ์•ฝ ํฌ๊ธฐ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  7. (์„ ํƒ์‚ฌํ•ญ) ๊ธฐ์ค€ ์Šฌ๋กฏ ํ•„๋“œ์— ์˜ˆ์•ฝ์˜ ๊ธฐ์ค€ ์Šฌ๋กฏ ์ˆ˜๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ž๋™ ํ™•์žฅ ์Šฌ๋กฏ ์ˆ˜๋Š” ์ตœ๋Œ€ ์˜ˆ์•ฝ ํฌ๊ธฐ์—์„œ ๊ธฐ์ค€ ์Šฌ๋กฏ ๊ฐ’์„ ๋นผ์„œ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ธฐ์ค€ ์Šฌ๋กฏ์ด 100๊ฐœ์ด๊ณ  ์ตœ๋Œ€ ์˜ˆ์•ฝ ํฌ๊ธฐ๊ฐ€ 400๊ฐœ์ธ ์˜ˆ์•ฝ์„ ๋งŒ๋“ค๋ฉด ์˜ˆ์•ฝ์˜ ์ž๋™ ํ™•์žฅ ์Šฌ๋กฏ์€ 300๊ฐœ์ž…๋‹ˆ๋‹ค. ๊ธฐ์ค€ ์Šฌ๋กฏ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ธฐ์ค€ ๋ฐ ์ž๋™ ํ™•์žฅ ์Šฌ๋กฏ์ด ์žˆ๋Š” ์˜ˆ์•ฝ ์‚ฌ์šฉ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

  8. ์œ ํœด ์Šฌ๋กฏ ๊ณต์œ ๋ฅผ ์‚ฌ์šฉ ์ค‘์ง€ํ•˜๊ณ  ์ง€์ •๋œ ์Šฌ๋กฏ ์šฉ๋Ÿ‰๋งŒ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์œ ํœด ์Šฌ๋กฏ ๋ฌด์‹œ ์ „ํ™˜ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  9. ๊ณ ๊ธ‰ ์„ค์ • ์„น์…˜์„ ํŽผ์น˜๋ ค๋ฉด ํŽผ์น˜๊ธฐ ํ™”์‚ดํ‘œ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    1. ์œ ํœด ์Šฌ๋กฏ์„ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์–ด์š”? ๋ชฉ๋ก์—์„œ ๊ตฌ์„ฑ ์˜ต์…˜์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  10. ์Šฌ๋กฏ ๋ถ„์„์€ ์˜ˆ์ƒ ๋น„์šฉ ํ…Œ์ด๋ธ”์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์•ฝ ์š”์•ฝ์€ ์šฉ๋Ÿ‰ ์š”์•ฝ ํ…Œ์ด๋ธ”์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  11. ์ €์žฅ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ ์˜ˆ์•ฝ์ด ์Šฌ๋กฏ ์˜ˆ์•ฝ ํƒญ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

bq

์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์˜ˆ์•ฝ์„ ๋งŒ๋“ค๋ ค๋ฉด bq mk ๋ช…๋ น์–ด๋ฅผ --reservation ํ”Œ๋ž˜๊ทธ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ณ  max_slots ๋ฐ scaling_mode ๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

bq mk \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --reservation \
    --slots=NUMBER_OF_BASELINE_SLOTS \
    --ignore_idle_slots=false \
    --edition=EDITION \
    --max_slots=MAXIMUM_NUMBER_OF_SLOTS \
    --scaling_mode=SCALING_MODE
    RESERVATION_NAME

๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • ADMIN_PROJECT_ID: ํ”„๋กœ์ ํŠธ ID
  • LOCATION: ์˜ˆ์•ฝ ์œ„์น˜ BigQuery Omni ์œ„์น˜๋ฅผ ์„ ํƒํ•˜๋ฉด ๋ฒ„์ „ ์˜ต์…˜์ด Enterprise ๋ฒ„์ „์œผ๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.
  • NUMBER_OF_BASELINE_SLOTS: ์˜ˆ์•ฝ์— ํ• ๋‹นํ•  ๊ธฐ์ค€ ์Šฌ๋กฏ ์ˆ˜์ž…๋‹ˆ๋‹ค.

  • RESERVATION_NAME: ์˜ˆ์•ฝ ์ด๋ฆ„

  • EDITION: ์˜ˆ์•ฝ ๋ฒ„์ „. ๋ฒ„์ „์— ์˜ˆ์•ฝ์„ ํ• ๋‹นํ•˜๋ฉด ๊ธฐ๋Šฅ ๋ฐ ๊ฐ€๊ฒฉ์ด ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ BigQuery ๋ฒ„์ „ ์†Œ๊ฐœ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

  • MAXIMUM_NUMBER_OF_SLOTS: ์˜ˆ์•ฝ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์Šฌ๋กฏ ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ --scaling_mode ํ”Œ๋ž˜๊ทธ(ํ”„๋ฆฌ๋ทฐ)๋กœ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • SCALING_MODE: ์˜ˆ์•ฝ์˜ ํ™•์žฅ ๋ชจ๋“œ์ž…๋‹ˆ๋‹ค. ์˜ต์…˜์€ ALL_SLOTS, IDLE_SLOTS_ONLY ๋˜๋Š” AUTOSCALE_ONLY์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ --scaling_mode ํ”Œ๋ž˜๊ทธ(ํ”„๋ฆฌ๋ทฐ)๋กœ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

--ignore_idle_slots ํ”Œ๋ž˜๊ทธ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์œ ํœด ์Šฌ๋กฏ์„ ์ฐธ์กฐํ•˜์„ธ์š”. ๊ธฐ๋ณธ๊ฐ’์€ false์ž…๋‹ˆ๋‹ค.

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

์˜ˆ์•ฝ ์—…๋ฐ์ดํŠธ

์˜ˆ์•ฝ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์˜ˆ์•ฝ ๋ฒ„์ „์„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ๋จผ์ € ์˜ˆ์•ฝ์„ ์‚ญ์ œํ•œ ํ›„ ์—…๋ฐ์ดํŠธ๋œ ๋ฒ„์ „์œผ๋กœ ์˜ˆ์•ฝ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

ํ•„์ˆ˜ ๊ถŒํ•œ

์˜ˆ์•ฝ์„ ์—…๋ฐ์ดํŠธํ•˜๋ ค๋ฉด ๋‹ค์Œ Identity and Access Management(IAM) ๊ถŒํ•œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์ „ ์ •์˜๋œ ๋‹ค์Œ์˜ ๊ฐ IAM ์—ญํ• ์—๋Š” ์ด ๊ถŒํ•œ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • BigQuery Admin
  • BigQuery Resource Admin
  • BigQuery Resource Editor

BigQuery์—์„œ IAM ์—ญํ• ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์‚ฌ์ „ ์ •์˜๋œ ์—ญํ•  ๋ฐ ๊ถŒํ•œ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์˜ˆ์•ฝ ํฌ๊ธฐ ๋ณ€๊ฒฝ

๊ธฐ์กด ์˜ˆ์•ฝ์—์„œ ์Šฌ๋กฏ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ˜์†”

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

    BigQuery๋กœ ์ด๋™

  2. ํƒ์ƒ‰ ๋ฉ”๋‰ด์—์„œ ์šฉ๋Ÿ‰ ๊ด€๋ฆฌ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  3. ์Šฌ๋กฏ ์˜ˆ์•ฝ ํƒญ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  4. ์—…๋ฐ์ดํŠธํ•  ์˜ˆ์•ฝ์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

  5. ์ž‘์—… ์˜ต์…˜์„ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค.

  6. ์ˆ˜์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  7. ์ตœ๋Œ€ ์˜ˆ์•ฝ ํฌ๊ธฐ ์„ ํƒ๊ธฐ ๋Œ€ํ™”์ƒ์ž์— ์ตœ๋Œ€ ์˜ˆ์•ฝ ํฌ๊ธฐ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

  8. ๊ธฐ์ค€ ์Šฌ๋กฏ ํ•„๋“œ์— ๊ธฐ์ค€ ์Šฌ๋กฏ ์ˆ˜๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

  9. ๊ณ ๊ธ‰ ์„ค์ • ์„น์…˜์„ ํŽผ์น˜๋ ค๋ฉด ํŽผ์น˜๊ธฐ ํ™”์‚ดํ‘œ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  10. (์„ ํƒ์‚ฌํ•ญ): ๋Œ€์ƒ ์ž‘์—… ๋™์‹œ ์‹คํ–‰์„ ์„ค์ •ํ•˜๋ ค๋ฉด ์ž๋™ ๋Œ€์ƒ ์ž‘์—… ๋™์‹œ ์‹คํ–‰ ์žฌ์ •์˜ ์ „ํ™˜ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ๋Œ€์ƒ ์ž‘์—… ๋™์‹œ ์‹คํ–‰์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

  11. ์ €์žฅ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

SQL

์˜ˆ์•ฝ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ALTER RESERVATION SET OPTIONS ๋ฐ์ดํ„ฐ ์ •์˜ ์–ธ์–ด(DDL) ๋ฌธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

    BigQuery๋กœ ์ด๋™

  2. ์ฟผ๋ฆฌ ํŽธ์ง‘๊ธฐ์—์„œ ๋‹ค์Œ ๋ฌธ์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    ALTER RESERVATION
      `ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME`
    SET OPTIONS (
      slot_capacity = NUMBER_OF_BASELINE_SLOTS,
      autoscale_max_slots = NUMBER_OF_AUTOSCALING_SLOTS);

    ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • ADMIN_PROJECT_ID: ์˜ˆ์•ฝ ๋ฆฌ์†Œ์Šค๋ฅผ ์†Œ์œ ํ•˜๋Š” ๊ด€๋ฆฌ ํ”„๋กœ์ ํŠธ์˜ ํ”„๋กœ์ ํŠธ ID
    • LOCATION: ์˜ˆ์•ฝ ์œ„์น˜(์˜ˆ: europe-west9)
    • RESERVATION_NAME: ์˜ˆ์•ฝ ์ด๋ฆ„. ์ด๋ฆ„์—๋Š” ์†Œ๋ฌธ์ž ์˜์ˆซ์ž ๋ฌธ์ž ๋˜๋Š” ๋Œ€์‹œ๋งŒ ํฌํ•จํ•  ์ˆ˜ ์žˆ๊ณ , ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋ฉฐ ๋Œ€์‹œ๋กœ ๋๋‚˜์„œ๋Š” ์•ˆ ๋˜๊ณ , ์ตœ๋Œ€ ๊ธธ์ด๋Š” 64์ž์ž…๋‹ˆ๋‹ค.

    • NUMBER_OF_BASELINE_SLOTS: ์˜ˆ์•ฝ์— ํ• ๋‹นํ•  ๊ธฐ์ค€ ์Šฌ๋กฏ ์ˆ˜.
    • NUMBER_OF_AUTOSCALING_SLOTS: ์˜ˆ์•ฝ์— ํ• ๋‹น๋œ ์ž๋™ ํ™•์žฅ ์Šฌ๋กฏ ์ˆ˜. ์ตœ๋Œ€ ์˜ˆ์•ฝ ํฌ๊ธฐ ๊ฐ’์—์„œ ๊ธฐ์ค€ ์Šฌ๋กฏ ์ˆ˜๋ฅผ ๋บ€ ๊ฐ’๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

  3. ์‹คํ–‰์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋Œ€ํ™”ํ˜• ์ฟผ๋ฆฌ ์‹คํ–‰์„ ์ฐธ์กฐํ•˜์„ธ์š”.

bq

์˜ˆ์•ฝ ํฌ๊ธฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ ค๋ฉด bq update ๋ช…๋ น์–ด๋ฅผ --reservation ํ”Œ๋ž˜๊ทธ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

bq update \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --slots=NUMBER_OF_BASELINE_SLOTS \
    --autoscale_max_slots=NUMBER_OF_AUTOSCALING_SLOTS \
    --reservation RESERVATION_NAME

๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • ADMIN_PROJECT_ID: ํ”„๋กœ์ ํŠธ ID
  • LOCATION: ์˜ˆ์•ฝ ์œ„์น˜
  • NUMBER_OF_BASELINE_SLOTS: ์˜ˆ์•ฝ์— ํ• ๋‹นํ•  ๊ธฐ์ค€ ์Šฌ๋กฏ ์ˆ˜
  • RESERVATION_NAME: ์˜ˆ์•ฝ ์ด๋ฆ„. ์ด๋ฆ„์—๋Š” ์†Œ๋ฌธ์ž ์˜์ˆซ์ž ๋ฌธ์ž ๋˜๋Š” ๋Œ€์‹œ๋งŒ ํฌํ•จํ•  ์ˆ˜ ์žˆ๊ณ , ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋ฉฐ ๋Œ€์‹œ๋กœ ๋๋‚˜์„œ๋Š” ์•ˆ ๋˜๊ณ , ์ตœ๋Œ€ ๊ธธ์ด๋Š” 64์ž์ž…๋‹ˆ๋‹ค.
  • NUMBER_OF_AUTOSCALING_SLOTS: ์˜ˆ์•ฝ์— ํ• ๋‹น๋œ ์ž๋™ ํ™•์žฅ ์Šฌ๋กฏ ์ˆ˜. ์ตœ๋Œ€ ์˜ˆ์•ฝ ํฌ๊ธฐ ๊ฐ’์—์„œ ๊ธฐ์ค€ ์Šฌ๋กฏ ์ˆ˜๋ฅผ ๋บ€ ๊ฐ’๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

Python

์ด ์ฝ”๋“œ ์ƒ˜ํ”Œ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— google-cloud-bigquery-reservation ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ReservationServiceClient๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. Reservation ๋ฐ FieldMask.paths ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—…๋ฐ์ดํŠธ๋œ ์†์„ฑ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. update_reservation ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜ˆ์•ฝ์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
# TODO(developer): Set project_id to the project ID containing the
# reservation.
project_id = "your-project-id"

# TODO(developer): Set location to the location of the reservation.
# See: https://cloud.google.com/bigquery/docs/locations for a list of
# available locations.
location = "US"

# TODO(developer): Set reservation_id to a unique ID of the reservation.
reservation_id = "sample-reservation"

# TODO(developer): Set slot_capicity to the new number of slots in the
# reservation.
slot_capacity = 50

# TODO(developer): Choose a transport to use. Either 'grpc' or 'rest'
transport = "grpc"

# ...

from google.cloud.bigquery_reservation_v1.services import reservation_service
from google.cloud.bigquery_reservation_v1.types import (
    reservation as reservation_types,
)
from google.protobuf import field_mask_pb2

reservation_client = reservation_service.ReservationServiceClient(
    transport=transport
)

reservation_name = reservation_client.reservation_path(
    project_id, location, reservation_id
)
reservation = reservation_types.Reservation(
    name=reservation_name,
    slot_capacity=slot_capacity,
)
field_mask = field_mask_pb2.FieldMask(paths=["slot_capacity"])
reservation = reservation_client.update_reservation(
    reservation=reservation, update_mask=field_mask
)

print(f"Updated reservation: {reservation.name}")
print(f"\tslot_capacity: {reservation.slot_capacity}")

์ฟผ๋ฆฌ์—์„œ ์œ ํœด ์Šฌ๋กฏ์„ ์‚ฌ์šฉํ• ์ง€ ๊ตฌ์„ฑ

--ignore_idle_slots ํ”Œ๋ž˜๊ทธ๋Š” ์˜ˆ์•ฝ์—์„œ ์‹คํ–‰ ์ค‘์ธ ์ฟผ๋ฆฌ๊ฐ€ ๋‹ค๋ฅธ ์˜ˆ์•ฝ์˜ ์œ ํœด ์Šฌ๋กฏ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์œ ํœด ์Šฌ๋กฏ์„ ์ฐธ์กฐํ•˜์„ธ์š”. ๊ธฐ์กด ์˜ˆ์•ฝ์—์„œ ์ด ๊ตฌ์„ฑ์„ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์•ฝ์„ ์—…๋ฐ์ดํŠธํ•˜๋ ค๋ฉด bq update ๋ช…๋ น์–ด๋ฅผ --reservation ํ”Œ๋ž˜๊ทธ์™€ ํ•จ๊ป˜ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์˜ˆ์‹œ์—์„œ๋Š” --ignore_idle_slots๋ฅผ true๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์˜ˆ์•ฝ์ด ์˜ˆ์•ฝ์— ํ• ๋‹น๋œ ์Šฌ๋กฏ๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

bq update \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --ignore_idle_slots=true \
    --reservation RESERVATION_NAME

๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • ADMIN_PROJECT_ID: ํ”„๋กœ์ ํŠธ ID
  • LOCATION: ์˜ˆ์•ฝ ์œ„์น˜
  • RESERVATION_NAME: ์˜ˆ์•ฝ ์ด๋ฆ„. ์ด๋ฆ„์—๋Š” ์†Œ๋ฌธ์ž ์˜์ˆซ์ž ๋ฌธ์ž ๋˜๋Š” ๋Œ€์‹œ๋งŒ ํฌํ•จํ•  ์ˆ˜ ์žˆ๊ณ , ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋ฉฐ ๋Œ€์‹œ๋กœ ๋๋‚˜์„œ๋Š” ์•ˆ ๋˜๊ณ , ์ตœ๋Œ€ ๊ธธ์ด๋Š” 64์ž์ž…๋‹ˆ๋‹ค.

์œ ํœด ์Šฌ๋กฏ ๊ตฌ์„ฑ ๋‚˜์—ด

์˜ˆ์•ฝ์˜ ์œ ํœด ์Šฌ๋กฏ ์„ค์ •์„ ๋‚˜์—ดํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

SQL

INFORMATION_SCHEMA.RESERVATIONS_BY_PROJECT ๋ทฐ์˜ ignore_idle_slots ์—ด์„ ์ฟผ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

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

    BigQuery๋กœ ์ด๋™

  2. ์ฟผ๋ฆฌ ํŽธ์ง‘๊ธฐ์—์„œ ๋‹ค์Œ ๋ฌธ์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    SELECT
      reservation_name,
      ignore_idle_slots
    FROM
      `ADMIN_PROJECT_ID.region-LOCATION`.INFORMATION_SCHEMA.RESERVATIONS_BY_PROJECT;

    ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  3. ์‹คํ–‰์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋Œ€ํ™”ํ˜• ์ฟผ๋ฆฌ ์‹คํ–‰์„ ์ฐธ์กฐํ•˜์„ธ์š”.

bq

bq ls ๋ช…๋ น์–ด๋ฅผ --reservation ํ”Œ๋ž˜๊ทธ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

bq ls --reservation \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION

๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

ignoreIdleSlots ํ•„๋“œ์—๋Š” ๊ตฌ์„ฑ ์„ค์ •์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์•ฝ ์‚ญ์ œ

์˜ˆ์•ฝ์„ ์‚ญ์ œํ•˜๋ฉด ํ˜„์žฌ ํ•ด๋‹น ์˜ˆ์•ฝ์˜ ์Šฌ๋กฏ์—์„œ ์‹คํ–‰ ์ค‘์ธ ๋ชจ๋“  ์ž‘์—…์ด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ์˜ˆ์•ฝ์„ ์‚ญ์ œํ•˜๊ธฐ ์ „์— ์‹คํ–‰ ์ค‘์ธ ์ž‘์—…์ด ์™„๋ฃŒ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

ํ•„์ˆ˜ ๊ถŒํ•œ

์˜ˆ์•ฝ์„ ์‚ญ์ œํ•˜๋ ค๋ฉด ๋‹ค์Œ Identity and Access Management(IAM) ๊ถŒํ•œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์ „ ์ •์˜๋œ ๋‹ค์Œ์˜ ๊ฐ IAM ์—ญํ• ์—๋Š” ์ด ๊ถŒํ•œ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • BigQuery Admin
  • BigQuery Resource Admin
  • BigQuery Resource Editor

BigQuery์—์„œ IAM ์—ญํ• ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์‚ฌ์ „ ์ •์˜๋œ ์—ญํ•  ๋ฐ ๊ถŒํ•œ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์˜ˆ์•ฝ ์‚ญ์ œ

์ฝ˜์†”

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

    BigQuery๋กœ ์ด๋™

  2. ํƒ์ƒ‰ ๋ฉ”๋‰ด์—์„œ ์šฉ๋Ÿ‰ ๊ด€๋ฆฌ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  3. ์˜ˆ์•ฝ ํƒญ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  4. ์‚ญ์ œํ•  ์˜ˆ์•ฝ์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

  5. ์ž‘์—… ์˜ต์…˜์„ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค.

  6. ์‚ญ์ œ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  7. ์˜ˆ์•ฝ ์‚ญ์ œ ๋Œ€ํ™”์ƒ์ž์—์„œ ์‚ญ์ œ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

SQL

์˜ˆ์•ฝ์„ ์‚ญ์ œํ•˜๋ ค๋ฉด DROP RESERVATION DDL ๋ฌธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

    BigQuery๋กœ ์ด๋™

  2. ์ฟผ๋ฆฌ ํŽธ์ง‘๊ธฐ์—์„œ ๋‹ค์Œ ๋ฌธ์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    DROP RESERVATION
      `ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME`;

    ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  3. ์‹คํ–‰์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋Œ€ํ™”ํ˜• ์ฟผ๋ฆฌ ์‹คํ–‰์„ ์ฐธ์กฐํ•˜์„ธ์š”.

bq

์˜ˆ์•ฝ์„ ์‚ญ์ œํ•˜๋ ค๋ฉด bq rm ๋ช…๋ น์–ด๋ฅผ --reservation ํ”Œ๋ž˜๊ทธ์™€ ํ•จ๊ป˜ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

bq rm \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --reservation RESERVATION_NAME

๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • ADMIN_PROJECT_ID: ์˜ˆ์•ฝ ๋ฆฌ์†Œ์Šค๋ฅผ ์†Œ์œ ํ•˜๋Š” ๊ด€๋ฆฌ ํ”„๋กœ์ ํŠธ์˜ ํ”„๋กœ์ ํŠธ ID
  • LOCATION: ์˜ˆ์•ฝ ์œ„์น˜
  • RESERVATION_NAME: ์˜ˆ์•ฝ ์ด๋ฆ„. ์ด๋ฆ„์—๋Š” ์†Œ๋ฌธ์ž ์˜์ˆซ์ž ๋ฌธ์ž ๋˜๋Š” ๋Œ€์‹œ๋งŒ ํฌํ•จํ•  ์ˆ˜ ์žˆ๊ณ , ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋ฉฐ ๋Œ€์‹œ๋กœ ๋๋‚˜์„œ๋Š” ์•ˆ ๋˜๊ณ , ์ตœ๋Œ€ ๊ธธ์ด๋Š” 64์ž์ž…๋‹ˆ๋‹ค.

Python

์ด ์ฝ”๋“œ ์ƒ˜ํ”Œ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— google-cloud-bigquery-reservation ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ReservationServiceClient๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. delete_reservation ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜ˆ์•ฝ์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
# TODO(developer): Set project_id to the project ID containing the
# reservation.
project_id = "your-project-id"

# TODO(developer): Set location to the location of the reservation.
# See: https://cloud.google.com/bigquery/docs/locations for a list of
# available locations.
location = "US"

# TODO(developer): Set reservation_id to a unique ID of the reservation.
reservation_id = "sample-reservation"

# TODO(developer): Choose a transport to use. Either 'grpc' or 'rest'
transport = "grpc"

# ...

from google.cloud.bigquery_reservation_v1.services import reservation_service

reservation_client = reservation_service.ReservationServiceClient(
    transport=transport
)
reservation_name = reservation_client.reservation_path(
    project_id, location, reservation_id
)
reservation_client.delete_reservation(name=reservation_name)

print(f"Deleted reservation: {reservation_name}")

์˜ˆ์•ฝ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ์ œ์–ด

์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ง€์›์„ ์š”์ฒญํ•˜๊ฑฐ๋‚˜ ์˜๊ฒฌ์„ ์ œ๊ณตํ•˜๋ ค๋ฉด bigquery-wlm-feedback@google.com์œผ๋กœ ๋ฌธ์˜ํ•˜์„ธ์š”.

ํŠน์ • ์˜ˆ์•ฝ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ฟผ๋ฆฌ์—์„œ ์˜ˆ์•ฝ์„ ์žฌ์ •์˜ํ•˜๋ ค๋ฉด ํ•ด๋‹น ์˜ˆ์•ฝ์— ๋Œ€ํ•œ reservations.use ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ•„์ˆ˜ ๊ถŒํ•œ

์ž‘์—…์— ํŠน์ • ์˜ˆ์•ฝ์„ ์ง€์ •ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ถŒํ•œ์„ ์–ป์œผ๋ ค๋ฉด ๊ด€๋ฆฌ์ž์—๊ฒŒ ์˜ˆ์•ฝ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์˜ˆ์•ฝ ํŽธ์ง‘์ž(roles/bigquery.reservationEditor) IAM ์—ญํ• ์„ ๋ถ€์—ฌํ•ด ๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•˜์„ธ์š”. ์—ญํ•  ๋ถ€์—ฌ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํ”„๋กœ์ ํŠธ, ํด๋”, ์กฐ์ง์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ด€๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ด ์‚ฌ์ „ ์ •์˜๋œ ์—ญํ• ์—๋Š” ์ž‘์—…์— ํŠน์ • ์˜ˆ์•ฝ์„ ์ง€์ •ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ reservations.use ๊ถŒํ•œ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ปค์Šคํ…€ ์—ญํ• ์ด๋‚˜ ๋‹ค๋ฅธ ์‚ฌ์ „ ์ •์˜๋œ ์—ญํ• ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๊ถŒํ•œ์„ ๋ถ€์—ฌ๋ฐ›์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์•ฝ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ์ œ์–ด

์˜ˆ์•ฝ์— Identity and Access Management(IAM) ์กฐ๊ฑด์„ ์„ค์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ˆ˜ํ–‰ํ•˜์„ธ์š”.

์ฝ˜์†”

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

    IAM์œผ๋กœ ์ด๋™

  2. ํ”„๋กœ์ ํŠธ, ํด๋”, ์กฐ์ง์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  3. bigquery.resourceEditor ์—ญํ• ์„ ๋ถ€์—ฌํ•  ์ฃผ ๊ตฌ์„ฑ์›์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด ์ด๋ฏธ ๋‹ค๋ฅธ ์—ญํ• ์ด ์žˆ๋Š” ์ฃผ ๊ตฌ์„ฑ์›์—๊ฒŒ bigquery.resourceEditor ์—ญํ• ์„ ๋ถ€์—ฌํ•˜๋ ค๋ฉด ์ฃผ ๊ตฌ์„ฑ์›์ด ํฌํ•จ๋œ ํ–‰์„ ์ฐพ์•„ ํ•ด๋‹น ํ–‰์—์„œ ์ฃผ ๊ตฌ์„ฑ์› ์ˆ˜์ •์„ ํด๋ฆญํ•˜๊ณ  ๋‹ค๋ฅธ ์—ญํ•  ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด ๊ธฐ์กด ์—ญํ• ์ด ์—†๋Š” ์ฃผ ๊ตฌ์„ฑ์›์—๊ฒŒ bigquery.resourceEditor ์—ญํ• ์„ ๋ถ€์—ฌํ•˜๋ ค๋ฉด ์•ก์„ธ์Šค ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ํด๋ฆญํ•œ ํ›„ ์ฃผ ๊ตฌ์„ฑ์›์˜ ์‹๋ณ„์ž๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: my-user@example.com).

  1. ๋“œ๋กญ๋‹ค์šด ๋ชฉ๋ก์—์„œ ๋ถ€์—ฌํ•  bigquery.resourceEditor ์—ญํ• ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  2. ์—ญํ• ์— ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด /reservation1๋กœ ๋๋‚˜๋Š” ๋ชจ๋“  ์˜ˆ์•ฝ์— ์—ญํ• ์„ ๋ถ€์—ฌํ•˜๋Š” ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ์ €์žฅ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ์ฃผ ๊ตฌ์„ฑ์›์—๊ฒŒ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์—ญํ• ์ด ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค.

bq

์˜ˆ์•ฝ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋ ค๋ฉด bq set-iam-policy ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  bq set-iam-policy projects/project1/locations/US << EOF
  resource: "RESOURCE"
  policy {
    bindings {
      role: "roles/bigquery.resourceAdmin"
        members: "user:USER"
        condition {
          title: "title"
          expression: "EXPRESSION"
        }
      }
    }
  update_mask { paths: "bindings" }
  EOF

๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • RESOURCE: ์˜ˆ์•ฝ ๋ฆฌ์†Œ์Šค์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • USER: ์—ญํ• ์„ ๋ถ€์—ฌํ•  ์‚ฌ์šฉ์ž์˜ ์ด๋ฉ”์ผ์ž…๋‹ˆ๋‹ค.
  • EXPRESSION: ์—ญํ•  ๋ถ€์—ฌ์˜ ๊ธฐ๋ฐ˜์ด ๋˜๋Š” ํ‘œํ˜„์‹์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด resource.name.endsWith(\"/res1\")์ž…๋‹ˆ๋‹ค.

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