Cloud ๊ฐ์‚ฌ ๋กœ๊ทธ ์ด๋ฒคํŠธ ์ˆ˜์‹ 


์ด ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š” Cloud ๊ฐ์‚ฌ ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Cloud Storage์—์„œ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” ์ธ์ฆ๋œ Cloud Run ์„œ๋น„์Šค๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ด ํŠœํ† ๋ฆฌ์–ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ๋•์…˜ ์›Œํฌ๋กœ๋“œ๋ฅผ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค. Eventarc ํŠธ๋ฆฌ๊ฑฐ์—์„œ Cloud ๊ฐ์‚ฌ ๋กœ๊ทธ ํ•ญ๋ชฉ์„ ๊ธฐ์ค€์œผ๋กœ ์ด๋ฒคํŠธ๋ฅผ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Cloud ๊ฐ์‚ฌ ๋กœ๊ทธ์˜ ์ด๋ฒคํŠธ ํ•„ํ„ฐ ํ™•์ธ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

Google Cloud ์ฝ˜์†” ๋˜๋Š” Google Cloud CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ํŠœํ† ๋ฆฌ์–ผ์„ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชฉํ‘œ

์ด ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š” ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  1. ์ด๋ฒคํŠธ ์†Œ์Šค๋กœ ์‚ฌ์šฉํ•  Cloud Storage ๋ฒ„ํ‚ท์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  2. Cloud Run์— ์ด๋ฒคํŠธ ์ˆ˜์‹ ์ž ์„œ๋น„์Šค๋ฅผ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.

  3. Eventarc ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  4. Cloud Storage ๋ฒ„ํ‚ท์— ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜์—ฌ ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  Cloud Run ๋กœ๊ทธ์—์„œ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋น„์šฉ

์ด ๋ฌธ์„œ์—์„œ๋Š” ๋น„์šฉ์ด ์ฒญ๊ตฌ๋  ์ˆ˜ ์žˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ Google Cloud๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์‚ฌ์šฉ๋Ÿ‰์„ ๊ธฐ์ค€์œผ๋กœ ์˜ˆ์ƒ ๋น„์šฉ์„ ์‚ฐ์ถœํ•˜๋ ค๋ฉด ๊ฐ€๊ฒฉ ๊ณ„์‚ฐ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Google Cloud ์‹ ๊ทœ ์‚ฌ์šฉ์ž๋Š” ๋ฌด๋ฃŒ ์ฒดํ—˜ํŒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์กฐ์ง์—์„œ ์ •์˜ํ•œ ๋ณด์•ˆ ์ œ์•ฝ์กฐ๊ฑด์œผ๋กœ ์ธํ•ด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์™„๋ฃŒํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ ํ•ด๊ฒฐ ์ •๋ณด๋Š” ์ œํ•œ๋œ Google Cloud ํ™˜๊ฒฝ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ์ž์—๊ฒŒ๋Š” ๊ธฐ๋ณธ ์†Œ์œ ์ž ์—ญํ• (roles/owner)์ด ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Identity and Access Management(IAM) ์—ญํ• ์—๋Š” ๋Œ€๋ถ€๋ถ„์˜ Google Cloud ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ „์ฒด ์•ก์„ธ์Šค์— ํ•„์š”ํ•œ ๊ถŒํ•œ์ด ํฌํ•จ๋˜๋ฉฐ, ์ด ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ์ž๊ฐ€ ์•„๋‹ˆ๋ฉด ํ”„๋กœ์ ํŠธ์—์„œ ์ ํ•ฉํ•œ ์ฃผ ๊ตฌ์„ฑ์›์— ๋Œ€ํ•ด ํ•„์ˆ˜ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ฃผ ๊ตฌ์„ฑ์›์€ Google ๊ณ„์ •(์ตœ์ข… ์‚ฌ์šฉ์ž)์ด๊ฑฐ๋‚˜ ์„œ๋น„์Šค ๊ณ„์ •(์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ ์ปดํ“จํŒ… ์›Œํฌ๋กœ๋“œ)์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ด๋ฒคํŠธ ๋Œ€์ƒ์˜ ์—ญํ•  ๋ฐ ๊ถŒํ•œ ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๊ธฐ๋ณธ์ ์œผ๋กœ Cloud Build ๊ถŒํ•œ์—๋Š” Artifact Registry ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์—…๋กœ๋“œ ๋ฐ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

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

