์ด ํ์ด์ง์์๋ Cloud Run ์๋น์ค์ ์ปจํ ์ด๋ ํฌํธ, ์ง์ ์ ๋ช ๋ น์ด, ์ธ์๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
Cloud Run์ ์ปจํ
์ด๋๋ฅผ ์์ํ ๋ ์ด๋ฏธ์ง์ ๊ธฐ๋ณธ ์ง์
์ ๋ช
๋ น์ด ๋ฐ ๊ธฐ๋ณธ ๋ช
๋ น์ด ์ธ์๋ฅผ ์คํํฉ๋๋ค. ์ด๋ฏธ์ง์ ๊ธฐ๋ณธ ์ง์
์ ๋ฐ ๋ช
๋ น์ด ์ธ์๋ฅผ ์ฌ์ ์ํ๋ ค๋ฉด ์ปจํ
์ด๋ ๊ตฌ์ฑ์์ command
๋ฐ args
ํ๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค. command
ํ๋๋ ์ปจํ
์ด๋์์ ์คํํ๋ ์ค์ ๋ช
๋ น์ด๋ฅผ ์ง์ ํฉ๋๋ค. args
ํ๋๋ ํด๋น ๋ช
๋ น์ด๋ก ์ ๋ฌ๋๋ ์ธ์๋ฅผ ์ง์ ํฉ๋๋ค.
์๋น์ค๋ง๋ค ์ปจํ ์ด๋๋น ์ธ์๊ฐ ์ต๋ 1,000๊ฐ๊น์ง ์์ ์ ์์ต๋๋ค.
ํ์ํ ์ญํ
Cloud Run ์๋น์ค๋ฅผ ๊ตฌ์ฑํ๊ณ ๋ฐฐํฌํ๋ ๋ฐ ํ์ํ ๊ถํ์ ์ป์ผ๋ ค๋ฉด ๊ด๋ฆฌ์์๊ฒ ๋ค์ IAM ์ญํ ์ ๋ถ์ฌํด ๋ฌ๋ผ๊ณ ์์ฒญํ์ธ์.
-
Cloud Run ์๋น์ค์ ๋ํ Cloud Run ๊ฐ๋ฐ์(
roles/run.developer
) ์ญํ -
์๋น์ค ID์ ๋ํ ์๋น์ค ๊ณ์ ์ฌ์ฉ์(
roles/iam.serviceAccountUser
) ์ญํ
Cloud Run๊ณผ ์ฐ๊ฒฐ๋ IAM ์ญํ ๋ฐ ๊ถํ ๋ชฉ๋ก์ Cloud Run IAM ์ญํ ๋ฐ Cloud Run IAM ๊ถํ์ ์ฐธ์กฐํ์ธ์. Cloud Run ์๋น์ค๊ฐ Cloud ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฐ์Google Cloud API์ ์ํธ์์ฉํ๋ ๊ฒฝ์ฐ์๋ ์๋น์ค ID ๊ตฌ์ฑ ๊ฐ์ด๋๋ฅผ ์ฐธ์กฐํ์ธ์. ์ญํ ๋ถ์ฌ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ฐฐํฌ ๊ถํ ๋ฐ ์ก์ธ์ค ๊ด๋ฆฌ๋ฅผ ์ฐธ์กฐํ์ธ์.
์ปจํ ์ด๋ ํฌํธ ๊ตฌ์ฑ
๊ตฌ์ฑ์ ๋ณ๊ฒฝํ๋ฉด ์ ๋ฒ์ ์ด ์์ฑ๋ฉ๋๋ค. ์ด๋ฅผ ๋ณ๊ฒฝํ๋ ๋ช ์์ ์ ๋ฐ์ดํธ๊ฐ ์์ผ๋ฉด ์ดํ ๋ฒ์ ์๋ ์ด ๊ตฌ์ฑ ์ค์ ์ด ์๋์ผ๋ก ์ ์ฉ๋ฉ๋๋ค.
Cloud Run ์๋น์ค์ ๊ฒฝ์ฐ Cloud Run์ด PORT
ํ๊ฒฝ ๋ณ์๋ฅผ ์ปจํ
์ด๋์ ์ฝ์
ํฉ๋๋ค. ์๋น์ค์ ์ฌ๋ฌ ์ปจํ
์ด๋๋ฅผ ๋ฐฐํฌํ๋ ๊ฒฝ์ฐ ์ธ๊ทธ๋ ์ค ์ปจํ
์ด๋์
๋๋ค. ์ปจํ
์ด๋๋ ํ๋์ฝ๋ฉ๋ ํน์ ํฌํธ๊ฐ ์๋ PORT
ํ๊ฒฝ ๋ณ์์์ ์ ์๋ ํฌํธ๋ฅผ ๋ฆฌ์จํฉ๋๋ค. ๊ทธ๋ด ์ ์๋ค๋ฉด ์ปจํ
์ด๋๋ก ์์ฒญ์ ๋ณด๋ด๋ ํฌํธ์์ ๋ฆฌ์จํ๋๋ก ๊ตฌ์ฑํฉ๋๋ค. ํฌํธ ์ค์ ์ Cloud Run ์์
์ ์ ์ฉ๋์ง ์์ต๋๋ค.
์ฝ์
Google Cloud ์ฝ์์์ Cloud Run์ผ๋ก ์ด๋ํฉ๋๋ค.
๋ฉ๋ด์์ ์๋น์ค๋ฅผ ์ ํํ๊ณ ์ปจํ ์ด๋ ๋ฐฐํฌ๋ฅผ ํด๋ฆญํ์ฌ ์ ์๋น์ค๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ๊ธฐ์กด ์๋น์ค๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒฝ์ฐ ์๋น์ค๋ฅผ ํด๋ฆญํ ํ ์ ๋ฒ์ ์์ ๋ฐ ๋ฐฐํฌ๋ฅผ ํด๋ฆญํฉ๋๋ค.
์ ์๋น์ค๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒฝ์ฐ ์ด๊ธฐ ์๋น์ค ์ค์ ํ์ด์ง๋ฅผ ์์ฑํ ํ ์ปจํ ์ด๋, ๋ณผ๋ฅจ, ๋คํธ์ํน, ๋ณด์์ ํด๋ฆญํ์ฌ ์๋น์ค ๊ตฌ์ฑ ํ์ด์ง๋ฅผ ํผ์นฉ๋๋ค.
์ปจํ ์ด๋ ํญ์ ํด๋ฆญํฉ๋๋ค.
- ๊ธฐ๋ณธ๊ฐ์ด
8080
์ด ์๋ ๊ฒฝ์ฐ ์์ฒญ์ ์ ์กํ ํฌํธ๋ฅผ ์ง์ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉดPORT
ํ๊ฒฝ ๋ณ์๋ ์ค์ ๋ฉ๋๋ค.
- ๊ธฐ๋ณธ๊ฐ์ด
๋ง๋ค๊ธฐ ๋๋ ๋ฐฐํฌ๋ฅผ ํด๋ฆญํฉ๋๋ค.
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
์ ์๋น์ค๋ฅผ ๋ง๋๋ ๊ฒฝ์ฐ์๋ ์ด ๋จ๊ณ๋ฅผ ๊ฑด๋๋๋๋ค. ๊ธฐ์กด ์๋น์ค๋ฅผ ์ ๋ฐ์ดํธํ๋ ๊ฒฝ์ฐ YAML ๊ตฌ์ฑ์ ๋ค์ด๋ก๋ํฉ๋๋ค.
gcloud run services describe SERVICE --format export > service.yaml
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์(์๋ฌธ ๊ธฐ์ค) ์ดํ์ฌ์ผ ํฉ๋๋ค.
๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์๋น์ค๋ฅผ ์ ๊ตฌ์ฑ์ผ๋ก ๋ฐ๊ฟ๋๋ค.
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 ํ์ผ์ ์ฌ์ฉํ์ฌ ์ง์ ์ ๋ช ๋ น์ด ๋ฐ ์ธ์๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
์ฝ์
Google Cloud ์ฝ์์์ Cloud Run์ผ๋ก ์ด๋ํฉ๋๋ค.
๋ฉ๋ด์์ ์๋น์ค๋ฅผ ์ ํํ๊ณ ์ปจํ ์ด๋ ๋ฐฐํฌ๋ฅผ ํด๋ฆญํ์ฌ ์ ์๋น์ค๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ๊ธฐ์กด ์๋น์ค๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒฝ์ฐ ์๋น์ค๋ฅผ ํด๋ฆญํ ํ ์ ๋ฒ์ ์์ ๋ฐ ๋ฐฐํฌ๋ฅผ ํด๋ฆญํฉ๋๋ค.
์ ์๋น์ค๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒฝ์ฐ ์ด๊ธฐ ์๋น์ค ์ค์ ํ์ด์ง๋ฅผ ์์ฑํ ํ ์ปจํ ์ด๋, ๋ณผ๋ฅจ, ๋คํธ์ํน, ๋ณด์์ ํด๋ฆญํ์ฌ ์๋น์ค ๊ตฌ์ฑ ํ์ด์ง๋ฅผ ํผ์นฉ๋๋ค.
์ปจํ ์ด๋ ํญ์ ํด๋ฆญํฉ๋๋ค.
- ์ปจํ ์ด๋์ ์ ์๋ ๋ช ๋ น์ด๊ฐ ์๋ ๊ฒฝ์ฐ ์ปจํ ์ด๋๋ฅผ ์คํํ ๋ช ๋ น์ด๋ฅผ ์ง์ ํ๊ณ , ์ํ ๊ฒฝ์ฐ ์ง์ ์ ๋ช ๋ น์ด์ ๋ํ ์ธ์๋ฅผ ์ง์ ํฉ๋๋ค.
๋ง๋ค๊ธฐ ๋๋ ๋ฐฐํฌ๋ฅผ ํด๋ฆญํฉ๋๋ค.
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
์ ์๋น์ค๋ฅผ ๋ง๋๋ ๊ฒฝ์ฐ์๋ ์ด ๋จ๊ณ๋ฅผ ๊ฑด๋๋๋๋ค. ๊ธฐ์กด ์๋น์ค๋ฅผ ์ ๋ฐ์ดํธํ๋ ๊ฒฝ์ฐ YAML ๊ตฌ์ฑ์ ๋ค์ด๋ก๋ํฉ๋๋ค.
gcloud run services describe SERVICE --format export > service.yaml
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).
- IMAGE_URL: ์ปจํ
์ด๋ ์ด๋ฏธ์ง์ ๋ํ ์ฐธ์กฐ(์:
๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์๋น์ค๋ฅผ ์ ๊ตฌ์ฑ์ผ๋ก ๋ฐ๊ฟ๋๋ค.
gcloud run services replace service.yaml
Terraform
Terraform ๊ตฌ์ฑ์ ์ ์ฉํ๊ฑฐ๋ ์ญ์ ํ๋ ๋ฐฉ๋ฒ์ ๊ธฐ๋ณธ Terraform ๋ช ๋ น์ด๋ฅผ ์ฐธ์กฐํ์ธ์.
Terraform ๊ตฌ์ฑ์์ ๋ค์์google_cloud_run_v2_service
๋ฆฌ์์ค์ ์ถ๊ฐํฉ๋๋ค.์์ ๋์จ 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์ ์ฌ์ฉํ์ฌ ์์ ์์๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
์ฝ์
Google Cloud ์ฝ์์์ Cloud Run ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
- ๊ธฐ์กด ์๋น์ค์ ๊ฒฝ์ฐ ๋ชฉ๋ก์์ ์๋น์ค๋ฅผ ํด๋ฆญํ๊ณ ์ ๋ฒ์ ์์ ๋ฐ ๋ฐฐํฌ๋ฅผ ์ ํํ์ฌ ๋ฒ์ ๋ฐฐํฌ ์์์ ํ์ํฉ๋๋ค.
- ์ ์๋น์ค์ ๊ฒฝ์ฐ ๋ฉ๋ด์์ ์๋น์ค๋ฅผ ์ ํํ๊ณ ์ปจํ ์ด๋ ๋ฐฐํฌ๋ฅผ ํด๋ฆญํ์ฌ ์๋น์ค ๋ง๋ค๊ธฐ ์์์ ํ์ํฉ๋๋ค.
์ ์๋น์ค์ ๊ฒฝ์ฐ ์๋น์ค ์ด๋ฆ, ์ธ๊ทธ๋ ์ค ์ปจํ ์ด๋ URL, CPU ํ ๋น, ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค, ์ธ์ฆ์ ์ง์ ํฉ๋๋ค. ์ปจํ ์ด๋, ๋ณผ๋ฅจ, ๋คํธ์ํน, ๋ณด์ ํญ์์ ๋ค์์ ์ํํฉ๋๋ค.
- ์ธ๊ทธ๋ ์ค ์ปจํ ์ด๋๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
- ๋ฐฐํฌ ์ค์ธ ๋ค๋ฅธ ์ปจํ ์ด๋๋ฅผ ๊ฐ๊ฐ ์ถ๊ฐํ๋ ค๋ฉด ์ปจํ ์ด๋ ์ถ๊ฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ์ธ๊ทธ๋ ์ค ์ปจํ ์ด๋๋ฅผ ์ ์ธํ ๋ชจ๋ ์ปจํ ์ด๋์ ๊ฒฝ์ฐ ์์ ์ํ ์ ๊ฒ์ ๊ตฌ์ฑํฉ๋๋ค. ์ธ๊ทธ๋ ์ค ์ปจํ ์ด๋์๋ ๊ธฐ๋ณธ ์์ ์ํ ์ ๊ฒ์ด ์์ต๋๋ค.
- ๋ค๋ฅธ ์ปจํ ์ด๋๊ฐ ๋จผ์ ์์๋์ด์ผ ํน์ ์ปจํ ์ด๋๋ฅผ ์์ํ ์ ์๋ ๊ฒฝ์ฐ ์ปจํ ์ด๋ ์์ ์์ ๋ฉ๋ด๋ฅผ ์ฌ์ฉํ์ฌ ๋จผ์ ์์ํด์ผ ํ๋ ์ปจํ ์ด๋๋ฅผ ์ ํํฉ๋๋ค.
๊ธฐ์กด ์๋น์ค์ ๊ฒฝ์ฐ ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ธ์.
- ์ธ๊ทธ๋ ์ค ์ปจํ ์ด๋๋ฅผ ์ ์ธํ ๋ชจ๋ ์ปจํ ์ด๋์ ๊ฒฝ์ฐ ์์ ์ํ ์ ๊ฒ์ ๊ตฌ์ฑํฉ๋๋ค. ์ธ๊ทธ๋ ์ค ์ปจํ ์ด๋์๋ ๊ธฐ๋ณธ ์์ ์ํ ์ ๊ฒ์ด ์์ต๋๋ค.
- ๊ฐ ์ปจํ ์ด๋๋ ์์ฒด ์ปจํ ์ด๋ ์์ ์์ ๋ฉ๋ด์ ํจ๊ป ํ์๋ฉ๋๋ค. ๋ค๋ฅธ ์ปจํ ์ด๋๊ฐ ๋จผ์ ์์๋์ด์ผ ํน์ ์ปจํ ์ด๋๋ฅผ ์์ํ ์ ์๋ ๊ฒฝ์ฐ ์ปจํ ์ด๋ ์์ ์์ ๋ฉ๋ด๋ฅผ ์ฌ์ฉํ์ฌ ๋จผ์ ์์ํด์ผ ํ๋ ์ปจํ ์ด๋๋ฅผ ์ ํํฉ๋๋ค.
๋ค๋ฅธ ํ์ ๊ตฌ์ฑ์ ๋ชจ๋ ์๋ฃํ ํ ์ ์๋น์ค์ ๊ฒฝ์ฐ ๋ง๋ค๊ธฐ๋ฅผ, ๊ธฐ์กด ์๋น์ค์ ๊ฒฝ์ฐ ๋ฐฐํฌ๋ฅผ ํด๋ฆญํฉ๋๋ค. ๋ฐฐํฌ๊ฐ ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค.
gcloud
Google Cloud CLI๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์์๋ฅผ ์ง์ ํ๋ ค๋ฉด ๋จผ์ ์ธ๊ทธ๋ ์ค ์ปจํ ์ด๋๋ฅผ ์ ์ธํ ๋ชจ๋ ์ปจํ ์ด๋์ ์์ ์ํ ์ ๊ฒ์ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค. ์ธ๊ทธ๋ ์ค ์ปจํ ์ด๋์๋ ๊ธฐ๋ณธ ์์ ์ํ ์ ๊ฒ์ด ์์ต๋๋ค. Google Cloud CLI๋ฅผ ์ฌ์ฉํ์ฌ ์ํ ์ ๊ฒ์ ๊ตฌ์ฑํ ์๋ ์์ต๋๋ค.
-
In the Google Cloud console, 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.
์ง์ ๋ ์์ ์์์ ๋ฐ๋ผ ์ฌ๋ฌ ์ปจํ ์ด๋๋ฅผ ์๋น์ค์ ๋ฐฐํฌํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
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
์ ์๋น์ค๋ฅผ ๋ง๋๋ ๊ฒฝ์ฐ์๋ ์ด ๋จ๊ณ๋ฅผ ๊ฑด๋๋๋๋ค. ๊ธฐ์กด ์๋น์ค๋ฅผ ์ ๋ฐ์ดํธํ๋ ๊ฒฝ์ฐ YAML ๊ตฌ์ฑ์ ๋ค์ด๋ก๋ํฉ๋๋ค.
gcloud run services describe SERVICE --format export > service.yaml
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์ด ๋ง์ง๋ง์ผ๋ก ์์๋ฉ๋๋ค.
๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์๋น์ค๋ฅผ ์ ๊ตฌ์ฑ์ผ๋ก ๋ฐ๊ฟ๋๋ค.
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 ์๋น์ค์ ํ์ฌ ์ปจํ ์ด๋ ์ค์ ์ ๋ณด๋ ค๋ฉด ๋ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์.
์ฝ์
Google Cloud ์ฝ์์์ Cloud Run์ผ๋ก ์ด๋ํฉ๋๋ค.
๊ด์ฌ์ด ์๋ ์๋น์ค๋ฅผ ํด๋ฆญํ์ฌ ์๋น์ค ์ธ๋ถ์ ๋ณด ํ์ด์ง๋ฅผ ์ฝ๋๋ค.
๋ฒ์ ํญ์ ํด๋ฆญํฉ๋๋ค.
์ค๋ฅธ์ชฝ์ ์ธ๋ถ์ ๋ณด ํจ๋์์ ์ปจํ ์ด๋ ์ค์ ์ด ์ปจํ ์ด๋ ํญ์ ํ์๋ฉ๋๋ค.
gcloud
๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ธ์.
gcloud run services describe SERVICE
๋ฐํ๋ ๊ตฌ์ฑ์์ ์ปจํ ์ด๋ ์ค์ ์ ์ฐพ์ต๋๋ค.