Una vez que hayas creado una implementación, podrás actualizarla a medida que cambie tu aplicación o servicio. Puedes usar Deployment Manager para actualizar un despliegue de las siguientes formas:
- Añadir o quitar recursos de una implementación.
- Actualizar las propiedades de los recursos de una implementación.
Una sola actualización puede contener cualquier combinación de estos cambios. Por ejemplo, puedes modificar las propiedades de los recursos que ya tengas y añadir recursos nuevos en la misma solicitud. Para actualizar la implementación, sigue estos pasos:
- Modifica o crea un archivo de configuración con los cambios que quieras.
- Si quieres, elige las políticas que quieras usar para tus actualizaciones o usa las políticas predeterminadas.
- Envía la solicitud de actualización a Deployment Manager.
Antes de empezar
- Si quieres usar los ejemplos de línea de comandos de esta guía, instala la herramienta de línea de comandos`gcloud`.
- Si quieres usar los ejemplos de API de esta guía, configura el acceso a la API.
- Consulta cómo crear implementaciones.
Prepara tu actualización
Antes de actualizar tu implementación, sigue estas directrices para preparar la actualización:
Si vas a actualizar tu implementación para añadir nuevos recursos a tu proyecto, comprueba si los recursos ya existen.
De forma predeterminada, si un recurso que quieres añadir ya existe en tu proyecto, la implementación lo adquiere sin crear un recurso nuevo. Si no quieres adquirir un recurso, debes cambiar la política que se va a usar para la actualización.
Para obtener información sobre las políticas que puedes usar al actualizar implementaciones, consulta Políticas para añadir recursos.
Si vas a actualizar tu implementación para sustituir un recurso, comprueba sus dependencias
Si quieres sustituir un recurso de tu despliegue, primero debes asegurarte de que al eliminarlo no se produzca un ciclo de despliegue. Un ciclo de implementación se produce cuando un recurso depende de sí mismo, ya sea directa o indirectamente. Por ejemplo, supongamos que tiene la siguiente implementación:
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) ...
En esta implementación, para
vm-a
, la instruccióndependsOn
requiere quevm-depends-on
se cree antes quevm-a
. Sin embargo,vm-depends-on
usa una referencia a la zona devm-a
, por lo quevm-a
debe crearse antes quevm-depends-on
. En este caso, las dependencias están en un bucle y la implementación falla.Si tienes un recurso que depende de otros recursos y del que dependen otros recursos, sustituirlo puede provocar un ciclo de implementación.
Por ejemplo, supongamos que una implementación tiene un disco persistente llamado
disk-a
, una VM llamadavm-a
y un grupo de instancias llamadoig-a
. La configuración devm-a
incluye una referencia adisk-a
, y la configuración deig-a
incluye una referencia avm-a
. En una configuración actualizada, quieres quitarvm-a
y sustituirlo porvm-b
. En ese caso, resolver las dependencias de vm-a y vm-b puede provocar un ciclo de implementación y la implementación fallará.Para evitar ciclos de implementación cuando quieras sustituir un recurso en una cadena de dependencias, haz una de las siguientes acciones:
Quita las dependencias del recurso que quieras sustituir. Para ello, elimina la cláusula dependsOn o elimina o cambia las referencias a otros recursos. Una vez que hayas actualizado la implementación con estos cambios, haz otra actualización para sustituir el recurso.
Elimina la cadena de recursos dependientes y actualiza la implementación. A continuación, en la siguiente actualización, vuelve a crear los recursos que quieras usar.
Asegúrate de que haya una API subyacente que admita tu actualización.
Deployment Manager usa las APIs de cada servicio para crear y modificar tus implementaciones. Para comprobar que Deployment Manager puede completar tu solicitud, consulta la documentación de la API del servicio Cloud Platform para los recursos que quieras actualizar.
Por ejemplo, si quieres actualizar un conjunto de datos de BigQuery en tu implementación, consulta los métodos disponibles en la referencia de la API Datasets. Los métodos incluyen un método
update
, que indica que puedes actualizar el conjunto de datos con Deployment Manager.Algunas APIs tienen métodos personalizados para actualizar sus recursos. Por ejemplo, Compute Engine ofrece un método personalizado para actualizar los metadatos de una instancia llamado
setMetadata
. En estos casos, Deployment Manager intenta usar los métodos personalizados.Asegúrese de que los recursos que va a actualizar sean mutables.
Algunos recursos son inmutables una vez creados y no se pueden actualizar. Para determinar si un recurso es inmutable, consulta la referencia de la API del recurso. Por lo general, un recurso inmutable no tiene un método de API
update
o un método personalizado para actualizar las propiedades del recurso.
Limitaciones
En cada implementación, puedes aplicar una actualización a la vez. Si ya hay una actualización en curso, debes detenerla antes de iniciar una nueva.
Si has modificado un recurso en una implementación sin usar Deployment Manager, por ejemplo, en la Google Cloud consola o en
gcloud
, es posible que veas errores o problemas inesperados al intentar modificar el recurso en una actualización.
Hacer cambios en la configuración
Si has guardado una configuración, haz cambios en ella y úsala en tu solicitud de actualización.
Si no tienes ninguna configuración guardada, crea una. Para ver los pasos para crear un archivo de configuración, consulta Configuraciones.
Deployment Manager compara la configuración que proporcionas en tu solicitud de actualización con el manifiesto anterior y usa las diferencias para actualizar tu implementación.
Por ejemplo, en la siguiente tabla se muestran dos configuraciones: una describe una implementación y la otra describe el estado actualizado que se quiere de la implementación. Tú proporcionas la configuración actualizada y Deployment Manager evalúa las diferencias y realiza las actualizaciones correspondientes.
En este ejemplo se actualiza un recurso de instancia para incluir algunos metadatos personalizados y también se añade un nuevo recurso de máquina virtual a la implementación. Las partes en negrita son las diferencias entre las plantillas.
Plantilla actual | Plantilla actualizada |
---|---|
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) Determina las políticas que se van a usar para la actualización
A continuación, determina qué políticas quieres usar para la actualización. La política determina cómo se actualizan los recursos cuando actualizas el despliegue.
Deployment Manager usa estas políticas predeterminadas:
- La política predeterminada para añadir recursos es
CREATE_OR_ACQUIRE
. - La política predeterminada para eliminar recursos es
DELETE
. - La política predeterminada para actualizar recursos es
UPDATE
.
Para obtener información sobre cada política, consulta las secciones siguientes.
Políticas para añadir recursos
Cuando añada recursos, puede crear uno y añadirlo a una implementación o adquirir un recurso que ya tenga:
CREATE_OR_ACQUIRE
: [Predeterminado] Deployment Manager adquiere recursos que ya existen en el proyecto o crea recursos si no existen. Para adquirir un recurso, Deployment Manager comprueba en tu configuración las propiedades del recurso que quieres crear. Si hay un recurso con las mismas propiedades, Deployment Manager lo adquiere como parte de su implementación.Las propiedades que comprueba Deployment Manager dependen del tipo de recurso que estés creando y pueden incluir lo siguiente:
- El
name
del recurso - El
type
del recurso - El
zone
o elregion
del recurso, si procede
Las propiedades forman parte de la URL de la solicitud a la API
GET
del recurso. Para ver qué propiedades usa Deployment Manager para obtener un recurso, consulta la documentación de la API del métodoGET
del recurso. Por ejemplo, en el caso de las instancias de Compute Engine, la URL de solicitud del métodoinstances.get
incluyeresourceId
(name
en tu configuración),zone
yproject
.- El
CREATE
- Deployment Manager crea recursos que no existen. Si alguno de los recursos de tu configuración ya existe en el proyecto, la implementación fallará.ACQUIRE
: Deployment Manager adquiere recursos que ya existen con los mismos criterios queCREATE_OR_ACQUIRE
.Usa la política
ACQUIRE
si ya tienes varios recursos en tu proyecto y quieres gestionarlos juntos como una sola implementación.En tu plantilla o configuración, debes proporcionar las propiedades obligatorias de estos recursos como si los estuvieras creando. Si alguno de los recursos de tu configuración no existe en el proyecto, la implementación fallará.
Políticas para retirar recursos
Proporciona una de las siguientes políticas para eliminar recursos:
DELETE
- [Predeterminado]: elimina todas las referencias al recurso de la implementación y elimina el recurso subyacente. Esta acción es definitiva y no se puede deshacer, pero puede volver a crear un recurso con las mismas propiedades.ABANDON
: elimina todas las referencias al recurso del despliegue, pero no elimina el recurso subyacente. Por ejemplo, si abandonas una instancia, se eliminará de una implementación, pero podrás seguir usándola.La política
ABANDON
solo se aplica cuando eliminas recursos completos, no cuando eliminas las propiedades de un recurso o actualizas un recurso con nuevas propiedades. Si quiere conservar las propiedades de un recurso, debe incluirlo con todas sus propiedades originales en la configuración actualizada. Si vas a usar un nuevo archivo de configuración para la actualización, te recomendamos que copies la definición del recurso de tu configuración original.
Políticas para actualizar un recurso
Si existe un método UPDATE
para actualizar recursos, Deployment Manager lo utiliza.
De lo contrario, si existe un método personalizado, Deployment Manager lo utiliza.
Deployment Manager admite métodos personalizados que usan el verbo set
. Por ejemplo, setMetadata()
es un método personalizado válido, pero addAccessConfigs()
no lo es.
(Opcional) Previsualizar una configuración actualizada
Puedes obtener una vista previa de la actualización que quieras hacer antes de confirmar los cambios con la CLI de Google Cloud o la API. El servicio Deployment Manager muestra una vista previa de la configuración. Para ello, amplía la configuración completa y crea recursos de "shell".
Deployment Manager no crea ninguna instancia de recursos reales cuando previsualizas una configuración, lo que te permite ver el despliegue antes de confirmarlo.
gcloud
Con Google Cloud CLI, haz una solicitud update
con el parámetro --preview
:
gcloud deployment-manager deployments update example-deployment \
--config configuration-file.yaml \
--preview
API
En la API, crea una solicitud PUT()
con una implementación y proporciona el parámetro de consulta preview=true
. El cuerpo de la solicitud debe contener los campos intent
, target
y name
. Proporcione el nombre de la implementación tanto en la URL como en el cuerpo de la solicitud.
Por ejemplo, la siguiente solicitud a la API muestra una vista previa de una actualización sencilla:
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"
}
Después de obtener una vista previa de una implementación, puedes implementar la configuración por completo haciendo la misma solicitud PUT()
, pero omitiendo tanto la configuración como el parámetro de consulta preview
. Deployment Manager usa la última vista previa para realizar la actualización. Por ejemplo:
gcloud deployment-manager deployments update example-deployment
Para saber cómo enviar una solicitud de actualización, consulta el artículo Enviar una solicitud de actualización.
Si decides no continuar con la actualización, cancela la vista previa actual antes de enviar otra solicitud de actualización o vista previa.
Cancelar una vista previa
Después de previsualizar una actualización, debes decidir si quieres continuar con ella. Si no quieres continuar o quieres usar otro archivo de configuración para actualizar la implementación, cancela la vista previa actual.
gcloud
Con Google Cloud CLI, haz una solicitud deployments cancel-preview
:
gcloud deployment-manager deployments cancel-preview my-first-deployment
API
En la API, haz una solicitud PUT()
al método cancelPreview
y proporciona la huella digital de la implementación más reciente. Una huella digital es un valor generado aleatoriamente que cambia con cada solicitud de actualización. Para evitar errores durante la actualización, proporciona la huella digital más reciente en tu solicitud.
Para obtener la huella digital más reciente de una implementación, usa el método get()
para obtener una implementación y busca el valor de la huella digital. El valor de la huella digital
tiene este aspecto:
"fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="
Tu solicitud cancelPreview()
tendrá este aspecto:
POST https://www.googleapis.com/deploymentmanager/v2/projects/myproject/global/deployments/example-deployment/cancelPreview
{
"fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="
}
Enviar la solicitud de actualización
Para realizar la actualización, sigue estos pasos:
gcloud
Con la CLI de Google Cloud, usa el subcomando deployments update
, proporciona una nueva configuración y, opcionalmente, tus políticas de actualización.
gcloud deployment-manager deployments update my-first-deployment \
--create-policy POLICY \
--delete-policy POLICY
Si ya has visto una configuración, omítela y Deployment Manager usará la última configuración que hayas visto para realizar la actualización.
gcloud deployment-manager deployments update my-first-deployment
API
En la API, haz una solicitud update
y proporciona la huella digital de la implementación más reciente. Una huella digital es un valor generado aleatoriamente que cambia con cada solicitud de actualización. Para evitar errores durante la actualización, proporciona la huella digital más reciente en tu solicitud.
Para obtener la huella digital más reciente de una implementación, usa el método get()
para obtener una implementación y busca el valor de la huella digital. El valor de la huella digital
tiene este aspecto:
"fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="
A continuación, proporciona la huella digital en tu solicitud, junto con tu nueva configuración y las políticas actualizadas. Si has visto una vista previa de la configuración, omite la configuración y las políticas de actualización. Deployment Manager usará la última configuración de la vista previa para realizar la actualización.
Proporcione el nombre de la implementación tanto en la URL como en el cuerpo de la solicitud.
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=="
}
Detener una actualización
Puedes detener una actualización en curso con la stop()
.
método . De esta forma, se cancela el progreso de una actualización concreta, pero no se deshacen los cambios que ya se hayan realizado.
Si quieres cancelar una vista previa, consulta la sección Cancelar una vista previa.
gcloud
Con Google Cloud CLI, haz una solicitud deployments stop
:
gcloud deployment-manager deployments stop my-first-deployment
API
En la API, haz una solicitud POST()
al método stop
y proporciona la propiedad de huella digital más reciente. Una huella digital es un valor generado aleatoriamente que cambia con cada solicitud de actualización. Para evitar cambios conflictivos, debes proporcionar la huella digital más reciente con tu solicitud para realizar un bloqueo optimista, de modo que solo se pueda hacer una actualización a la vez.
Para obtener la huella digital más reciente de una implementación, usa el método get()
para obtener una implementación y busca el valor de la huella digital. El valor de la huella digital
tiene este aspecto:
"fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="
Tu solicitud tendrá este aspecto:
POST https://www.googleapis.com/deploymentmanager/v2/projects/myproject/global/deployments/example-deployment/stop
{
"fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="
}
Siguientes pasos
- Añade etiquetas a tu despliegue.
- Consulta el manifiesto de implementación.