Dopo aver creato un deployment, puoi aggiornarlo come applicazione o modifiche ai servizi. Puoi utilizzare Deployment Manager per aggiornare un deployment:
- Aggiunta o rimozione di risorse da un deployment.
- Aggiornamento delle 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 o crea un file di configurazione con le modifiche che vuoi.
- Se vuoi, scegli i criteri da utilizzare per gli aggiornamenti o utilizza quello predefinito criteri.
- 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 API.
- Scopri come creare i deployment.
Preparare 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 nel progetto esiste già una risorsa che vuoi aggiungere, viene acquisita dal deployment, senza creare una nuova risorsa. 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, controllane le dipendenze
Se vuoi sostituire una risorsa del tuo deployment, devi prima assicurati che la sua eliminazione non causi un ciclo di deployment. Un ciclo di implementazione 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'istruzionedependsOn
richiede chevm-depends-on
venga creato prima divm-a
. Tuttavia,vm-depends-on
utilizza un riferimento alla zona pervm-a
, il che richiede chevm-a
debba essere creato prima divm-depends-on
. In questo scenario, le dipendenze sono in un loop e il deployment non va a buon fine.Se hai una risorsa che dipende da altre risorse e da cui dipendono altre risorse, la sostituzione della risorsa potrebbe causare un ciclo di implementazione.
Ad esempio, supponiamo che un deployment abbia un disco permanente chiamato
disk-a
, una VM denominatavm-a
e un gruppo di istanze denominatoig-a
. La pervm-a
include un riferimento adisk-a
, mentre perig-a
include un riferimento avm-a
. In una configurazione aggiornata, vuoi rimuoverevm-a
e sostituirlo convm-b
. In questo scenario, la risoluzione delle dipendenze per vm-a e vm-b può causare un ciclo di implementazione e l'implementazione non va a buon fine.Evitare cicli di deployment quando vuoi sostituire una risorsa in una catena. di dipendenze, esegui una delle seguenti operazioni:
Rimuovi le dipendenze per la risorsa che vuoi sostituire, rimuovendo la clausola relatedOn oppure 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 delle risorse dipendenti e aggiorna il deployment. Poi, nel prossimo aggiornamento, ricrea le risorse che vuoi utilizzare.
Assicurati che esista un'API di base che supporti l'aggiornamento.
Deployment Manager utilizza le API di ogni servizio per creare e modificare i tuoi deployment. Per verificare che la richiesta possa essere completata dal deployment 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 tuo il deployment, vedi i metodi disponibili Riferimento API Datasets. I metodi includono un metodo
update
, che indica che puoi aggiornare il set di dati utilizzando Deployment Manager.Alcune API dispongono di metodi personalizzati per l'aggiornamento delle risorse. Ad esempio, Compute Engine offre un metodo personalizzato per aggiornare i metadati di un'istanza chiamato
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 loro 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 dispone di un metodo API
update
o di un metodo personalizzato per aggiornare le proprietà della risorsa.
Limitazioni
Puoi applicare un aggiornamento alla volta per ogni deployment. Se un aggiornamento è già in corso, 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 console Google Cloud o
gcloud
, potresti riscontrare errori o problemi imprevisti quando provi a modificare la risorsa in un aggiornamento.
Apportare modifiche alla configurazione
Se hai salvato una configurazione esistente, apporta modifiche alla configurazione e utilizzarlo nella richiesta di aggiornamento.
Se non hai salvato una configurazione esistente, creane una nuova configurazione. Per conoscere la procedura per creare un file di configurazione, leggi Configurazioni.
Deployment Manager confronta la configurazione che fornisci nell'aggiornamento richiesta al manifest precedente e utilizza le differenze per aggiornare e deployment continuo.
Ad esempio, la tabella seguente mostra due configurazioni: una descrive deployment esistente e uno descrive lo stato aggiornato desiderato e deployment continuo. Tu 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 indicano le differenze tra i modelli.
Modello corrente | Modello 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
Quindi, determina quali criteri vuoi utilizzare per l'aggiornamento. Il criterio determina la modalità di aggiornamento delle risorse al momento dell'aggiornamento del 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 ciascuna norma, consulta le sezioni seguenti.
Criteri per l'aggiunta di risorse
Quando aggiungi risorse, puoi scegliere di crearne una nuova e aggiungerla a un deployment oppure puoi acquisire una risorsa esistente:
CREATE_OR_ACQUIRE
- [Predefinito] Deployment Manager acquisisce risorse esistenti nel progetto o crea risorse se non sono esistono. Per acquisire una risorsa, Deployment Manager controlla la configurazione per verificare la presenza delle proprietà della risorsa che stai tentando di creare. Se esiste un risorsa esistente con le stesse proprietà, Deployment Manager acquisisce come parte del deployment.Le proprietà controllate da Deployment Manager dipendono dal tipo di risorsa che stai creando e potrebbero includere:
- Il
name
della risorsa - Il
type
della risorsa - Il
zone
o ilregion
della risorsa, se applicabile
Le proprietà fanno parte dell'URL della richiesta API
GET
per la risorsa. Per vedere le proprietà utilizzate da Deployment Manager per acquisire una risorsa, consulta la documentazione dell'API per il metodoGET
della risorsa. Ad esempio: per le istanze Compute Engine, l'URL della richiesta Metodoinstances.get
includeresourceId
(name
nella tua configurazione),zone
eproject
.- Il
CREATE
- Deployment Manager crea risorse che non esistono. Se una delle risorse della configurazione esiste già nel progetto, il deployment non va a buon fine.ACQUIRE
- Deployment Manager acquisisce risorse già esistenti, utilizzando gli stessi criteri diCREATE_OR_ACQUIRE
.Utilizza il criterio
ACQUIRE
se hai già una serie di risorse nel tuo e vuoi gestirli tutti insieme come un unico deployment.Nel modello o nella configurazione, devi fornire gli elementi di queste risorse, come se le creassi. Se una delle risorse nella configurazione non esiste nel progetto, il deployment non va a buon fine.
Criteri per la rimozione delle risorse
Fornisci uno dei seguenti criteri per la rimozione delle risorse:
DELETE
- [Predefinito]: rimuove qualsiasi riferimento alla risorsa dal deployment ed elimina la risorsa sottostante. L'operazione è definitiva e non può essere annullata, ma puoi ricreare una nuova risorsa con le stesse proprietà.ABANDON
: vengono rimossi tutti i riferimenti alla risorsa dal deployment, ma la risorsa sottostante non viene eliminata. Ad esempio, quando abbandoni un'istanza significa che viene rimossa da un deployment, ma l'istanza esiste ancora per te. per l'utilizzo.Il criterio
ABANDON
si 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 includerla con tutte le sue proprietà originali nella configurazione aggiornata. Se utilizzi un nuovo file di configurazione per l'aggiornamento, consigliamo di copiare la definizione della risorsa dalla configurazione originale.
Norme per l'aggiornamento di una risorsa esistente
Se esiste un metodo UPDATE
per l'aggiornamento delle risorse esistenti, Deployment Manager
lo usa.
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 applicare le modifiche con Google Cloud CLI o l'API. Il servizio Deployment Manager visualizza l'anteprima della configurazione espandendo la configurazione completa e creando una "shell" Google Cloud.
Deployment Manager non crea un'istanza di risorse effettive quando visualizzare l'anteprima di una configurazione, per vedere il deployment prima impegnarsi.
gcloud
Con Google Cloud CLI, effettua una richiesta update
con il parametro --preview
:
gcloud deployment-manager deployments update example-deployment \
--config configuration-file.yaml \
--preview
API
Nell'API, crea una richiesta PUT()
con un deployment esistente e fornisci il parametro di query preview=true
. 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 mostra in anteprima 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.
la stessa richiesta PUT()
, omettendo sia la configurazione sia
Parametro di query preview
. Deployment Manager usa la tua ultima anteprima per eseguire
l'aggiornamento. Ad esempio:
gcloud deployment-manager deployments update example-deployment
Per la procedura per inviare una richiesta di aggiornamento, consulta Inviare la richiesta di aggiornamento.
Se decidi di non continuare con l'aggiornamento, annulla l'anteprima corrente prima di effettuare un altro aggiornamento o di richiedere un'altra anteprima.
Annullare un'anteprima
Dopo aver visualizzato l'anteprima di un aggiornamento, devi decidere se procedere 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, effettua una richiesta deployments cancel-preview
:
gcloud deployment-manager deployments cancel-preview my-first-deployment
API
Nell'API, effettua una richiesta PUT()
a cancelPreview
e fornire l'impronta del deployment più recente. Un'impronta
è un valore generato in modo casuale che cambia con ogni richiesta di aggiornamento. A
evitare errori durante l'aggiornamento, fornire l'impronta digitale più recente
richiesta.
Per ottenere l'impronta più recente di un deployment, utilizza il metodo get()
per ottenere un deployment e cerca il valore dell'impronta. Valore fingerprint
ha il seguente aspetto:
"fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="
La tua richiesta cancelPreview()
ha il seguente 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 tuoi criteri di aggiornamento.
gcloud deployment-manager deployments update my-first-deployment \
--create-policy POLICY \
--delete-policy POLICY
Se in precedenza hai effettuato l'anteprima di una configurazione, omettila e Deployment Manager utilizzerà l'ultima configurazione di cui è stata eseguita l'anteprima per eseguire l'aggiornamento.
gcloud deployment-manager deployments update my-first-deployment
API
Nell'API, effettua una richiesta update
e fornisci l'impronta del deployment più recente. Un'impronta è un valore generato in modo casuale che cambia con ogni richiesta di aggiornamento. A
evitare errori durante l'aggiornamento, fornire l'impronta digitale più recente
richiesta.
Per ottenere la fingerprint più recente di un deployment, utilizza
get()
per ottenere un
e cerca il valore dell'impronta. Valore fingerprint
ha il seguente aspetto:
"fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="
Poi, fornisci l'impronta nella richiesta, insieme con la nuova configurazione e i criteri di aggiornamento. Se in precedenza visualizzato in anteprima la configurazione, omettere i criteri di configurazione e aggiornamento Deployment Manager utilizza l'ultima configurazione visualizzata in anteprima per eseguire 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=="
}
Interrompere un aggiornamento
Puoi interrompere un aggiornamento in corso utilizzando stop()
.
metodo. In questo modo, vengono annullati tutti i progressi successivi di un determinato aggiornamento, ma non viene annullata alcuna modifica già apportata.
Se stai tentando di annullare un'anteprima, consulta la sezione Annullare un'anteprima.
gcloud
Con Google Cloud CLI, effettua una richiesta deployments stop
:
gcloud deployment-manager deployments stop my-first-deployment
API
Nell'API, invia una richiesta POST()
al metodo
stop
e fornisci
la proprietà impronta più recente. Un'impronta è un valore generato casualmente
che cambia a ogni richiesta di aggiornamento. Per evitare conflitti
devi fornire la fingerprint più recente della richiesta, per
un blocco ottimistico in modo da poter effettuare un solo aggiornamento alla volta.
Per ottenere la fingerprint più recente di un deployment, utilizza
get()
per ottenere un
e cerca il valore dell'impronta. Il valore dell'impronta
ha il seguente aspetto:
"fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="
La tua richiesta ha il seguente 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 manifest del deployment.