์„œ๋น„์Šค ์ปจํ…Œ์ด๋„ˆ ๊ตฌ์„ฑ

์ด ํŽ˜์ด์ง€์—์„œ๋Š” Cloud Run ์„œ๋น„์Šค์˜ ์ปจํ…Œ์ด๋„ˆ ํฌํŠธ, ์ง„์ž…์  ๋ช…๋ น์–ด, ์ธ์ˆ˜๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

Cloud Run์€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ ์ด๋ฏธ์ง€์˜ ๊ธฐ๋ณธ ์ง„์ž…์  ๋ช…๋ น์–ด ๋ฐ ๊ธฐ๋ณธ ๋ช…๋ น์–ด ์ธ์ˆ˜๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€์˜ ๊ธฐ๋ณธ ์ง„์ž…์  ๋ฐ ๋ช…๋ น์–ด ์ธ์ˆ˜๋ฅผ ์žฌ์ •์˜ํ•˜๋ ค๋ฉด ์ปจํ…Œ์ด๋„ˆ ๊ตฌ์„ฑ์—์„œ command ๋ฐ args ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. command ํ•„๋“œ๋Š” ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰ํ•˜๋Š” ์‹ค์ œ ๋ช…๋ น์–ด๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. args ํ•„๋“œ๋Š” ํ•ด๋‹น ๋ช…๋ น์–ด๋กœ ์ „๋‹ฌ๋˜๋Š” ์ธ์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์„œ๋น„์Šค๋งˆ๋‹ค ์ปจํ…Œ์ด๋„ˆ๋‹น ์ธ์ˆ˜๊ฐ€ ์ตœ๋Œ€ 1,000๊ฐœ๊นŒ์ง€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•„์š”ํ•œ ์—ญํ• 

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

Cloud Run๊ณผ ์—ฐ๊ฒฐ๋œ IAM ์—ญํ•  ๋ฐ ๊ถŒํ•œ ๋ชฉ๋ก์€ Cloud Run IAM ์—ญํ•  ๋ฐ Cloud Run IAM ๊ถŒํ•œ์„ ์ฐธ์กฐํ•˜์„ธ์š”. Cloud Run ์„œ๋น„์Šค๊ฐ€ Cloud ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๊ฐ™์€Google Cloud API์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์„œ๋น„์Šค ID ๊ตฌ์„ฑ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. ์—ญํ•  ๋ถ€์—ฌ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฐฐํฌ ๊ถŒํ•œ ๋ฐ ์•ก์„ธ์Šค ๊ด€๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ปจํ…Œ์ด๋„ˆ ํฌํŠธ ๊ตฌ์„ฑ

๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•˜๋ฉด ์ƒˆ ๋ฒ„์ „์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ช…์‹œ์  ์—…๋ฐ์ดํŠธ๊ฐ€ ์—†์œผ๋ฉด ์ดํ›„ ๋ฒ„์ „์—๋„ ์ด ๊ตฌ์„ฑ ์„ค์ •์ด ์ž๋™์œผ๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

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

์ฝ˜์†”

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

    Cloud Run์œผ๋กœ ์ด๋™

  2. ๋ฉ”๋‰ด์—์„œ ์„œ๋น„์Šค๋ฅผ ์„ ํƒํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ ๋ฐฐํฌ๋ฅผ ํด๋ฆญํ•˜์—ฌ ์ƒˆ ์„œ๋น„์Šค๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ์„œ๋น„์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ์„œ๋น„์Šค๋ฅผ ํด๋ฆญํ•œ ํ›„ ์ƒˆ ๋ฒ„์ „ ์ˆ˜์ • ๋ฐ ๋ฐฐํฌ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  3. ์ƒˆ ์„œ๋น„์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ์ดˆ๊ธฐ ์„œ๋น„์Šค ์„ค์ • ํŽ˜์ด์ง€๋ฅผ ์ž‘์„ฑํ•œ ํ›„ ์ปจํ…Œ์ด๋„ˆ, ๋ณผ๋ฅจ, ๋„คํŠธ์›Œํ‚น, ๋ณด์•ˆ์„ ํด๋ฆญํ•˜์—ฌ ์„œ๋น„์Šค ๊ตฌ์„ฑ ํŽ˜์ด์ง€๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

  4. ์ปจํ…Œ์ด๋„ˆ ํƒญ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    ์ด๋ฏธ์ง€

    • ๊ธฐ๋ณธ๊ฐ’์ด 8080์ด ์•„๋‹Œ ๊ฒฝ์šฐ ์š”์ฒญ์„ ์ „์†กํ•  ํฌํŠธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด PORT ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋„ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
  5. ๋งŒ๋“ค๊ธฐ ๋˜๋Š” ๋ฐฐํฌ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

