App Engine Images サービスから Cloud Run に移行する

リージョン 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 を生成することはできません。get_serving_url() メソッドを呼び出すと、App Engine はランタイム例外をスローします。この制限により、画像の保存と配信に以前のバックエンドを使用できなくなります。

    画像を配信するには、アプリケーションの要件に応じて、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_SERVICEAPPENGINE_IMAGES_SERVICE_ENDPOINT を構成した後にのみ新しい動作を適用します。

始める前に

  1. App Engine のソースコードにアクセスできることを確認します。

  2. Cloud Run Admin API と Artifact Registry API を有効にします。

    API の有効化

必要なロール

新しいサービス アカウントを作成するか、App Engine 用に使用している Cloud Run の同じユーザー管理サービス アカウントを使用するかを選択できます。ユーザーまたは管理者は、デプロイ担当者アカウントと Cloud Build サービス アカウントに次の IAM ロールを付与する必要があります。

クリックしてデプロイ担当者アカウントに必要なロールを表示

ソースからビルドしてデプロイするために必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。

クリックして 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 の構成ガイドをご覧ください。ロールの付与の詳細については、デプロイ権限アクセスの管理をご覧ください。

移行プロセス

この移行には次の手順が含まれます。

  1. Cloud Run に画像変換サービスをデプロイして、サービス URL を取得します。
  2. Cloud Run サービスの URL とルーティング フラグを使用して App Engine ソースファイルを構成し、App Engine アプリケーションをデプロイまたは再デプロイします。
  3. アプリケーションをテストして、画像処理機能を確認します。

Cloud Run に画像変換サービスをデプロイする

イメージ変換サービスをデプロイし、Cloud Storage へのアクセスを構成する手順は次のとおりです。

  1. ビルド済みの画像変換サービス コンテナを 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=REGION
    

    REGION は、Cloud Run サービスをデプロイするリージョンに置き換えます。サービスは、App Engine サービスと同じリージョンにデプロイすることをおすすめします。

    デプロイされた Cloud Run サービスのサービス URL(https://image-processing-service-xyz-uc.a.run.app など)をメモします。

  2. デフォルトの 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
    
  3. デフォルトの 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 アプリケーションを構成する手順は次のとおりです。

  1. requirements.txt ファイルに次の依存関係を追加します。

    appengine-python-standard>=3.0.0b0
    

    または、依存関係をローカルにインストールするには、次のコマンドを実行します。

    pip install --pre "appengine-python-standard>=3.0.0b0"
    
  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。
  3. アプリケーションを App Engine にデプロイします。

    gcloud app deploy
    

    App Engine サービスは https://PROJECT_ID.REGION_ID.r.appspot.com にデプロイされます。

  4. ブラウザを起動し、次のコマンドを実行してウェブサービスにアクセスします。

    gcloud app browse
    

アプリケーションをテストする

アプリケーションが Cloud Run 画像変換サービスを正常に使用していることを確認するには:

  1. アプリケーションで画像処理機能をトリガーします。
  2. App Engine アプリケーションのログ エクスプローラを確認します。google.appengine.api.images 呼び出しに関連するエラーがないことを確認します。
  3. Cloud Run image-processing-service のログを確認して、Cloud Run がリクエストを受信して処理したことを確認します。

次のステップ