Actualizar una implementación

Luego de crear una implementación, la puedes actualizar cuando cambies la aplicación o el servicio. Puedes usar Deployment Manager para actualizar una implementación de las siguientes maneras:

  • Agregar o quitar recursos de una implementación
  • Actualizar propiedades de los recursos existentes en una implementación

Una sola actualización puede contener distintas combinaciones de estos cambios. Por ejemplo, puedes hacer cambios en las propiedades de los recursos existentes y agregar nuevos recursos en la misma solicitud. Para actualizar la implementación, sigue estos pasos:

  1. Crea un archivo de configuración con los cambios que deseas o modifica el que ya tienes.
  2. De manera opcional, elige qué políticas deben seguir tus actualizaciones o utiliza las políticas predeterminadas.
  3. Envía la solicitud de actualización a Deployment Manager.

Antes de comenzar

Prepara la actualización

Usa los siguientes lineamientos para preparar la actualización de tu implementación antes de realizarla:

  • Si quieres actualizar tu implementación para agregar más recursos a tu proyecto, controla si los recursos ya existen.

    De forma predeterminada, si el recurso que quieres agregar ya existe en tu proyecto, la implementación lo adquirirá, sin la necesidad de crear un nuevo recurso. Si no quieres adquirir un recurso que ya existe, debes cambiar la política que utilizarás para la actualización.

    Para obtener información sobre las políticas que puedes usar cuando actualizas tus implementaciones, consulta las Políticas para agregar recursos.

  • Si quieres actualizar tu implementación para reemplazar un recurso, controla las dependencias.

    Si deseas reemplazar un recurso de la implementación, primero debes asegurarte de que eliminarlo no provocará un ciclo de implementaciones. Un ciclo de implementaciones ocurre cuando un recurso depende de sí mismo, de manera directa o indirecta. Por ejemplo, considera 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 para vm-a, por lo que es necesario que vm-a se cree antes que vm-depends-on. En este caso, las dependencias se repiten en bucle y la implementación falla.

    Si tienes un recurso que depende de otros recursos y, a su vez, otros recursos dependen de él, reemplazar este recurso podría provocar un ciclo de implementaciones.

    Por ejemplo, considera que una implementación tiene un disco persistente llamado disk-a, una VM que se llama vm-a y un grupo de instancias que se denomina ig-a. La configuración para vm-a incluye una referencia a disk-a, y la configuración para ig-a incluye una referencia a vm-a. En una configuración actualizada, deseas eliminar vm-a y reemplazarlo con vm-b. En este caso, resolver las dependencias para vm-a y vm-b puede provocar un ciclo de implementaciones y hacer que tu implementación falle.

    Para evitar ciclos de implementaciones cuando quieres reemplazar un recurso de una cadena de dependencias, lleva a cabo una de las siguientes opciones:

    • Elimina las dependencias para el recurso que quieres reemplazar, ya sea eliminando la cláusula dependsOn o cambiando las referencias a otros recursos. Luego de haber actualizado la implementación con estos cambios, haz otra actualización para reemplazar el recurso.

    • Elimina la cadena de recursos dependientes y actualiza la implementación. Después, en la próxima actualización, vuelve a crear los recursos que quieres utilizar.

  • Asegúrate de que haya una API subyacente que admita tu actualización.

    Deployment Manager usa las API de cada servicio para crear y modificar tus implementaciones. Para controlar que Deployment Manager puede llevar a cabo tu solicitud, revisa la documentación de la API del servicio de Cloud Platform para los recursos que quieres actualizar.

    Por ejemplo, si quieres actualizar un conjunto de datos de BigQuery en tu implementación, lee qué métodos están disponibles en la referencia de la API de Dataset. Los métodos incluyen un método update, que indica que puedes actualizar el conjunto de datos con Deployment Manager.

    Algunas API tienen métodos personalizados para actualizar sus recursos. Por ejemplo, Compute Engine ofrece un método personalizado para actualizar los metadatos de una instancia, denominado setMetadata. En tales casos, Deployment Manager intenta utilizar los métodos personalizados.

  • Asegúrate de que los recursos que estás actualizando se pueden cambiar.

    Algunos recursos no se pueden cambiar después de haberse creado y no se pueden actualizar. Para determinar si un recurso no se puede cambiar, lee la referencia de API para el recurso. En general, un recurso que no se puede cambiar no tiene un método de API update ni un método personalizado para actualizar las propiedades del recurso.

