Depois de criar uma implementação, pode atualizá-la à medida que a sua aplicação ou serviço muda. Pode usar o Deployment Manager para atualizar uma implementação:
- Adicionar ou remover recursos de uma implementação.
- Atualizar as propriedades dos recursos existentes numa implementação.
Uma única atualização pode conter qualquer combinação destas alterações. Por exemplo, pode alterar as propriedades dos recursos existentes e adicionar novos recursos no mesmo pedido. Atualize a implementação seguindo estes passos:
- Fazer alterações ou criar um ficheiro de configuração com as alterações pretendidas.
- Opcionalmente, escolha as políticas a usar para as suas atualizações ou use as políticas predefinidas.
- Faça o pedido de atualização ao Deployment Manager.
Antes de começar
- Se quiser usar os exemplos de linhas de comando neste guia, instale a ferramenta de linhas de comando`gcloud`.
- Se quiser usar os exemplos de API neste guia, configure o acesso à API.
- Compreenda como criar implementações.
Prepare a atualização
Antes de atualizar a implementação, use estas diretrizes para preparar a atualização:
Se estiver a atualizar a sua implementação para adicionar novos recursos ao seu projeto, verifique se os recursos já existem.
Por predefinição, se um recurso que quer adicionar já existir no seu projeto, é adquirido pela implementação, sem criar um novo recurso. Se não quiser adquirir um recurso existente, tem de alterar a política a usar para a atualização.
Para ver informações sobre as políticas que pode usar ao atualizar implementações, consulte Políticas para adicionar recursos.
Se estiver a atualizar a implementação para substituir um recurso, verifique as respetivas dependências
Se quiser substituir um recurso da sua implementação, primeiro tem de se certificar de que a eliminação do mesmo não causa um ciclo de implementação. Um ciclo de implementação ocorre quando um recurso depende de si próprio, direta ou indiretamente. Por exemplo, considere a seguinte implementação:
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) ...
Nesta implementação, para
vm-a
, a declaraçãodependsOn
requer quevm-depends-on
seja criado antes devm-a
. No entanto,vm-depends-on
usa uma referência à zona paravm-a
, o que requer quevm-a
seja criado antes devm-depends-on
. Neste cenário, as dependências estão num ciclo, e a implementação falha.Se tiver um recurso que dependa de outros recursos e do qual outros recursos dependam, a substituição desse recurso pode causar um ciclo de implementação.
Por exemplo, considere que uma implementação tem um disco persistente denominado
disk-a
, uma VM denominadavm-a
e um grupo de instâncias denominadoig-a
. A configuração devm-a
inclui uma referência adisk-a
, e a configuração deig-a
inclui uma referência avm-a
. Numa configuração atualizada, quer removervm-a
e substituí-lo porvm-b
. Neste cenário, a resolução das dependências para vm-a e vm-b pode causar um ciclo de implementação, e a sua implementação falha.Para evitar ciclos de implementação quando quiser substituir um recurso numa cadeia de dependências, faça uma das seguintes ações:
Remova as dependências do recurso que quer substituir, quer removendo a cláusula dependsOn, quer removendo ou alterando referências a outros recursos. Depois de atualizar a implementação com estas alterações, faça outra atualização para substituir o recurso.
Elimine a cadeia de recursos dependentes e atualize a implementação. Em seguida, na atualização seguinte, recrie os recursos que quer usar.
Certifique-se de que existe uma API subjacente que suporta a sua atualização.
O Deployment Manager usa as APIs de cada serviço para criar e modificar as suas implementações. Para verificar se o seu pedido pode ser concluído pelo Deployment Manager, reveja a documentação da API do serviço da Cloud Platform para os recursos que quer atualizar.
Por exemplo, se quiser atualizar um conjunto de dados do BigQuery na sua implementação, consulte os métodos disponíveis na referência da API Datasets. Os métodos incluem um método
update
, que indica que pode atualizar o conjunto de dados através do Gestor de Implementações.Algumas APIs têm métodos personalizados para atualizar os respetivos recursos. Por exemplo, o Compute Engine oferece um método personalizado para atualizar os metadados de uma instância denominado
setMetadata
. Nestes casos, o Deployment Manager tenta usar os métodos personalizados.Certifique-se de que os recursos que está a atualizar são mutáveis.
Alguns recursos são imutáveis após a criação e não podem ser atualizados. Para determinar se um recurso é imutável, consulte a referência da API para o recurso. Normalmente, um recurso imutável não tem um método de API
update
nem um método personalizado para atualizar as propriedades do recurso.
Limitações
Para cada implementação, pode aplicar uma atualização de cada vez. Se já estiver em curso uma atualização, tem de parar a atualização atual antes de iniciar uma nova atualização.
Se modificou um recurso numa implementação sem usar o Deployment Manager, como na Google Cloud consola ou
gcloud
, pode ver erros ou problemas inesperados quando tenta modificar o recurso numa atualização.
Faça alterações à sua configuração
Se guardou uma configuração existente, faça alterações à configuração e use-a no seu pedido de atualização.
Se não tiver uma configuração guardada, crie uma nova configuração. Para ver os passos para criar um ficheiro de configuração, leia o artigo Configurações.
O Deployment Manager compara a configuração que fornece no pedido de atualização com o manifesto anterior e usa as diferenças para atualizar a implementação.
Por exemplo, a tabela seguinte mostra duas configurações: uma descreve uma implementação existente e a outra descreve o estado atualizado pretendido da implementação. Fornece a configuração atualizada e o Deployment Manager avalia as diferenças e faz as atualizações adequadas.
Este exemplo atualiza um recurso de instância existente para incluir alguns metadados personalizados e também adiciona um novo recurso de máquina virtual à implementação. As partes em negrito são diferenças entre os modelos.
Modelo atual | Modelo atualizado |
---|---|
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 |
(Opcional) Determine as políticas a usar para a atualização
Em seguida, determine as políticas que quer usar para a atualização. A política determina como os seus recursos são atualizados quando atualiza a implementação.
O Deployment Manager usa estas políticas predefinidas:
- A política predefinida para adicionar recursos é
CREATE_OR_ACQUIRE
. - A política predefinida para remover recursos é
DELETE
. - A política predefinida para atualizar recursos é
UPDATE
.
Para ver informações sobre cada política, reveja as secções abaixo.
Políticas para adicionar recursos
Quando adiciona recursos, pode optar por criar um novo recurso e adicioná-lo a uma implementação ou pode adquirir um recurso existente:
CREATE_OR_ACQUIRE
- [Predefinição] O Deployment Manager adquire recursos que existem no projeto ou cria recursos se não existirem. Para adquirir um recurso, o Deployment Manager verifica a sua configuração para as propriedades do recurso que está a tentar criar. Se existir um recurso com as mesmas propriedades, o Deployment Manager adquire esse recurso como parte da sua implementação.As propriedades que o Deployment Manager verifica dependem do tipo de recurso que está a criar e podem incluir:
- O
name
do recurso - O
type
do recurso - O
zone
ou oregion
do recurso, se aplicável
As propriedades fazem parte do URL do pedido da API
GET
para o recurso. Para ver que propriedades o Deployment Manager usa para adquirir um recurso, consulte a documentação da API do métodoGET
do recurso. Por exemplo, para instâncias do Compute Engine, o URL do pedido para o métodoinstances.get
incluiresourceId
(name
na sua configuração),zone
eproject
.- O
CREATE
- O Deployment Manager cria recursos que não existem. Se algum dos recursos na sua configuração já existir no projeto, a implementação falha.ACQUIRE
- O Deployment Manager adquire recursos já existentes, usando os mesmos critérios queCREATE_OR_ACQUIRE
.Use a política
ACQUIRE
se já tiver vários recursos no seu projeto e quiser geri-los em conjunto como uma única implementação.No modelo ou na configuração, tem de fornecer as propriedades necessárias para estes recursos como se os estivesse a criar. Se algum dos recursos na sua configuração não existir no projeto, a implementação falha.
Políticas para remover recursos
Indique uma das seguintes políticas para remover recursos:
DELETE
- [Predefinição] Esta opção remove todas as referências ao recurso da implementação e elimina o recurso subjacente. Esta ação é definitiva e não pode ser anulada, mas pode recriar um novo recurso com as mesmas propriedades.ABANDON
: isto remove todas as referências ao recurso da implementação, mas não elimina o recurso subjacente. Por exemplo, abandonar uma instância significa que é removida de uma implementação, mas a instância continua a existir para sua utilização.A política
ABANDON
aplica-se apenas quando elimina recursos completos e não quando elimina as propriedades de um recurso ou atualiza um recurso com novas propriedades. Se quiser preservar as propriedades de um recurso, tem de incluir o recurso com todas as respetivas propriedades originais na configuração atualizada. Se estiver a usar um novo ficheiro de configuração para a atualização, recomendamos que copie a definição do recurso da configuração original.
Políticas para atualizar um recurso existente
Se existir um método UPDATE
para atualizar recursos existentes, o Deployment Manager usa esse método.
Caso contrário, se existir um método personalizado, o Deployment Manager usa o método personalizado.
O Deployment Manager suporta métodos personalizados que usam o verbo set
. Por exemplo,
setMetadata()
é um método personalizado válido, mas addAccessConfigs()
não é.
(Opcional) Pré-visualize uma configuração atualizada
Pode pré-visualizar a atualização que quer fazer antes de confirmar quaisquer alterações com a CLI Google Cloud ou a API. O serviço Deployment Manager apresenta uma pré-visualização da configuração expandindo a configuração completa e criando recursos "shell".
O Deployment Manager não instancia recursos reais quando pré-visualiza uma configuração, o que lhe dá a oportunidade de ver a implementação antes de a confirmar.
gcloud
Com a Google Cloud CLI, faça um pedido update
com o parâmetro --preview
:
gcloud deployment-manager deployments update example-deployment \
--config configuration-file.yaml \
--preview
API
Na API, crie um pedido PUT()
com uma implementação existente e forneça o parâmetro de consulta preview=true
. O corpo do pedido tem de conter os campos intent
, target
e name
. Indique o nome da implementação no URL e no corpo do pedido.
Por exemplo, o pedido de API seguinte pré-visualiza uma atualização simples:
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"
}
Depois de pré-visualizar uma implementação, pode implementar totalmente a configuração fazendo o mesmo pedido PUT()
, omitindo a configuração e o parâmetro de consulta preview
. O Deployment Manager usa a última pré-visualização para fazer a atualização. Por exemplo:
gcloud deployment-manager deployments update example-deployment
Para ver os passos para fazer um pedido de atualização, consulte a secção Faça o pedido de atualização.
Se decidir não continuar com a atualização, cancele a pré-visualização atual antes de fazer outro pedido de atualização ou pré-visualização.
Cancele uma pré-visualização
Depois de pré-visualizar uma atualização, tem de decidir se quer continuar com a atualização. Se não quiser continuar ou se quiser usar um ficheiro de configuração diferente para atualizar a implementação, cancele a pré-visualização atual.
gcloud
Com a CLI do Google Cloud, faça um pedido deployments cancel-preview
:
gcloud deployment-manager deployments cancel-preview my-first-deployment
API
Na API, faça um pedido PUT()
ao método cancelPreview
e forneça a impressão digital de implementação mais recente. Uma impressão digital é um valor gerado aleatoriamente que muda com cada pedido de atualização. Para evitar erros durante a atualização, forneça a impressão digital mais recente com o seu pedido.
Para obter a impressão digital mais recente de uma implementação, use o método get()
para obter uma implementação e procure o valor da impressão digital. O valor da impressão digital
tem o seguinte aspeto:
"fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="
O seu pedido cancelPreview()
tem o seguinte aspeto:
POST https://www.googleapis.com/deploymentmanager/v2/projects/myproject/global/deployments/example-deployment/cancelPreview
{
"fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="
}
Faça o pedido de atualização
Para fazer a atualização:
gcloud
Com a CLI do Google Cloud, use o subcomando deployments update
, fornecendo uma nova configuração e, opcionalmente, as suas políticas de atualização.
gcloud deployment-manager deployments update my-first-deployment \
--create-policy POLICY \
--delete-policy POLICY
Se tiver pré-visualizado uma configuração anteriormente, omita a configuração e o Deployment Manager usa a última configuração pré-visualizada para fazer a atualização.
gcloud deployment-manager deployments update my-first-deployment
API
Na API, faça um pedido update
e faculte a impressão digital de implementação mais recente. Uma impressão digital é um valor gerado aleatoriamente que muda com cada pedido de atualização. Para evitar erros durante a atualização, forneça a impressão digital mais recente com o seu pedido.
Para obter a impressão digital mais recente de uma implementação, use o método get()
para obter uma implementação e procure o valor da impressão digital. O valor da impressão digital
tem o seguinte aspeto:
"fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="
Em seguida, forneça a impressão digital no seu pedido, juntamente com a nova configuração e as políticas de atualização. Se tiver pré-visualizado anteriormente a configuração, omita a configuração e atualize as políticas. O Deployment Manager usa a última configuração pré-visualizada para fazer a atualização.
Indique o nome da implementação no URL e no corpo do pedido.
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=="
}
Pare uma atualização
Pode parar uma atualização em curso através do stop()
.
method. Esta ação cancela qualquer progresso adicional de uma atualização específica, mas não
anula nenhuma alteração já feita.
Se estiver a tentar cancelar uma pré-visualização, consulte a secção Cancelar uma pré-visualização.
gcloud
Com a CLI do Google Cloud, faça um pedido deployments stop
:
gcloud deployment-manager deployments stop my-first-deployment
API
Na API, faça um pedido POST()
ao método stop
e faculte a propriedade de impressão digital mais recente. Uma impressão digital é um valor gerado aleatoriamente que muda com cada pedido de atualização. Para evitar alterações
em conflito, tem de fornecer a impressão digital mais recente com o seu pedido para
efetuar o bloqueio otimista, de modo que só seja possível fazer uma atualização de cada vez.
Para obter a impressão digital mais recente de uma implementação, use o método get()
para obter uma implementação e procure o valor da impressão digital. O valor da impressão digital
tem o seguinte aspeto:
"fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="
O seu pedido tem o seguinte aspeto:
POST https://www.googleapis.com/deploymentmanager/v2/projects/myproject/global/deployments/example-deployment/stop
{
"fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="
}
O que se segue?
- Adicione etiquetas à sua implementação.
- Veja o manifesto de implementação.