gcloud

๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค์˜ ํฌํŠธ ๊ตฌ์„ฑ์„ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

gcloud run services update SERVICE --port PORT

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • SERVICE: ์„œ๋น„์Šค ์ด๋ฆ„
  • PORT: ์š”์ฒญ์„ ์ „์†กํ•  ํฌํŠธ. ๊ธฐ๋ณธ ํฌํŠธ๋Š” 8080์ž…๋‹ˆ๋‹ค.

๋ฐฐํฌ ์ค‘์— ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํฌํŠธ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

gcloud run deploy --image IMAGE_URL --port PORT

IMAGE_URL์„ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ์ฐธ์กฐ(์˜ˆ: us-docker.pkg.dev/cloudrun/container/hello:latest)๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. Artifact Registry๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ €์žฅ์†Œ REPO_NAME์ด ์ด๋ฏธ ์ƒ์„ฑ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. URL์˜ ํ˜•์‹์€ LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG์ž…๋‹ˆ๋‹ค.

YAML

  1. ์ƒˆ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์—๋Š” ์ด ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. ๊ธฐ์กด ์„œ๋น„์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒฝ์šฐ YAML ๊ตฌ์„ฑ์„ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

    gcloud run services describe SERVICE --format export > service.yaml
  2. containerPort: ์†์„ฑ์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          name: REVISION
        spec:
          containers:
          - image: IMAGE_URL
            ports:
            - containerPort: PORT
    

    ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • SERVICE: Cloud Run ์„œ๋น„์Šค ์ด๋ฆ„
    • IMAGE_URL: ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ์ฐธ์กฐ(์˜ˆ: us-docker.pkg.dev/cloudrun/container/hello:latest). Artifact Registry๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ €์žฅ์†Œ REPO_NAME์ด ์ด๋ฏธ ์ƒ์„ฑ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. URL์˜ ํ˜•์‹์€ LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG์ž…๋‹ˆ๋‹ค.
    • PORT: ์š”์ฒญ์„ ์ „์†กํ•  ํฌํŠธ
    • REVISION: ์ƒˆ ๋ฒ„์ „ ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์ด๋ฏธ ์žˆ๋Š” ๊ฒฝ์šฐ ์‚ญ์ œ ๊ฐ€๋Šฅ. ์ƒˆ ๋ฒ„์ „ ์ด๋ฆ„์„ ์ œ๊ณตํ•  ๊ฒฝ์šฐ ๋‹ค์Œ ๊ธฐ์ค€์„ ๋ฐ˜๋“œ์‹œ ์ถฉ์กฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
      • SERVICE-๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
      • ์†Œ๋ฌธ์ž, ์ˆซ์ž, -๋งŒ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
      • -๋กœ ๋๋‚˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค.
      • 63์ž(์˜๋ฌธ ๊ธฐ์ค€) ์ดํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ์ƒˆ ๊ตฌ์„ฑ์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    gcloud run services replace service.yaml

Terraform

Terraform ๊ตฌ์„ฑ์„ ์ ์šฉํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๊ธฐ๋ณธ Terraform ๋ช…๋ น์–ด๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Terraform ๊ตฌ์„ฑ์—์„œ ๋‹ค์Œ์„ google_cloud_run_v2_service ๋ฆฌ์†Œ์Šค์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
resource "google_cloud_run_v2_service" "default" {
  name     = "SERVICE"
  location = "REGION"

  template {
    containers {
      name = "hello-1"
      ports {
        container_port = PORT
      }
      image = "IMAGE_URL"
    }
  }
}

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • SERVICE๋ฅผ Cloud Run ์„œ๋น„์Šค ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
  • REGION์„ Google Cloud ๋ฆฌ์ „์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด europe-west1์ž…๋‹ˆ๋‹ค.
  • IMAGE_URL์„ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ์ฐธ์กฐ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค(์˜ˆ: us-docker.pkg.dev/cloudrun/container/hello).
  • PORT: ์š”์ฒญ์„ ์ „์†กํ•  ํฌํŠธ.

