既存の App Engine アプリケーションの画像処理を最新化するには、コンテナ化された画像変換サービスを Cloud Run にデプロイし、App Engine Images service 呼び出しをそのサービスにルーティングします。
この移行では、画像処理コードを大幅に書き換える必要はありません。また、App Engine アプリケーションを Cloud Run でホストする必要もありません。代わりに、アプリケーションを構成すると、App Engine Services SDK が App Engine Images サービス呼び出しをインターセプトし、Cloud Run サービスにルーティングします。このサービスは、オープンソースの Pillow エンジンを使用して画像を処理し、gRPC 経由で結果を App Engine アプリケーションに返します。この設定により、従来の App Engine Images サービス バックエンドが最新のクラウドネイティブ ソリューションに置き換えられます。
制限事項
APPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICEがtrueに設定されているカスタム画像処理サービスを使用する場合、配信 URL を生成できません。get_serving_url()メソッドを呼び出すと、App Engine はランタイム例外をスローします。このメソッドは、APPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICEがfalseに設定されているか、設定されていない場合にのみ使用できます。この制限により、画像の保存と配信に従来のバックエンドを使用できなくなります。画像を配信するには、Cloud Storage URL から直接配信するか、Cloud CDN を使用して Cloud Storage バケットをバックアップすることをおすすめします。
get_serving_url()メソッドへの従来の呼び出しを使用して作成した既存の URL は、引き続き画像を配信します。App Engine Services SDK のバージョンをアップグレードしても、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@ \ --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 Services SDK は、このサービスを呼び出すときに認証を処理します。gcloud run deploy image-processing-service \ --image=us-central1-docker.pkg.dev/gae-bundled-services-images/release/image-processing-service:latest \ --no-allow-unauthenticated \ --region=REGIONREGION は、 Cloud Run サービスをデプロイするリージョンに置き換えます。App Engine サービスと同じリージョンにサービスをデプロイすることをおすすめします。
デプロイされた Cloud Run サービスのサービス URL(
https://image-processing-service-xyz-uc.a.など)をメモします。デフォルトの 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@" \ --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@" \ --role="roles/storage.objectViewer"次のように置き換えます。
- PROJECT_ID: Cloud Run サービスをデプロイするプロジェクトの ID。
- PROJECT_NUMBER: Cloud Run サービスをデプロイするプロジェクトのプロジェクト番号。
ソースファイルを構成する
Cloud Run で画像変換サービスを使用するように Python アプリケーションを構成する手順は次のとおりです。
requirements.txtファイルに次の依存関係を追加します。appengine-python-standard>=3.0.2または、依存関係をローカルにインストールするには、次のコマンドを実行します。
pip install "appengine-python-standard>=3.0.2"app.yamlファイルを更新して API プロキシを有効にし、必要な環境変数を構成します。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 がリクエストを受信して処理したことを確認します。