ํŠœํ† ๋ฆฌ์–ผ์„ ์™„๋ฃŒํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ถŒํ•œ์„ ์–ป์œผ๋ ค๋ฉด ๊ด€๋ฆฌ์ž์—๊ฒŒ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๋‹ค์Œ IAM ์—ญํ• ์„ ๋ถ€์—ฌํ•ด ๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•˜์„ธ์š”.

์—ญํ•  ๋ถ€์—ฌ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํ”„๋กœ์ ํŠธ, ํด๋”, ์กฐ์ง์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ด€๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

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

Google Cloud ์ฝ˜์†” ๋˜๋Š” gcloud CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

Console

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage, and Eventarc APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage, and Eventarc APIs.

    Enable the APIs

  8. ๊ฐ์‚ฌ ๋กœ๊ทธ์— ๊ธฐ๋ก๋˜๋Š” ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด Google Cloud Storage์— ๋Œ€ํ•ด ๊ด€๋ฆฌ์ž ์ฝ๊ธฐ, ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ, ๋ฐ์ดํ„ฐ ์“ฐ๊ธฐ ๋กœ๊ทธ ์œ ํ˜•์„ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    ๊ฐ์‚ฌ ๋กœ๊ทธ๋กœ ์ด๋™

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

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

  10. ์„œ๋น„์Šค ๊ณ„์ • ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  11. Google Cloud ์ฝ˜์†”์— ํ‘œ์‹œํ•  ์„œ๋น„์Šค ๊ณ„์ • ์ด๋ฆ„์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    Google Cloud ์ฝ˜์†”์—์„œ ์ด ์ด๋ฆ„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์„œ๋น„์Šค ๊ณ„์ • ID๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๊ฒฝ์šฐ ID๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ์ด ID๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  12. ์„ ํƒ์‚ฌํ•ญ: ์„œ๋น„์Šค ๊ณ„์ •์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  13. ์ง€๊ธˆ ์•ก์„ธ์Šค ์ œ์–ด๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด ์™„๋ฃŒ๋ฅผ ํด๋ฆญํ•˜์—ฌ ์„œ๋น„์Šค ๊ณ„์ • ๋งŒ๋“ค๊ธฐ๋ฅผ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

    ์•ก์„ธ์Šค ์ œ์–ด๋ฅผ ์ง€๊ธˆ ์„ค์ •ํ•˜๋ ค๋ฉด ๋งŒ๋“ค๊ณ  ๊ณ„์†ํ•˜๊ธฐ๋ฅผ ํด๋ฆญํ•˜๊ณ  ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  14. ํ”„๋กœ์ ํŠธ์—์„œ Eventarc ํŠธ๋ฆฌ๊ฑฐ์™€ ์—ฐ๊ฒฐ๋œ ์„œ๋น„์Šค ๊ณ„์ •์— ๋Œ€ํ•ด ๋ถ€์—ฌํ•  Cloud Run ํ˜ธ์ถœ์ž ๋ฐ Eventarc ์ด๋ฒคํŠธ ์ˆ˜์‹ ์ž ์—ญํ• ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ…Œ์ŠคํŠธ ๋ชฉ์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ์—์„œ ๋ชจ๋“  Cloud Run ์„œ๋น„์Šค ๋ฐ ์ž‘์—…์— ๋Œ€ํ•ด Cloud Run ํ˜ธ์ถœ์ž ์—ญํ• ์ด ๋ถ€์—ฌ๋˜์ง€๋งŒ, ์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋น„์Šค์— ์—ญํ• ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Cloud Run ์„œ๋น„์Šค ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

    Cloud Run ํ˜ธ์ถœ์ž ์—ญํ• ์„ ๋ถ€์—ฌํ•˜์ง€ ์•Š๊ณ  ์ธ์ฆ๋œ Cloud Run ์„œ๋น„์Šค์— ๋Œ€ํ•œ ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๋งŒ๋“ค์–ด๋„ ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ์˜ˆ์ƒํ•œ ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๊ณ  ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ ๋ฉ”์‹œ์ง€๊ฐ€ ๋กœ๊ทธ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header.
  15. ์—ญํ• ์„ ์ถ”๊ฐ€ํ–ˆ์œผ๋ฉด ๊ณ„์† ๋ฐ ์™„๋ฃŒ๋ฅผ ํด๋ฆญํ•˜์—ฌ ์„œ๋น„์Šค ๊ณ„์ • ๋งŒ๋“ค๊ธฐ๋ฅผ ๋งˆ์นฉ๋‹ˆ๋‹ค.