Limitaciones

  • Para cada implementación, puedes realizar una actualización a la vez. Si ya hay una actualización en curso, debes detener la actualización actual antes de comenzar una nueva actualización.

  • Si modificaste un recurso en una implementación sin usar Deployment Manager, como en la consola de Google Cloud o gcloud, es posible que veas errores o problemas inesperados cuando intentes modificar el recurso en una actualización.

Realiza cambios en la configuración

Si guardaste una configuración existente, realiza cambios en ella y úsala en tu solicitud de actualización.

Si no tienes una configuración guardada, crea una nueva. Para conocer los pasos para crear un archivo de configuración, consulta Configuraciones.

Deployment Manager compara la configuración que brindas en tu solicitud de actualización a los manifiestos anteriores y utiliza las diferencias para actualizar tu implementación.

Por ejemplo, en la siguiente tabla se muestran dos configuraciones: la implementación existente aparece en una, y la implementación actualizada como se desea se refleja en la otra. Tú brindas 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 existente para que incluya metadatos personalizados y se le agrega un recurso de máquina virtual nuevo a la implementación. Las partes en negrita indican 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 qué políticas usar para la actualización

A continuación, determina qué políticas quieres utilizar para la actualización. La política determina cómo se actualizarán los recursos cuando actualices la implementación.

Deployment Manager utiliza las siguientes políticas de manera predeterminada:

  • La política predeterminada para agregar 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 más información sobre las políticas, consulta las secciones que se encuentran a continuación.

Políticas para agregar recursos

Cuando agregas recursos, puedes elegir crear un nuevo recurso y agregarlo a la implementación o puedes adquirir un recurso existente:

  • CREATE_OR_ACQUIRE: [Predeterminado] Deployment Manager adquiere recursos que existen en el proyecto o los crea si no existen. A fin de adquirir un recurso, Deployment Manager revisa tu configuración para las propiedades del recurso que intentas crear. Si hay un recurso existente con las mismas propiedades, Deployment Manager adquiere ese recurso como parte de tu implementación.

    Las propiedades que Deployment Manager revisa dependen del tipo de recurso que creas y pueden incluir:

    • El name del recurso
    • El type del recurso
    • El zone o region del recurso, si corresponde

    Las propiedades son parte del URL para la solicitud a la API GET del recurso. Si deseas ver qué propiedades usa Deployment Manager a fin de adquirir un recurso, consulta la documentación de la API para el método GET del recurso. Por ejemplo, en las instancias de Compute Engine, la URL de la solicitud para el 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 en tu configuración ya existe en el proyecto, la implementación fallará.

  • ACQUIRE: Deployment Manager adquiere recursos que ya existen, con el mismo criterio de CREATE_OR_ACQUIRE.

    Usa la política ACQUIRE si ya tienes varios recursos en tu proyecto y quieres administrarlos juntos, como una sola implementación.

    En tu plantilla o configuración, debes proveer las propiedades que se requieren para esos 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 eliminar recursos

Utiliza una de las siguientes políticas para eliminar recursos:

  • DELETE: [Predeterminada] elimina el recurso subyacente y cualquier referencia al recurso de la implementación. Esto es permanente y no se puede deshacer, pero puedes recrear un nuevo recurso con las mismas propiedades.

  • ABANDON: elimina las referencias al recurso de la implementación, pero no elimina el recurso subyacente. Por ejemplo, abandonar una instancia implica que se elimina de la implementación, pero todavía existe si la quieres utilizar.

    La política ABANDON solo se aplica cuando borras recursos enteros, no cuando borras las propiedades de un recurso ni cuando actualizas un recurso con propiedades nuevas. Si deseas preservar las propiedades de un recurso, debes incluir el recurso con todas sus propiedades originales en su configuración actualizada. Si estás utilizando un nuevo archivo de configuración para su actualización, te recomendamos que copies la definición del recurso de su configuración original.

Políticas para actualizar un recurso existente

Si existe un método UPDATE para actualizar los recursos existentes, Deployment Manager lo utiliza.

De lo contrario, si existe un método personalizado, Deployment Manager utiliza este último. Deployment Manager admite métodos personalizados que usen el verbo set. Por ejemplo, setMetadata() es un método personalizado válido, pero addAccessConfigs() no lo es.

(Opcional) Obtén la vista previa de una configuración actualizada

Puedes obtener una vista previa de la actualización que quieras realizar antes de confirmar cualquier cambio con Google Cloud CLI o la API. El servicio Deployment Manager previsualiza la configuración expandiendo la configuración completa y creando recursos “shell”.

