Pub/Sub ๋ฉ”์‹œ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ ํŠธ๋ฆฌ๊ฑฐ(gcloud CLI)

์ด ๋น ๋ฅธ ์‹œ์ž‘์—์„œ๋Š” Pub/Sub๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” Eventarc ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์›Œํฌํ”Œ๋กœ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ํŠธ๋ฆฌ๊ฑฐ๋Š” Pub/Sub๋ฅผ ํ†ตํ•ด ๋Ÿฐํƒ€์ž„ ์ธ์ˆ˜๋กœ ์ œ๊ณต๋˜๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋Œ€์ƒ ์›Œํฌํ”Œ๋กœ์— ์ „๋‹ฌํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋น ๋ฅธ ์‹œ์ž‘์—์„œ๋Š” ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  1. Workflows๋ฅผ ์‚ฌ์šฉํ•ด์„œ Pub/Sub ๋ฉ”์‹œ์ง€๋ฅผ ๋””์ฝ”๋”ฉํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•˜๋Š” ์›Œํฌํ”Œ๋กœ๋ฅผ ๋งŒ๋“ค๊ณ  ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.
  2. Pub/Sub ์ฃผ์ œ๋ฅผ Workflows ์ด๋ฒคํŠธ ์ˆ˜์‹ ์ž์— ์—ฐ๊ฒฐํ•˜๋Š” Eventarc ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  3. Pub/Sub ์ฃผ์ œ์— ๋ฉ”์‹œ์ง€๋ฅผ ๊ฒŒ์‹œํ•˜์—ฌ ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ์ด๋ฒคํŠธ๋Š” ๋Œ€์ƒ ์›Œํฌํ”Œ๋กœ์— ๋Ÿฐํƒ€์ž„ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.
  4. Pub/Sub ๋ฉ”์‹œ์ง€๋ฅผ ์›Œํฌํ”Œ๋กœ ์‹คํ–‰ ๊ฒฐ๊ณผ๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

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

Google Cloud Workflows์˜ ๋น„๊ณต๊ฐœ ํ”„๋ฆฌ๋ทฐ์— ํ”„๋กœ์ ํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋„๋ก ์š”์ฒญํ•˜์—ฌ ์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ํ™•๋ณดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  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. Install the Google Cloud CLI.

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

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

    gcloud init
  10. 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.

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

  12. gcloud ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
    gcloud components update
  13. Compute Engine, Eventarc, Pub/Sub, Workflows API๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    gcloud services enable \
    compute.googleapis.com \
    eventarc.googleapis.com \
    pubsub.googleapis.com \
    workflows.googleapis.com \
    workflowexecutions.googleapis.com
  14. ์ด ํŠœํ† ๋ฆฌ์–ผ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ตฌ์„ฑ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    export WORKFLOW_LOCATION=us-central1
    export TRIGGER_LOCATION=us-central1
    export PROJECT_ID=PROJECT_ID
    gcloud config set project ${PROJECT_ID}
    gcloud config set workflows/location ${WORKFLOW_LOCATION}
    gcloud config set eventarc/location ${TRIGGER_LOCATION}
  15. ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ์ž์—๊ฒŒ๋Š” ๊ธฐ๋ณธ ์†Œ์œ ์ž ์—ญํ• (roles/owner)์ด ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Identity and Access Management(IAM) ์—ญํ• ์—๋Š” ๋Œ€๋ถ€๋ถ„์˜ Google Cloud๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ „์ฒด ์•ก์„ธ์Šค์— ํ•„์š”ํ•œ ๊ถŒํ•œ์ด ํฌํ•จ๋˜๋ฉฐ, ์ด ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

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

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

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

  16. ํ…Œ์ŠคํŠธ ๋ชฉ์ ์œผ๋กœ Eventarc ํŠธ๋ฆฌ๊ฑฐ์— ์—ฐ๊ฒฐํ•  ๋•Œ ํŠธ๋ฆฌ๊ฑฐ์˜ ID๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด Compute Engine ๊ธฐ๋ณธ ์„œ๋น„์Šค ๊ณ„์ •์„ ๊ธฐ๋กํ•ด ๋‘ก๋‹ˆ๋‹ค. ์ด ์„œ๋น„์Šค ๊ณ„์ •์€ Compute Engine์„ ์‚ฌ์šฉํ•˜๋Š” Google Cloud ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•œ ํ›„์— ๋‹ค์Œ ์ด๋ฉ”์ผ ํ˜•์‹์œผ๋กœ ์ž๋™ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

    PROJECT_NUMBER-compute@developer.gserviceaccount.com

    ์—ฌ๊ธฐ์—์„œ PROJECT_NUMBER๋ฅผ Google Cloudํ”„๋กœ์ ํŠธ ๋ฒˆํ˜ธ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. Google Cloud ์ฝ˜์†”์˜ ์‹œ์ž‘ ํŽ˜์ด์ง€์—์„œ ๋˜๋Š” ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํ”„๋กœ์ ํŠธ ๋ฒˆํ˜ธ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'

    ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์˜ ๊ฒฝ์šฐ ์ƒˆ ์„œ๋น„์Šค ๊ณ„์ •์„ ๋งŒ๋“ค๊ณ  ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ๊ถŒํ•œ์„ ํฌํ•จํ•˜๊ณ  ์ตœ์†Œ ๊ถŒํ•œ ์›์น™์„ ๋”ฐ๋ฅด๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ IAM ์—ญํ• ์„ ๋ถ€์—ฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

  17. Compute Engine ๊ธฐ๋ณธ ์„œ๋น„์Šค ๊ณ„์ •์— ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ Workflows ํ˜ธ์ถœ์ž ์—ญํ• (roles/workflows.invoker)์„ ๋ถ€์—ฌํ•˜์—ฌ ๊ณ„์ •์— ์›Œํฌํ”Œ๋กœ ์‹คํ–‰์„ ํŠธ๋ฆฌ๊ฑฐํ•  ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/workflows.invoker
  18. 2021๋…„ 4์›” 8์ผ ์ด์ „์— Cloud Pub/Sub ์„œ๋น„์Šค ์—์ด์ „ํŠธ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜์—ฌ ์ธ์ฆ๋œ Pub/Sub ํ‘ธ์‹œ ์š”์ฒญ์„ ์ง€์›ํ•œ ๊ฒฝ์šฐ ์„œ๋น„์Šค ๊ณ„์ • ํ† ํฐ ์ƒ์„ฑ์ž ์—ญํ• (roles/iam.serviceAccountTokenCreator)์„ ์„œ๋น„์Šค ์—์ด์ „ํŠธ์— ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด ์—ญํ• ์ด ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค.
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator

