Cloud Run은 인스턴스 기간 동안만 지속되는 이페머럴 디스크 볼륨을 제공합니다. 이 기능을 사용하면 필요한 디스크 용량과 마운트 위치를 지정할 수 있습니다. 그러면 Cloud Run이 리소스에 해당 디스크 크기를 할당합니다.
디스크는 자동으로 프로비저닝되고, ext4로 사전 포맷되며, 시작 시 인스턴스별 키로 암호화됩니다. 이페머럴 디스크는 모든 사용자가 읽거나 쓸 수 있도록 볼륨을 만듭니다. 스토리지는 임시이므로 인스턴스가 종료되면 모든 데이터가 영구적으로 삭제됩니다. 여기에는 다음으로 인한 종료가 포함됩니다.
- 인스턴스 비정상 종료
- 서비스 확장
- 새 버전으로 트래픽 마이그레이션
디스크는 특정 인스턴스 전용이며 다른 인스턴스나 버전 간에 공유되지 않습니다. 각 볼륨에 대해 구성 가능한 마운트 지점을 사용하여 파일 시스템 구조를 제어할 수 있습니다.
인스턴스를 종료하기 전에 Cloud Run은 인스턴스의 모든 컨테이너에 실제 종료가 발생하기 전 10초 기간 시작을 나타내는 SIGTERM 신호를 전송합니다. 이때 Cloud Run은 SIGKILL 신호를 전송합니다. 이 10초 창을 사용하여 디스크 콘텐츠 영구 스토리지의 최종 라운드 복사와 같은 정리 작업을 실행할 수 있습니다.
사용 사례
다음과 같은 경우에 이페머럴 디스크를 사용할 수 있습니다.
- 데이터 처리 워크로드: Cloud Run에서 대규모 데이터 파일을 처리할 때는 일반적으로 전체 파일을 메모리에 저장하거나 더 작은 조각으로 분할하도록 오케스트레이션합니다. 임시 스토리지를 사용하면 데이터의 임시 로컬 복사본을 만들기 위해 대량의 메모리를 구매하지 않아도 됩니다. 또한 더 큰 데이터 세트를 처리할 수 있습니다.
- 캐싱: 웹 서빙 사용 사례에서 원격 저장소에서 가져오는 대신 디스크에 데이터를 캐싱하면 애플리케이션의 지연 시간을 최적화할 수 있습니다.
스토리지 및 인스턴스 한도
적용되는 요청 한도는 다음과 같습니다.
- 인스턴스 스토리지 한도: 각 인스턴스는 기본적으로 총 공간이 10GB로 제한됩니다. 필요한 경우 할당량 상향 조정을 요청합니다.
- 인스턴스 볼륨 제한: 각 인스턴스는 최대 10개의 볼륨으로 제한됩니다.
- 프로젝트 한도: 각 프로젝트는 기본적으로 리전당 100GB로 제한됩니다. 필요한 경우 할당량 상향 조정을 요청합니다.
할당량 상향 조정 요청
리전에서 Cloud Run 이페머럴 디스크를 처음 사용하는 프로젝트에는 인스턴스당, 리전당 10GB 한도와 프로젝트당, 리전당 100GB 한도가 자동으로 부여됩니다.
용량이 추가로 필요한 경우 Cloud Run 서비스의 할당량 상향 조정을 요청해야 합니다. 다음 버튼에 제공된 링크를 사용하여 필요한 할당량을 요청하세요.
| 현재 할당량 | 할당량 링크 |
|---|---|
| 인스턴스당 10GB | 인스턴스당 할당량 증가 요청 |
| 프로젝트당 100GB | 프로젝트별 할당량 상향 요청 |
할당량 상향 조정 요청에 대한 자세한 내용은 할당량을 늘리는 방법을 참조하세요.
제한사항
이페머럴 디스크는 2세대 실행 환경에서만 사용할 수 있습니다.허용되지 않는 경로
Cloud Run에서는 볼륨을 /dev, /proc, /sys 또는 해당 하위 디렉터리에 마운트할 수 없습니다.
지원되는 리전
이페머럴 디스크 기능은 다음 리전에서 사용할 수 있습니다.
- 비GPU 워크로드의 경우 다음에서 이페머럴 디스크를 사용할 수 있습니다.
- GPU를 사용하는 경우 이페머럴 디스크는 GPU를 지원하는 모든 리전에서 사용할 수 있습니다.
시작하기 전에
- Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- gcloud CLI를 설치하고 초기화합니다.
-
구성요소를 업데이트합니다.
gcloud components update
- CPU, 메모리, 네트워크 이그레스에 대한 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 구성 가이드를 참조하세요. 역할 부여에 대한 자세한 내용은 배포 권한 및 액세스 관리를 참조하세요.
이페머럴 디스크 만들기 및 마운트
Google Cloud 콘솔, Google Cloud CLI 또는 Terraform을 사용하여 이페머럴 디스크를 만들고 마운트할 수 있습니다.
콘솔
Google Cloud 콘솔에서 Cloud Run으로 이동합니다.
Cloud Run 탐색 메뉴에서 서비스를 선택하고 컨테이너 배포를 클릭하여 새 서비스를 구성합니다. 기존 서비스를 구성하는 경우 서비스를 클릭한 후 새 버전 수정 및 배포를 클릭합니다.
새 서비스를 구성하는 경우 초기 서비스 설정 페이지를 작성한 후 컨테이너, 네트워킹, 보안을 클릭하여 서비스 구성 페이지를 펼칩니다.
컨테이너 탭을 클릭합니다.
- 리소스에서 다음을 확인합니다.
- 이페머럴 디스크를 선택합니다.
- 메뉴에서 이페머럴 디스크 크기를 지정합니다.
- 마운트 경로를 입력합니다.
- 리소스에서 다음을 확인합니다.
만들기 또는 배포를 클릭합니다.
gcloud
볼륨을 추가하고 마운트하려면 다음 명령어를 실행합니다.
gcloud beta run services update SERVICE \
--execution-environment=gen2 \
--add-volume=name=VOLUME_NAME,type=ephemeral-disk,size=SIZE \
--add-volume-mount=volume=VOLUME_NAME,mount-path=MOUNT_PATH
다음을 바꿉니다.
- SERVICE를 서비스 이름으로 바꿉니다.
- VOLUME_NAME: 볼륨에 지정할 이름
- SIZE: 디스크 크기(예:
100Gi) 크기는ephemeral-disk볼륨의 경우10Gi이상이어야 합니다. - MOUNT_PATH: 볼륨을 마운트할 상대 경로(예:
/mnt/my-volume)
Terraform
Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.
Terraform 구성에서 다음을google_cloud_run_v2_service 리소스에 추가합니다. resource "google_cloud_run_v2_service" "default" {
name = "SERVICE"
location = "REGION"
launch_stage = "BETA"
deletion_protection = "true"
ingress = "INGRESS_TRAFFIC_ALL"
template {
containers {
image = "IMAGE_URL"
volume_mounts {
name = "VOLUME_NAME"
mount_path = "MOUNT_PATH"
}
}
volumes {
name = "VOLUME_NAME"
empty_dir {
medium = "DISK"
size_limit = "SIZE"
}
}
}
lifecycle {
ignore_changes = [
launch_stage,
]
}
}
다음을 바꿉니다.
- SERVICE를 서비스 이름으로 바꿉니다.
- REGION: Google Cloud 리전입니다.
- 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형식을 따릅니다. - VOLUME_NAME: 볼륨에 지정할 이름
- MOUNT_PATH: 볼륨을 마운트할 상대 경로(예:
/mnt/my-volume) - SIZE: 디스크 크기(예:
100Gi) 크기는ephemeral-disk볼륨의 경우10Gi이상이어야 합니다.
볼륨에 읽기 및 쓰기
Cloud Run 볼륨 마운트 기능을 사용하는 경우 로컬 파일 시스템에서 파일을 읽고 쓰는 데 사용하는 것과 동일한 프로그래밍 언어 라이브러리를 사용하여 마운트된 볼륨에 액세스합니다.
이는 데이터가 로컬 파일 시스템에 저장될 것으로 예상하고 일반 파일 시스템 작업을 사용하여 데이터에 액세스하는 기존 컨테이너를 사용하는 경우에 특히 유용합니다.
다음 스니펫은 볼륨 마운트의 mountPath가 /mnt/my-volume으로 설정되었다고 가정합니다.
Nodejs
파일 시스템 모듈을 사용하여 새 파일을 만들거나 볼륨 /mnt/my-volume의 기존 파일에 추가합니다.
var fs = require('fs');
fs.appendFileSync('/mnt/my-volume/sample-logfile.txt', 'Hello logs!', { flag: 'a+' });Python
볼륨 /mnt/my-volume에 보관된 파일에 씁니다.
f = open("/mnt/my-volume/sample-logfile.txt", "a")Go
os 패키지를 사용하여 볼륨 /mnt/my-volume에 보관되는 새 파일을 만듭니다.
f, err := os.Create("/mnt/my-volume/sample-logfile.txt")Java
Java.io.File 클래스를 사용하여 볼륨 /mnt/my-volume에 로그 파일을 만듭니다.
import java.io.File;
File f = new File("/mnt/my-volume/sample-logfile.txt");볼륨 및 볼륨 마운트 삭제
모든 볼륨과 볼륨 마운트를 또는 개별 볼륨과 볼륨 마운트를 삭제할 수 있습니다.
모든 볼륨 및 볼륨 마운트 삭제
단일 컨테이너 서비스에서 모든 볼륨과 볼륨 마운트를 삭제하려면 다음 명령어를 실행합니다.
gcloud run services update SERVICE \ --clear-volumes --clear-volume-mounts
컨테이너가 여러 개 있으면 사이드카 CLI 규칙에 따라 볼륨과 볼륨 마운트를 삭제합니다.
gcloud run services update SERVICE \ --container=container1 \ --clear-volumes -–clear-volume-mounts \ --container=container2 \ --clear-volumes \ -–clear-volume-mounts
개별 볼륨 및 볼륨 마운트 삭제
볼륨을 삭제하려면 해당 볼륨을 사용하는 모든 볼륨 마운트도 삭제해야 합니다.
개별 볼륨이나 볼륨 마운트를 삭제하려면 remove-volume 및 remove-volume-mount 플래그를 사용합니다.
gcloud run services update SERVICE \ --remove-volume VOLUME_NAME \ --container=container1 \ --remove-volume-mount MOUNT_PATH \ --container=container2 \ --remove-volume-mount MOUNT_PATH
권장사항
다음 권장사항을 준수하여 임시 데이터를 효과적으로 관리하고 스토리지 성능을 최적화하세요.
영구 스토리지에 복사
이페머럴 디스크 콘텐츠를 Cloud Storage 버킷과 같은 영구 스토리지에 복사하려는 경우 10초의 SIGTERM~SIGKILL 유예 기간에 의존하기보다는 증분 복사를 사용하는 것이 좋습니다.
인스턴스 종료에 관한 자세한 내용은 컨테이너 런타임 계약을 참고하세요.
Cloud Run은 추가 네트워킹 설정 없이 Cloud Storage에서 읽고 쓸 수 있습니다. 최적의 성능을 얻으려면 직접 VPC를 사용하여 VPC 네트워크를 통해 Cloud Storage로 오가는 트래픽을 라우팅하는 것이 좋습니다.
이 방법은 Cloud Run 리소스가 인터넷에 액세스할 필요가 없는 경우에 적합합니다. 인터넷 액세스가 필요한 경우 Cloud NAT를 설정하거나 Google API로의 내부 트래픽을 참고하세요.
서비스를 사용하여 Direct VPC 이그레스를 구성하려면 다음 단계를 완료하세요.
Google Cloud 콘솔에서 Cloud Run 페이지로 이동합니다.
배포할 새 서비스를 구성하려면 서비스 만들기를 클릭합니다. 기존 서비스를 구성하고 배포하는 경우 서비스를 클릭한 후 새 버전 수정 및 배포를 클릭합니다.
새 서비스를 구성하는 경우 필요에 따라 초기 서비스 설정 페이지를 작성한 후 컨테이너, 네트워킹, 보안을 클릭하여 서비스 구성 페이지를 펼칩니다.
네트워킹 탭을 클릭합니다.
아웃바운드 트래픽을 위해 VPC에 연결을 클릭합니다.
VPC로 직접 트래픽 전송을 클릭합니다.
네트워크 필드에서 트래픽을 전송할 VPC 네트워크를 선택합니다.
서브넷 필드에서 서비스가 IP 주소를 수신할 서브넷을 선택합니다. 동일한 서브넷에 여러 서비스를 배포할 수 있습니다.
트래픽 라우팅에서 모든 트래픽을 VPC로 라우팅을 선택하여 VPC 네트워크를 통해 모든 아웃바운드 트래픽을 전송합니다.
만들기 또는 배포를 클릭합니다.
서비스가 VPC 네트워크에 있는지 확인하려면 서비스를 클릭한 후 네트워킹 탭을 클릭합니다. 네트워크와 서브넷은 VPC 카드에 나열됩니다.
이제 방화벽 규칙에서 허용하는 대로 Cloud Run 서비스에서 VPC 네트워크의 모든 리소스로 요청을 전송할 수 있습니다.
연결된 서브넷에서 비공개 Google 액세스를 사용 설정합니다.
문제 해결
문제가 발생하면 다음을 확인하세요.- 컨테이너의 메모리가 부족하고 Google Cloud 콘솔을 사용하여 이페머럴 디스크가 연결된 서비스의 새 버전을 배포한 경우 Google Cloud 콘솔에서 디스크 볼륨을 메모리 내 볼륨으로 변환했을 수 있습니다. 이로 인해 디스크 쓰기가 메모리에 기록되어 컨테이너의 메모리가 부족해집니다.
이 문제를 해결하려면 gcloud CLI를 사용하여 서비스를 다시 배포하고 YAML 파일에
volumes아래에medium: Disk가 지정되어 있는지 확인하세요. - 이페머럴 디스크에 많은 양의 데이터를 다운로드할 때 네트워크 속도가 느려지면 단계에 따라 직접 VPC를 사용 설정하세요. 직접 VPC가 사용 설정되지 않으면 네트워크 전송 속도가 느려집니다.