Esegui la migrazione dal servizio App Engine Images a Cloud Run

ID regione

Il REGION_ID è un codice abbreviato che Google assegna in base alla regione selezionata quando crei l'app. Il codice non corrisponde a un paese o a una provincia, anche se alcuni ID regione possono sembrare simili ai codici di paesi e province di uso comune. Per le app create dopo febbraio 2020, REGION_ID.r è incluso negli URL App Engine. Per le app esistenti create prima di questa data, l'ID regione è facoltativo nell'URL.

Scopri di più sugli ID regione.

Per modernizzare l'elaborazione delle immagini nelle tue applicazioni App Engine esistenti, puoi eseguire il deployment di un servizio di trasformazione delle immagini containerizzato in Cloud Run e indirizzare le chiamate del servizio Images di App Engine.

Questa migrazione non richiede modifiche sostanziali al codice di elaborazione delle immagini o l'hosting dell'applicazione App Engine su Cloud Run. Quando configuri l'applicazione, l'SDK dei servizi App Engine intercetta le chiamate al servizio App Engine Images e le indirizza al servizio Cloud Run. Il servizio elabora le immagini utilizzando un motore Pillow open source tramite gRPC e restituisce i risultati all'applicazione App Engine. Questa configurazione sostituisce il backend del servizio App Engine Images precedente con una soluzione moderna e nativa per il cloud.

Limitazioni

  • Quando utilizzi il servizio di elaborazione delle immagini personalizzato, non puoi generare URL di pubblicazione. App Engine genera un'eccezione di runtime quando richiami il metodo getServingUrl(). Questa limitazione impedisce di fare affidamento sul backend legacy per l'archiviazione e la pubblicazione delle immagini.

    Per pubblicare le immagini, ti consigliamo di pubblicarle direttamente da un URL Cloud Storage o di utilizzare un bucket Cloud Storage supportato da Cloud CDN, a seconda dei requisiti dell'applicazione.

    Gli URL esistenti creati utilizzando chiamate legacy al metodo getServingUrl() continuano a pubblicare immagini.

  • Quando esegui l'upgrade della versione dell'SDK dei servizi App Engine, App Engine non indirizza automaticamente le chiamate App Engine al servizio Cloud Run. La tua applicazione applica il nuovo comportamento solo dopo aver configurato le variabili di ambiente di migrazione APPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICE e APPENGINE_IMAGES_SERVICE_ENDPOINT.

Prima di iniziare

  1. Assicurati di avere accesso al codice sorgente di App Engine.

  2. Abilita l'API Cloud Run Admin e l'API Artifact Registry:

    Abilita le API

Ruoli obbligatori

Puoi scegliere di creare un nuovo account di servizio o di utilizzare lo stesso account di servizio gestito dall'utente in Cloud Run che utilizzi per App Engine. Tu o il tuo amministratore dovete concedere all'account di deployment e al account di servizio Cloud Build i seguenti ruoli IAM.

Fai clic per visualizzare i ruoli richiesti per l'account di deployment

Per ottenere le autorizzazioni necessarie per compilare ed eseguire il deployment dal codice sorgente, chiedi all'amministratore di concederti i seguenti ruoli IAM:

Fai clic per visualizzare i ruoli richiesti per il account di servizio Cloud Build

Cloud Build utilizza automaticamente l'account di servizio predefinito di Compute Engine come account di servizio Cloud Build predefinito per creare il codice sorgente e la risorsa Cloud Run, a meno che tu non esegua l'override di questo comportamento. Per consentire a Cloud Build di creare le tue origini, chiedi all'amministratore di concedere il ruolo Cloud Run Builder (roles/run.builder) al account di servizio Compute Engine predefinito nel tuo progetto:

  gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
      --role=roles/run.builder
  

Sostituisci PROJECT_NUMBER con il numero del tuo progetto Google Cloude PROJECT_ID con l'ID progetto Google Cloud. Per istruzioni dettagliate su come trovare l'ID progetto e il numero di progetto, vedi Creazione e gestione dei progetti.

La concessione del ruolo Cloud Run Builder al account di servizio Compute Engine predefinito richiede alcuni minuti per la propagazione.

