Questa pagina descrive quando e perché creare modelli di istanza deterministici. I modelli di istanza deterministici chiariscono esplicitamente il tipo di app o servizi di terze parti da installare sulle tue istanze quando il modello di istanza viene implementato. Creando modelli di istanze deterministici, riduci al minimo l'ambiguità e i comportamenti imprevisti dei modelli di istanze.
Perché creare modelli di istanza deterministici
In generale, consigliamo che le proprietà del modello di istanze siano il più esplicite e deterministiche possibile. Se utilizzi script di avvio nei modelli di istanza che installano o utilizzano servizi di terze parti, assicurati che forniscano informazioni esplicite, ad esempio la versione dell'app da installare. Compute Engine può fare affidamento solo sulle informazioni definite nel modello e non ha alcun controllo sui servizi di terze parti a cui viene fatto riferimento. Se il modello è troppo vago, il modello di istanza potrebbe comportarsi in modo imprevisto.
Ad esempio, considera il seguente comando per creare un modello di istanza con un script di avvio che installa apache2 e utilizza un file ospitato su un server esterno:
gcloud compute instance-templates create example-template-with-startup \
--image-family debian-9 \
--image-project debian-cloud \
--metadata startup-script='#! /bin/bash
sudo apt install -y apache2
scp myuser@108.59.87.185:index.php /var/www/'
Esistono due potenziali problemi con questo script di avvio:
- Lo script non definisce esplicitamente quale versione di apache2 installare e si basa sulla versione corrente disponibile nel repository
apt
. - Lo script si basa su un file ospitato su una terza parte che non è sottoposto a controllo della versione e potrebbe essere stato modificato dall'ultima volta che è stato utilizzato il modello di istanza.
Se utilizzi un gestore della scalabilità automatica, un modello di istanza non deterministico può causare l'aggiunta di nuove istanze a un gruppo di istanze gestite con una configurazione diversa, ad esempio una versione diversa di apache2.
Analogamente, se hai applicato questo modello a un gruppo di istanze gestite, hai aggiornato il gruppo con un modello diverso e poi hai deciso di eseguire il rollback al modello precedente, potresti ritrovarti con istanze che utilizzano una versione diversa del file apache2 o index.php rispetto a prima dell'aggiornamento perché le istanze recupereranno sempre la versione più recente all'avvio.
Evitare comportamenti ambigui o imprevisti dei modelli di istanze
Per evitare comportamenti imprevisti del modello, utilizza i seguenti metodi:
Utilizza immagini ottimizzate per i container o Docker con i tag Docker. Ad esempio, ti consigliamo di assegnare nuovi tag per ogni nuova compilazione dell'immagine Docker e di utilizzarli nei modelli di istanze anziché nel tag più recente predefinito. Per un'immagine ottimizzata per i container, puoi fare riferimento esplicitamente a una determinata build dell'immagine nel file manifest. L'esempio seguente utilizza l'immagine Docker "myimage" nella versione con tag "version_2_1_3":
version: v1beta2 containers: - name: simple-echo image: myimage:version_2_1_3 [ rest of your manifest file ]
Crea un'immagine personalizzata da utilizzare come immagine per il modello. Questa soluzione è preferibile agli script di avvio perché garantisce che ogni istanza sia uguale. Gli script di avvio potrebbero avere risultati diversi dopo gli aggiornamenti del pacchetto di distribuzione. Utilizza gli script di avvio nei modelli di istanze per la prototipazione e lo sviluppo rapido e utilizza le immagini personalizzate quando è tutto pronto per il deployment di servizi di qualità di produzione.
Se utilizzi script di avvio, valuta la possibilità di aggiornarli in modo che siano deterministici. Ad esempio, crea una nuova versione del modello precedente e specifica uno script di avvio deterministico come segue:
gcloud compute instance-templates create example-template-with-startup-2-1-3 \ --image-family debian-9 \ --image-project debian-cloud \ --metadata startup-script='#! /bin/bash sudo apt install -y apache2=2.2.20-1ubuntu1 scp myuser@108.59.87.185:version_2_1_3/index.php /var/www/'
dove "version_2_1_3" è una sottodirectory contenente script PHP per la versione 2.1.3 del servizio.
Quando specifichi un modello di istanza, ad esempio quando crei o aggiornate un gruppo di istanze gestite, Google consiglia di specificare il valore dell'ID del modello anziché il valore del nome. Sebbene entrambi i valori siano validi, l'ID è univoco, il che significa che il modello di istanza specificato è quello utilizzato per la creazione delle VM da quel modello di istanza. L'utilizzo di un ID anziché di un nome contribuisce a mitigare potenziali vulnerabilità di sicurezza, ad esempio le vulnerabilità TOCTOU, in cui un malintenzionato può eliminare un modello e ricrearlo con lo stesso nome prima del suo utilizzo.
Per visualizzare l'ID di un modello di istanza, consulta Ottenere informazioni su un modello di istanza.