Il file app.yaml
definisce anche le impostazioni di configurazione per il runtime
impostazioni generali dell'app, della rete
e altre impostazioni delle risorse.
Non aggiungere app.yaml
al file .gcloudignore
. app.yaml
potrebbe essere necessario per il deployment e aggiungerlo a
.gcloudignore
causerà la mancata riuscita del deployment.
Sintassi
La sintassi del file app.yaml
è nel formato YAML.
Il formato YAML supporta i commenti, in cui qualsiasi riga che inizia con il carattere del simbolo hash (#
) viene ignorata, ad esempio:
# This is a comment.
I pattern di URL e percorsi file utilizzano la sintassi delle espressioni regolari estese POSIX, esclusi gli elementi di confronto e le classi di confronto. I riferimenti a ritroso alle corrispondenze raggruppate (ad es. \1
)
sono supportati, così come queste estensioni Perl: \w \W \s \S \d \D
.
Impostazioni generali
Un file app.yaml
può includere queste impostazioni generali. Tieni presente che alcuni sono obbligatori:
Nome | Descrizione |
---|---|
build_env_variables
|
Facoltativo. Se utilizzi un runtime che supporta
buildpacks,
puoi definire le variabili di ambiente di build
Per scoprire di più, consulta la sezione Utilizzare le variabili di ambiente di compilazione. |
runtime |
Obbligatorio. Il nome dell'ambiente di runtime utilizzato dalla tua app. Ad esempio, per specificare l'ambiente di runtime, utilizza: |
env: flex |
Obbligatorio: seleziona l'ambiente flessibile. |
service: service_name |
Obbligatorio se crei un servizio. Facoltativo per il servizio predefinito. Ogni servizio e ogni versione deve avere un nome. Un nome può contenere numeri,
lettere e trattini. Nell'ambiente flessibile, la lunghezza combinata di
VERSION-dot-SERVICE-dot-PROJECT_ID
(dove VERSION è il nome della versione,
SERVICE è il nome del servizio e
PROJECT_ID è l'ID progetto) non può essere superiore
a 63 caratteri e non può iniziare o terminare con un trattino.
Se esegui il deployment senza specificare un nome servizio, viene creata una nuova versione viene creato un servizio predefinito. Se esegui il deployment un nome di servizio già esistente, una nuova versione è stato creato. Se esegui il deployment con un nuovo nome di servizio che non esiste, verrà il servizio e la versione. Ti consigliamo di utilizzare un nome univoco per ogni combinazione di servizio e versione. Nota: in precedenza i servizi erano chiamati "moduli". |
service_account |
Facoltativo. L'elemento L'account di servizio deve essere fornito nel seguente formato: service_account: [SERVICE_ACCOUNT_NAME]@[PROJECT_ID].iam.gserviceaccount.com |
skip_files |
Facoltativo.
L'elemento
Ad esempio, per saltare i file i cui nomi terminano con skip_files: - ^.*\.bak$ |
Impostazioni di rete
Puoi specificare le impostazioni di rete nel file di configurazione app.yaml
, ad esempio:
network: name: NETWORK_NAME instance_ip_mode: INSTANCE_IP_MODE instance_tag: TAG_NAME subnetwork_name: SUBNETWORK_NAME session_affinity: true forwarded_ports: - PORT - HOST_PORT:CONTAINER_PORT - PORT/tcp - HOST_PORT:CONTAINER_PORT/udp
Quando configuri le impostazioni di rete, puoi utilizzare le seguenti opzioni:
Opzione | Descrizione |
---|---|
name |
Ogni istanza VM nell'ambiente flessibile viene assegnata a una rete Google Compute Engine al momento della creazione. Utilizza questa impostazione per specificare il nome di una rete. Assegna il nome breve, non il percorso della risorsa (ad esempio, default anziché https://www.googleapis.com/compute/v1/projects/my-project/global/networks/default ). Se non specifichi un nome di rete, le istanze vengono assegnate alla rete predefinita del progetto (che ha il nome default ). Per specificare il nome di una subnet, devi specificare un nome di rete. |
instance_ip_mode |
Facoltativo. Per impedire alle istanze di ricevere un indirizzo IP esterno temporaneo, impostalo su internal e abilita l'accesso privato Google. Se l'istanza è stata dipiattaforma in precedenza senza questa impostazione o se è stata dipiattaforma con questa impostazione impostata su external , il nuovo dipiattaforma con questa impostazione impostata su internal rimuove gli indirizzi IP esterni temporanei dalle istanze. L'impostazione internal ha limitazioni. Il valore predefinito è external . |
instance_tag |
Facoltativo. Un tag con questo nome viene assegnato a ogni istanza del servizio al momento della creazione. I tag possono essere utili nei comandi gcloud per indirizzare un'azione a un gruppo di istanze. Ad esempio, consulta l'utilizzo dei flag --source-tags e --target-tags nel comando compute firewalls-create. Se non specificato, l'istanza viene taggata con aef-INSTANCE_ID quando non viene utilizzato il VPC condiviso. Se viene utilizzato un VPC condiviso, l'istanza viene taggata con entrambi i valori aef-INSTANCE_ID |
subnetwork_name |
Facoltativo. Puoi segmentare la tua rete e utilizzare una sottorete personalizzata. Assicurati che la rete name sia specificata. Specifica il nome breve, non il percorso della risorsa (ad esempio default anziché https://www.googleapis.com/compute/v1/projects/my-project/global/networks/default/subnetworks/default ). La subnet deve trovarsi nella stessa regione dell'applicazione. |
session_affinity |
Facoltativo. Imposta true per configurare App Engine in modo da instradare più richieste sequenziali per un determinato utente alla stessa istanza di App Engine, ad esempio quando i dati utente vengono archiviati localmente durante una sessione. L'affinità sessione consente di ispezionare il valore di un cookie per identificare più richieste dello stesso utente, quindi indirizza tutte queste richieste alla stessa istanza. Se l'istanza viene riavviata, non è in stato operativo, è sovraccaricata o non è disponibile quando il numero di istanze è stato ridotto, l'affinità di sessione viene interrotta e le richieste successive vengono inoltrate a un'altra istanza. Tieni presente che l'attivazione dell'affinità di sessione può influire sulla configurazione del bilanciamento del carico. Questo parametro è disattivato per impostazione predefinita. |
forwarded_ports |
Facoltativo. Puoi inoltrare le porte dalla tua istanza (HOST_PORT ) al container Docker (CONTAINER_PORT ). HOST_PORT deve essere compreso tra 1024 e 65535 e non può essere in conflitto con le seguenti porte: 22, 8080, 8090, 8443, 10000, 10001, 10400-10500, 11211, 24231. CONTAINER_PORT deve essere compreso tra 1 e 65535 e non può entrare in conflitto con le seguenti porte: 22, 10001, 10400-10500, 11211. Se specifichi solo un valore PORT , App Engine presuppone che si tratti della stessa porta sull'host e sul container. Per impostazione predefinita, viene inoltrato il traffico TCP e UDP. Il traffico deve essere indirizzato direttamente all'indirizzo IP dell'istanza di destinazione anziché sul dominio appspot.com o sul tuo dominio personalizzato. |
Configurazione di rete avanzata
Puoi segmentare la rete Compute Engine in subnet. Ciò consente di abilitare scenari VPN, come l'accesso ai database all'interno della tua azienda in ogni rete.
Per attivare le sottoreti per la tua applicazione App Engine:
Aggiungi il nome della rete e della subnet al file
app.yaml
, come specificato sopra.Per stabilire una VPN semplice basata sul routing statico, crea un gateway e un tunnel per una rete di subnet personalizzata. In caso contrario, scopri come creare altri tipi di VPN.
Port forwarding
Il port forwarding consente connessioni dirette al contenitore Docker sulle tue istanze. Questo traffico può viaggiare su qualsiasi protocollo. Il port forwarding è il suo scopo è aiutare nelle situazioni in cui potrebbe essere necessario collegare un debugger o profiler. Il traffico deve essere indirizzato direttamente all'indirizzo IP dell'istanza di destinazione anziché tramite il dominio appspot.com o il tuo dominio personalizzato.
Per impostazione predefinita, il traffico in entrata dall'esterno della rete non è consentito tramite i firewall della piattaforma Google Cloud.
Dopo aver specificato il port forwarding nel file app.yaml
, devi aggiungere una
regola firewall che consenta il traffico dalle porte che vuoi aprire.
Puoi specificare una regola firewall nella pagina Regole firewall di rete nel
Console Google Cloud
o utilizzando i comandi gcloud
.
Ad esempio, se vuoi inoltrare il traffico TCP dalla porta 2222
:
Nelle impostazioni della rete di
app.yaml
, includi:network: forwarded_ports: - 2222/tcp
Se utilizzi il runtime Python, modifica
app.yaml
in modo da includere:entrypoint: gunicorn -b :$PORT -b :2222 main:app
Specifica una regola firewall nel Console Google Cloud o utilizzando
gcloud compute firewall-rules create
per consentire il traffico da qualsiasi sorgente (0.0.0.0/0
) e datcp:2222
.
Impostazioni risorse
Queste impostazioni controllano le risorse di calcolo. App Engine assegna un tipo di macchina in base alla quantità di CPU e memoria specificate. È garantito che la macchina abbia almeno il livello di risorse che hai specificato, ma potrebbe avere di più.
Puoi specificare fino a otto volumi di tmpfs nelle impostazioni delle risorse. Puoi quindi attivare i carichi di lavoro che richiedono memoria condivisa tramite tmpfs e migliorare l'I/O del file system.
Ad esempio:
resources:
cpu: 2
memory_gb: 2.3
disk_size_gb: 10
volumes:
- name: ramdisk1
volume_type: tmpfs
size_gb: 0.5
Quando configuri le impostazioni delle risorse, puoi utilizzare le seguenti opzioni:
Opzione | Descrizione | Predefinito |
---|---|---|
cpu |
Il numero di core; deve essere uno, un numero pari compreso tra 2 e 32 o un multiplo di 4 compreso tra 32 e 80. | 1 core |
memory_gb |
RAM in GB. La memoria richiesta per la tua applicazione, che non includono i circa 0,4 GB di memoria necessari per l'overhead di i processi di machine learning. Ogni core della CPU richiede una memoria totale compresa tra 1,0 e 6,5 GB. Per calcolare la memoria richiesta:
Nell'esempio precedente, in cui hai specificato 2 core, puoi
tra 1,6 e 12,6 GB. La quantità totale di memoria disponibile per
l'applicazione viene impostata dall'ambiente di runtime come variabile di ambiente
|
0,6 GB |
disk_size_gb |
Dimensioni in GB. Il valore minimo è 10 GB e il massimo è 10.240 GB. | 13 GB |
name |
Obbligatorio, se utilizzi volumi. Nome del volume. I nomi devono essere univoci e avere una lunghezza compresa tra 1 e 63 caratteri. I caratteri possono essere lettere minuscole,
numeri o trattini. Il primo carattere deve essere una lettera e l'ultimo
carattere non può essere un trattino. Il volume viene montato nel container dell'app come /mnt/NAME .
|
|
volume_type |
Obbligatorio se utilizzi volumi. Deve essere tmpfs . |
|
size_gb |
Obbligatorio se utilizzi volumi. Dimensioni del volume, in GB. Il valore minimo è di 0,001 GB e il valore massimo è la quantità di memoria disponibile nel contenitore dell'applicazione e sul dispositivo sottostante. Google non aggiunge RAM aggiuntiva al sistema per soddisfare i requisiti di spazio su disco. La RAM allocata per i volumi tmpfs verrà sottratta alla memoria disponibile per il contenitore dell'app. La precisione dipende dal sistema. |
Controlli di integrità suddivisi
Per impostazione predefinita, i controlli di integrità periodici sono attivati. Puoi utilizzare richieste di controllo di integrità periodice per confermare che un'istanza VM è stata dispiata correttamente e per verificare che un'istanza in esecuzione mantenga uno stato integro. Per ogni controllo di integrità deve essere fornita una risposta entro un intervallo di tempo specificato.
Un'istanza è in stato non integro quando non riesce a rispondere a un numero specificato di di richieste di controllo di integrità consecutive. Se un'istanza non è attiva, viene riavviata. Se un'istanza non è pronta, non riceverà alcun client richieste. Un controllo di integrità può anche avere esito negativo se non c'è spazio libero su disco.
Puoi utilizzare due tipi di controlli di integrità:
- I controlli di attività confermano che la VM e il container Docker sono in esecuzione. App Engine riavvia le istanze in stato non integro.
- I controlli di idoneità confermano che l'istanza è pronta per accettare le richieste in entrata. Le istanze che non superano il controllo di idoneità non vengono aggiunte al pool di istanze disponibili.
Per impostazione predefinita, le richieste HTTP provenienti dai controlli di integrità non vengono inoltrate al contenitore dell'applicazione. Se vuoi estendere i controlli di integrità alla tua applicazione,
specifica un percorso per i controlli di attività o per i
controlli di idoneità. Un controllo di integrità personalizzato per la tua
applicazione è considerato riuscito se restituisce un codice di risposta 200 OK
.
Controlli dell'attività
I controlli di attività confermano che la VM e il contenitore Docker sono in esecuzione. Le istanze considerate non integre vengono riavviate.
Puoi personalizzare le richieste di controllo dell'attività aggiungendo un elemento liveness_check
facoltativo
sezione al tuo file app.yaml
, ad esempio:
liveness_check:
path: "/liveness_check"
check_interval_sec: 30
timeout_sec: 4
failure_threshold: 2
success_threshold: 2
Per i controlli di presenza sono disponibili le seguenti impostazioni:
Campo | Predefinito | Intervallo (minimo-massimo) | Descrizione |
---|---|---|---|
path |
Nessuno | Se vuoi che i controlli di attualità vengano inoltrati al contenitore dell'applicazione, specifica un percorso dell'URL, ad esempio "/liveness_check" |
|
timeout_sec |
4 secondi | 1-300 | Intervallo di timeout per ogni richiesta, in secondi. |
check_interval_sec |
30 secondi | 1-300 | Intervallo di tempo tra i controlli, in secondi. Tieni presente che questo valore deve sia maggiore di timeout_sec. |
failure_threshold |
4 controlli | 1-10 | Un'istanza è in stato non integro dopo aver superato questo numero di controlli consecutivi. |
success_threshold |
2 controlli | 1-10 | Un'istanza in stato non integro torna integro dopo a questo numero di controlli consecutivi. |
initial_delay_sec |
300 secondi | 0-3600 | Il ritardo, in secondi, dopo l'avvio dell'istanza durante il quale le risposte ai controlli di integrità vengono ignorate. Questa impostazione si applica a ogni creata e concedere a una nuova istanza più tempo per attivarsi in esecuzione. L'impostazione ritarda la riparazione automatica durante il controllo e, potenzialmente, creazione prematura dell'istanza se è in corso è in fase di avvio. Il timer del ritardo iniziale si avvia quando l'istanza è in modalità RUNNING. Ad esempio, potresti voler aumentare il ritardo se le tue un'applicazione presenta attività di inizializzazione che richiedono molto tempo pronto a gestire il traffico. |
Controlli di idoneità
I controlli di idoneità confermano che un'istanza può accettare le richieste in entrata. Le istanze che non superano il controllo di idoneità non vengono aggiunte al pool delle istanze disponibili.
Puoi personalizzare le richieste di controllo di integrità aggiungendo un elemento readiness_check
facoltativo
sezione al tuo file app.yaml
, ad esempio:
readiness_check:
path: "/readiness_check"
check_interval_sec: 5
timeout_sec: 4
failure_threshold: 2
success_threshold: 2
app_start_timeout_sec: 300
Per i controlli di idoneità sono disponibili le seguenti impostazioni:
Campo | Predefinito | Intervallo (minimo-massimo) | Descrizione |
---|---|---|---|
path |
Nessuno | Se vuoi che i controlli di idoneità vengano inoltrati al contenitore
dell'applicazione, specifica un percorso dell'URL, ad esempio "/readiness_check" |
|
timeout_sec |
4 secondi | 1-300 | Intervallo di timeout per ogni richiesta, in secondi. |
check_interval_sec |
5 secondi | 1-300 | Intervallo di tempo tra i controlli, in secondi. Tieni presente che questo valore deve sia maggiore di timeout_sec. |
failure_threshold |
2 controlli | 1-10 | Un'istanza è in stato non integro dopo aver superato questo numero di controlli consecutivi. |
success_threshold |
2 controlli | 1-10 | Un'istanza in stato non integro diventa integro dopo a questo numero di controlli consecutivi. |
app_start_timeout_sec |
300 secondi | 1-1800 | Questa impostazione si applica ai nuovi deployment, non alle singole VM. Specifica il tempo massimo in secondi consentito per un numero sufficiente di istanze in un deployment per superare i controlli di integrità. Se questo di durata superiore, il deployment non va a buon fine e ne viene eseguito il rollback. Il timer si avvia quando le istanze Compute Engine sono state di cui è stato eseguito il provisioning ed è stato creato il servizio di backend del bilanciatore del carico. Ad esempio, ti consigliamo di aumentare il timeout se vuoi impostare timeout più lunghi durante i deployment in modo che un numero sufficiente di istanze diventi stabile. |
Frequenza del controllo di integrità
Per garantire un'alta disponibilità, App Engine crea copie ridondanti di ogni controllo di stato. In caso di errore di un controllo di integrità, ne può prendere il controllo uno ridondante senza in ritardo.
Se esamini i log nginx.health_check
della tua applicazione, potresti notare che il polling del controllo di integrità avviene più di frequente di quanto hai configurato a causa dei controlli di integrità ridondanti che rispettano anche le tue impostazioni. Questi controlli di integrità ridondanti vengono creati automaticamente e non puoi configurarli.
Impostazioni di scalabilità del servizio
Le chiavi utilizzate per controllare il ridimensionamento di un servizio dipendono dal tipo di ridimensionamento assegnato al servizio.
Puoi utilizzare la scalabilità automatica o manuale. L'impostazione predefinita è la scalabilità automatica.
Scalabilità automatica
Puoi configurare la scalabilità automatica aggiungendo una sezione automatic_scaling
al file app.yaml
. Ad esempio:
automatic_scaling:
min_num_instances: 1
max_num_instances: 15
cool_down_period_sec: 180
cpu_utilization:
target_utilization: 0.6
target_concurrent_requests: 100
La tabella seguente elenca le impostazioni che puoi utilizzare con la scalabilità automatica:
Nome | Descrizione |
---|---|
automatic_scaling |
Per impostazione predefinita, si presume la scalabilità automatica. Includi questa riga se vuoi specificare una delle impostazioni di scalabilità automatica. |
min_num_instances |
Il numero minimo di istanze assegnate al servizio. Quando un servizio
viene eseguito il deployment, riceve questo numero di istanze e scala
al traffico.
Deve essere pari o superiore a 1 . Il valore predefinito è 2 per ridurre la latenza.
|
max_num_instances |
Il numero massimo di istanze di cui il tuo servizio
a cui è possibile fare lo scale up. Il numero massimo di istanze in
il tuo progetto è limitato dalle
quota delle risorse.
Il valore predefinito è 20 .
|
cool_down_period_sec |
Il numero di secondi che il gestore della scalabilità automatica deve attendere prima
inizia a raccogliere informazioni da una nuova istanza. In questo modo, il
regolatore automatico della scalabilità non raccoglie informazioni durante l'inizializzazione dell'istanza,
durante la quale l'utilizzo raccolto non sarebbe affidabile. Relax
deve essere maggiore o uguale a 60 secondi.
Il valore predefinito è 120 .
|
cpu_utilization |
Utilizza questa intestazione se vuoi specificare l'utilizzo della CPU target. |
target_utilization |
Utilizzo CPU target. L'utilizzo della CPU viene calcolato in media
in tutte le istanze in esecuzione e viene utilizzato per decidere quando ridurre
aumenta il numero di istanze. Tieni presente che le istanze sono ridimensionate
indipendentemente dalle richieste in corso, 25 secondi dopo che un'istanza riceve
il segnale di spegnimento. Il valore predefinito è 0.5 .
|
target_concurrent_requests |
(Beta) Numero target di connessioni simultanee per istanza. Se specifichi un valore per questo parametro, il gestore della scalabilità automatica utilizza il numero medio di connessioni simultanee tra tutte le istanze in esecuzione decidere quando ridurre o aumentare il numero di istanze. Un'istanza è ridimensionato 25 secondi dopo aver ricevuto il segnale di arresto, indipendentemente di richieste in corso. Se non specifichi un valore per questo parametro, il gestore della scalabilità automatica non ha come target un numero di connessioni simultanee per istanza. Le connessioni sono diverse dalle richieste. Una connessione può essere riutilizzata da un client per inviare più richieste. |
Scalabilità manuale
Puoi configurare il ridimensionamento manuale aggiungendo una sezione manual_scaling
al file app.yaml
. Ad esempio:
manual_scaling:
instances: 5
La tabella seguente elenca le impostazioni che puoi utilizzare con la scalabilità manuale:
Nome | Descrizione |
---|---|
manual_scaling |
Necessario per abilitare la scalabilità manuale di un servizio. |
instances |
Il numero di istanze da assegnare al servizio. |
definisci le variabili di ambiente
Puoi definire le variabili di ambiente in app.yaml
per renderle disponibili
la tua app, ad esempio:
env_variables:
MY_VAR: "my value"
dove MY_VAR
e my value
sono il nome e il valore della variabile di ambiente che vuoi definire e ogni voce della variabile di ambiente è rientrata di due spazi sotto l'elemento env_variables
.
Utilizzo delle variabili di ambiente