서비스나 함수를 만들면 Cloud Run에서 서비스의 HTTPS 엔드포인트를 제공합니다. HTTPS 요청에 대한 응답으로 실행되도록 서비스를 사용 설정할 수 있습니다.
모든 Cloud Run 서비스에는 서비스의 기본 HTTPS 엔드포인트를 나타내는 안정적인 HTTPS URL이 있지만 커스텀 도메인도 구성할 수 있습니다.
다음은 몇 가지 사용 사례입니다.
- 커스텀 RESTful 웹 API
- 비공개 마이크로서비스
- 웹 애플리케이션용 HTTP 미들웨어 또는 역방향 프록시
- 사전 패키징된 웹 애플리케이션
공개 서비스 만들기
Cloud Run에 공개 서비스를 만들려면 다음이 필요합니다.
- 공개 인터넷에서 서비스로의 액세스 권한
- 공개 사용을 위한 URL
서비스를 공개로 설정하려면 배포할 때 또는 배포 후에 언제든지 인증되지 않은(공개) 액세스를 허용하도록 서비스를 설정합니다.
서비스 URL
Cloud Run은 모든 서비스에 해시 기반 비결정론적 URL을 할당합니다. 서비스 이름 길이에서 허용하는 경우 Cloud Run은 서비스에 결정론적 URL도 할당합니다.
이러한 기본 run.app
URL을 중지할 수 있습니다.
Google Cloud 콘솔에서 서비스 이름을 클릭하거나 gcloud CLI에서 다음 명령어를 실행하여 서비스 URL을 검색할 수 있습니다.
gcloud run services describe SERVICE --format 'value(status.url)'
결정론적 URL이 표시될 때 우선순위가 부여됩니다.
결정론적 URL
결정론적 URL을 사용하면 서비스가 생성되기 전에 서비스 URL을 예측할 수 있으므로 서비스 간 통신에 유용합니다.
결정론적 URL은 DNS 세그먼트가 63개 이하인 경우에만 사용 가능합니다. DNS 세그먼트에는 서비스 이름, 프로젝트 번호, 트래픽 태그가 포함됩니다.
Cloud Run 서비스의 결정론적 URL의 형식은 다음과 같습니다.
https://[TAG---]SERVICE_NAME-PROJECT_NUMBER.REGION.run.app
각 항목의 의미는 다음과 같습니다.
- TAG는 요청하는 버전의 선택적 트래픽 태그입니다.
- PROJECT_NUMBER는 Google Cloud 프로젝트 번호입니다.
- SERVICE_NAME은 Cloud Run 서비스 이름입니다.
- REGION은 리전 이름입니다(예:
us-central1
).
비결정론적 URL
비결정론적 URL에는 결정론적 형식이 없습니다. 즉, URL의 두 번째 필드가 무작위 해시이므로 서비스를 배포하기 전에 전체 URL을 예측할 수 없습니다. 하지만 서비스를 배포한 후에는 URL이 안정적으로 유지됩니다.
Cloud Run 서비스의 비결정론적 URL은 https://[
TAG---]
SERVICE_IDENTIFIER.run.app
형식입니다. 여기서 TAG는 요청하는 버전의 선택적인 트래픽 태그를 나타내고 SERVICE_IDENTIFIER는 Cloud Run 서비스의 안정적이고 고유한 식별자입니다. SERVICE_IDENTIFIER에는 고정 형식이 없으므로 이를 파싱하지 마세요. SERVICE_IDENTIFIER 생성 논리는 변경될 수 있습니다.
HTTP-HTTPS 간 리디렉션
Cloud Run은 모든 HTTP 요청을 HTTPS로 리디렉션하지만 웹 서비스에 연결되기 전에 TLS를 종료합니다. 서비스에서 안전하지 않은 URL(http://
)로 다른 웹 리소스를 참조하는 웹 리소스를 생성하면 페이지에 혼합 콘텐츠 경고 또는 오류가 발생할 수 있습니다.
X-Forwarded-Proto
HTTP 헤더와 같은 HTTP 요청의 프록시 지시문에 대한 모든 참조 웹 URI 또는 계정에 https
프로토콜을 사용합니다.
HTTP 및 HTTP/2
기본적으로 Cloud Run은 해당 요청이 컨테이너로 전송될 때 HTTP/2 요청을 HTTP/1로 다운그레이드합니다. HTTP/2 엔드 투 엔드를 사용하도록 서비스를 명시적으로 설정하려면 HTTP/2 사용을 참조하세요.
비공개 서비스 만들기
Cloud Run에서 비공개 서비스를 만들려면 IAM 호출자 권한을 활용하여 서비스에 대한 액세스를 제한해야 합니다.
또한 애플리케이션 수준 승인 및 인증 메커니즘(예: Identity Platform)을 사용하여 서비스에 대한 액세스 권한을 제한할 수 있습니다.
비공개 서비스 테스트
비공개 서비스를 테스트하는 가장 쉬운 방법은 Google Cloud CLI에서 Cloud Run 프록시를 사용하는 것입니다.
그러면 비공개 서비스가 http://localhost:8080
(또는 --port
로 지정된 포트)으로 프록시되어 활성 계정의 토큰 또는 지정한 다른 토큰이 제공됩니다.
이렇게 하면 웹브라우저 또는 curl
등의 도구를 사용할 수 있습니다.
이는 브라우저에서 웹사이트 또는 API를 비공개로 테스트하는 데 권장되는 방법입니다.
Linux, macOS, WSL(권장) 또는 cygwin 환경에서 다음 명령줄을 사용하여 서비스를 로컬로 프록시할 수 있습니다.
gcloud run services proxy SERVICE --project PROJECT-ID
curl
과 같은 도구를 사용하여 Authorization
헤더에 인증 토큰을 전달하여 프록시 없이 비공개 서비스를 테스트할 수 있습니다.
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" SERVICE_URL
서비스 간 비공개 서비스
Cloud Run 서비스는 서비스 간 인증으로 다른 Cloud Run 서비스를 호출할 수 있습니다.
비공개 서비스를 호출하는 샘플 코드
ID 토큰을 가져오고 비공개 서비스에 HTTP 요청을 수행하는 방법을 보여주는 코드 샘플은 서비스 간 인증 주제를 참조하세요.
미들웨어를 사용하여 서비스 개선
HTTPS 프록시는 HTTP 서비스에서 캐싱, 요청 검사 또는 승인과 같은 일반적인 기능을 오프로드할 수 있습니다. 마이크로서비스의 경우 많은 HTTP 프록시가 API 게이트웨이 솔루션 또는 Istio와 같은 서비스 메시에 포함됩니다.
Cloud Run 서비스 개선을 위해 사용할 수 있는 Google Cloud 제품은 다음과 같습니다.
API 게이트웨이: 다른 Cloud Run 서비스에 대한 프록시로 사용할 API를 생성, 보호, 모니터링하는 데 사용할 수 있습니다.
Firebase 호스팅 : Cloud Run에 동적 백엔드로 사용할 웹 애플리케이션 프런트엔드를 빌드할 수 있습니다.
HTTPS 요청으로 함수 호출
기본적으로 Cloud Run에서 생성된 모든 함수에는 함수를 트리거하는 데 사용할 수 있는 run.app
HTTPS URL이 있습니다. run.app
URL 중지 기능을 사용하여 선택 해제하지 않는 한 Eventarc 트리거로 만든 함수에도 HTTPS URL이 있습니다.