Un runtime personalizzato consente di utilizzare un'implementazione alternativa di qualsiasi un linguaggio di ambiente flessibile, o per personalizzare Fornita da Google. Ti permette inoltre di scrivere codice in qualsiasi altro linguaggio può gestire le richieste HTTP in entrata (esempio). Con un runtime personalizzato, l'ambiente flessibile fornisce e la tua infrastruttura di scalabilità, monitoraggio e bilanciamento del carico per te, puoi concentrarti sulla creazione della tua applicazione.
Per creare un runtime personalizzato, devi:
- Fornisci ad App Engine un file
app.yaml
che descriva la configurazione di runtime della tua applicazione. - Aggiungi un
Dockerfile
che configuri internamente l'ambiente di runtime. - Assicurati che il codice rispetti alcune regole di base.
Fornisci un file app.yaml
Il file di configurazione di app.yaml
deve contenere almeno le seguenti impostazioni:
runtime: custom
env: flex
Per informazioni sulle altre impostazioni che puoi impostare vedi Configurare l'app con app.yaml.
Crea un Dockerfile
La documentazione completa sulla creazione di Dockerfile è disponibile nel Sito web Docker. Se per un runtime personalizzato, devi fornire un Dockerfile fornendo la tua immagine di base o utilizzando una delle immagini di base in formato Docker.
Specifica un'immagine di base
Il primo comando in un Dockerfile è in genere un comando FROM
che specifica un'immagine di base.
Un'immagine di base viene utilizzata per creare il container e l'applicazione. Tu
può creare la tua immagine di base
oppure seleziona un'immagine di base da registri di container come DockerHub.
Individua il Dockerfile
In generale, il Dockerfile viene sempre denominato Dockerfile
e viene inserito nel
della stessa directory del file app.yaml
corrispondente. In alcuni casi, tuttavia,
di sviluppo software potrebbe avere requisiti diversi. Ad esempio, Cloud
Strumenti Java basati su SDK come i plug-in Maven, Gradle, Eclipse e IntelliJ
richiedono che Dockerfile
si trovi in src/main/docker/Dockerfile
e
app.yaml
file in src/main/appengine/app.yaml
. Consulta le
documentazione
per l'ambiente degli strumenti.
Struttura del codice
Questa sezione descrive il comportamento che il codice deve implementare se utilizzi un'immagine di base fornita da Google o la tua immagine di base.
Ascolta la porta 8080
Il frontend di App Engine instraderà le richieste in entrata sulla porta 8080. Devi assicurarti che il codice dell'applicazione sia in ascolto 8080.
Gestire gli eventi del ciclo di vita
L'ambiente flessibile invia periodicamente la tua applicazione di determinati eventi del ciclo di vita.
Chiusura dell'applicazione
Quando un'istanza deve essere arrestata, le nuove richieste in entrata vengono instradate
eventuali altre istanze e richieste in fase di elaborazione vengono
a disposizione per il completamento. Quando arresti un'istanza, l'ambiente flessibile
invia un indicatore STOP
(SIGTERM
) al contenitore di app. La tua app non richiede
per rispondere a questo evento, ma può utilizzarlo per eseguire le operazioni di pulizia necessarie
prima dell'arresto del container. In condizioni normali, il sistema
attende fino a 30 secondi per l'interruzione dell'app, quindi invia un KILL
(SIGKILL
)
arrestando immediatamente l'istanza.
In rari casi, le interruzioni possono impedire ad App Engine di fornire 30 secondi
di tempo di chiusura, il che significa che gli indicatori STOP
e KILL
potrebbero non essere inviati
prima della fine di un'istanza. Per gestire questa possibilità,
controlla periodicamente lo stato dell'istanza, utilizzandolo principalmente come
in memoria invece che in un datastore affidabile.
Richieste di controllo di integrità
Puoi utilizzare l'opzione Richieste di controllo di integrità per verificare l'avvenuto deployment di un'istanza VM e per verificare un'istanza in esecuzione mantiene uno stato integro.
Crea ed esegui il deployment del tuo runtime personalizzato
Dopo aver configurato i file app.yaml
e DOCKER
, puoi
creare e implementare
l'immagine del contenitore in App Engine.
In alternativa, puoi eseguire il deployment di immagini container predefinite dei runtime personalizzati archiviati in Artifact Registry. Ad esempio, puoi utilizzare Cloud Build per creare separatamente le immagini e poi archiviarle in Artifact Registry. Per ulteriori informazioni, vedi Immagini push e pull.
Integra la tua applicazione con Google Cloud
Le applicazioni in esecuzione in runtime personalizzati possono utilizzare Google Cloud Librerie client per accedere ai servizi Google Cloud. Le applicazioni in runtime personalizzati possono inoltre utilizzare qualsiasi servizio di terze parti che impiega le API standard.
Autenticazione con i servizi Google Cloud
Le credenziali predefinite dell'applicazione offrono il modo più semplice per autenticarsi e chiamare le API di Google.
Se la tua applicazione utilizza Cloud Build per compilare le immagini Docker,
la rete cloudbuild
ospita
Credenziali predefinite dell'applicazione che abilitano i servizi Google Cloud associati per
a trovare automaticamente le tue credenziali.
Per ulteriori informazioni sull'autenticazione, vedi Autenticazione in Google.
Logging
Quando viene inviata una richiesta alla tua applicazione in esecuzione in App Engine, i dettagli della richiesta e della risposta vengono registrati automaticamente. Possono essere visualizzati in Esplora log della console Google Cloud.
Quando l'applicazione gestisce una richiesta, può anche
scrivere i propri messaggi di logging in stdout
e stderr
. Questi file sono
raccolti automaticamente e possono essere visualizzati in Esplora log. Solo il
le voci più recenti per stdout
e stderr
vengono conservate, in ordine
per limitarne le dimensioni.
Puoi anche scrivere log personalizzati in /var/log/app_engine/custom_logs
, utilizzando un
file che termina con .log
o .json
.
Se includi agenti di terze parti nel contenitore dell'applicazione, assicurati
assicurati di configurare gli agenti in modo che accedano a stdout
e stderr
o in un log personalizzato.
In questo modo, gli eventuali errori prodotti da questi agenti saranno visibili in Cloud Logging.
I log delle richieste e delle applicazioni per la tua app vengono raccolti da un agente Cloud Logging e vengono conservati per un massimo di 90 giorni, fino a una dimensione massima di 1 GB. Se vuoi conservare i log più a lungo o archiviare una dimensione superiore a 1 GB, puoi esportare log in Cloud Storage. Puoi anche esportare i log in BigQuery e Pub/Sub per per ulteriore elaborazione.
Sono disponibili anche altri log che puoi utilizzare. Di seguito sono riportati alcuni log configurate per impostazione predefinita:
Nome log | Tipo di payload | Finalità |
---|---|---|
crash.log |
testo | Informazioni registrate quando la configurazione non va a buon fine. Se l'esecuzione dell'applicazione non riesce, controlla questo log. |
monitoring.* |
testo | Informazioni provenienti dal container Docker che pubblica i dati in Cloud Monitoring. |
shutdown.log |
testo | Informazioni registrate all'arresto. |
stdout |
testo | Output standard della tua app. |
stderr |
testo | Errore standard del container. |
syslog |
testo | Il syslog della VM, esterno al container Docker. |