์›Œํฌํ”Œ๋กœ ์ƒ์„ฑ ๋ฐ ๋ฐฐํฌ

Pub/Sub ์ฃผ์ œ์— ๊ฒŒ์‹œ๋œ ๋ฉ”์‹œ์ง€๊ฐ€ HTTP ์š”์ฒญ์œผ๋กœ ์›Œํฌํ”Œ๋กœ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•  ๋•Œ ์‹คํ–‰๋˜๋Š” ์›Œํฌํ”Œ๋กœ๋ฅผ ๋งŒ๋“ค๊ณ  ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.

  1. ํ„ฐ๋ฏธ๋„ ๋˜๋Š” Cloud Shell์„ ์—ฝ๋‹ˆ๋‹ค.
  2. ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ์— myFirstWorkflow.yaml ๋˜๋Š” myFirstWorkflow.json์ด๋ผ๋Š” ์ด๋ฆ„์˜ ์ƒˆ ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  3. ๋‹ค์Œ์„ ๋ณต์‚ฌํ•˜์—ฌ ์ƒˆ ํŒŒ์ผ์— ๋ถ™์—ฌ๋„ฃ์€ ํ›„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

    YAML

    main:
      params: [event]
      steps:
        - decode_pubsub_message:
            assign:
               - base64: ${base64.decode(event.data.message.data)}
               - message: ${text.decode(base64)}
        - return_pubsub_message:
            return: ${message}

    JSON

    {
      "main": {
        "params": [
          "event"
        ],
        "steps": [
          {
            "decode_pubsub_message": {
              "assign": [
                {
                  "base64": "${base64.decode(event.data.message.data)}"
                },
                {
                  "message": "${text.decode(base64)}"
                }
              ]
            }
          },
          {
            "return_pubsub_message": {
              "return": "${message}"
            }
          }
        ]
      }
    }
  4. ์›Œํฌํ”Œ๋กœ๋ฅผ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.
    export MY_WORKFLOW=myFirstWorkflow
    gcloud workflows deploy ${MY_WORKFLOW} --source=myFirstWorkflow.yaml
    ์˜ˆ์‹œ ์›Œํฌํ”Œ๋กœ์˜ JSON ๋ฒ„์ „์„ ๋ณต์‚ฌํ•œ ๊ฒฝ์šฐ .yaml์„ .json์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

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