์ง„์ž…์  ๋ฐ ์ธ์ˆ˜ ๊ตฌ์„ฑ

๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•˜๋ฉด ์ƒˆ ๋ฒ„์ „์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ช…์‹œ์  ์—…๋ฐ์ดํŠธ๊ฐ€ ์—†์œผ๋ฉด ์ดํ›„ ๋ฒ„์ „์—๋„ ์ด ๊ตฌ์„ฑ ์„ค์ •์ด ์ž๋™์œผ๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ง€์ •๋œ ์ปจํ…Œ์ด๋„ˆ ๋ช…๋ น์–ด ๋ฐ ์ธ์ˆ˜๋Š” ๊ธฐ๋ณธ ์ด๋ฏธ์ง€ ENTRYPOINT ๋ฐ CMD๋ฅผ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์ƒˆ ๋ฒ„์ „์„ ๋ฐฐํฌํ•  ๋•Œ Google Cloud ์ฝ˜์†”, Google Cloud CLI ๋˜๋Š” YAML ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ง„์ž…์  ๋ช…๋ น์–ด ๋ฐ ์ธ์ˆ˜๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ˜์†”

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

    Cloud Run์œผ๋กœ ์ด๋™

  2. ๋ฉ”๋‰ด์—์„œ ์„œ๋น„์Šค๋ฅผ ์„ ํƒํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ ๋ฐฐํฌ๋ฅผ ํด๋ฆญํ•˜์—ฌ ์ƒˆ ์„œ๋น„์Šค๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ์„œ๋น„์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ์„œ๋น„์Šค๋ฅผ ํด๋ฆญํ•œ ํ›„ ์ƒˆ ๋ฒ„์ „ ์ˆ˜์ • ๋ฐ ๋ฐฐํฌ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  3. ์ƒˆ ์„œ๋น„์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ์ดˆ๊ธฐ ์„œ๋น„์Šค ์„ค์ • ํŽ˜์ด์ง€๋ฅผ ์ž‘์„ฑํ•œ ํ›„ ์ปจํ…Œ์ด๋„ˆ, ๋ณผ๋ฅจ, ๋„คํŠธ์›Œํ‚น, ๋ณด์•ˆ์„ ํด๋ฆญํ•˜์—ฌ ์„œ๋น„์Šค ๊ตฌ์„ฑ ํŽ˜์ด์ง€๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

  4. ์ปจํ…Œ์ด๋„ˆ ํƒญ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    ์ด๋ฏธ์ง€

    • ์ปจํ…Œ์ด๋„ˆ์— ์ •์˜๋œ ๋ช…๋ น์–ด๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ๋ช…๋ น์–ด๋ฅผ ์ง€์ •ํ•˜๊ณ , ์›ํ•  ๊ฒฝ์šฐ ์ง„์ž…์  ๋ช…๋ น์–ด์— ๋Œ€ํ•œ ์ธ์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  5. ๋งŒ๋“ค๊ธฐ ๋˜๋Š” ๋ฐฐํฌ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

gcloud

๊ธฐ์กด ์„œ๋น„์Šค์˜ ์‹œ์ž‘ ๋ช…๋ น์–ด ๋ฐ ์ธ์ˆ˜๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

gcloud run services update SERVICE --command COMMAND --args ARG1,ARG-N

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • COMMAND: ๊ธฐ๋ณธ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋˜๋Š” ๋ช…๋ น์–ด
  • ARG1: ์ปจํ…Œ์ด๋„ˆ ๋ช…๋ น์–ด๋กœ ์ „์†ก ์ค‘์ธ ์ธ์ˆ˜. ๋‘ ๊ฐœ ์ด์ƒ์˜ ์ธ์ˆ˜์—๋Š” ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„๋œ ๋ชฉ๋ก์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ ์„œ๋น„์Šค ๋˜๋Š” ๊ธฐ์กด ์„œ๋น„์Šค๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๋™์•ˆ ์ง„์ž…์  ๋ฐ ์ธ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

