Dopo aver creato un deployment, puoi aggiornarlo man mano che l'applicazione o il servizio cambiano. Puoi utilizzare Deployment Manager per aggiornare un deployment:
- Aggiungendo o rimuovendo risorse da un deployment.
- Aggiornando le proprietà delle risorse esistenti in un deployment.
Un singolo aggiornamento può contenere qualsiasi combinazione di queste modifiche. Ad esempio, puoi apportare modifiche alle proprietà delle risorse esistenti e aggiungere nuove risorse nella stessa richiesta. Per aggiornare il deployment:
- Apporta modifiche a un file di configurazione o creane uno con le modifiche che vuoi.
- (Facoltativo) Scegli i criteri da utilizzare per gli aggiornamenti o utilizza i criteri predefiniti.
- Invia la richiesta di aggiornamento a Deployment Manager.
Prima di iniziare
- Se vuoi utilizzare gli esempi di riga di comando in questa guida, installa lo strumento a riga di comando `gcloud`.
- Se vuoi utilizzare gli esempi di API in questa guida, configura l'accesso alle API.
- Scopri come creare i deployment.
Prepara l'aggiornamento
Prima di aggiornare il deployment, utilizza queste linee guida per preparare l'aggiornamento:
Se stai aggiornando il deployment per aggiungere nuove risorse al progetto, controlla se le risorse esistono già.
Per impostazione predefinita, se una risorsa che vuoi aggiungere esiste già nel progetto, viene acquisita dal deployment senza crearne una nuova. Se non vuoi acquisire una risorsa esistente, devi modificare il criterio da utilizzare per l'aggiornamento.
Per informazioni sui criteri che puoi utilizzare durante l'aggiornamento dei deployment, consulta Criteri per l'aggiunta di risorse.
Se stai aggiornando il deployment per sostituire una risorsa, controlla le relative dipendenze
Se vuoi sostituire una risorsa dal deployment, devi prima assicurarti che la sua eliminazione non causi un ciclo di deployment. Un ciclo di deployment si verifica quando una risorsa dipende da se stessa, direttamente o indirettamente. Ad esempio, considera il seguente deployment:
resources: - name: vm-a properties: zone: us-central1-f ... metadata: dependsOn: - vm-depends-on # The second VM - name: vm-depends-on properties: zone: $(ref.vm-a.zone) ...In questo deployment, per
vm-a, l'istruzionedependsOnrichiede chevm-depends-onvenga creata prima divm-a. Tuttavia,vm-depends-onutilizza un riferimento alla zona pervm-a, il che richiede chevm-avenga creata prima divm-depends-on. In questo caso, le dipendenze sono in un loop e il deployment non riesce.Se hai una risorsa che dipende da altre risorse e da cui dipendono altre risorse, la sostituzione di questa risorsa potrebbe causare un ciclo di deployment.
Ad esempio, considera un deployment con un disco permanente denominato
disk-a, una VM denominatavm-ae un gruppo di istanze denominatoig-a. La configurazione divm-ainclude un riferimento adisk-ae la configurazione diig-ainclude un riferimento avm-a. In una configurazione aggiornata, vuoi rimuoverevm-ae sostituirla convm-b. In questo caso, la risoluzione delle dipendenze per vm-a e vm-b può causare un ciclo di deployment e il deployment non riesce.Per evitare cicli di deployment quando vuoi sostituire una risorsa in una catena di dipendenze, procedi in uno dei seguenti modi:
Rimuovi le dipendenze per la risorsa che vuoi sostituire, rimuovendo la clausola dependsOn o rimuovendo o modificando i riferimenti ad altre risorse. Dopo aver aggiornato il deployment con queste modifiche, esegui un altro aggiornamento per sostituire la risorsa.
Elimina la catena di risorse dipendenti e aggiorna il deployment. Poi, nell'aggiornamento successivo, ricrea le risorse che vuoi utilizzare.
Assicurati che esista un'API sottostante che supporti l'aggiornamento.
Deployment Manager utilizza le API di ogni servizio per creare e modificare i deployment. Per verificare che la richiesta possa essere completata da Deployment Manager, consulta la documentazione dell'API del servizio piattaforma Cloud per le risorse che vuoi aggiornare.
Ad esempio, se vuoi aggiornare un set di dati BigQuery nel deployment, consulta i metodi disponibili nel riferimento dell'API Datasets. I metodi includono un metodo
update, che indica che puoi aggiornare il set di dati utilizzando Deployment Manager.Alcune API hanno metodi personalizzati per aggiornare le risorse. Ad esempio, Compute Engine offre un metodo personalizzato per aggiornare i metadati di un'istanza denominato
setMetadata. In questi casi, Deployment Manager tenta di utilizzare i metodi personalizzati.Assicurati che le risorse che stai aggiornando siano modificabili.
Alcune risorse sono immutabili dopo la creazione e non possono essere aggiornate. Per determinare se una risorsa è immutabile, consulta il riferimento dell'API per la risorsa. In genere, una risorsa immutabile non ha un metodo API
updateo un metodo personalizzato per aggiornare le proprietà della risorsa.
Limitazioni
Per ogni deployment, puoi applicare un aggiornamento alla volta. Se è già in corso un aggiornamento, devi interrompere l'aggiornamento corrente prima di avviarne uno nuovo.
Se hai modificato una risorsa in un deployment senza utilizzare Deployment Manager, ad esempio nella Google Cloud console o
gcloud, potresti visualizzare errori o problemi imprevisti quando provi a modificare la risorsa in un aggiornamento.
Apporta modifiche alla configurazione
Se hai salvato una configurazione esistente, apportale le modifiche e utilizzala nella richiesta di aggiornamento.
Se non hai una configurazione esistente salvata, creane una nuova. Per i passaggi per creare un file di configurazione, consulta Configurazioni.
Deployment Manager confronta la configurazione fornita nella richiesta di aggiornamento con il manifest precedente e utilizza le differenze per aggiornare il deployment.
Ad esempio, la tabella seguente mostra due configurazioni: una descrive un deployment esistente e l'altra descrive lo stato aggiornato desiderato del deployment. Fornisci la configurazione aggiornata e Deployment Manager valuta le differenze e apporta gli aggiornamenti appropriati.
Questo esempio aggiorna una risorsa istanza esistente per includere alcuni metadati personalizzati e aggiunge anche una nuova risorsa macchina virtuale al deployment. Le parti in grassetto sono le differenze tra i modelli.
| Template attuale | Template aggiornato |
|---|---|
resources: - name: vm-created-by-cloud-config type: compute.v1.instance properties: zone: us-central1-a machineType: machine-type-url disks: - deviceName: boot type: PERSISTENT boot: true autoDelete: true initializeParams: diskName: disk-created-by-cloud-config sourceImage: image-url networkInterfaces: - network: network-url |
resources: - name: vm-created-by-cloud-config type: compute.v1.instance properties: zone: us-central1-a machineType: machine-type-url disks: - deviceName: boot type: PERSISTENT boot: true initializeParams: diskName: disk-created-by-cloud-config sourceImage: image-url networkInterfaces: - network: network-url metadata: items: - key: 'foo' value: 'bar' - key: 'dev' value: 'vm' - name: a-new-vm type: compute.v1.instance properties: zone: us-central1-a machineType: machine-type-url - deviceName: boot type: PERSISTENT boot: true autoDelete: false initializeParams: diskName: a-new-vm-disk sourceImage: image-url networkInterfaces: - network: network-url |
(Facoltativo) Determina i criteri da utilizzare per l'aggiornamento
Poi, determina i criteri che vuoi utilizzare per l'aggiornamento. Il criterio determina la modalità di aggiornamento delle risorse quando aggiorni il deployment.
Deployment Manager utilizza questi criteri predefiniti:
- Il criterio predefinito per l'aggiunta di risorse è
CREATE_OR_ACQUIRE. - Il criterio predefinito per la rimozione delle risorse è
DELETE. - Il criterio predefinito per l'aggiornamento delle risorse è
UPDATE.
Per informazioni su ogni criterio, consulta le sezioni seguenti.
Criteri per l'aggiunta di risorse
Quando aggiungi risorse, puoi scegliere di creare una nuova risorsa e aggiungerla a un deployment oppure puoi acquisire una risorsa esistente:
CREATE_OR_ACQUIRE- [Predefinito] Deployment Manager acquisisce le risorse esistenti nel progetto o le crea se non esistono. Per acquisire una risorsa, Deployment Manager controlla la configurazione per le proprietà della risorsa che stai tentando di creare. Se esiste una risorsa con le stesse proprietà, Deployment Manager la acquisisce come parte del deployment.Le proprietà che Deployment Manager controlla dipendono dal tipo di risorsa che stai creando e potrebbero includere:
- Il
namedella risorsa - Il
typedella risorsa - La
zoneo laregiondella risorsa, se applicabile
Le proprietà fanno parte dell'URL per la richiesta API
GETdella risorsa. Per vedere quali proprietà utilizza Deployment Manager per acquisire una risorsa, consulta la documentazione dell'API per il metodoGETdella risorsa. Ad esempio, per le istanze di Compute Engine, l'URL della richiesta perinstances.getmetodo includeresourceId(namenella configurazione),zoneeproject.- Il
CREATE- Deployment Manager crea le risorse che non esistono. Se una delle risorse nella configurazione esiste già nel progetto, il deployment non riesce.ACQUIRE- Deployment Manager acquisisce le risorse già esistenti, utilizzando gli stessi criteri diCREATE_OR_ACQUIRE.Utilizza il criterio
ACQUIREse hai già un certo numero di risorse nel progetto e vuoi gestirle insieme come un unico deployment.Nel modello o nella configurazione, devi fornire le proprietà richieste per queste risorse come se le stessi creando. Se una delle risorse nella configurazione non esiste nel progetto, il deployment non riesce.
Criteri per la rimozione delle risorse
Fornisci uno dei seguenti criteri per la rimozione delle risorse:
DELETE- [Predefinito] Rimuove tutti i riferimenti alla risorsa dal deployment ed elimina la risorsa sottostante. Questa operazione è definitiva e non può essere annullata, ma puoi ricreare una nuova risorsa con le stesse proprietà.ABANDON- Rimuove tutti i riferimenti alla risorsa dal deployment, ma non elimina la risorsa sottostante. Ad esempio, abbandonare un'istanza significa che viene rimossa da un deployment, ma l'istanza esiste ancora e puoi utilizzarla.Il criterio
ABANDONsi applica solo quando elimini intere risorse, non quando elimini le proprietà di una risorsa o aggiorni una risorsa con nuove proprietà. Se vuoi conservare le proprietà di una risorsa, devi includere la risorsa con tutte le sue proprietà originali nella configurazione aggiornata. Se utilizzi un nuovo file di configurazione per l'aggiornamento, ti consigliamo di copiare la definizione della risorsa dalla configurazione originale.
Criteri per l'aggiornamento di una risorsa esistente
Se esiste un metodo UPDATE per aggiornare le risorse esistenti, Deployment Manager lo utilizza.
In caso contrario, se esiste un metodo personalizzato, Deployment Manager lo utilizza.
Deployment Manager supporta i metodi personalizzati che utilizzano il verbo set. Ad esempio, setMetadata() è un metodo personalizzato valido, ma addAccessConfigs() non lo è.
(Facoltativo) Visualizza l'anteprima di una configurazione aggiornata
Puoi visualizzare l'anteprima dell'aggiornamento che vuoi apportare prima di eseguire il commit delle modifiche, utilizzando Google Cloud CLI o l'API. Il servizio Deployment Manager visualizza l'anteprima della configurazione espandendo la configurazione completa e creando risorse "shell".
Deployment Manager non crea istanze di risorse effettive quando visualizzi l'anteprima di una configurazione, dandoti la possibilità di vedere il deployment prima di eseguirne il commit.
gcloud
Con Google Cloud CLI, invia una richiesta update con il parametro --preview:
gcloud deployment-manager deployments update example-deployment \
--config configuration-file.yaml \
--preview
API
Nell'API, crea una PUT()
richiesta con un deployment esistente e fornisci il preview=true parametro
di query. Il corpo della richiesta deve contenere i campi intent, target e name. Fornisci il nome del deployment sia nell'URL sia nel corpo della richiesta.
Ad esempio, la seguente richiesta API visualizza l'anteprima di un semplice aggiornamento:
PUT https://www.googleapis.com/deploymentmanager/v2/projects/myproject/global/deployments/example-deployment?preview=true
{
"target": {
"config": {
"content": "resources:\n- name: vm-created-by-cloud-config\n type: compute.v1.instance\n properties:\n zone: us-central1-a\n machineType: https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/machineTypes/n1-standard-1\n disks:\n - deviceName: boot\n type: PERSISTENT\n boot: true\n autoDelete: true\n initializeParams:\n diskName: disk-created-by-cloud-config\n sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-9-stretch-v20180716\n networkInterfaces:\n - network: https://www.googleapis.com/compute/v1/projects/myproject/global/networks/default"
}
},
"name": "example-deployment"
}
Dopo aver visualizzato l'anteprima di un deployment, puoi eseguire il deployment completo della configurazione inviando la stessa richiesta PUT(), omettendo sia la configurazione sia il parametro di query preview. Deployment Manager utilizza l'ultima anteprima per eseguire l'aggiornamento. Ad esempio:
gcloud deployment-manager deployments update example-deployment
Per i passaggi per inviare una richiesta di aggiornamento, consulta Invia la richiesta di aggiornamento.
Se decidi di non continuare con l'aggiornamento, annulla l'anteprima corrente prima di inviare un'altra richiesta di aggiornamento o di anteprima.
Annulla un'anteprima
Dopo aver visualizzato l'anteprima di un aggiornamento, devi decidere se vuoi continuare con l'aggiornamento. Se non vuoi continuare o se vuoi utilizzare un file di configurazione diverso per aggiornare il deployment, annulla l'anteprima corrente.
gcloud
Con Google Cloud CLI, invia una richiesta deployments cancel-preview:
gcloud deployment-manager deployments cancel-preview my-first-deployment
API
Nell'API, invia una PUT() richiesta al cancelPreview
metodo e fornisci l'ultima fingerprint del deployment. Una fingerprint è un valore generato in modo casuale che cambia con ogni richiesta di aggiornamento. Per evitare errori durante l'aggiornamento, fornisci l'ultima fingerprint con la richiesta.
Per ottenere l'ultima fingerprint di un deployment, utilizza il
get() metodo per ottenere un
deployment e cerca il valore della fingerprint. Il valore della fingerprint ha questo aspetto:
"fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="
La richiesta cancelPreview() ha questo aspetto:
POST https://www.googleapis.com/deploymentmanager/v2/projects/myproject/global/deployments/example-deployment/cancelPreview
{
"fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="
}
Invia la richiesta di aggiornamento
Per eseguire l'aggiornamento:
gcloud
Con Google Cloud CLI, utilizza il sottocomando deployments update,
fornendo una nuova configurazione e, facoltativamente, i criteri di aggiornamento.
gcloud deployment-manager deployments update my-first-deployment \
--create-policy POLICY \
--delete-policy POLICY
Se in precedenza hai visualizzato l'anteprima di una configurazione, ometti la configurazione e Deployment Manager utilizza l'ultima configurazione visualizzata in anteprima per eseguire l'aggiornamento.
gcloud deployment-manager deployments update my-first-deployment
API
Nell'API, invia una update
richiesta e fornisci l'ultima fingerprint del deployment. Una fingerprint è un valore generato in modo casuale che cambia con ogni richiesta di aggiornamento. Per evitare errori durante l'aggiornamento, fornisci l'ultima fingerprint con la richiesta.
Per ottenere l'ultima fingerprint di un deployment, utilizza il
get() metodo per ottenere un
deployment e cerca il valore della fingerprint. Il valore della fingerprint ha questo aspetto:
"fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="
Poi, fornisci la fingerprint nella richiesta, insieme alla nuova configurazione e ai criteri di aggiornamento. Se in precedenza hai visualizzato l'anteprima della configurazione, ometti la configurazione e i criteri di aggiornamento e Deployment Manager utilizza l'ultima configurazione visualizzata in anteprima per eseguire l' aggiornamento.
Fornisci il nome del deployment sia nell'URL sia nel corpo della richiesta.
PUT https://www.googleapis.com/deploymentmanager/v2/projects/myproject/global/deployments/example-deployment?createPolicy=ACQUIRE&deletePolicy=ABANDON
{
"target": {
"config": {
"content": "resources:\n- name: vm-created-by-cloud-config\n type: compute.v1.instance\n properties:\n zone: us-central1-a\n machineType: https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/machineTypes/n1-standard-1\n disks:\n - deviceName: boot\n type: PERSISTENT\n boot: true\n autoDelete: true\n initializeParams:\n diskName: disk-created-by-cloud-config\n sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-9-stretch-v20180716\n networkInterfaces:\n - network: https://www.googleapis.com/compute/v1/projects/myproject/global/networks/default"
}
},
"name": "example-deployment",
"fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="
}
Interrompi un aggiornamento
Puoi interrompere un aggiornamento in corso utilizzando il stop().
Questo metodo annulla qualsiasi ulteriore avanzamento di un determinato aggiornamento, ma non annulla le modifiche già apportate. Se stai tentando di annullare un'anteprima, consulta la sezione Annulla un'anteprima.
Se stai tentando di annullare un'anteprima, consulta la sezione Annullare un'anteprima.
gcloud
Con Google Cloud CLI, invia una richiesta deployments stop:
gcloud deployment-manager deployments stop my-first-deployment
API
Nell'API, invia una POST() richiesta al
stop metodo e fornisci
l'ultima proprietà fingerprint. Una fingerprint è un valore generato in modo casuale che cambia con ogni richiesta di aggiornamento. Per evitare modifiche in conflitto, devi fornire l'ultima fingerprint con la richiesta, per eseguire il blocco ottimistico in modo che sia possibile apportare un solo aggiornamento alla volta.
Per ottenere l'ultima fingerprint di un deployment, utilizza il
get() metodo per ottenere un
deployment e cerca il valore della fingerprint. Il valore della fingerprint ha questo aspetto:
"fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="
La richiesta ha questo aspetto:
POST https://www.googleapis.com/deploymentmanager/v2/projects/myproject/global/deployments/example-deployment/stop
{
"fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="
}
Passaggi successivi
- Aggiungi etichette al deployment.
- Visualizza il tuo manifest del deployment.