gcloud

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.

  3. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  4. To initialize the gcloud CLI, run the following command:

    gcloud init
  5. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage, and Eventarc APIs:

    gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com 
          logging.googleapis.com  pubsub.googleapis.com  run.googleapis.com 
          storage.googleapis.com  and eventarc.googleapis.com
  8. Install the Google Cloud CLI.

  9. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  10. To initialize the gcloud CLI, run the following command:

    gcloud init
  11. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  12. Verify that billing is enabled for your Google Cloud project.

  13. Enable the Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage, and Eventarc APIs:

    gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com 
          logging.googleapis.com  pubsub.googleapis.com  run.googleapis.com 
          storage.googleapis.com  and eventarc.googleapis.com
  14. gcloud ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
    gcloud components update
  15. ๊ณ„์ •์„ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค.
    gcloud auth login
    
  16. ์ด ํŠœํ† ๋ฆฌ์–ผ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ตฌ์„ฑ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    export REGION=us-central1
    gcloud config set run/region ${REGION}
    gcloud config set run/platform managed
    gcloud config set eventarc/location ${REGION}
    export SERVICE_NAME=helloworld-events
  17. ๊ฐ์‚ฌ ๋กœ๊ทธ์— ๊ธฐ๋ก๋˜๋Š” ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด storage.googleapis.com ์„œ๋น„์Šค์— ๋Œ€ํ•ด ADMIN_READ, DATA_READ, DATA_WRITE ๋กœ๊ทธ ์œ ํ˜•์„ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    1. ํ”„๋กœ์ ํŠธ์˜ IAM ์ •์ฑ…์„ ์ฝ๊ณ  ํŒŒ์ผ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
      gcloud projects get-iam-policy PROJECT_ID > /tmp/policy.yaml
    2. /tmp/policy.yaml์—์„œ ์ •์ฑ…์„ ์ˆ˜์ •ํ•˜๋˜, ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ฐ์‚ฌ ๋กœ๊ทธ ๊ตฌ์„ฑ๋งŒ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
      auditConfigs:
      - auditLogConfigs:
      - logType: ADMIN_READ
      - logType: DATA_WRITE
      - logType: DATA_READ
      service: storage.googleapis.com
    3. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒˆ IAM ์ •์ฑ…์„ ์”๋‹ˆ๋‹ค.
      gcloud projects set-iam-policy PROJECT_ID /tmp/policy.yaml
      ์•ž์˜ ๋ช…๋ น์–ด๊ฐ€ ๋‹ค๋ฅธ ๋ณ€๊ฒฝ์‚ฌํ•ญ๊ณผ์˜ ์ถฉ๋Œ์„ ๋ณด๊ณ ํ•  ๊ฒฝ์šฐ ์ด ๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ํ”„๋กœ์ ํŠธ์˜ IAM ์ •์ฑ… ์ฝ๊ธฐ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  18. ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์„œ๋น„์Šค ๊ณ„์ •์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
    gcloud iam service-accounts create sample-service-account \
        --description="A sample service account" \
        --display-name="Sample service account"
    ์„œ๋น„์Šค ๊ณ„์ •์„ ๋งŒ๋“  ํ›„ ์„œ๋น„์Šค ๊ณ„์ •์„ ์‚ฌ์šฉํ•˜๊ธฐ๊นŒ์ง€ ์ตœ๋Œ€ 7๋ถ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šค ๊ณ„์ •์„ ๋งŒ๋“  ์งํ›„์— ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด 60์ดˆ ์ด์ƒ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ๋‹ค์‹œ ์‹œ๋„ํ•˜์„ธ์š”.
  19. sample-service-account๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    gcloud iam service-accounts list
    ์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๋น„์Šทํ•˜๊ฒŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
    DISPLAY NAME                     EMAIL                                                               DISABLED
    Default compute service account  PROJECT_NUMBER-compute@developer.gserviceaccount.com                False
    Sample service account           sample-service-account@PROJECT_ID.iam.gserviceaccount.com           False
  20. ํ”„๋กœ์ ํŠธ์—์„œ Eventarc ํŠธ๋ฆฌ๊ฑฐ์™€ ์—ฐ๊ฒฐ๋œ ์„œ๋น„์Šค ๊ณ„์ •์— ๋Œ€ํ•ด Cloud Run ํ˜ธ์ถœ์ž(run.invoker) ๋ฐ Eventarc ์ด๋ฒคํŠธ ์ˆ˜์‹ ์ž(roles/eventarc.eventReceiver) ์—ญํ• ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:sample-service-account@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/run.invoker"
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:sample-service-account@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/eventarc.eventReceiver"

    PROJECT_ID๋ฅผ Google Cloud ํ”„๋กœ์ ํŠธ ID๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ…Œ์ŠคํŠธ ๋ชฉ์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ์—์„œ ๋ชจ๋“  Cloud Run ์„œ๋น„์Šค ๋ฐ ์ž‘์—…์— ๋Œ€ํ•ด Cloud Run ํ˜ธ์ถœ์ž ์—ญํ• ์ด ๋ถ€์—ฌ๋˜์ง€๋งŒ, ์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋น„์Šค์— ์—ญํ• ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Cloud Run ์„œ๋น„์Šค ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

    Cloud Run ํ˜ธ์ถœ์ž ์—ญํ• ์„ ๋ถ€์—ฌํ•˜์ง€ ์•Š๊ณ  ์ธ์ฆ๋œ Cloud Run ์„œ๋น„์Šค์— ๋Œ€ํ•œ ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๋งŒ๋“ค์–ด๋„ ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ์˜ˆ์ƒํ•œ ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๊ณ  ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ ๋ฉ”์‹œ์ง€๊ฐ€ ๋กœ๊ทธ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header.