gcloud run deploy --image IMAGE_URL --command COMMAND --args ARG1,ARG-N

IMAGE_URL์„ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ์ฐธ์กฐ(์˜ˆ: us-docker.pkg.dev/cloudrun/container/hello:latest)๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. Artifact Registry๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ €์žฅ์†Œ REPO_NAME์ด ์ด๋ฏธ ์ƒ์„ฑ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. URL์˜ ํ˜•์‹์€ LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG์ž…๋‹ˆ๋‹ค.

์„ค์ •ํ•œ ์ง„์ž…์  ๋ช…๋ น์–ด ๋ฐ ์ธ์ˆ˜๋ฅผ ์‚ญ์ œํ•˜๋ ค๋ฉด(์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋ณต์›) ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋นˆ ๋ฌธ์ž์—ด์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

gcloud run deploy --image IMAGE_URL --command "" --args ""

YAML

  1. ์ƒˆ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์—๋Š” ์ด ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. ๊ธฐ์กด ์„œ๋น„์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒฝ์šฐ YAML ๊ตฌ์„ฑ์„ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

    gcloud run services describe SERVICE --format export > service.yaml
  2. command ์†์„ฑ๊ณผ args ์†์„ฑ์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          containers:
          - image: IMAGE_URL
            command:
            - COMMAND
            args:
            - ARG1
            - ARG-N

    ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • IMAGE_URL: ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ์ฐธ์กฐ(์˜ˆ: us-docker.pkg.dev/cloudrun/container/hello:latest). Artifact Registry๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ €์žฅ์†Œ REPO_NAME์ด ์ด๋ฏธ ์ƒ์„ฑ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. URL์˜ ํ˜•์‹์€ LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG์ž…๋‹ˆ๋‹ค.
    • COMMAND๋ฅผ ๊ธฐ๋ณธ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋˜๋Š” ๋ช…๋ น์–ด๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
    • ARG1: ์ปจํ…Œ์ด๋„ˆ ๋ช…๋ น์–ด๋กœ ์ „์†ก ์ค‘์ธ ์ธ์ˆ˜. ์—ฌ๋Ÿฌ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐ ํ–‰์— ๊ฐ๊ฐ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: ARG-N).
  3. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ์ƒˆ ๊ตฌ์„ฑ์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    gcloud run services replace service.yaml

Terraform

Terraform ๊ตฌ์„ฑ์„ ์ ์šฉํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๊ธฐ๋ณธ Terraform ๋ช…๋ น์–ด๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Terraform ๊ตฌ์„ฑ์—์„œ ๋‹ค์Œ์„ google_cloud_run_v2_service ๋ฆฌ์†Œ์Šค์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-containers"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"

      # Container "entry-point" command
      command = ["/server"]

      # Container "entry-point" args
      args = []
    }
  }
}

์•ž์„œ ๋‚˜์˜จ google_cloud_run_v2_service ๋ฆฌ์†Œ์Šค๋Š” ๋ช…๋ น์–ด์™€ ์ธ์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. /server๋ฅผ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ช…๋ น์–ด๋กœ ๋ฐ”๊พธ๊ณ  ํ•„์š”ํ•œ ์ธ์ˆ˜๋ฅผ args ๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ธ์ˆ˜์— ๋“ฑํ˜ธ ๋˜๋Š” ์‰ผํ‘œ ์‚ฌ์šฉ

์ธ์ˆ˜์— ๋“ฑํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ ํ˜•์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

gcloud run deploy  \
  --args="--repo-allowlist=github.com/example/example_demo"

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

์‚ฌ์ด๋“œ์นด ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘ ์ˆœ์„œ ๊ตฌ์„ฑ

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

์ด ๊ธฐ๋Šฅ์„ ์„ฑ๊ณต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์‹œ์ž‘ ์ƒํƒœ ์ ๊ฒ€ ํ”„๋กœ๋ธŒ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹œ์ž‘ ํ”„๋กœ๋ธŒ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Cloud Run์ด ์ข…์† ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒํƒœ๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ ํ†ต๊ณผ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•œ ํ›„์— ๋‹ค์Œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒํƒœ ํ™•์ธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ์ข…์†๋œ ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘์— ์‹คํŒจํ•˜๋”๋ผ๋„ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ง€์ •๋œ ์ˆœ์„œ๋กœ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

