Cloud Run은 Google의 확장 가능한 인프라에서 직접 컨테이너를 실행할 수 있게 해 주는 관리형 컴퓨팅 플랫폼입니다.
컨테이너 이미지를 빌드할 경우 모든 프로그래밍 언어로 작성된 코드를 Cloud Run에 배포할 수 있습니다. 실제로 컨테이너 이미지 빌드는 선택사항입니다. Go, Node.js, Python, 자바, .NET Core, Ruby를 사용하는 경우 사용 중인 언어의 권장사항에 따라 컨테이너를 빌드하는 소스 기반 배포 옵션을 사용할 수 있습니다.
Google에서 Cloud Run은 Google Cloud에서 다른 서비스와 잘 작동하도록 빌드되었으므로, 완전한 기능의 애플리케이션을 빌드할 수 있습니다.
간단히 말해, Cloud Run을 사용하면 개발자가 코드를 작성하는 데 시간을 사용할 수 있게 하고 Cloud Run 서비스를 운영, 구성, 확장하는 데는 시간을 거의 쓰지 않아도 됩니다. Cloud Run으로 생산성을 높이기 위해 클러스터를 만들거나 인프라를 관리할 필요가 없습니다.
서비스 및 작업: 코드 실행을 위한 두 가지 방법
Cloud Run에서 코드는 서비스 또는 작업으로 연속적으로 실행될 수 있습니다. 서비스와 작업이 모두 동일한 환경에서 실행되고 Google Cloud에서 다른 서비스와 함께 동일한 통합을 사용할 수 있습니다.
- Cloud Run 서비스. 웹 요청 또는 이벤트에 응답하는 코드를 실행하기 위해 사용됩니다.
- Cloud Run 작업. 작업을 수행하고, 작업이 완료되면 종료하는 코드를 실행하기 위해 사용됩니다.
Cloud Run 서비스
Cloud Run 서비스는 안정적인 HTTPS 엔드포인트를 실행하는 데 필요한 인프라를 제공합니다. 사용자는 코드가 TCP 포트에서 리슨하고 HTTP 요청을 처리하는지 확인해야 합니다.
표준 서비스 기능은 다음과 같습니다.
- 모든 서비스의 고유 HTTPS 엔드포인트
- 모든 Cloud Run 서비스에는
*.run.app
도메인의 고유한 하위 도메인에서 HTTPS 엔드포인트가 제공됩니다. 커스텀 도메인을 구성할 수도 있습니다. Cloud Run에서는 TLS가 자동으로 관리되고, WebSocket, HTTP/2(엔드 투 엔드), gRPC(엔드 투 엔드)에 대한 지원이 포함됩니다. - 빠른 요청 기반 자동 확장
- Cloud Run은 CPU 할당이
always on
으로 설정된 경우 빠르게 수평 확장되어 모든 수신 요청을 처리하거나 요청 외의 증가된 CPU 사용률을 처리하도록 빌드되어 있습니다. 인스턴스 1,000개까지 서비스를 신속하게 확장할 수 있고, 할당량 증가를 요청하면 그 이상으로 확장 가능합니다. 수요가 증가하면 Cloud Run이 유휴 컨테이너를 삭제합니다. 비용 또는 다운스트림 시스템 오버로드가 걱정될 경우에는 최대 인스턴스 수를 제한할 수 있습니다. - 기본 제공되는 트래픽 관리
- 모든 배포가 새로운 변경할 수 없는 버전을 만듭니다. 수신 트래픽을 최신 버전으로 라우팅, 이전 버전으로 롤백, 동시에 여러 버전으로 트래픽 분할, 점진적 출시 수행이 가능합니다. 새 버전 배포에 따른 위험을 줄이는 데 유용합니다. 요청의 1%를 새 버전으로 전송하는 것으로 시작해서 원격 분석을 모니터링하면서 백분율을 늘릴 수 있습니다.
- 비공개 및 공개 서비스
- 인터넷에서 Cloud Run 서비스에 연결하거나 다음 세 가지 방법으로 액세스를 제한할 수 있습니다.
- Cloud IAM을 사용하여 액세스 정책을 지정합니다.
- 인그레스 설정을 사용하여 네트워크 액세스를 제한합니다. VPC 및 내부 서비스의 내부 트래픽만 허용하려는 경우에 유용합니다.
- IAP(Cloud Identity-Aware Proxy)를 사용하는 인증된 사용자만 허용합니다.
콘텐츠 전송 네트워크(CDN)으로 Cloud Run 서비스를 프런트화하여 클라이언트에 더 가까운 에지 위치에서 캐시 가능한 애셋을 제공할 수 있습니다. Firebase 호스팅 및 Cloud CDN 모두 이 기능을 제공합니다.
0개 및 최소 인스턴스로 조정
CPU 할당이 always on
으로 설정된 경우 Cloud Run은 모든 수신 요청을 처리하거나 요청 외의 증가된 CPU 사용률을 처리하기 위해 인스턴스를 자동으로 추가하고 삭제합니다. 서비스에 수신 요청이 없으면 마지막 남은 인스턴스도 삭제됩니다. 이 동작을 일반적으로 Scale-to-zero라고 부릅니다.
활성 인스턴스가 없으면 요청이 수신되는 즉시 새 인스턴스가 주문형으로 생성됩니다. 이렇게 하면 컨테이너의 요청 처리 준비에 걸리는 시간에 따라 첫 번째 요청의 응답 시간에 부정적인 영향을 줍니다.
서비스가 0개 인스턴스로 조정하지 않도록 하려면 Cloud Run에서 최소한의 인스턴스를 활성 상태로 유지하도록 구성하면 됩니다.
서비스 사용량에 따른 가격 책정
Scale-to-zero는 100밀리초의 세밀한 단위로 인스턴스에 할당되는 CPU 및 메모리 비용이 청구되기 때문에 경제적인 면에서 매력적입니다. 최소 인스턴스를 구성하지 않으면 서비스가 사용되지 않는 경우 비용도 청구되지 않습니다.
사용 설정할 수 있는 두 가지 가격 모델이 있습니다.
- 요청 기반
- 인스턴스가 요청을 처리하지 않으면 CPU가 할당되지 않고 비용도 청구되지 않습니다. 또한 요청별 비용을 지불합니다.
- 인스턴스 기반
- 인스턴스의 전체 기간에 대해 비용이 청구되고 CPU가 항상 할당됩니다. 요청별 비용은 없습니다.
넉넉한 혜택을 제공하는 무료 등급이 있습니다. 자세한 내용은 가격 책정을 참조하고 요청 기반 또는 인스턴스 기반 서비스 가격 책정을 사용 설정하는 방법은 CPU 할당을 참조하세요.
일회용 컨테이너 파일 시스템
Cloud Run의 인스턴스는 삭제할 수 있습니다. 모든 컨테이너에 인메모리 방식의 쓰기 가능한 파일 시스템 오버레이가 포함되며, 컨테이너가 종료되면 사라집니다. 수평 축소 등의 경우 Cloud Run이 인스턴스에 요청 전송을 중지하고 종료할 시간을 독립적으로 결정합니다.
Cloud Run이 인스턴스를 종료하려고 할 때 경고를 받기 위해 애플리케이션에서 SIGTERM 신호를 잡을 수 있습니다. 이렇게 하면 코드가 로컬 버퍼를 소거하고 외부 데이터 저장소에 로컬 데이터를 유지할 수 있습니다.
파일을 영구적으로 유지하려면 Cloud Storage와 통합하거나 네트워크 파일 시스템(NFS)을 마운트하면 됩니다.
Cloud Run 서비스를 사용해야 하는 경우
Cloud Run 서비스는 요청 또는 이벤트를 처리하는 코드에 매우 효과적입니다. 사용 사례의 예를 들면 다음과 같습니다.
- 웹사이트 및 웹 애플리케이션
- 원하는 스택을 사용해서 웹앱을 빌드하고 SQL 데이터베이스에 액세스하고, 동적 HTML 페이지를 렌더링합니다.
- API 및 마이크로서비스
- REST API나 GraphQL API 또는 HTTP 또는 gRPC로 통신하는 비공개 마이크로 서비스를 빌드할 수 있습니다.
- 스트리밍 데이터 처리
- Cloud Run 서비스는 Pub/Sub 푸시 구독에서 메시지를 수신하고 Eventarc에서 이벤트를 수신할 수 있습니다.
Cloud Run 작업
스크립트에서와 같이 코드 작업이 수행되고 중지되면 Cloud Run 작업을 사용하여 코드를 실행할 수 있습니다. gcloud CLI를 사용하여 명령줄에서 작업을 실행하거나, 반복 작업을 예약하거나, 워크플로의 일부로 실행할 수 있습니다.
작업을 더 빠르게 실행하는 배열 작업
스크립트 또는 도구를 실행할 때의 일반적인 방법과 같이, 작업이 코드 실행을 위해 하나의 인스턴스를 시작할 수 있습니다. 하지만 여러 개의 동일하고 독립적인 인스턴스를 병렬로 즉, 배열 작업으로 시작할 수도 있습니다.
배열 작업을 사용하면 여기에 표시된 것처럼 여러 개의 독립된 태스크로 분할할 수 있는 작업을 빠르게 처리할 수 있습니다.
예를 들어 Cloud Storage에서 이미지 1,000개의 크기를 조절하고 자르면 연속 처리 속도는 Cloud Run에서 자동 확장으로 관리하는 여러 인스턴스에서 동시에 처리하는 속도보다 느려집니다.
Cloud Run 작업을 사용해야 하는 경우
Cloud Run 작업은 작업을 수행하고 작업이 완료되면 종료되는 코드를 실행하는 데 적합합니다. 예를 들면 다음과 같습니다.
- 스크립트 또는 도구
- 스크립트를 실행하여 데이터베이스 마이그레이션 또는 기타 운영 작업을 수행합니다.
- 배열 작업
- Cloud Storage 버킷에 있는 모든 파일의 처리를 대량으로 동시에 수행합니다.
- 예약된 작업
- 정기적인 간격으로 인보이스를 만들고 전송하거나 데이터베이스 쿼리 결과를 XML로 저장하고 파일을 몇 시간 간격으로 업로드합니다.
Cloud Run 통합
Cloud Run은 더 넓은 Google Cloud 에코시스템과 통합되어, 완전한 기능의 애플리케이션을 빌드할 수 있게 해줍니다.
필수적인 통합은 다음과 같습니다.
- 데이터 스토리지
- Cloud Run은 Cloud SQL(관리형 MySQL, PostgreSQL, SQL Server), Memorystore(관리형 Redis 및 Memcached), Firestore, Spanner, Cloud Storage 등과 통합됩니다. 전체 목록은 데이터 스토리지를 참조하세요.
- 로깅 및 오류 보고
- 컨테이너 로그는 Cloud Logging에서 자동으로 수집됩니다. 로그에 예외가 있으면 Error Reporting이 이를 집계하고 알림을 표시합니다. 지원되는 언어는 Go, 자바, Node.js, PHP, Python, Ruby, .NET입니다.
- 서비스 ID
- 모든 Cloud Run 버전은 서비스 계정에 연결되고 Google Cloud 클라이언트 라이브러리는 이 서비스 계정을 투명하게 사용하여 Google Cloud API에 인증합니다.
- 지속적 배포
- GitHub, Bitbucket, Cloud Source Repositories에 소스 코드를 저장할 경우 새 커밋을 자동으로 배포하도록 Cloud Run을 구성할 수 있습니다.
- 비공개 네트워킹
- Cloud Run 인스턴스는 서버리스 VPC 액세스 커넥터를 통해 Virtual Private Cloud(VPC) 네트워크의 리소스에 연결할 수 있습니다. 이렇게 하면 서비스가 Google Kubernetes Engine 또는 Memorystore와 같이 Compute Engine을 기반으로 Compute Engine 가상 머신 또는 제품에 연결할 수 있습니다.
- Google Cloud API
- 서비스 코드는 Google Cloud API와 투명하게 인증됩니다. 예를 들어 Cloud Vision API, Speech-to-Text API, AutoML Natural Language API, Cloud Translation API 등의 AI 및 Machine Learning API가 있습니다.
- 백그라운드 작업
- 나중에 또는 웹 요청을 반환한 후 즉시 실행되도록 코드를 예약할 경우 Cloud Run은 Cloud Tasks와 함께 작동하여 확장 가능하고 안정적인 비동기 실행을 제공합니다.
Cloud Run과 잘 작동하는 모든 Google Cloud 서비스 목록은 Google Cloud 서비스에 연결을 참조하세요.
서비스 또는 작업은 컨테이너 이미지에 패키징되어야 합니다.
서비스 또는 작업을 Cloud Run에 배포할 수 있으려면 이를 컨테이너 이미지에 패키징해야 합니다. 컨테이너에 익숙하지 않은 경우에는 간단한 다음 개념 소개를 참조하세요.
컨테이너 이미지는 서비스 실행에 필요한 모든 것이 포함된 패키지입니다. 여기에는 빌드 아티팩트, 애셋, 시스템 패키지, 런타임(선택사항)이 포함됩니다. 컨테이너 이미지는 컨테이너화된 애플리케이션을 기본적으로 이동 가능하게 만들어 줍니다. 컨테이너가 실행될 수 있는 어디에서든 실행됩니다. 빌드 아티팩트의 예시에는 컴파일된 바이너리 또는 스크립트 파일이 포함되고, 런타임 예시에는 Node.js 자바스크립트 런타임 또는 자바 가상 머신(JVM)이 있습니다.
고급 실무자는 Cloud Run에서 코드를 실행하는 데 추가 부담이 들지 않는다는 사실을 중요하게 여깁니다. Cloud Run에서는 모든 바이너리를 실행할 수 있습니다. 보다 편리함을 추구하거나 애플리케이션 컨테이너화를 Google에 위임하려는 전문가를 포함한 사용자를 위해 Cloud Run은 오픈소스 Google Cloud Buildpack을 통합하여 소스 기반 배포를 제공합니다.