Artifact Registry ํ‘œ์ค€ ์ €์žฅ์†Œ ๋งŒ๋“ค๊ธฐ

์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•  Artifact Registry ํ‘œ์ค€ ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

Console

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

    ์ €์žฅ์†Œ๋กœ ์ด๋™

  2. ์ €์žฅ์†Œ ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. ์ €์žฅ์†Œ ๊ตฌ์„ฑ:
    1. ๊ณ ์œ ํ•œ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”.
    2. ํ˜•์‹์—์„œ Docker๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    3. ๋ชจ๋“œ์— ํ‘œ์ค€์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    4. ์œ„์น˜ ์œ ํ˜•์—์„œ ๋ฆฌ์ „์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    5. ๋ฆฌ์ „ ๋ชฉ๋ก์—์„œ us-central1(์•„์ด์˜ค์™€)์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  4. ๋‹ค๋ฅธ ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ๋‘๊ณ  ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

gcloud

gcloud artifacts repositories create REPOSITORY \
    --repository-format=docker \
    --location=$REGION

REPOSITORY๋ฅผ Artifact Registry ์ €์žฅ์†Œ์˜ ๊ณ ์œ ํ•œ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

Cloud Storage ๋ฒ„ํ‚ท ๋งŒ๋“ค๊ธฐ

์ด ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š” Cloud Storage๋ฅผ ์ด๋ฒคํŠธ ์†Œ์Šค๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์Šคํ† ๋ฆฌ์ง€ ๋ฒ„ํ‚ท์„ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ์„ ์‹คํ–‰ํ•˜์„ธ์š”.

Console

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

    ๋ฒ„ํ‚ท์œผ๋กœ ์ด๋™

  2. ๋ฒ„ํ‚ท ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ฐ ๋‹จ๊ณ„๋ฅผ ์™„๋ฃŒํ•˜๋ ค๋ฉด ๋ฒ„ํ‚ท ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ๊ณ„์†์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    1. ๊ณ ์œ ํ•œ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”. ์˜ˆ๋ฅผ ๋“ค๋ฉด eventarcbucket์ž…๋‹ˆ๋‹ค.
    2. ์œ„์น˜ ์œ ํ˜•์œผ๋กœ ๋ฆฌ์ „์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    3. ์œ„์น˜๋กœ us-central1 (์•„์ด์˜ค์™€)์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    4. ๊ธฐ๋ณธ ์Šคํ† ๋ฆฌ์ง€ ํด๋ž˜์Šค๋กœ ํ‘œ์ค€์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    5. ์•ก์„ธ์Šค ์ œ์–ด๋กœ ๊ท ์ผ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  4. ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