Deployment Manager no ejecuta los recursos reales cuando se efectúa la vista previa de la configuración, sino que ofrece la posibilidad de ver la implementación antes de realizarla.

gcloud

Con Google Cloud CLI, realiza 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 existente y proporciona el parámetro de búsqueda preview=true. El cuerpo de la solicitud debe contener los campos intent, target y name. Brinda el nombre de la implementación en la URL y en el cuerpo de la solicitud.

Por ejemplo, en la siguiente solicitud a la API se ve la vista previa de una actualización simple:

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 del todo con la misma solicitud PUT(). Para ello, omite tanto la configuración como el parámetro de consulta preview. Deployment Manager utiliza tu última vista previa para realizar la actualización. Por ejemplo:

gcloud deployment-manager deployments update example-deployment

Si deseas leer los pasos para realizar una solicitud de actualización, lee Realiza la solicitud de actualización.

Si no quieres continuar con la actualización, cancela la vista previa actual antes de hacer otra solicitud de actualización o de vista previa.

Cancela una vista previa

Luego de realizar la vista previa de una actualización, debes decidir si quieres continuar con ella o no. Si no deseas continuar o si quieres utilizar otro archivo de configuración para actualizar la implementación, cancela la vista previa actual.

gcloud

Con Google Cloud CLI, realiza una solicitud deployments cancel-preview:

gcloud deployment-manager deployments cancel-preview my-first-deployment

API

En la API, realiza una solicitud PUT() al método cancelPreview y proporciona la última huella digital de implementación. Una huella digital es un valor generado de forma aleatoria que cambia con cada solicitud de actualización. Para prevenir errores durante la actualización, brinda la huella digital más reciente con tu solicitud.

Para obtener la última huella digital 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 las huellas digitales se ve de la siguiente manera:

"fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="

Tu solicitud cancelPreview() se ve de esta manera:

POST https://www.googleapis.com/deploymentmanager/v2/projects/myproject/global/deployments/example-deployment/cancelPreview

{
 "fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="
 }

Realiza la solicitud de actualización

Para realizar la actualización:

gcloud

Con Google Cloud CLI, usa el subcomando deployments update, lo que proporciona una configuración nueva y, de forma opcional, tus políticas de actualización.

gcloud deployment-manager deployments update my-first-deployment \
    --create-policy POLICY \
    --delete-policy POLICY

Si ya realizaste la vista previa de una configuración, omite la configuración y Deployment Manager usará la última configuración de la que se realizó una vista previa para la actualización.

gcloud deployment-manager deployments update my-first-deployment

API

En la API, haz una solicitud de update y proporciona la última huella digital de la implementación. Una huella digital es un valor generado de forma aleatoria que cambia con cada solicitud de actualización. Para prevenir errores durante la actualización, brinda la huella digital más reciente con tu solicitud.

Para obtener la última huella digital 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 las huellas digitales se ve de la siguiente manera:

"fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="

Luego, provee las huellas digitales en tu solicitud, junto con tu nueva configuración y las políticas de la actualización. Si previamente realizaste la vista previa de una configuración, omite la configuración y las políticas de la actualización y Deployment Manager usará la última configuración de la que se realizó una vista previa para la actualización.

Brinda el nombre de la implementación en la URL y 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=="
}

Detén una actualización

Puedes detener una actualización que está en curso con stop(). método. Esto cancela cualquier progreso futuro de la actualización, pero no deshace los cambios que ya se hayan hecho.

Si quieres cancelar una vista previa, lee la sección Cancela una vista previa.

gcloud

Con Google Cloud CLI, realiza una solicitud deployments stop:

gcloud deployment-manager deployments stop my-first-deployment

API

En la API, haz una solicitud POST() al métodostop y brinda la propiedad de huella digital más reciente. Una huella digital es un valor generado de forma aleatoria que cambia con cada solicitud de actualización. Para prevenir los cambios problemáticos, proporciona la huella digital más reciente con tu solicitud, de modo que se pueda realizar un bloqueo y que solo se efectúe una actualización a la vez.

Para obtener la última huella digital 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 las huellas digitales se ve de la siguiente manera:

"fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="

Tu solicitud se ve de esta manera:

POST https://www.googleapis.com/deploymentmanager/v2/projects/myproject/global/deployments/example-deployment/stop

{
 "fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="
 }

¿Qué sigue?