ID regione
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 potrebbero essere simili ai codici di paesi e province di uso comune. Per le app create dopo febbraio 2020, REGION_ID.r è incluso negli URL di 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 a questo servizio.
Questa migrazione non richiede riscritture importanti del codice di elaborazione delle immagini o l'hosting dell'applicazione App Engine su Cloud Run. Invece, quando configuri l'applicazione, l'SDK dei servizi App Engine intercetta le chiamate al servizio Immagini di App Engine e le indirizza al servizio Cloud Run. Il servizio elabora le immagini utilizzando un motore Pillow open source su gRPC e restituisce i risultati alla tua applicazione App Engine. Questa configurazione sostituisce il backend del servizio App Engine Images precedente con una soluzione moderna e cloud-native.
Limitazioni
Quando utilizzi il servizio di elaborazione delle immagini personalizzato con
APPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICEimpostato sutrue, non puoi generare URL di pubblicazione. App Engine genera un'eccezione di runtime quando richiami il metodogetServingUrl(). Puoi utilizzare questo metodo solo quandoAPPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICEè impostato sufalseo non è impostato. Questa limitazione impedisce di fare affidamento sul backend legacy per l'archiviazione e la pubblicazione delle immagini.Per pubblicare le immagini, ti consigliamo di farlo direttamente da un URL Cloud Storage o di utilizzare un bucket Cloud Storage supportato da Cloud CDN.
Gli URL esistenti che hai creato utilizzando le 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 al servizio Cloud Run. L'applicazione applica il nuovo comportamento solo dopo aver configurato le variabili di ambiente
APPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICEeAPPENGINE_IMAGES_SERVICE_ENDPOINT.
Prima di iniziare
Assicurati di avere accesso al codice sorgente di App Engine.
Abilita l'API Cloud Run Admin e l'API Artifact Registry:
Ruoli obbligatori
Puoi scegliere di creare un nuovo account di servizio o di utilizzare in Cloud Run lo stesso account di servizio gestito dall'utente che utilizzi per App Engine. Tu o l'amministratore dovete concedere all'account deployer e al account di servizio Cloud Build i seguenti ruoli IAM.
Fai clic per visualizzare i ruoli richiesti per l'account deployer
Per ottenere le autorizzazioni necessarie per creare ed eseguire il deployment dal codice sorgente, chiedi all'amministratore di concederti i seguenti ruoli IAM:
- Cloud Run Source Developer (
roles/run.sourceDeveloper) sul tuo progetto - Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer) nel tuo progetto - Service Account User (
roles/iam.serviceAccountUser) sull'identità di servizio Cloud Run
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 non esegui 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@ \ --role=roles/run.builder
Sostituisci PROJECT_NUMBER con il tuo numero di progetto Google Cloude PROJECT_ID con il tuo ID progetto Google Cloud. Per istruzioni dettagliate su come trovare l'ID progetto e il numero di progetto, consulta Creazione e gestione dei progetti.
La concessione del ruolo Cloud Run Builder al account di servizio predefinito di Compute Engine richiede un paio di 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 prevede i seguenti passaggi:
- Esegui il deployment del servizio di trasformazione delle immagini su Cloud Run per ottenere l'URL del servizio.
- Configura i file di origine di App Engine con l'URL del servizio Cloud Run e i flag di routing, quindi esegui o rifai il deployment dell'applicazione App Engine.
- 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 configurare il suo accesso a Cloud Storage, segui questi passaggi:
Esegui il deployment del container del servizio di trasformazione delle immagini predefinito nel servizio Cloud Run. Assicurati di eseguire il deployment con l'autenticazione applicata (
--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/release/image-processing-service:latest \ --no-allow-unauthenticated \ --region=REGIONSostituisci 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 hai eseguito il deployment, ad esempio
https://image-processing-service-xyz-uc.a..Concedi il ruolo Cloud Run Invoker (
roles/run.invoker) al account di servizio App Engine predefinito. In questo modo, l'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@" \ --role="roles/run.invoker" \ --region=REGIONConcedi il ruolo Visualizzatore oggetti Cloud Storage (
roles/storage.objectViewer) al service account Compute Engine predefinito. In questo modo, il servizio di trasformazione delle immagini può leggere le immagini archiviate in Cloud Storage:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER-compute@" \ --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.
Configura 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:
Aggiorna il file
pom.xmlper 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.1.0</version> </dependency>Aggiungi la dipendenza
google-auth-library-oauth2-httpper una comunicazione sicura con Cloud Run:<dependency> <groupId>com.google.auth</groupId> <artifactId>google-auth-library-oauth2-http</artifactId> <version>1.20.0</version> </dependency>
Aggiorna il file
appengine-web.xmlper 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 hai eseguito il deployment.
Esegui il deployment dell'applicazione in App Engine:
mvn clean package appengine:deploy cleanAvvia il browser e accedi al servizio web eseguendo questo comando:
gcloud app browse
Testa l'applicazione
Per verificare che l'applicazione utilizzi correttamente il servizio di trasformazione delle immagini di Cloud Run:
- Attivare la funzionalità di elaborazione delle immagini nell'applicazione App Engine di cui hai eseguito il deployment.
- Controlla Esplora log per la tua applicazione App Engine. Assicurati che non ci siano errori relativi alle chiamate
com.google.appengine.api.images. - Controlla i log di Cloud Run
image-processing-serviceper verificare che Cloud Run abbia ricevuto ed elaborato le richieste.