이 페이지에서는 서비스를 수동으로 확장하는 방법을 설명합니다. 또한 Cloud Scheduler 작업 및 Cloud Run Admin API를 사용하여 일정에 따라 인스턴스 수를 변경하는 일반적인 사용 사례에 관한 안내도 제공합니다.
개요
기본적으로 Cloud Run은 트래픽 및 CPU 사용량에 따라 지정된 최대 인스턴스 수 또는 기본 최대 인스턴스 수로 자동으로 확장됩니다. 하지만 일부 사용 사례에서는 수동 확장을 사용하여 특정 인스턴스 수를 설정하는 기능이 필요할 수 있습니다.
수동 확장을 사용하면 트래픽이나 사용량에 관계없이 재배포 없이 특정 인스턴스 수를 설정할 수 있습니다. 이를 통해 외부 시스템을 사용하여 자체 확장 로직을 작성할 수 있습니다. 예시는 일정 기반 확장을 참고하세요.
자동 확장과 수동 확장 간 전환
확장 모드를 전환하면 다음 표와 같이 인스턴스 수와 서비스 수준 최소 및 최대 인스턴스 설정에 영향을 미칩니다.
확장 스위치 방향 | 인스턴스 개수 | 최소 및 최대 인스턴스 수 |
---|---|---|
자동에서 수동으로 | 모드를 전환하는 명령어에서 인스턴스 수가 지정되지 않은 경우 서비스 수준 최소 인스턴스 설정을 상속합니다. | 전환 후 서비스 수준 최소 및 최대 인스턴스가 설정 해제됩니다. |
수동에서 자동으로 | 수동 인스턴스 수가 설정되지 않음 | 서비스 수준 최소 인스턴스와 최대 인스턴스를 둘 다 지정하거나 둘 다 지정하지 않음으로 지정해야 합니다. 둘 중 하나만 지정하면 오류가 반환됩니다. 모드를 전환하는 명령어에서 둘 다 지정하지 않으면 서비스 수준 최소 인스턴스와 최대 인스턴스가 수동 인스턴스 수를 상속합니다. |
버전 수준 최소 및 최대 설정 및 수동 확장
서비스를 수동 확장으로 설정하면 버전 수준 최소 및 최대 인스턴스 설정이 무시됩니다.
수동 확장을 위한 트래픽 분할
다음 목록에서는 수동 확장으로 트래픽을 분할할 때 인스턴스가 할당되는 방식을 설명합니다. 여기에는 트래픽 태그 전용 버전의 동작도 포함됩니다.
트래픽 분할 중에 각 버전에는 서비스 수준 최소 인스턴스를 사용한 트래픽 분할과 마찬가지로 트래픽 분할에 따라 비례적으로 인스턴스가 할당됩니다.
트래픽을 수신하는 버전 수가 수동 인스턴스 수를 초과하면 일부 버전에는 인스턴스가 없습니다. 이러한 버전으로 전송된 트래픽에는 버전이 사용 중지된 것과 동일한 오류가 발생합니다.
트래픽 분할에서 트래픽을 수신하는 모든 버전의 경우 버전 수준 최소 및 최대 인스턴스가 사용 중지됩니다.
버전이 트래픽 태그로 인해 만 활성 상태인 경우:
- 버전 수준 최소 인스턴스가 설정된 경우 지정된 수의 인스턴스가 시작되지만 총 서비스 수동 인스턴스 수에는 포함되지 않습니다. 버전은 자동 확장되지 않습니다.
- 버전 수준 최소 인스턴스가 설정되지 않은 경우 버전은 태그 URL로 전송된 트래픽에 대한 응답으로 최대 1개의 인스턴스로 확장됩니다.
수동 확장을 사용한 결제 동작
수동 확장을 사용하면 청구 동작이 최소 인스턴스 기능을 사용할 때의 동작과 유사합니다.
즉, 수동 확장 및 인스턴스 기반 청구를 사용하는 경우 수동으로 확장된 유휴 인스턴스에 활성 인스턴스 요금이 청구됩니다.
요청 기반 청구와 함께 수동 확장을 사용하는 경우 수동으로 확장된 유휴 인스턴스는 유휴 최소 인스턴스로 청구됩니다. 전체 결제 세부정보는 가격 책정 페이지를 참고하세요.
필요한 역할
Cloud Run 서비스를 배포하는 데 필요한 권한을 얻으려면 관리자에게 다음 IAM 역할을 부여해 달라고 요청하세요.
-
Cloud Run 서비스에 대한 Cloud Run 개발자(
roles/run.developer
) 역할 -
서비스 ID에 대한 서비스 계정 사용자(
roles/iam.serviceAccountUser
) 역할 -
배포된 컨테이너 이미지의 Artifact Registry 저장소에 있는 Artifact Registry 리더 (
roles/artifactregistry.reader
)(해당하는 경우)
Cloud Run과 연결된 IAM 역할 및 권한 목록은 Cloud Run IAM 역할 및 Cloud Run IAM 권한을 참조하세요. Cloud Run 서비스가 Cloud 클라이언트 라이브러리와 같은Google Cloud API와 상호작용하는 경우에는 서비스 ID 구성 가이드를 참고하세요. 역할 부여에 대한 자세한 내용은 배포 권한 및 액세스 관리를 참고하세요.
확장 구성
서비스를 만들거나 업데이트할 때 Google Cloud 콘솔, Google Cloud CLI, YAML 파일 또는 API를 사용하여 확장 모드를 구성할 수 있습니다.
콘솔
Google Cloud 콘솔에서 Cloud Run으로 이동합니다.
새 서비스를 구성하는 경우 컨테이너 배포를 클릭하고 서비스를 선택하여 서비스 만들기 양식을 표시합니다. 기존 서비스를 구성하는 경우 서비스를 클릭하여 세부정보 패널을 표시한 후 세부정보 패널 오른쪽 상단의 확장/축소 옆에 있는 펜 아이콘을 클릭합니다.
새 서비스의 경우 서비스 확장 양식을, 기존 서비스의 경우 확장 수정 양식을 찾습니다.
인스턴스 수로 라벨이 지정된 필드에서 서비스의 컨테이너 인스턴스 수를 지정합니다.
새 서비스의 경우 만들기를 클릭하고 기존 서비스의 경우 저장을 클릭합니다.
gcloud
새 서비스의 확장을 지정하려면 배포 명령어를 사용합니다.
gcloud beta run deploy SERVICE \ --scaling=INSTANCE_COUNT \ --image IMAGE_URL
다음을 바꿉니다.
- SERVICE를 서비스 이름으로 바꿉니다.
- INSTANCE_COUNT: 서비스의 인스턴스 수입니다.
이렇게 하면 서비스가 수동 확장으로 설정됩니다.
0
값을 지정하여 서비스를 사용 중지합니다. 기본 Cloud Run 자동 확장 동작을 사용하려면auto
값을 지정하세요. - 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
입니다.
다음 update 명령어를 사용하여 기존 서비스의 확장을 지정합니다.
gcloud beta run services update SERVICE \ --scaling=INSTANCE_COUNT
YAML
새 서비스를 만드는 경우에는 이 단계를 건너뜁니다. 기존 서비스를 업데이트하는 경우 YAML 구성을 다운로드합니다.
gcloud run services describe SERVICE --format export > service.yaml
scalingMode
속성과manualInstanceCount
속성을 업데이트합니다.apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE annotations: run.googleapis.com/launch-stage: BETA run.googleapis.com/scalingMode: MODE run.googleapis.com/manualInstanceCount: INSTANCE_COUNT
다음을 바꿉니다.
- SERVICE: Cloud Run 서비스 이름
- 수동 확장의 경우 MODE와
manual
, 기본 Cloud Run 자동 확장 동작의 경우automatic
- INSTANCE_COUNT: 서비스에 대해 수동으로 확장하는 인스턴스 수입니다.
0
값을 지정하여 서비스를 사용 중지합니다.
다음 명령어를 사용하여 서비스를 만들거나 업데이트합니다.
gcloud run services replace service.yaml
REST API
특정 서비스의 서비스 수준 최소 인스턴스를 업데이트하려면 Cloud Run Admin API service
엔드포인트에 PATCH
HTTP 요청을 보냅니다.
예를 들어 다음과 같이 curl
을 사용합니다.
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -X PATCH \ -d '{"launchStage":"BETA","scaling":{"manualInstanceCount":MANUAL_INSTANCE_COUNT }}' \ https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=launchStage,scaling.manualInstanceCount
다음과 같이 바꿉니다.
- ACCESS_TOKEN: 서비스를 삭제할 수 있는 IAM 권한이 있는 계정의 유효한 액세스 토큰.
예를 들어
gcloud
에 로그인한 경우gcloud auth print-access-token
을 사용하여 액세스 토큰을 검색할 수 있습니다. Cloud Run 컨테이너 인스턴스 내에서 컨테이너 인스턴스 메타데이터 서버를 사용하여 액세스 토큰을 검색할 수 있습니다. - MANUAL_INSTANCE_COUNT: 서비스의 인스턴스 수입니다.
이렇게 하면 서비스가 수동 확장으로 설정됩니다.
0
값을 지정하여 서비스를 사용 중지합니다. - SERVICE: 서비스 이름
- REGION을 서비스가 배포된 Google Cloud 리전으로 바꿉니다.
- PROJECT_ID를 Google Cloud 프로젝트 ID로 바꿉니다.
서비스의 확장 구성 보기
Cloud Run 서비스의 확장 구성 인스턴스를 보려면 다음 안내를 따르세요.
콘솔
Google Cloud 콘솔에서 Cloud Run으로 이동합니다.
관심이 있는 서비스를 클릭하여 서비스 세부정보 패널을 엽니다.
현재 크기 조정 설정은 서비스 세부정보 패널의 오른쪽 상단에 있는 크기 조정 라벨 뒤, 펜 아이콘 옆에 표시됩니다.
gcloud
다음 명령어를 사용하여 서비스의 현재 확장 구성을 확인합니다.
gcloud beta run services describe SERVICE
SERVICE를 서비스 이름으로 바꿉니다.
describe
에서 반환된 텍스트 상단에 있는 Scaling: Manual (Instances: )
필드를 찾습니다.
YAML
다음 명령어를 사용하여 서비스 YAML 구성을 다운로드합니다.
gcloud run services describe SERVICE --format export > service.yaml
확장 구성은 scalingMode
및 manualInstanceCount
속성에 포함됩니다.
서비스 사용 중지
서비스를 사용 중지해도 현재 처리 중인 요청은 완료될 수 있습니다.
그러나 서비스 URL에 대한 추가 요청은 Service unavailable
또는 Service disabled
오류와 함께 실패합니다.
트래픽 태그로 인해만 활성 상태인 서비스 버전의 요청은 영향을 받지 않습니다. 이러한 버전은 사용 중지되지 않기 때문입니다.
서비스를 사용 중지하려면 확장을 0으로 설정합니다. Google Cloud 콘솔, Google Cloud CLI, YAML 파일 또는 API를 사용하여 서비스를 사용 중지할 수 있습니다.
콘솔
Google Cloud 콘솔에서 Cloud Run으로 이동합니다.
사용 중지하려는 서비스를 클릭하여 세부정보 패널을 표시한 후 세부정보 패널 오른쪽 상단의 확장/축소 옆에 있는 펜 아이콘을 클릭합니다.
확장 수정 양식을 찾아 수동 확장을 선택합니다.
인스턴스 수라는 라벨이 지정된 필드에 값
0
(0)을 입력합니다.저장을 클릭합니다.
gcloud
서비스를 사용 중지하려면 다음 명령어를 사용하여 확장 크기를 0으로 설정합니다.
gcloud beta run services update SERVICE --scaling=0
SERVICE를 서비스 이름으로 바꿉니다.
YAML
서비스의 YAML 구성을 다운로드합니다.
gcloud run services describe SERVICE --format export > service.yaml
manualInstanceCount
속성을 0 (0
)으로 설정합니다.apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE annotations: run.googleapis.com/launch-stage: BETA run.googleapis.com/scalingMode: manual run.googleapis.com/manualInstanceCount: `0`
SERVICE를 Cloud Run 서비스 이름으로 바꿉니다.
다음 명령어를 사용하여 서비스를 만들거나 업데이트합니다.
gcloud run services replace service.yaml
REST API
서비스를 사용 중지하려면 Cloud Run Admin API service
엔드포인트에 PATCH
HTTP 요청을 보냅니다.
예를 들어 다음과 같이 curl
을 사용합니다.
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -X PATCH \ -d '{"launchStage":"BETA","scaling":{"manualInstanceCount":0 }}' \ https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=launchStage,scaling.manualInstanceCount
다음과 같이 바꿉니다.
- ACCESS_TOKEN: 서비스를 삭제할 수 있는 IAM 권한이 있는 계정의 유효한 액세스 토큰.
예를 들어
gcloud
에 로그인한 경우gcloud auth print-access-token
을 사용하여 액세스 토큰을 검색할 수 있습니다. Cloud Run 컨테이너 인스턴스 내에서 컨테이너 인스턴스 메타데이터 서버를 사용하여 액세스 토큰을 검색할 수 있습니다. - SERVICE: 서비스 이름
- REGION을 서비스가 배포된 Google Cloud 리전으로 바꿉니다.
- PROJECT_ID를 Google Cloud 프로젝트 ID로 바꿉니다.
일정 기반 확장 예시
수동 확장의 일반적인 사용 사례는 사전 정의된 일정에 따라 인스턴스 수를 변경하는 것입니다. 이 예에서는 Cloud Scheduler를 사용하여 두 작업을 예약합니다. 각 작업은 Cloud Run Admin API를 호출하여 인스턴스 수를 확장합니다. 첫 번째 작업은 영업시간 (월~금, 오전 9시~오후 5시) 동안 10개 인스턴스로 수동 확장되도록 서비스를 설정합니다. 두 번째 작업은 서비스가 영업시간 외에는 인스턴스 0개로 확장되도록 설정합니다.
예와 같이 인스턴스를 0으로 설정하면 서비스는 사용 중지되지만 Cloud Scheduler 작업은 사용 중지되지 않습니다. 이러한 작업은 계속 실행되며 예약된 대로 서비스를 10개 인스턴스로 재설정하고 다시 사용 설정합니다.
이 예에서는 편의상 Cloud Run 빠른 시작을 사용하지만 원하는 서비스를 사용할 수 있습니다.
일정 기반 수동 확장을 설정하려면 다음 단계를 따르세요.
다음 명령어를 사용하여 서비스를 배포합니다.
gcloud beta run deploy SERVICE \ --image=us-docker.pkg.dev/cloudrun/container/hello \ --region=REGION \ --project PROJECT_ID
다음 변수를 바꿉니다.
- REGION을 Cloud Run 서비스가 배포된 리전으로 바꿉니다.
- SERVICE를 Cloud Run 서비스 이름으로 바꿉니다.
다음 명령어를 사용하여 10개의 인스턴스로 수동 확장되도록 서비스를 구성합니다.
gcloud beta run services update SERVICE \ --region=REGION \ --scaling=10
영업시간 동안 서비스 인스턴스를 10개로 수동으로 확장하는 Cloud Scheduler 작업을 만듭니다.
gcloud scheduler jobs create http hello-start-instances \ --location=REGION \ --schedule="0 9 * * MON-FRI" \ --time-zone=America/Los_Angeles \ --uri=https://run.googleapis.com/v2/projects/PROJECT_ID/ locations/REGION/services/hello?update_mask=launchStage,scaling.manualInstanceCount \ --headers=Content-Type=application/json,X-HTTP-Method-Override=PATCH \ --http-method=PUT \ --message-body='{"launchStage":"BETA","scaling":{"manualInstanceCount":10}}' \ --oauth-service-account-email=PROJECT_NUMBER-compute@developer.gserviceaccount.com
이 명령어는 Cloud Run Admin API에 HTTP를 호출하여 인스턴스 수를
10
로 설정하는 Cloud Scheduler 작업을 만듭니다. 이 예에서는 Cloud Scheduler 작업에 Compute Engine 기본 서비스 계정PROJECT_NUMBER-compute@developer.gserviceaccount.com
을 사용합니다. Cloud Run 서비스를 업데이트할 권한이 있는 서비스 계정을 사용할 수 있습니다.비즈니스 시간이 아닐 때 서비스 인스턴스를 수동으로 0개로 확장하여 서비스를 사용 중지하는 Cloud Scheduler 작업을 만듭니다.
gcloud scheduler jobs create http hello-stop-instances \ --location=REGION \ --schedule="0 17 * * MON-FRI" \ --time-zone=America/Los_Angeles \ --uri=https://run.googleapis.com/v2/projects/PROJECT_ID/ locations/REGION/services/hello?update_mask=launchStage,scaling.manualInstanceCount \ --headers=Content-Type=application/json,X-HTTP-Method-Override=PATCH \ --http-method=PUT \ --message-body='{"launchStage":"BETA","scaling":{"manualInstanceCount":0}}' \ --oauth-service-account-email=PROJECT_NUMBER-compute@developer.gserviceaccount.com
이 명령어는 Cloud Run Admin API에 HTTP를 호출하여 수동 확장 인스턴스를 0으로 설정하는 Cloud Scheduler 작업을 만듭니다. 이렇게 하면 서비스가 사실상 사용 중지되지만 Cloud Scheduler 작업은 사용 중지되지 않으며, Cloud Scheduler 작업은 계속 실행되어 서비스가 10개 인스턴스로 재설정 (및 다시 사용 설정)됩니다.