์ธ๊ทธ๋ ˆ์Šค ์ปจํ…Œ์ด๋„ˆ์—๋Š” ๊ธฐ๋ณธ ์‹œ์ž‘ ์ƒํƒœ ์ ๊ฒ€ ํ”„๋กœ๋ธŒ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Google Cloud ์ฝ˜์†”, Google Cloud CLI ๋˜๋Š” YAML์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์ž‘ ์ˆœ์„œ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ˜์†”

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

    Cloud Run์œผ๋กœ ์ด๋™

    • ๊ธฐ์กด ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ ๋ชฉ๋ก์—์„œ ์„œ๋น„์Šค๋ฅผ ํด๋ฆญํ•˜๊ณ  ์ƒˆ ๋ฒ„์ „ ์ˆ˜์ • ๋ฐ ๋ฐฐํฌ๋ฅผ ์„ ํƒํ•˜์—ฌ ๋ฒ„์ „ ๋ฐฐํฌ ์–‘์‹์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
    • ์ƒˆ ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ ๋ฉ”๋‰ด์—์„œ ์„œ๋น„์Šค๋ฅผ ์„ ํƒํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ ๋ฐฐํฌ๋ฅผ ํด๋ฆญํ•˜์—ฌ ์„œ๋น„์Šค ๋งŒ๋“ค๊ธฐ ์–‘์‹์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  2. ์ƒˆ ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ ์„œ๋น„์Šค ์ด๋ฆ„, ์ธ๊ทธ๋ ˆ์Šค ์ปจํ…Œ์ด๋„ˆ URL, CPU ํ• ๋‹น, ์ธ๊ทธ๋ ˆ์Šค ์ปจํŠธ๋กค, ์ธ์ฆ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ, ๋ณผ๋ฅจ, ๋„คํŠธ์›Œํ‚น, ๋ณด์•ˆ ํƒญ์—์„œ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    1. ์ธ๊ทธ๋ ˆ์Šค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    2. ๋ฐฐํฌ ์ค‘์ธ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ฐ๊ฐ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ์ปจํ…Œ์ด๋„ˆ ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    3. ์ธ๊ทธ๋ ˆ์Šค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์˜ ๊ฒฝ์šฐ ์‹œ์ž‘ ์ƒํƒœ ์ ๊ฒ€์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ธ๊ทธ๋ ˆ์Šค ์ปจํ…Œ์ด๋„ˆ์—๋Š” ๊ธฐ๋ณธ ์‹œ์ž‘ ์ƒํƒœ ์ ๊ฒ€์ด ์žˆ์Šต๋‹ˆ๋‹ค.
    4. ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋จผ์ € ์‹œ์ž‘๋˜์–ด์•ผ ํŠน์ • ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘ ์ˆœ์„œ ๋ฉ”๋‰ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋จผ์ € ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ธฐ์กด ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

    1. ์ธ๊ทธ๋ ˆ์Šค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์˜ ๊ฒฝ์šฐ ์‹œ์ž‘ ์ƒํƒœ ์ ๊ฒ€์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ธ๊ทธ๋ ˆ์Šค ์ปจํ…Œ์ด๋„ˆ์—๋Š” ๊ธฐ๋ณธ ์‹œ์ž‘ ์ƒํƒœ ์ ๊ฒ€์ด ์žˆ์Šต๋‹ˆ๋‹ค.
    2. ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋Š” ์ž์ฒด ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘ ์ˆœ์„œ ๋ฉ”๋‰ด์™€ ํ•จ๊ป˜ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋จผ์ € ์‹œ์ž‘๋˜์–ด์•ผ ํŠน์ • ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘ ์ˆœ์„œ ๋ฉ”๋‰ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋จผ์ € ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  4. ๋‹ค๋ฅธ ํ•„์ˆ˜ ๊ตฌ์„ฑ์„ ๋ชจ๋‘ ์™„๋ฃŒํ•œ ํ›„ ์ƒˆ ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ ๋งŒ๋“ค๊ธฐ๋ฅผ, ๊ธฐ์กด ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ ๋ฐฐํฌ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.

gcloud