gcloud

gcloud storage buckets create gs://events-tutorial-PROJECT_ID/ --location=$REGION

์ด๋ฒคํŠธ ์†Œ์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด Cloud Run์— ์ด๋ฒคํŠธ ์ˆ˜์‹ ์ž ์„œ๋น„์Šค๋ฅผ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Cloud Run์— ์ด๋ฒคํŠธ ์ˆ˜์‹ ์ž ์„œ๋น„์Šค ๋ฐฐํฌ

์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ  ๋กœ๊น…ํ•˜๋Š” Cloud Run ์„œ๋น„์Šค๋ฅผ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค. ์ƒ˜ํ”Œ ์ด๋ฒคํŠธ ์ˆ˜์‹ ์ž ์„œ๋น„์Šค๋ฅผ ๋ฐฐํฌํ•˜๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

์ฝ˜์†”

  1. ์ƒ˜ํ”Œ ์ €์žฅ์†Œ๋ฅผ GitHub ๊ณ„์ •์— ํด๋ก ํ•ฉ๋‹ˆ๋‹ค.
  2. Go

    1. GitHub์—์„œ GoogleCloudPlatform/golang-samples๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
    2. ํฌํฌ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    3. ํฌํฌ ๋ฒ„ํŠผ์˜ ์Šคํฌ๋ฆฐ์ƒท
    4. ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด ์ €์žฅ์†Œ๋ฅผ ํฌํฌํ•  ์œ„์น˜๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    ์ž๋ฐ”

    1. GitHub์—์„œ GoogleCloudPlatform/java-docs-samples๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
    2. ํฌํฌ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    3. ํฌํฌ ๋ฒ„ํŠผ์˜ ์Šคํฌ๋ฆฐ์ƒท
    4. ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด ์ €์žฅ์†Œ๋ฅผ ํฌํฌํ•  ์œ„์น˜๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    .NET

    1. GitHub์—์„œ GoogleCloudPlatform/dotnet-docs-samples๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
    2. ํฌํฌ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    3. ํฌํฌ ๋ฒ„ํŠผ์˜ ์Šคํฌ๋ฆฐ์ƒท
    4. ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด ์ €์žฅ์†Œ๋ฅผ ํฌํฌํ•  ์œ„์น˜๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    Node.js

    1. GitHub์—์„œ GoogleCloudPlatform/nodejs-docs-samplesโ€‹๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
    2. ํฌํฌ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    3. ํฌํฌ ๋ฒ„ํŠผ์˜ ์Šคํฌ๋ฆฐ์ƒท
    4. ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด ์ €์žฅ์†Œ๋ฅผ ํฌํฌํ•  ์œ„์น˜๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    Python

    1. GitHub์—์„œ GoogleCloudPlatform/python-docs-samples๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
    2. ํฌํฌ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    3. ํฌํฌ ๋ฒ„ํŠผ์˜ ์Šคํฌ๋ฆฐ์ƒท
    4. ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด ์ €์žฅ์†Œ๋ฅผ ํฌํฌํ•  ์œ„์น˜๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  3. Google Cloud ์ฝ˜์†”์—์„œ ์„œ๋น„์Šค ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  4. ์„œ๋น„์Šค๋กœ ์ด๋™

  5. ์„œ๋น„์Šค ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•˜์—ฌ ์„œ๋น„์Šค ๋งŒ๋“ค๊ธฐ ์–‘์‹์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  6. ์ €์žฅ์†Œ์—์„œ ์ง€์†์ ์œผ๋กœ ๋ฐฐํฌ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    GitHub ์ €์žฅ์†Œ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์€ Artifact Registry์˜ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€์— ์ž๋™์œผ๋กœ ๋นŒ๋“œ๋˜๊ณ  Cloud Run์— ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

  7. Cloud Build๋กœ ์„ค์ •์„ ํด๋ฆญํ•˜์—ฌ Cloud Build๋กœ ์„ค์ • ์–‘์‹์„ ์—ฝ๋‹ˆ๋‹ค.
    1. ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด Cloud Build API ๋ฐ Artifact Analysis API๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    2. GitHub๋กœ GitHub๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    3. ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด Google Cloud Build ์„ค์น˜๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    4. ์ €์žฅ์†Œ๋กœ ํฌํฌํ•œ GitHub ์ €์žฅ์†Œ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    5. ๋‹ค์Œ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    6. ๋ถ„๊ธฐ ํ•„๋“œ์— ^main$๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    7. Dockerfile์œผ๋กœ Dockerfile์„ ์„ ํƒํ•˜๊ณ  Dockerfile์˜ ์†Œ์Šค ์œ„์น˜๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
      • eventarc/audit-storage/Dockerfile

        ๋˜๋Š”

      • eventarc/audit_storage/Dockerfile(Go)
    8. ์ €์žฅ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  8. ์„œ๋น„์Šค ๋งŒ๋“ค๊ธฐ ์–‘์‹์— ์„œ๋น„์Šค ์ด๋ฆ„์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด helloworld-events์ž…๋‹ˆ๋‹ค.
  9. ์„œ๋น„์Šค๋ฅผ ๋ฐฐ์น˜ํ•  ๋ฆฌ์ „์œผ๋กœ us-central1(์•„์ด์˜ค์™€)์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  10. Cloud Run ์„œ๋น„์Šค์—์„œ ํ—ˆ์šฉํ•  ์ธ๊ทธ๋ ˆ์Šค ํŠธ๋ž˜ํ”ฝ์„ ๊ธฐ์ค€์œผ๋กœ ์ธ๊ทธ๋ ˆ์Šค ์˜ต์…˜์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  11. ์ธ์ฆ ํ•„์š”๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  12. ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

