リージョン ID
REGION_ID は、アプリの作成時に選択したリージョンに基づいて Google が割り当てる省略形のコードです。一部のリージョン ID は、一般的に使用されている国や州のコードと類似しているように見える場合がありますが、このコードは国または州に対応するものではありません。2020 年 2 月以降に作成されたアプリの場合、REGION_ID.r は App Engine の URL に含まれています。この日付より前に作成されたアプリの場合、URL のリージョン ID は省略可能です。
詳しくは、リージョン ID をご覧ください。
既存の App Engine アプリケーションで画像処理を最新化するには、コンテナ化された画像変換サービスを Cloud Run にデプロイし、App Engine Images サービスの呼び出しをそのサービスに転送します。
この移行では、画像処理コードの大幅な書き換えや、Cloud Run での App Engine アプリケーションのホスティングは必要ありません。代わりに、アプリケーションを構成すると、App Engine サービス SDK が App Engine Images サービスの呼び出しをインターセプトして、Cloud Run サービスに転送します。サービスは、gRPC 経由でオープンソースの Pillow エンジンを使用して画像を処理し、結果を App Engine アプリケーションに返します。この設定により、以前の App Engine Images サービス バックエンドが最新のクラウドネイティブ ソリューションに置き換えられます。
制限事項
カスタム画像処理サービスを使用する場合、サービス提供 URL を生成することはできません。
getServingUrl()メソッドを呼び出すと、App Engine はランタイム例外をスローします。この制限により、画像の保存と配信に以前のバックエンドを使用できなくなります。画像を配信するには、アプリケーションの要件に応じて、Cloud Storage URL から直接配信するか、Cloud CDN でバックアップされた Cloud Storage バケットを使用することをおすすめします。
getServingUrl()メソッドへの以前の呼び出しを使用して作成した既存の 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) - プロジェクトの Service Usage コンシューマー(
roles/serviceusage.serviceUsageConsumer) - Cloud Run サービス ID に対するサービス アカウント ユーザー(
roles/iam.serviceAccountUser)
クリックして Cloud Build サービス アカウントに必要なロールを表示
この動作をオーバーライドしない限り、Cloud Build は、ソースコードと Cloud Run リソースのビルドにデフォルトの Cloud Build サービス アカウントとして Compute Engine のデフォルトのサービス アカウントを自動的に使用します。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 サービスがGoogle Cloud APIs(Cloud クライアント ライブラリなど)と連携している場合は、サービス 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 がリクエストを受信して処理したことを確認します。