Google Cloud CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์ž‘ ์ˆœ์„œ๋ฅผ ์ง€์ •ํ•˜๋ ค๋ฉด ๋จผ์ € ์ธ๊ทธ๋ ˆ์Šค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์— ์‹œ์ž‘ ์ƒํƒœ ์ ๊ฒ€์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ธ๊ทธ๋ ˆ์Šค ์ปจํ…Œ์ด๋„ˆ์—๋Š” ๊ธฐ๋ณธ ์‹œ์ž‘ ์ƒํƒœ ์ ๊ฒ€์ด ์žˆ์Šต๋‹ˆ๋‹ค. Google Cloud CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํƒœ ์ ๊ฒ€์„ ๊ตฌ์„ฑํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.

  1. 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.

  2. ์ง€์ •๋œ ์‹œ์ž‘ ์ˆœ์„œ์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์„œ๋น„์Šค์— ๋ฐฐํฌํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

gcloud run deploy SERVICE \
     --container CONTAINER_1_NAME --image='INGRESS_IMAGE' --port='CONTAINER_PORT' \
     --container CONTAINER_2_NAME --image='SIDECAR_IMAGE' --depends-on=CONTAINER_1_NAME \
     --container CONTAINER_3_NAME --image='SIDECAR_IMAGE' --depends-on=CONTAINER_1_NAMECONTAINER_2_NAME
  • SERVICE๋ฅผ ๋ฐฐํฌํ•  ์„œ๋น„์Šค์˜ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์™„์ „ํžˆ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ƒ๋žตํ•˜๋ฉด ์„œ๋น„์Šค ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • CONTAINER_PORT๋ฅผ ์ธ๊ทธ๋ ˆ์Šค ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ˆ˜์‹  ์š”์ฒญ์„ ๋ฆฌ์Šจํ•˜๋Š” ํฌํŠธ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ๋‹จ์ผ ์ปจํ…Œ์ด๋„ˆ ์„œ๋น„์Šค์™€ ๋‹ฌ๋ฆฌ ์‚ฌ์ด๋“œ์นด๊ฐ€ ํฌํ•จ๋œ ์„œ๋น„์Šค์—๋Š” ์ธ๊ทธ๋ ˆ์Šค ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ํฌํŠธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ธ๊ทธ๋ ˆ์Šค ์ปจํ…Œ์ด๋„ˆ์˜ ์ปจํ…Œ์ด๋„ˆ ํฌํŠธ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๊ตฌ์„ฑํ•ด์•ผ ํ•˜๋ฉฐ ํฌํŠธ๋Š” ์ปจํ…Œ์ด๋„ˆ ํ•˜๋‚˜์—๋งŒ ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • INGRESS_IMAGE๋ฅผ ์š”์ฒญ์„ ์ˆ˜์‹ ํ•ด์•ผ ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ์ฐธ์กฐ(์˜ˆ: us-docker.pkg.dev/cloudrun/container/hello:latest)๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
  • SIDECAR_IMAGE๋ฅผ ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ์ฐธ์กฐ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    ๋ฐฐํฌ ๋ช…๋ น์–ด์—์„œ ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด ๊ฐ ์ปจํ…Œ์ด๋„ˆ ๊ตฌ์„ฑ์„ container ๋งค๊ฐœ๋ณ€์ˆ˜ ๋‹ค์Œ์— ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

YAML

  1. ์ƒˆ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์—๋Š” ์ด ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. ๊ธฐ์กด ์„œ๋น„์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒฝ์šฐ YAML ๊ตฌ์„ฑ์„ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

    gcloud run services describe SERVICE --format export > service.yaml
  2. container-dependencies ์†์„ฑ์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      annotations:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/container-dependencies: '{"CONTAINER1":["CONTAINER2"], "CONTAINER3":["CONTAINER1","CONTAINER2"]}'
    

    ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • CONTAINER1์„ ํ•˜๋‚˜ ์ด์ƒ์˜ ์ปจํ…Œ์ด๋„ˆ์— ์ข…์†๋œ ์ฒซ ๋ฒˆ์งธ ์ปจํ…Œ์ด๋„ˆ์˜ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. YAML์—์„œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด Cloud Run์ด ์ž๋™์œผ๋กœ ์ด๋ฆ„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • CONTAINER2๋ฅผ CONTAINER1 ์ „์— ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
    • CONTAINER3์„ ํ•˜๋‚˜ ์ด์ƒ์˜ ์ปจํ…Œ์ด๋„ˆ์— ์ข…์†๋œ ๋‘ ๋ฒˆ์งธ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    YAML ์Šค๋‹ˆํŽซ์— ํ‘œ์‹œ๋œ ์˜ˆ์‹œ์—์„œ CONTAINER2๊ฐ€ ๋จผ์ € ์‹œ์ž‘๋˜๊ณ  CONTAINER1๊ฐ€ ๋‘ ๋ฒˆ์งธ๋กœ ์‹œ์ž‘๋˜๋ฉฐ, CONTAINER3์ด ๋งˆ์ง€๋ง‰์œผ๋กœ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

  3. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ์ƒˆ ๊ตฌ์„ฑ์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    gcloud run services replace service.yaml

