기존 App Engine 애플리케이션에서 이미지 처리를 현대화하려면 컨테이너화된 이미지 변환 서비스를 Cloud Run에 배포하고 App Engine Images service 호출을 이 서비스로 라우팅하면 됩니다.
이 마이그레이션을 위해 이미지 처리 코드를 대대적으로 다시 작성하거나 Cloud Run에서 App Engine 애플리케이션을 호스팅할 필요는 없습니다. 대신 애플리케이션을 구성할 때 App Engine 서비스 SDK가 App Engine 이미지 서비스 호출을 가로채서 Cloud Run 서비스로 라우팅합니다. 이 서비스는 gRPC를 통해 오픈소스 Pillow 엔진을 사용하여 이미지를 처리하고 결과를 App Engine 애플리케이션에 반환합니다. 이 설정은 기존 App Engine 이미지 서비스 백엔드를 최신 클라우드 네이티브 솔루션으로 대체합니다.
제한사항
커스텀 이미지 처리 서비스를 사용하는 경우 제공 URL을 생성할 수 없습니다. App Engine은
get_serving_url()메서드를 호출할 때 런타임 예외를 발생시킵니다. 이 제한사항은 이미지를 저장하고 제공하기 위해 기존 백엔드에 의존하는 것을 방지합니다.이미지를 제공하려면 애플리케이션 요구사항에 따라 Cloud Storage URL에서 직접 제공하거나 Cloud CDN으로 지원되는 Cloud Storage 버킷을 사용하는 것이 좋습니다.
get_serving_url()메서드에 대한 기존 호출을 사용하여 만든 기존 URL은 계속해서 이미지를 제공합니다.App Engine 서비스 SDK 버전을 업그레이드할 때 App Engine은 App Engine 호출을 Cloud Run 서비스로 자동 라우팅하지 않습니다. 애플리케이션은 마이그레이션 환경 변수
APPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICE및APPENGINE_IMAGES_SERVICE_ENDPOINT를 구성한 후에만 새 동작을 적용합니다.
시작하기 전에
App Engine 소스 코드에 액세스할 수 있는지 확인합니다.
Cloud Run Admin API 및 Artifact Registry API를 사용 설정합니다.
필요한 역할
새 서비스 계정을 만들 수도 있고, App Engine에서 사용 중인 것과 동일한 사용자 관리형 서비스 계정을 Cloud Run에서 사용할 수도 있습니다. 개발자 또는 관리자가 배포자 계정과 Cloud Build 서비스 계정에 다음 IAM 역할을 부여해야 합니다.
클릭하여 배포자 계정에 필요한 역할 보기
소스에서 빌드하고 배포하는 데 필요한 권한을 얻으려면 관리자에게 다음 IAM 역할을 부여해 달라고 요청하세요.
- 프로젝트의 Cloud Run 소스 개발자(
roles/run.sourceDeveloper) 역할 - 프로젝트의 서비스 사용량 소비자(
roles/serviceusage.serviceUsageConsumer) - Cloud Run 서비스 ID에 대한 서비스 계정 사용자(
roles/iam.serviceAccountUser) 역할
Cloud Build 서비스 계정에 필요한 역할을 보려면 클릭
이 동작을 재정의하지 않는 한 Cloud Build는 자동으로 Compute Engine 기본 서비스 계정을 기본 Cloud Build 서비스 계정으로 사용하여 소스 코드와 Cloud Run 리소스를 빌드합니다. Cloud Build에서 소스를 빌드할 수 있게 하려면 관리자에게 프로젝트의 Compute Engine 기본 서비스 계정에 Cloud Run 빌더(roles/run.builder)를 부여해 달라고 요청하세요.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/run.builder
PROJECT_NUMBER를 Google Cloud프로젝트 번호로, PROJECT_ID를 Google Cloud프로젝트 ID로 바꿉니다. 프로젝트 ID와 프로젝트 번호를 찾는 방법에 대한 자세한 내용은 프로젝트 만들기 및 관리를 참조하세요.
Compute Engine 기본 서비스 계정에 Cloud Run 빌더 역할을 부여하면 전파되는 데 몇 분 정도 걸립니다.
Cloud Run과 연결된 IAM 역할 및 권한 목록은 Cloud Run IAM 역할 및 Cloud Run IAM 권한을 참조하세요. Cloud Run 서비스가 Cloud 클라이언트 라이브러리와 같은Google Cloud API와 상호작용하는 경우에는 서비스 ID 구성 가이드를 참조하세요. 역할 부여에 대한 자세한 내용은 배포 권한 및 액세스 관리를 참조하세요.
마이그레이션 프로세스
이 마이그레이션에는 다음 단계가 포함됩니다.
- Cloud Run 에 이미지 변환 서비스를 배포하여 서비스 URL을 가져옵니다.
- Cloud Run 서비스 URL 및 라우팅 플래그로 App Engine 소스 파일을 구성한 후 App Engine 애플리케이션을 배포하거나 재배포합니다.
- 애플리케이션을 테스트하여 이미지 처리 기능을 확인합니다.
Cloud Run에 이미지 변환 서비스 배포
이미지 변환 서비스를 배포하고 Cloud Storage에 대한 액세스를 구성하려면 다음 단계를 따르세요.
사전 빌드된 이미지 변환 서비스 컨테이너를 Cloud Run 서비스에 배포합니다. 인증이 적용된 상태로 배포해야 합니다(
--no-allow-unauthenticated). App Engine 서비스 SDK는 이 서비스에 대한 호출을 수행할 때 인증을 처리합니다.gcloud run deploy image-processing-service \ --image=us-central1-docker.pkg.dev/gae-bundled-services-images/image-processing-service-staging/image-processing-service:public-image-d476f7ef9d1b \ --no-allow-unauthenticated \ --region=REGIONREGION을 Cloud Run 서비스를 배포하는 리전으로 바꿉니다. App Engine 서비스와 동일한 리전에 서비스를 배포하는 것이 좋습니다.
배포된 Cloud Run 서비스의 서비스 URL(예:
https://image-processing-service-xyz-uc.a.run.app)을 기록해 둡니다.기본 App Engine 서비스 계정에 Cloud Run 호출자 (
roles/run.invoker) 역할을 부여합니다. 이렇게 하면 App Engine 애플리케이션이 비공개 Cloud Run 서비스에 대한 호출을 승인하고 라우팅할 수 있습니다.gcloud run services add-iam-policy-binding image-processing-service \ --member="serviceAccount:PROJECT_ID@appspot.gserviceaccount.com" \ --role="roles/run.invoker" \ --region=REGION기본 Compute Engine 서비스 계정에 Cloud Storage 객체 뷰어 (
roles/storage.objectViewer) 역할을 부여합니다. 이렇게 하면 이미지 변환 서비스가 Cloud Storage에 저장된 이미지를 읽을 수 있습니다.gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role="roles/storage.objectViewer"다음을 바꿉니다.
- PROJECT_ID: Cloud Run 서비스를 배포하는 프로젝트의 ID입니다.
- PROJECT_NUMBER: Cloud Run 서비스를 배포하는 프로젝트의 프로젝트 번호입니다.
소스 파일 구성
Cloud Run에서 이미지 변환 서비스를 사용하도록 Python 애플리케이션을 구성하려면 다음 단계를 따르세요.
requirements.txt파일에 다음 종속 항목을 추가합니다.appengine-python-standard>=3.0.0b0또는 종속 항목을 로컬에 설치하려면 다음을 실행합니다.
pip install --pre "appengine-python-standard>=3.0.0b0"API 프록시를 사용 설정하고 필요한 환경 변수를 구성하도록
app.yaml파일을 업데이트합니다.runtime: RUNTIME # a supported python version # List the Images service app_engine_bundled_services: - images env_variables: # Enable the custom gRPC Images service APPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICE: "true" # The URL of the Cloud Run service you deployed APPENGINE_IMAGES_SERVICE_ENDPOINT: "RUN_SERVICE_URL"다음을 바꿉니다.
- RUNTIME: 지원되는 Python 런타임 버전입니다.
- RUN_SERVICE_URL: 배포된 Cloud Run 서비스의 URL입니다.
App Engine에 애플리케이션을 배포합니다.
gcloud app deployApp Engine 서비스가
https://PROJECT_ID.REGION_ID.r.appspot.com에 배포됩니다.브라우저를 실행하고 다음 명령어를 실행하여 웹 서비스에 액세스합니다.
gcloud app browse
애플리케이션 테스트
애플리케이션이 Cloud Run 이미지 변환 서비스를 성공적으로 사용하고 있는지 확인하려면 다음 단계를 따르세요.
- 애플리케이션에서 이미지 처리 기능을 트리거합니다.
- App Engine 애플리케이션의 로그 탐색기를 확인합니다.
google.appengine.api.images호출과 관련된 오류가 없는지 확인합니다. - Cloud Run
image-processing-service의 로그를 확인하여 Cloud Run이 요청을 수신하고 처리했는지 확인합니다.