Per un elenco di ruoli e autorizzazioni IAM associati a Cloud Run, consulta Ruoli IAM di Cloud Run e Autorizzazioni IAM di Cloud Run. Se il tuo servizio Cloud Run interagisce con le APIGoogle Cloud , come le librerie client Cloud, consulta la guida alla configurazione dell'identità del servizio. Per saperne di più sulla concessione dei ruoli, consulta Autorizzazioni di deployment e Gestisci l'accesso.

Processo di migrazione

Questa migrazione include i seguenti passaggi:

  1. Esegui il deployment del servizio di trasformazione delle immagini su Cloud Run per ottenere l'URL del servizio.
  2. Configura i file sorgente di App Engine con l'URL del servizio Cloud Run e i flag di routing, quindi esegui il deployment o il redeployment dell'applicazione App Engine.
  3. Testa l'applicazione per verificare la funzionalità di elaborazione delle immagini.

Esegui il deployment del servizio di trasformazione delle immagini su Cloud Run

Per eseguire il deployment del servizio di trasformazione delle immagini e configurarne l'accesso a Cloud Storage:

  1. Esegui il deployment del container del servizio di trasformazione delle immagini predefinito nel servizio Cloud Run. Assicurati di eseguire il deployment con l'autenticazione forzata (--no-allow-unauthenticated). L'SDK dei servizi App Engine gestisce l'autenticazione quando effettua chiamate a questo servizio:

    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
    

    Sostituisci REGION con la regione in cui esegui il deployment del servizio Cloud Run. Ti consigliamo di eseguire il deployment del servizio nella stessa regione del servizio App Engine.

    Prendi nota dell'URL del servizio Cloud Run di cui è stato eseguito il deployment, ad esempio https://image-processing-service-xyz-uc.a.run.app.

  2. Concedi il ruolo Cloud Run Invoker (roles/run.invoker) al account di servizio App Engine predefinito. In questo modo, la tua applicazione App Engine può autorizzare e instradare le chiamate al servizio Cloud Run privato:

    gcloud run services add-iam-policy-binding image-processing-service \
        --member="serviceAccount:PROJECT_ID@appspot.gserviceaccount.com" \
        --role="roles/run.invoker" \
        --region=REGION
    
  3. Concedi il ruolo Visualizzatore oggetti Cloud Storage (roles/storage.objectViewer) al service account Compute Engine predefinito. Ciò consente al servizio di trasformazione delle immagini di leggere le immagini archiviate in Cloud Storage:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
        --role="roles/storage.objectViewer"
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del progetto in cui esegui il deployment del servizio Cloud Run.
    • PROJECT_NUMBER: il numero del progetto in cui esegui il deployment del servizio Cloud Run.

Configurare i file di origine

Per configurare l'applicazione Java in modo che utilizzi il servizio di trasformazione delle immagini su Cloud Run, segui questi passaggi:

  1. Aggiorna il file pom.xml per includere le seguenti dipendenze:

    • Aggiungi o aggiorna la dipendenza 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>
      
    • Aggiungi la dipendenza google-auth-library-oauth2-http per la comunicazione sicura con Cloud Run:

      <dependency>
        <groupId>com.google.auth</groupId>
        <artifactId>google-auth-library-oauth2-http</artifactId>
        <version>1.20.0</version>
      </dependency>
      
  2. Aggiorna il file appengine-web.xml per configurare le variabili di ambiente richieste:

    <?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>
    

    Sostituisci quanto segue:

    • RUNTIME: una versione del runtime Java supportata.
    • RUN_SERVICE_URL: l'URL del servizio Cloud Run di cui è stato eseguito il deployment.
  3. Esegui il deployment dell'applicazione in App Engine:

    mvn clean package appengine:deploy clean
    
  4. Avvia il browser e accedi al servizio web eseguendo questo comando:

    gcloud app browse
    

Testa l'applicazione

Per verificare che la tua applicazione utilizzi correttamente il servizio di trasformazione delle immagini Cloud Run:

  1. Attiva la funzionalità di elaborazione delle immagini nell'applicazione App Engine di cui è stato eseguito il deployment.
  2. Controlla Esplora log per la tua applicazione App Engine. Assicurati che non ci siano errori relativi alle chiamate com.google.appengine.api.images.
  3. Controlla i log di Cloud Run image-processing-service per verificare che Cloud Run abbia ricevuto ed elaborato le richieste.

Passaggi successivi