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_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 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:
- Cloud Run Source Developer (
roles/run.sourceDeveloper) sul tuo progetto - Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer) sul 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 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:
- Esegui il deployment del servizio di trasformazione delle immagini su Cloud Run per ottenere l'URL del servizio.
- 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.
- 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:
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=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 è stato eseguito il deployment, ad esempio
https://image-processing-service-xyz-uc.a.run.app.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=REGIONConcedi 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:
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.0.5-beta.1</version> </dependency>Aggiungi la dipendenza
google-auth-library-oauth2-httpper 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>
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 è stato 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 la tua applicazione utilizzi correttamente il servizio di trasformazione delle immagini Cloud Run:
- Attiva la funzionalità di elaborazione delle immagini nell'applicazione App Engine di cui è stato 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.