๋ฉ”์‹œ์ง€๊ฐ€ Pub/Sub ์ฃผ์ œ์— ๊ฒŒ์‹œ๋˜์—ˆ์œผ๋ฉด ์ด๋ฒคํŠธ๊ฐ€ ์›Œํฌํ”Œ๋กœ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

  1. Pub/Sub ๋ฉ”์‹œ์ง€๋ฅผ ๋ฆฌ์Šจํ•˜๋Š” ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    ์ƒˆ Pub/Sub ์ฃผ์ œ

    gcloud eventarc triggers create events-pubsub-trigger \
        --destination-workflow=${MY_WORKFLOW} \
        --destination-workflow-location=${WORKFLOW_LOCATION} \
        --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
        --service-account="PROJECT_NUMBER-compute@developer.gserviceaccount.com"

    ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ƒˆ Pub/Sub ์ฃผ์ œ์™€ events-pubsub-trigger๋ผ๋Š” ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

    ๊ธฐ์กด Pub/Sub ์ฃผ์ œ

    gcloud eventarc triggers create events-pubsub-trigger \
        --destination-workflow=${MY_WORKFLOW} \
        --destination-workflow-location=${WORKFLOW_LOCATION} \
        --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
        --service-account="PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
        --transport-topic=TOPIC_ID

    TOPIC_ID๋ฅผ ๊ธฐ์กด Pub/Sub ์ฃผ์ œ์˜ ID๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    ๊ธฐ์กด Pub/Sub ์ฃผ์ œ์— ๋Œ€ํ•œ events-pubsub-trigger๋ผ๋Š” ์ด๋ฆ„์˜ ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    Google Cloud ํ”„๋กœ์ ํŠธ์—์„œ ์ฒ˜์Œ์œผ๋กœ Eventarc ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๋งŒ๋“ค ๋•Œ๋Š” Eventarc ์„œ๋น„์Šค ์—์ด์ „ํŠธ๋ฅผ ํ”„๋กœ๋น„์ €๋‹ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ์ง€์—ฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ค๋ฉด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ถŒํ•œ ๊ฑฐ๋ถ€ ์˜ค๋ฅ˜๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

  2. ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.
    gcloud eventarc triggers describe events-pubsub-trigger --location=${TRIGGER_LOCATION}

    ์ถœ๋ ฅ์€ ์ƒ์„ฑ ์‹œ๊ฐ„ ๋ฐ ํŠธ๋ฆฌ๊ฑฐ ์œ„์น˜๊ฐ€ ๋‚˜์—ด๋œ ๋‹ค์Œ ๋ชฉ๋ก๊ณผ ๋น„์Šทํ•˜๊ฒŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    createTime: '2021-10-14T15:15:43.872360951Z'
    [...]
    name: projects/PROJECT_ID/locations/us-central1/triggers/events-pubsub-trigger

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