gcloud

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

    Go

    git clone https://github.com/GoogleCloudPlatform/golang-samples.git
    cd golang-samples/eventarc/audit_storage
    

    ์ž๋ฐ”

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
    cd java-docs-samples/eventarc/audit-storage

    .NET

    git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
    cd dotnet-docs-samples/eventarc/audit-storage

    Node.js

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
    cd nodejs-docs-samples/eventarc/audit-storage

    Python

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    cd python-docs-samples/eventarc/audit-storage
  2. ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  Cloud Build์— ์—…๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
    gcloud builds submit --tag $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/$SERVICE_NAME:v1
    
  3. ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ Cloud Run์— ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.
    gcloud run deploy $SERVICE_NAME \
        --image $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/$SERVICE_NAME:v1
    

    ์ธ์ฆ๋˜์ง€ ์•Š์€ ํ˜ธ์ถœ์„ ํ—ˆ์šฉํ• ์ง€ ๋ฌป๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด n์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    ๋ฐฐํฌ๊ฐ€ ์„ฑ๊ณตํ•˜๋ฉด ๋ช…๋ น์ค„์— ์„œ๋น„์Šค URL์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ด์ œ helloworld-events๋ผ๋Š” ์ด๋ฒคํŠธ ์ˆ˜์‹ ์ž ์„œ๋น„์Šค๋ฅผ Cloud Run์— ๋ฐฐํฌํ–ˆ์œผ๋ฏ€๋กœ ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Eventarc ํŠธ๋ฆฌ๊ฑฐ ๋งŒ๋“ค๊ธฐ

Eventarc ํŠธ๋ฆฌ๊ฑฐ๋Š” Cloud Storage ๋ฒ„ํ‚ท์˜ ์ด๋ฒคํŠธ๋ฅผ helloworld-events Cloud Run ์„œ๋น„์Šค๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

