리전 ID
REGION_ID는 앱을 만들 때 선택한 리전을 기준으로 Google에서 할당하는 축약된 코드입니다. 일부 리전 ID는 일반적으로 사용되는 국가 및 주/도 코드와 비슷하게 표시될 수 있지만 코드는 국가 또는 주/도와 일치하지 않습니다. 2020년 2월 이후에 생성된 앱의 경우 REGION_ID.r이 App Engine URL에 포함됩니다. 이 날짜 이전에 만든 기존 앱의 경우 URL에서 리전 ID는 선택사항입니다.
리전 ID에 대해 자세히 알아보세요.
기존 App Engine 애플리케이션에서 이미지 처리를 현대화하려면 컨테이너화된 이미지 변환 서비스를 Cloud Run에 배포하고 App Engine 이미지 서비스 호출을 해당 서비스로 라우팅하면 됩니다.
이 마이그레이션에서는 이미지 처리 코드를 대대적으로 다시 작성하거나 App Engine 애플리케이션을 Cloud Run에서 호스팅할 필요가 없습니다. 대신 애플리케이션을 구성할 때 App Engine 서비스 SDK가 App Engine 이미지 서비스 호출을 가로채서 Cloud Run 서비스로 라우팅합니다. 이 서비스는 gRPC를 통해 오픈소스 Pillow 엔진을 사용하여 이미지를 처리하고 결과를 App Engine 애플리케이션에 반환합니다. 이 설정은 기존 App Engine 이미지 서비스 백엔드를 최신 클라우드 네이티브 솔루션으로 대체합니다.
제한사항
맞춤 이미지 처리 서비스를 사용하는 경우 제공 URL을 생성할 수 없습니다.
getServingUrl()메서드를 호출하면 App Engine에서 런타임 예외가 발생합니다. 이 제한으로 인해 이미지를 저장하고 제공하는 데 기존 백엔드를 사용할 수 없습니다.이미지를 제공하려면 애플리케이션 요구사항에 따라 Cloud Storage URL에서 직접 제공하거나 Cloud CDN으로 지원되는 Cloud Storage 버킷을 사용하는 것이 좋습니다.
getServingUrl()메서드에 대한 기존 호출을 사용하여 만든 기존 URL은 계속 이미지를 제공합니다.App Engine 서비스 SDK 버전을 업그레이드해도 App Engine에서 Cloud Run 서비스로 App Engine 호출을 자동으로 라우팅하지는 않습니다. 애플리케이션은 마이그레이션 환경 변수
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에서 이미지 변환 서비스를 사용하도록 Java 애플리케이션을 구성하려면 다음 단계를 따르세요.
다음 종속 항목을 포함하도록
pom.xml파일을 업데이트합니다.appengine-api-1.0-sdk종속 항목을 추가하거나 업데이트합니다.<dependency> <groupId>com.google.appengine</groupId> <artifactId>appengine-api-1.0-sdk</artifactId> <version>5.0.5-beta.1</version> </dependency>Cloud Run과의 보안 통신을 위한
google-auth-library-oauth2-http종속 항목을 추가합니다.<dependency> <groupId>com.google.auth</groupId> <artifactId>google-auth-library-oauth2-http</artifactId> <version>1.20.0</version> </dependency>
appengine-web.xml파일을 업데이트하여 필수 환경 변수를 구성합니다.<?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <runtime>RUNTIME</runtime> <!-- a supported Java runtime version --> <threadsafe>true</threadsafe> <!-- List the Images service --> <app-engine-bundled-services> <api>images</api> </app-engine-bundled-services> <env-variables> <!-- Enable the custom gRPC Images service --> <env-var name="APPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICE" value="true" /> <!-- The URL of the Cloud Run service you deployed --> <env-var name="APPENGINE_IMAGES_SERVICE_ENDPOINT" value="RUN_SERVICE_URL" /> </env-variables> </appengine-web-app>다음을 바꿉니다.
- RUNTIME: 지원되는 Java 런타임 버전입니다.
- RUN_SERVICE_URL: 배포된 Cloud Run 서비스의 URL입니다.
App Engine에 애플리케이션을 배포합니다.
mvn clean package appengine:deploy clean브라우저를 실행하고 다음 명령어를 실행하여 웹 서비스에 액세스합니다.
gcloud app browse
애플리케이션 테스트
애플리케이션이 Cloud Run 이미지 변환 서비스를 성공적으로 사용하고 있는지 확인하려면 다음 단계를 따르세요.
- 배포된 App Engine 애플리케이션에서 이미지 처리 기능을 트리거합니다.
- App Engine 애플리케이션의 로그 탐색기를 확인합니다.
com.google.appengine.api.images호출과 관련된 오류가 없는지 확인합니다. - Cloud Run
image-processing-service의 로그를 확인하여 Cloud Run이 요청을 수신하고 처리했는지 확인합니다.