Terraform

Terraform ๊ตฌ์„ฑ์„ ์ ์šฉํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๊ธฐ๋ณธ Terraform ๋ช…๋ น์–ด๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Terraform ๊ตฌ์„ฑ์—์„œ ๋‹ค์Œ์„ google_cloud_run_v2_service ๋ฆฌ์†Œ์Šค์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
resource "google_cloud_run_v2_service" "default" {
  name     = "SERVICE"
  location = "REGION"

  template {
    containers {
      name = "CONTAINER1"
      ports {
        container_port = 8080
      }
      image = "us-docker.pkg.dev/cloudrun/container/hello"
      depends_on = ["CONTAINER2"]
    }
    containers {
      name = "CONTAINER2"
      image = "us-docker.pkg.dev/cloudrun/container/hello"
      env {
        name = "PORT"
        value = "8081"
      }
      startup_probe {
        http_get {
          port = 8081
        }
      }
    }
    containers {
      name = "CONTAINER3"
      image = "us-docker.pkg.dev/cloudrun/container/hello"
      depends_on = ["CONTAINER1", "CONTAINER2"]
      env {
        name = "PORT"
        value = "8080"
      }
      startup_probe {
        http_get {
          port = 8080
        }
      }
    }
  }
}

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • SERVICE๋ฅผ Cloud Run ์„œ๋น„์Šค ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
  • REGION์„ Google Cloud ๋ฆฌ์ „์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด europe-west1์ž…๋‹ˆ๋‹ค.
  • CONTAINER1์„ ์ปจํ…Œ์ด๋„ˆ ํ•˜๋‚˜ ์ด์ƒ์— ์ข…์†๋œ ์ฒซ ๋ฒˆ์งธ ์ปจํ…Œ์ด๋„ˆ์˜ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
  • CONTAINER2๋ฅผ CONTAINER1๋ณด๋‹ค ๋จผ์ € ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
  • CONTAINER3์„ CONTAINER1 ๋ฐ CONTAINER2์— ์ข…์†๋œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ ์„ค์ • ๋ณด๊ธฐ

Cloud Run ์„œ๋น„์Šค์˜ ํ˜„์žฌ ์ปจํ…Œ์ด๋„ˆ ์„ค์ •์„ ๋ณด๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

์ฝ˜์†”

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

    Cloud Run์œผ๋กœ ์ด๋™

  2. ๊ด€์‹ฌ์ด ์žˆ๋Š” ์„œ๋น„์Šค๋ฅผ ํด๋ฆญํ•˜์—ฌ ์„œ๋น„์Šค ์„ธ๋ถ€์ •๋ณด ํŽ˜์ด์ง€๋ฅผ ์—ฝ๋‹ˆ๋‹ค.

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

  4. ์˜ค๋ฅธ์ชฝ์˜ ์„ธ๋ถ€์ •๋ณด ํŒจ๋„์—์„œ ์ปจํ…Œ์ด๋„ˆ ์„ค์ •์ด ์ปจํ…Œ์ด๋„ˆ ํƒญ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

gcloud

  1. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

    gcloud run services describe SERVICE
  2. ๋ฐ˜ํ™˜๋œ ๊ตฌ์„ฑ์—์„œ ์ปจํ…Œ์ด๋„ˆ ์„ค์ •์„ ์ฐพ์Šต๋‹ˆ๋‹ค.