Console

  1. Google Cloud Console์—์„œ ํŠธ๋ฆฌ๊ฑฐ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    ํŠธ๋ฆฌ๊ฑฐ๋กœ ์ด๋™

  2. ํŠธ๋ฆฌ๊ฑฐ ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. ํŠธ๋ฆฌ๊ฑฐ ์ด๋ฆ„์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    ํŠธ๋ฆฌ๊ฑฐ์˜ ID์ด๋ฉฐ ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ตœ๋Œ€ 63์ž(์˜๋ฌธ ๊ธฐ์ค€)์˜ ์†Œ๋ฌธ์ž, ์ˆซ์ž, ํ•˜์ดํ”ˆ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  4. ํŠธ๋ฆฌ๊ฑฐ ์œ ํ˜•์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    • ํผ์ŠคํŠธํŒŒํ‹ฐ โ€” Google Cloud ์ œ๊ณต์—…์ฒด(์ง์ ‘ ๋˜๋Š” Cloud ๊ฐ์‚ฌ ๋กœ๊ทธ ํ•ญ๋ชฉ์„ ํ†ตํ•ด) ๋˜๋Š” Pub/Sub ๋ฉ”์‹œ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์†ก๋œ ์ด๋ฒคํŠธ๋ฅผ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.
    • ์„œ๋“œํŒŒํ‹ฐ: ํƒ€์‚ฌ ์ œ๊ณต์—…์ฒด์—์„œ ๋ณด๋‚ธ ์ด๋ฒคํŠธ๋ฅผ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.
  5. ์ด๋ฒคํŠธ ์ œ๊ณต์ž ๋ชฉ๋ก์—์„œ Cloud Storage๋ฅผ ์ด๋ฒคํŠธ ์†Œ์Šค๋กœ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  6. ์ด๋ฒคํŠธ ์œ ํ˜• ๋ชฉ๋ก์—์„œ storage.objects.create๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  7. ๋ฆฌ์ „ ๋ชฉ๋ก์—์„œ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•  ๋ฆฌ์ „์œผ๋กœ us-central1์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  8. ์ƒ์„ฑํ•œ ์„œ๋น„์Šค ๊ณ„์ •์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com.
  9. ์ด๋ฒคํŠธ ๋Œ€์ƒ ๋ชฉ๋ก์—์„œ Cloud Run์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  10. Cloud Run ์„œ๋น„์Šค ์„ ํƒ ๋ชฉ๋ก์—์„œ helloworld-events๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  11. ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  12. Cloud Run ์ฝ˜์†” ํŽ˜์ด์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Eventarc ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

gcloud

  1. Cloud Storage ์ด๋ฒคํŠธ๋ฅผ ํ•„ํ„ฐ๋งํ•˜๊ณ  ์ƒ์„ฑ๋œ ์„œ๋น„์Šค ๊ณ„์ •์„ ์‚ฌ์šฉํ•˜๋Š” ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
    gcloud eventarc triggers create events-tutorial-trigger \
        --destination-run-service=$SERVICE_NAME \
        --destination-run-region=$REGION \
        --event-filters="type=google.cloud.audit.log.v1.written" \
        --event-filters="serviceName=storage.googleapis.com" \
        --event-filters="methodName=storage.objects.create" \
        --service-account=sample-service-account@PROJECT_ID.iam.gserviceaccount.com
    PROJECT_ID๋ฅผ Google Cloud ํ”„๋กœ์ ํŠธ ID๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    ๊ฐ ํ•ญ๋ชฉ์˜ ์˜๋ฏธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    • type: ํŠธ๋ฆฌ๊ฑฐ์˜ ํ•„ํ„ฐ ๊ธฐ์ค€์ด ์ถฉ์กฑ๋˜๋ฉด ๊ฐ์‚ฌ ๋กœ๊ทธ๊ฐ€ ์ƒ์„ฑ๋˜๋„๋ก ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
    • serviceName: Cloud Storage์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ์‚ฌ ๋กœ๊ทธ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.
    • methodName: storage.objects.create์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ์‚ฌ ๋Œ€์ƒ ์ž‘์—…์ž…๋‹ˆ๋‹ค.
    ๊ทธ๋Ÿฌ๋ฉด events-tutorial-trigger๋ผ๋Š” ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  2. events-tutorial-trigger์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    gcloud eventarc triggers list --location=$REGION
  3. ํŠธ๋ฆฌ๊ฑฐ events-tutorial-trigger๊ฐ€ helloworld-events์˜ ๋Œ€์ƒ๊ณผ ํ•จ๊ป˜ ๋‚˜์—ด๋ฉ๋‹ˆ๋‹ค.