Pub/Sub ์ฃผ์ œ์— ๋ฉ”์‹œ์ง€๋ฅผ ๊ฒŒ์‹œํ•˜์—ฌ ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์›Œํฌํ”Œ๋กœ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ ์ด๋ฒคํŠธ๊ฐ€ ์›Œํฌํ”Œ๋กœ์— ๋Ÿฐํƒ€์ž„ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋˜๊ณ , ์ด๋Š” Pub/Sub ๋ฉ”์‹œ์ง€๋ฅผ ์›Œํฌํ”Œ๋กœ ์‹คํ–‰ ๊ฒฐ๊ณผ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์›Œํฌํ”Œ๋กœ์— ์ „๋‹ฌํ•˜๋Š” ์ด๋ฒคํŠธ ํฌ๊ธฐ๊ฐ€ 512KB๋ฅผ ์ดˆ๊ณผํ•˜์ง€ ์•Š๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. ์ƒˆ Pub/Sub ์ฃผ์ œ์— ๋Œ€ํ•ด ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๋งŒ๋“ค์—ˆ์œผ๋ฉด ์ƒ์„ฑ๋œ Pub/Sub ์ฃผ์ œ๋ฅผ ์ฐพ์•„์„œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    export TOPIC_ID=$(basename $(gcloud eventarc triggers describe events-pubsub-trigger --format='value(transport.pubsub.topic)'))
  2. ์›Œํฌํ”Œ๋กœ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”์‹œ์ง€๋ฅผ Pub/Sub ์ฃผ์ œ์— ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

    gcloud pubsub topics publish $TOPIC_ID --message "Hello there"

    ์ƒ์„ฑ๋œ ์ด๋ฒคํŠธ๊ฐ€ ์›Œํฌํ”Œ๋กœ์— ๋Ÿฐํƒ€์ž„ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋˜๊ณ  "Hello there" ๋ฉ”์‹œ์ง€๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

  3. ์›Œํฌํ”Œ๋กœ ์‹คํ–‰์ด ํŠธ๋ฆฌ๊ฑฐ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด ๋งˆ์ง€๋ง‰์˜ 5๊ฐœ ์‹คํ–‰์„ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค.

    gcloud workflows executions list ${MY_WORKFLOW} --limit=5

    ์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ์œ ์‚ฌํ•ด์•ผ ํ•˜๋ฉฐ, ๊ฐ ์›Œํฌํ”Œ๋กœ ์‹คํ–‰์—์„œ SUCCEEDED์™€ ๋™์ผํ•œ NAME ๋ฐ STATE๋ฅผ ๋‚˜์—ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    NAME: projects/606789101455/locations/us-central1/workflows/myFirstWorkflow/executions/8c02b8f1-8836-4a6d-99d9-fc321eb9668f
    STATE: SUCCEEDED
    START_TIME: 2021-09-13T19:15:10.275677049Z
    END_TIME: 2021-09-13T19:15:10.963136883Z
    NAME: projects/606789101455/locations/us-central1/workflows/myFirstWorkflow/executions/a6319d9d-36a6-4117-904e-3d1118bdc90a
    STATE: SUCCEEDED
    START_TIME: 2021-09-13T17:28:51.492864252Z
    END_TIME: 2021-09-13T17:28:52.227212414Z
    

    ์œ„์˜ ์˜ˆ์‹œ์—์„œ NAME ํ•„๋“œ์˜ a6319d9d-36a6-4117-904e-3d1118bdc90a๋Š” ์›Œํฌํ”Œ๋กœ ์‹คํ–‰์˜ ID์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‹จ๊ณ„์—์„œ ์‚ฌ์šฉํ•  ์‹คํ–‰ ID๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

  4. ์‹คํ–‰ ์ƒํƒœ๋ฅผ ๋ณด๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    gcloud workflows executions describe WORKFLOW_EXECUTION_ID --workflow=${MY_WORKFLOW}

    WORKFLOW_EXECUTION_ID๋ฅผ Pub/Sub ์ฃผ์ œ์˜ ๊ฒŒ์‹œ ์‹œ๊ฐ„๊ณผ ์ผ์น˜ํ•˜๋Š” ์›Œํฌํ”Œ๋กœ ์‹คํ–‰ ID๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.

    argument: [...]
    endTime: '2021-09-13T17:28:47.301012152Z'
    name: projects/1234567/locations/us-central1/workflows/myFirstWorkflow/executions/f72bc6d4-5ea0-4dfb-bb14-2dae82303120
    result: 'Hello there'
    startTime: '2021-09-13T17:28:51.492864252Z'
    state: SUCCEEDED
  5. Pub/Sub ๋ฉ”์‹œ์ง€๊ฐ€ ๊ฒŒ์‹œ๋œ publish_time๊ณผ ์›Œํฌํ”Œ๋กœ ์‹คํ–‰ startTime์ด ์„œ๋กœ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์ˆ˜๊ณ ํ•˜์…จ์Šต๋‹ˆ๋‹ค. Eventarc๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Workflows ์ด๋ฒคํŠธ ์ˆ˜์‹ ์ž๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•œ Pub/Sub ์ฃผ์ œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์„ฑ๊ณต์ ์œผ๋กœ ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

์‚ญ์ œ

  1. ๋งŒ๋“  ์›Œํฌํ”Œ๋กœ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
    gcloud workflows delete ${MY_WORKFLOW}
    ๊ณ„์† ์ง„ํ–‰ํ• ์ง€ ๋ฌป๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด y๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  2. ๋งŒ๋“  ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
    gcloud eventarc triggers delete events-pubsub-trigger
  3. ๋˜๋Š” Google Cloud ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ญ์ œํ•˜์—ฌ ๋น„์šฉ ์ฒญ๊ตฌ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Google Cloud ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ญ์ œํ•˜๋ฉด ํ”„๋กœ์ ํŠธ ๋‚ด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“  ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ๋น„์šฉ ์ฒญ๊ตฌ๊ฐ€ ์ค‘์ง€๋ฉ๋‹ˆ๋‹ค.

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

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