Actualizar un despliegue

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:

  1. Modifica o crea un archivo de configuración con los cambios que quieras.
  2. Si quieres, elige las políticas que quieras usar para tus actualizaciones o usa las políticas predeterminadas.
  3. Envía la solicitud de actualización a Deployment Manager.

Antes de empezar

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ón dependsOn requiere que vm-depends-on se cree antes que vm-a. Sin embargo, vm-depends-on usa una referencia a la zona de vm-a, por lo que vm-a debe crearse antes que vm-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 llamada vm-a y un grupo de instancias llamado ig-a. La configuración de vm-a incluye una referencia a disk-a, y la configuración de ig-a incluye una referencia a vm-a. En una configuración actualizada, quieres quitar vm-a y sustituirlo por vm-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 el region 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étodo GET del recurso. Por ejemplo, en el caso de las instancias de Compute Engine, la URL de solicitud del método instances.get incluye resourceId (name en tu configuración), zone y project.

  • 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 que CREATE_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