์ด๋ฒคํŠธ ์ƒ์„ฑ ๋ฐ ํ™•์ธ

  1. ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

    ์ฝ˜์†”

    1. ํŒŒ์ผ ์ด๋ฆ„์ด random.txt์ด๊ณ  ํ…์ŠคํŠธ๊ฐ€ 'Hello World'์ธ ํ…์ŠคํŠธ ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
    2. Google Cloud ์ฝ˜์†”์—์„œ ๋ฒ„ํ‚ท ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

      ๋ฒ„ํ‚ท์œผ๋กœ ์ด๋™

    3. ๋งŒ๋“  ์Šคํ† ๋ฆฌ์ง€ ๋ฒ„ํ‚ท์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    4. ๊ฐ์ฒด ํƒญ์—์„œ ํŒŒ์ผ ์—…๋กœ๋“œ๋ฅผ ํด๋ฆญํ•˜๊ณ  random.txt ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

    gcloud

    ํ…์ŠคํŠธ ํŒŒ์ผ์„ Cloud Storage์— ์—…๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

    echo "Hello World" > random.txt
    gcloud storage cp random.txt gs://events-tutorial-PROJECT_ID/random.txt
  2. ๋กœ๊ทธ ํ•ญ๋ชฉ์„ ๋ณด๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.
  3. Console

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

      ์„œ๋น„์Šค๋กœ ์ด๋™

    2. ์„œ๋น„์Šค ๋ชฉ๋ก์—์„œ ์ƒ์„ฑํ•œ ์„œ๋น„์Šค์˜ ์ด๋ฆ„์„ ํด๋ฆญํ•˜์—ฌ ์„œ๋น„์Šค ์„ธ๋ถ€์ •๋ณด ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
    3. ๋กœ๊ทธ ํƒญ์„ ํด๋ฆญํ•˜์—ฌ ์ด ์„œ๋น„์Šค์˜ ๋ชจ๋“  ๋ฒ„์ „์— ๋Œ€ํ•œ ์š”์ฒญ ๋ฐ ์ปจํ…Œ์ด๋„ˆ ๋กœ๊ทธ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๋กœ๊ทธ ์‹ฌ๊ฐ๋„ ์ˆ˜์ค€์œผ๋กœ ํ•„ํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    4. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋กœ๊ทธ ํ•ญ๋ชฉ์„ ์ฐพ์Šต๋‹ˆ๋‹ค.
      Detected change in Cloud Storage bucket: storage.googleapis.com/projects/_/buckets/BUCKET_NAME/objects/random.txt
      ์—ฌ๊ธฐ์„œ BUCKET_NAME์€ Cloud Storage ๋ฒ„ํ‚ท์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

    gcloud

    1. gcloud logging read "resource.labels.service_name=helloworld-events AND textPayload:random.txt" --format=json
    2. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋กœ๊ทธ ํ•ญ๋ชฉ์„ ์ฐพ์Šต๋‹ˆ๋‹ค.
      Detected change in Cloud Storage bucket: storage.googleapis.com/projects/_/buckets/BUCKET_NAME/objects/random.txt
      ์—ฌ๊ธฐ์„œ BUCKET_NAME์€ Cloud Storage ๋ฒ„ํ‚ท์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

Cloud Run์— ์ด๋ฒคํŠธ ์ˆ˜์‹ ์ž ์„œ๋น„์Šค๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ๋ฐฐํฌํ•˜๊ณ , Eventarc ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๋งŒ๋“ค๊ณ , Cloud Storage์—์„œ ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ด๋ฅผ Cloud Run ๋กœ๊ทธ์—์„œ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

์‚ญ์ œ

Cloud Run์—์„œ๋Š” ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๋•Œ ๋น„์šฉ์ด ์ฒญ๊ตฌ๋˜์ง€ ์•Š์ง€๋งŒ Artifact Registry์— ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ์ €์žฅ, Cloud Storage ๋ฒ„ํ‚ท์— ํŒŒ์ผ ์ €์žฅ, Eventarc ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์š”๊ธˆ์€ ๋ถ€๊ณผ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ์‚ญ์ œ

  2. ์Šคํ† ๋ฆฌ์ง€ ๋ฒ„ํ‚ท์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

  3. Eventarc ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

๋˜๋Š” Google Cloud ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ญ์ œํ•˜์—ฌ ๋น„์šฉ ์ฒญ๊ตฌ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Google Cloud ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ญ์ œํ•˜๋ฉด ํ”„๋กœ์ ํŠธ ๋‚ด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“  ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ๋น„์šฉ ์ฒญ๊ตฌ๊ฐ€ ์ค‘์ง€๋ฉ๋‹ˆ๋‹ค.

Delete a Google Cloud project:

gcloud projects delete PROJECT_ID

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