이 페이지에서는 VPC 서비스 제어 경계를 사용할 때 Google Cloud 프로젝트의 예약된 Cloud Run 작업을 실행하기 위한 권장사항을 설명합니다.
Cloud Scheduler는 VPC 서비스 제어 경계 내에서 작업을 트리거할 수 없습니다. 예약된 작업을 설정하려면 추가 단계를 거쳐야 합니다. 특히 다른 구성요소를 통해 요청을 프록시해야 합니다. Cloud Run 서비스를 프록시로 사용하는 것이 좋습니다.
다음 다이어그램은 이러한 아키텍처를 보여줍니다.
시작하기 전에
VPC 서비스 제어를 위해 Cloud Run 설정 이는 모든 후속 예약된 작업에서 사용하는 일회성 설정입니다. 나중에 서비스별 설정도 해야 합니다. 이는 다음 안내에 설명되어 있습니다.
예약된 작업 설정
VPC 서비스 제어 경계 내에서 예약된 작업을 설정하려면 다음 단계를 따르세요.
작업을 만들고 작업 이름을 확인합니다.
작업별 Cloud Run용 VPC 서비스 제어 설정을 완료합니다. 작업을 VPC 네트워크에 연결하고 이 네트워크를 통해 모든 트래픽을 라우팅해야 합니다.
트리거할 기존 Cloud Run 작업이 없는 경우 샘플 Cloud Run 작업 컨테이너
us-docker.pkg.dev/cloudrun/container/job:latest
를 Cloud Run에 배포하여 이 기능을 테스트합니다.프록시 역할을 하는 Cloud Run 서비스를 배포합니다. 요청에 대한 응답으로 Cloud Run 작업을 트리거하는 샘플 서비스는 샘플 프록시 서비스를 참고하세요. 배포 후 콘솔에 URL: 텍스트 옆에 서비스 URL이 표시됩니다.
서비스별 Cloud Run용 VPC 서비스 제어 설정을 완료합니다. 서비스를 VPC 네트워크에 연결하고 이 네트워크를 통해 모든 트래픽을 라우팅해야 합니다. 인그레스를 내부로 설정해야 합니다.
Cloud Run 프록시 서비스를 트리거하는 Cloud Scheduler 크론 작업을 만듭니다.
작업 만들기를 클릭합니다.
이름, 지역, 빈도, 시간대 필드에 원하는 값을 입력합니다. 자세한 내용은 Cloud Scheduler를 사용하여 크론 작업 만들기를 참고하세요.
실행 구성을 클릭합니다.
대상 유형 HTTP를 선택합니다.
URL에 이전 단계에서 기록한 Cloud Run 프록시 서비스 URL을 입력합니다.
HTTP 메서드의 경우 가져오기를 선택합니다.
인증 헤더에서 OIDC 토큰 추가를 선택합니다.
서비스 계정의 경우 Compute Engine 기본 서비스 계정 또는
run.routes.invoke
권한 또는Cloud Run Invoker
역할을 가진 맞춤 서비스 계정을 선택합니다.Audience(수신자)에 이전 단계에서 기록한 Cloud Run 프록시 서비스 URL을 입력합니다.
다른 모든 필드를 비워둡니다.
만들기를 클릭하여 Cloud Scheduler 크론 작업을 만듭니다.
샘플 프록시 서비스
다음 섹션에서는 요청을 프록시하고 Cloud Run 작업을 트리거하는 샘플 Python 서비스를 보여줍니다.
main.py
라는 파일을 만들고 다음 코드를 붙여넣습니다. 작업 이름, 리전, 프로젝트 ID를 필요한 값으로 업데이트합니다.import os from flask import Flask app = Flask(__name__) # pip install google-cloud-run from google.cloud import run_v2 @app.route('/') def hello(): client = run_v2.JobsClient() # UPDATE TO YOUR JOB NAME, REGION, AND PROJECT ID job_name = 'projects/YOUR_PROJECT_ID/locations/YOUR_JOB_REGION/jobs/YOUR_JOB_NAME' print("Triggering job...") request = run_v2.RunJobRequest(name=job_name) operation = client.run_job(request=request) response = operation.result() print(response) return "Done!" if __name__ == '__main__': app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
requirements.txt
라는 파일을 만들고 이 파일에 다음 코드를 붙여넣습니다.google-cloud-run flask
다음과 같은 콘텐츠가 포함된 Dockerfile을 만듭니다.
FROM python:3.9-slim-buster WORKDIR /app COPY requirements.txt requirements.txt RUN pip install --no-cache-dir -r requirements.txt COPY . . CMD ["python3", "main.py"]
컨테이너를 빌드하고 배포합니다. 소스 기반 배포는 Cloud Build 맞춤 작업자를 설정해야 하므로 VPC 서비스 제어 환경에서 설정하기 어려울 수 있습니다. 기존 빌드 및 배포 파이프라인이 있는 경우 이를 사용하여 소스 코드를 컨테이너에 빌드하고 컨테이너를 Cloud Run 서비스로 배포합니다.
기존 빌드 및 배포 설정이 없는 경우 컨테이너를 로컬에서 빌드하고 Artifact Registry에 푸시합니다. 예를 들면 다음과 같습니다.
PROJECT_ID=YOUR_PROJECT_ID REGION=YOUR_REGION AR_REPO=YOUR_AR_REPO CLOUD_RUN_SERVICE=job-runner-service docker build -t $CLOUD_RUN_SERVICE . docker tag $CLOUD_RUN_SERVICE $REGION_ID-docker.pkg.dev/$PROJECT_ID/AR_REPO/$CLOUD_RUN_SERVICE docker push $REGION_ID-docker.pkg.dev/$PROJECT_ID/AR_REPO/$CLOUD_RUN_SERVICE
배포 명령어에서 반환된 서비스 URL을 확인합니다.
다음 단계
이 기능을 사용한 후 다음을 읽어 자세히 알아보세요.