

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Implemente AWS IoT Greengrass componentes en los dispositivos
<a name="manage-deployments"></a>

Puede utilizarlos AWS IoT Greengrass para implementar componentes en dispositivos o grupos de dispositivos. *Las implementaciones* se utilizan para definir los componentes y las configuraciones que se envían a los dispositivos. AWS IoT Greengrass se despliega en *objetivos*, AWS IoT cosas o grupos de cosas que representan los dispositivos principales de Greengrass. AWS IoT Greengrass utiliza [AWS IoT Core tareas](https://docs.aws.amazon.com/iot/latest/developerguide/iot-jobs.html) para implementarlas en sus dispositivos principales. Puede configurar la forma en que se implementará el trabajo en sus dispositivos.

## Implementaciones en dispositivos principales
<a name="core-device-deployments"></a>

Cada dispositivo principal ejecuta los componentes de las implementaciones de ese dispositivo. Una nueva implementación en el mismo destino sobrescribe la implementación anterior en el destino. Cuando crea una implementación, define los componentes y las configuraciones que se van a aplicar al software existente del dispositivo principal.

Cuando revisa una implementación para un destino, sustituye los componentes de la revisión anterior por los componentes de la nueva revisión. Por ejemplo, implementa los componentes [Administrador de registros](log-manager-component.md) y [Administrador de secretos](secret-manager-component.md) en el grupo de objetos `TestGroup`. A continuación, se crea otra implementación para `TestGroup` que especifica solo el componente administrador de secretos. Como resultado, los dispositivos principales de ese grupo ya no ejecutan el administrador de registros.

## Resolución de dependencias de plataformas
<a name="platform-dependency-resolution"></a>

Cuando un dispositivo principal recibe una implementación, comprueba que los componentes son compatibles con el dispositivo principal. Por ejemplo, si implementa el [Firehose](kinesis-firehose-component.md) en un destino de Windows, la implementación fallará.

## Resolución de dependencias de componentes
<a name="component-dependency-resolution"></a>

Durante la implementación de un componente, el dispositivo principal verifica la compatibilidad de todas las dependencias de los componentes y los requisitos de versión en un grupo de objetos. Esta verificación garantiza que se cumplan las restricciones de versión de todos los componentes y sus dependencias antes de continuar con la implementación.

El proceso de resolución de dependencias comienza al identificar los componentes de destino que no tienen dependencias en sus recetas. Luego, el sistema construye un árbol de dependencias mediante la búsqueda en anchura (BFS), que explora sistemáticamente cada nodo de destino y encuentra primero sus dependencias antes de pasar al siguiente nodo. Cada nodo incluye el componente de destino como clave y los requisitos de versión como valor.

Los requisitos de versión combinan tres conjuntos de restricciones:
+ Los requisitos de versión que ya están establecidos en el grupo de objetos existente.
+ La versión del componente exigida por la implementación. Debe seleccionar una versión del componente al realizar una implementación o al actualizarla.
+ Toda restricción de versión de un componente que esté definida en la sección de dependencias de la receta.

### Resolución de las dependencias de componentes
<a name="resolving-dependencies"></a>

En una implementación, el núcleo de Greengrass primero intenta encontrar el candidato local que se está ejecutando actualmente en el dispositivo que cumple los requisitos. Si el componente en ejecución cumple los requisitos, el núcleo obtiene la ruta de recetas almacenada en la carpeta de recetas y encuentra la versión local más reciente en el almacén local.

En el Nube de AWS caso de las implementaciones, el núcleo llamará entonces a la [ResolveComponentCandidates API](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_ResolveComponentCandidates.html). Esta API comenzará con la versión más reciente disponible y comprobará si cumple las dependencias y los requisitos. El núcleo selecciona la versión más reciente cuando recibe la respuesta de la API. Si no se encuentra ninguna versión de la Nube de AWS que cumpla los requisitos, se producirá un error en la implementación. Si el dispositivo está desconectado, recurre al candidato local original encontrado. Pero si no se encuentra ningún candidato local que cumpla los requisitos, la implementación no se realizará correctamente.

Para los despliegues locales, el núcleo utiliza exclusivamente candidatos locales si existen y si cumplen los requisitos sin negociar. Nube de AWS Si no existe un candidato de este tipo, la implementación devolverá un error.

**nota**  
Todas las recetas resueltas se almacenan de formal local para futuras consultas.

Para obtener más información, consulte la sección de [resolución de dependencias](https://github.com/aws-greengrass/aws-greengrass-nucleus/wiki/Deployment#dependency-resolution) en GitHub.

Si el núcleo de Greengrass es capaz de resolver correctamente todos los componentes, el registro del núcleo contendrá la siguiente línea.

```
resolve-all-group-dependencies-finish. Finish resolving all groups dependencies.
```

**Example**  
El siguiente ejemplo muestra cómo el núcleo resuelve los requisitos de los componentes.  
+ Se implementa ComponentA, que depende de las versiones 1.0.0-1.9.0 del ComponentC.
+ También se implementa ComponentB, que depende de las versiones 1.4.0-1.9.5 del ComponentC.
Con la resolución de dependencia de los componentes, el núcleo implementará la versión más reciente del ComponentC para cumplir con los requisitos del ComponentA y el ComponentB. La versión más reciente de ComponentC es 1.9.0.

#### Errores comunes en la resolución de dependencias de componentes
<a name="w2ab1c24c25b9c11c19"></a>

La resolución de dependencias de componentes puede fallar por dos motivos principales: un conflicto de requisitos de la versión de destino o un conflicto de requisitos de dependencia de componentes.

##### Situación 1: conflicto de requisitos de la versión de destino
<a name="w2ab1c24c25b9c11c19b5"></a>
+ Existe un objeto en un grupo de objetos, y también desea agregarlo a un nuevo grupo de objetos. La implementación fallará si el nuevo grupo de objetos requiere una versión diferente.
+ Una implementación también puede fallar si un objeto pertenece a un grupo de objetos y quiere actualizar la versión del componente mediante la implementación de un objeto.

![\[Dependencias de componentes que provocan una implementación fallida.\]](http://docs.aws.amazon.com/es_es/greengrass/v2/developerguide/images/dependency-4.png)


*Ejemplo de registro de errores:*

```
2025-04-11T06:16:03.315Z [ERROR] (pool-3-thread-27) com.aws.greengrass.componentmanager.ComponentManager: Failed to negotiate version with cloud and no local version to fall back to. {componentName=ComponentC, versionRequirement={thing/ABC==2.0.0, thinggroup/ThingGroupA==1.0.0}}
2025-04-11T06:16:03.316Z [ERROR] (pool-3-thread-26) com.aws.greengrass.deployment.DeploymentService: Error occurred while processing deployment. {deploymentId=fbac24de-4ef9-44b0-a685-fdc63b0f02b8, serviceName=DeploymentService, currentState=RUNNING}
java.util.concurrent.ExecutionException: com.aws.greengrass.componentmanager.exceptions.NoAvailableComponentVersionException: No local or cloud component version satisfies the requirements Check whether the version constraints conflict and that the component exists in your AWS account with a version that matches the version constraints. If the version constraints conflict, revise deployments to resolve the conflict. Component ComponentC version constraints: thing/ABC requires =2.0.0, thinggroup/ThingGroupA requires =1.0.0.
    at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)
    at com.aws.greengrass.deployment.DefaultDeploymentTask.call(DefaultDeploymentTask.java:127)
    at com.aws.greengrass.deployment.DefaultDeploymentTask.call(DefaultDeploymentTask.java:50)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: com.aws.greengrass.componentmanager.exceptions.NoAvailableComponentVersionException: No local or cloud component version satisfies the requirements Check whether the version constraints conflict and that the component exists in your AWS account with a version that matches the version constraints. If the version constraints conflict, revise deployments to resolve the conflict. Component ComponentC version constraints: thing/ABC requires =2.0.0, thinggroup/ThingGroupA requires =1.0.0.
    at com.aws.greengrass.componentmanager.ComponentManager.negotiateVersionWithCloud(ComponentManager.java:232)
    at com.aws.greengrass.componentmanager.ComponentManager.resolveComponentVersion(ComponentManager.java:167)
    at com.aws.greengrass.componentmanager.DependencyResolver.lambda$resolveDependencies$0(DependencyResolver.java:134)
    at com.aws.greengrass.componentmanager.DependencyResolver.resolveComponentDependencies(DependencyResolver.java:231)
    at com.aws.greengrass.componentmanager.DependencyResolver.resolveDependencies(DependencyResolver.java:131)
    at com.aws.greengrass.deployment.DefaultDeploymentTask.lambda$call$2(DefaultDeploymentTask.java:125)
    ... 4 more
```

Los registros muestran un error de conflicto de versiones, ya que el núcleo no puede encontrar una versión de un componente que cumpla simultáneamente dos requisitos contradictorios.

##### Cómo resolverlo
<a name="w2ab1c24c25b9c11c19b5c13"></a>
+ Si desea mantener el componente en cada grupo de objetos, seleccione la misma versión de ese componente en cada grupo de objetos.
+ Seleccione una versión del componente que cumpla con los requisitos de implementación.
+ Si desea utilizar una versión del componente que no cumpla los requisitos de ambos grupos de objetos, seleccione la versión del componente que cumpla con el requisito de versión del grupo de objetos y utilícelo solo en ese grupo de objetos.

##### Situación 2: conflicto entre los requisitos de la versión de dependencia de los componentes
<a name="w2ab1c24c25b9c11c19b7"></a>

Si un componente es una dependencia de diferentes componentes y los componentes requieren diferentes versiones o rangos de versiones de ese componente, existe la posibilidad de que no haya versiones disponibles que satisfagan todos los requisitos de versión. En este caso, la implementación producirá un error.

**Example**  
Implementación del ComponentA (versión 2.5.0), el ComponentB (versión 1.3.0) y ComponentC (versión 1.0.0)  
+ ComponentA requiere una versión mayor o igual a 1.0.0 de ComponentB

  ```
  ---
  ...
  ComponentName: ComponentA
  ComponentVersion: "2.5.0"
  ComponentDependencies:
      ComponentB:
          VersionRequirement: ">=1.0.0"
          DependencyType: "HARD"
  ...
  ```
+ ComponentC requiere una versión menor a 2.0.0 de ComponentA

  ```
  ---
  ...
  ComponentName: ComponentC
  ComponentVersion: "1.0.0"
  ComponentDependencies:
      ComponentA:
          VersionRequirement: "<2.0.0"
          DependencyType: "HARD"
  ...
  ```
Existe un conflicto de versiones entre dos requisitos de ComponentA:  
+ En esta implementación, ComponentA requiere la versión 2.5.0
+ ComponentC requiere versiones de ComponentA anteriores a 2.0.0
Estos dos requisitos se contradicen entre sí, por lo que es imposible que el núcleo encuentre una versión del ComponentA que satisfaga ambos requisitos. Por lo tanto, la resolución de dependencias falla.

![\[Dependencias de componentes que provocan una implementación fallida.\]](http://docs.aws.amazon.com/es_es/greengrass/v2/developerguide/images/dependency-3.png)


*Ejemplo de registro de errores:*

```
2025-04-11T06:07:18.291Z [ERROR] (pool-3-thread-25) com.aws.greengrass.componentmanager.ComponentManager: Failed to negotiate version with cloud and no local version to fall back to. {componentName=ComponentA, versionRequirement={ComponentC=<2.0.0, thinggroup/ThingGroupA==2.5.0}}
2025-04-11T06:07:18.292Z [ERROR] (pool-3-thread-24) com.aws.greengrass.deployment.DeploymentService: Error occurred while processing deployment. {deploymentId=2ffac4df-1ac9-405c-8c11-28494a1b4382, serviceName=DeploymentService, currentState=RUNNING}
java.util.concurrent.ExecutionException: com.aws.greengrass.componentmanager.exceptions.NoAvailableComponentVersionException: No local or cloud component version satisfies the requirements Check whether the version constraints conflict and that the component exists in your AWS account with a version that matches the version constraints. If the version constraints conflict, revise deployments to resolve the conflict. Component ComponentA version constraints: ComponentC requires <2.0.0, thinggroup/ThingGroupA requires =2.5.0.
    at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)
    at com.aws.greengrass.deployment.DefaultDeploymentTask.call(DefaultDeploymentTask.java:127)
    at com.aws.greengrass.deployment.DefaultDeploymentTask.call(DefaultDeploymentTask.java:50)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: com.aws.greengrass.componentmanager.exceptions.NoAvailableComponentVersionException: No local or cloud component version satisfies the requirements Check whether the version constraints conflict and that the component exists in your AWS account with a version that matches the version constraints. If the version constraints conflict, revise deployments to resolve the conflict. Component ComponentA version constraints: ComponentC requires <2.0.0, thinggroup/ThingGroupA requires =2.5.0.
    at com.aws.greengrass.componentmanager.ComponentManager.negotiateVersionWithCloud(ComponentManager.java:232)
    at com.aws.greengrass.componentmanager.ComponentManager.resolveComponentVersion(ComponentManager.java:167)
    at com.aws.greengrass.componentmanager.DependencyResolver.lambda$resolveDependencies$0(DependencyResolver.java:134)
    at com.aws.greengrass.componentmanager.DependencyResolver.resolveComponentDependencies(DependencyResolver.java:231)
    at com.aws.greengrass.componentmanager.DependencyResolver.resolveDependencies(DependencyResolver.java:131)
    at com.aws.greengrass.deployment.DefaultDeploymentTask.lambda$call$2(DefaultDeploymentTask.java:125)
    ... 4 more
```

Los registros indican que el núcleo no encuentra una versión de ComponentA que cumpla los siguientes requisitos.
+ Los requisitos para que ComponentA sea exactamente la versión 2.5.0 (de ThingGroup A).
+ El requisito de funcionar con versiones de ComponentC inferiores a 2.0.0.

##### Cómo resolverlo
<a name="w2ab1c24c25b9c11c19b7c17"></a>
+ Si desea mantener el componente en cada grupo de objetos, seleccione la misma versión de ese componente en cada grupo de objetos.
+ Seleccione una versión del componente que cumpla con los requisitos de implementación.
+ Si desea utilizar una versión del componente que no cumpla los requisitos de ambos grupos de objetos, seleccione la versión del componente que cumpla con el requisito de versión del grupo de objetos y utilícelo solo en ese grupo de objetos.

**sugerencia**  
Si ve este error en algún componente AWS proporcionado, puede resolverlo actualizando los componentes en conflicto a la última versión.

## Eliminación de un dispositivo de un grupo de objetos
<a name="thing-group-removal-behavior"></a>

Cuando elimina un dispositivo principal de un grupo de objetos, el comportamiento de implementación del componente depende de la versión del [núcleo de Greengrass](greengrass-nucleus-component.md) que ejecute el dispositivo principal.

------
#### [ 2.5.1 and later ]

Al eliminar un dispositivo principal de un grupo de cosas, el comportamiento depende de si la AWS IoT política concede el `greengrass:ListThingGroupsForCoreDevice` permiso. Para obtener más información sobre este permiso y AWS IoT las políticas para los dispositivos principales, consulte[Autenticación y autorización de dispositivos para AWS IoT Greengrass](device-auth.md).
+ **Si la AWS IoT política concede este permiso**

  <a name="thing-group-removal-behavior-remove-components"></a>Al eliminar un dispositivo principal de un grupo de cosas, se AWS IoT Greengrass eliminan los componentes del grupo de cosas la próxima vez que se realice una implementación en el dispositivo. Si un componente del dispositivo se incluye en la siguiente implementación, ese componente no se elimina del dispositivo.
+ **Si la AWS IoT política no concede este permiso**

  <a name="thing-group-removal-behavior-no-remove-components"></a>Cuando se elimina un dispositivo principal de un grupo de cosas, AWS IoT Greengrass no se eliminan los componentes de ese grupo de cosas del dispositivo.

  <a name="thing-group-removal-behavior-no-remove-components-how-to-remove"></a>Para eliminar un componente de un dispositivo, utilice el comando [crear implementación](gg-cli-deployment.md#deployment-create) de la CLI de Greengrass. Especifique el componente que desea eliminar con el argumento `--remove` y especifique el grupo de objetos con el argumento `--groupId`.

------
#### [ 2.5.0 ]

<a name="thing-group-removal-behavior-remove-components"></a>Al eliminar un dispositivo principal de un grupo de cosas, se AWS IoT Greengrass eliminan los componentes del grupo de cosas la próxima vez que se realice una implementación en el dispositivo. Si un componente del dispositivo se incluye en la siguiente implementación, ese componente no se elimina del dispositivo.

Este comportamiento requiere que la AWS IoT política del dispositivo principal conceda el `greengrass:ListThingGroupsForCoreDevice` permiso. Si un dispositivo principal no tiene este permiso, no podrá aplicar las implementaciones. Para obtener más información, consulte [Autenticación y autorización de dispositivos para AWS IoT Greengrass](device-auth.md).

------
#### [ 2.0.x - 2.4.x ]

<a name="thing-group-removal-behavior-no-remove-components"></a>Cuando se elimina un dispositivo principal de un grupo de cosas, AWS IoT Greengrass no se eliminan los componentes de ese grupo de cosas del dispositivo.

<a name="thing-group-removal-behavior-no-remove-components-how-to-remove"></a>Para eliminar un componente de un dispositivo, utilice el comando [crear implementación](gg-cli-deployment.md#deployment-create) de la CLI de Greengrass. Especifique el componente que desea eliminar con el argumento `--remove` y especifique el grupo de objetos con el argumento `--groupId`.

------

## Implementaciones
<a name="deployments"></a>

Las implementaciones son continuas. Al crear una implementación, AWS IoT Greengrass despliega la implementación en los dispositivos de destino que están en línea. Si un dispositivo de destino no está en línea, recibirá la implementación la próxima vez que se conecte AWS IoT Greengrass. Al añadir un dispositivo principal a un grupo de cosas de destino, AWS IoT Greengrass envía al dispositivo la última implementación de ese grupo de cosas.

Antes de que un dispositivo principal implemente un componente, notifica de forma predeterminada a cada componente del dispositivo. Los componentes de Greengrass pueden responder a la notificación para aplazar la implementación. Es posible que desee aplazar la implementación si el nivel de batería del dispositivo es bajo o si está ejecutando un proceso que no se puede interrumpir. Para obtener más información, consulte [Tutorial: Desarrollo de un componente de Greengrass que aplace las actualizaciones de los componentes](defer-component-updates-tutorial.md). Cuando crea una implementación, puede configurarla para que se implemente sin notificar a los componentes.

Cada objeto o grupo de objetos de destino puede tener una implementación a la vez. Esto significa que, al crear una implementación para un objetivo, ya AWS IoT Greengrass no se despliega la revisión anterior de la implementación de ese objetivo.

## Opciones de implementación
<a name="deployment-options"></a>

Las implementaciones ofrecen varias opciones que le permiten controlar qué dispositivos reciben una actualización y cómo se implementa la actualización. Cuando cree una implementación, puede configurar las siguientes opciones:
+ **AWS IoT Greengrass componentes**

  Defina los componentes que se van a instalar y ejecutar en los dispositivos de destino. AWS IoT Greengrass los componentes son módulos de software que se implementan y ejecutan en los dispositivos principales de Greengrass. Los dispositivos reciben componentes solo si el componente es compatible con la plataforma del dispositivo. Esto le permite realizar la implementación en grupos de dispositivos, incluso si los dispositivos de destino se ejecutan en varias plataformas. Si un componente no es compatible con la plataforma del dispositivo, el componente no se implementa en el dispositivo.

  Puede implementar componentes personalizados y componentes AWS proporcionados en sus dispositivos. Al implementar un componente, AWS IoT Greengrass identifica las dependencias de los componentes y también las despliega. Para obtener más información, consulte [Desarrollo de componentes de AWS IoT Greengrass](develop-greengrass-components.md) y [Componentes proporcionados por AWS](public-components.md).

  Usted define la versión y la actualización de configuración que se va a implementar para cada componente. La *actualización de configuración* especifica cómo modificar la configuración existente del componente en el dispositivo principal o la configuración predeterminada del componente si el componente no existe en el dispositivo principal. Puede especificar qué valores de configuración desea restablecer a los valores predeterminados y los nuevos valores de configuración que se van a fusionar en el dispositivo principal. Cuando un dispositivo principal recibe implementaciones para distintos destinos y cada una especifica versiones de componentes compatibles, el dispositivo principal aplica las actualizaciones de configuración en orden según la fecha y hora en que se creó la implementación. Para obtener más información, consulte [Actualización de las configuraciones de los componentes](update-component-configurations.md).
**importante**  <a name="component-patch-update-note"></a>
<a name="component-patch-update"></a>Al implementar un componente, AWS IoT Greengrass instala las últimas versiones compatibles de todas las dependencias de ese componente. Por este motivo, es posible que las nuevas versiones con parches de los componentes públicos AWS proporcionados se implementen automáticamente en sus dispositivos principales si agrega nuevos dispositivos a un grupo de cosas o si actualiza la implementación destinada a esos dispositivos. Algunas actualizaciones automáticas, como las actualizaciones de núcleo, pueden provocar que los dispositivos se reinicien de forma inesperada.   
<a name="component-version-pinning"></a>Para evitar actualizaciones no deseadas de un componente que se ejecuta en su dispositivo, recomendamos que incluya directamente la versión que prefiera de ese componente cuando [cree una implementación](create-deployments.md). Para obtener más información sobre el comportamiento de actualización AWS IoT Greengrass del software principal, consulte[Actualización del software AWS IoT Greengrass Core (OTA)](update-greengrass-core-v2.md).
+ **Políticas de implementación**

  Defina cuándo es seguro implementar una configuración y qué hacer si se produce un error en la implementación. Puede especificar si desea o no esperar a que los componentes informen que se pueden actualizar. También puede especificar si se debe restablecer o no los dispositivos a su configuración anterior si aplican una implementación que no funciona.
+ **Configuración de la detención**

  Defina cómo y cuándo detener una implementación. La implementación se detiene y falla si se cumplen los criterios que usted defina. Por ejemplo, puede configurar una implementación para que se detenga si un porcentaje de dispositivos falla cuando la aplica después de recibir un número mínimo de dispositivos.
+ **Configuración de despliegue**

  Defina la velocidad a la que una implementación se lleva a cabo en dispositivos de destino. Puede configurar un aumento de velocidad exponencial con límites de velocidad mínimos y máximos.
+ **Configuración del tiempo de espera**

  Defina la cantidad máxima de tiempo que tiene cada dispositivo para aplicar una implementación. Si un dispositivo supera la duración que usted especifique, no podrá aplicar la implementación.

**importante**  
Los componentes personalizados pueden definir los artefactos en los bucket de S3. Cuando el software AWS IoT Greengrass principal implementa un componente, descarga los artefactos del componente desde el Nube de AWS. Los roles de los dispositivos principales no permiten el acceso a los buckets de S3 de forma predeterminada. Para implementar componentes personalizados que definan los artefactos en un bucket de S3, el rol del dispositivo principal debe conceder permisos para descargar los artefactos de ese bucket. Para obtener más información, consulte [Cómo permitir el acceso a los buckets de S3 para los artefactos del componente](device-service-role.md#device-service-role-access-s3-bucket).

**Topics**
+ [Implementaciones en dispositivos principales](#core-device-deployments)
+ [Resolución de dependencias de plataformas](#platform-dependency-resolution)
+ [Resolución de dependencias de componentes](#component-dependency-resolution)
+ [Eliminación de un dispositivo de un grupo de objetos](#thing-group-removal-behavior)
+ [Implementaciones](#deployments)
+ [Opciones de implementación](#deployment-options)
+ [Crear implementaciones](create-deployments.md)
+ [Creación de subimplementaciones](create-subdeployments.md)
+ [Revisión de las implementaciones](revise-deployments.md)
+ [Cancelación de implementaciones](cancel-deployments.md)
+ [Comprobación del estado de la implementación](check-deployment-status.md)

# Crear implementaciones
<a name="create-deployments"></a>

Puede crear una implementación que se dirija a un objeto o un grupo de objetos.

Al crear una implementación, se configuran los componentes de software que se van a implementar y la forma en que el trabajo de implementación se extiende a los dispositivos de destino. Puede definir la implementación en el archivo JSON que proporciona a AWS CLI.

El destino de implementación determina los dispositivos en los que desea ejecutar sus componentes. Para realizar la implementación en un dispositivo principal, especifique un objeto. Para realizar la implementación en varios dispositivos principales, especifique un grupo de objetos que incluya esos dispositivos. Para obtener más información acerca de cómo configurar los grupos de objetos, consulte [Grupos de objetos estáticos](https://docs.aws.amazon.com/iot/latest/developerguide/thing-groups.html) y [Grupos de objetos dinámicos](https://docs.aws.amazon.com/iot/latest/developerguide/dynamic-thing-groups.html) en la *Guía para desarrolladores de AWS IoT*.

Siga los pasos en esta sección para crear una implementación en un destino. Para obtener más información sobre cómo actualizar los componentes de software en un destino que tiene una implementación, consulte [Revisión de las implementaciones](revise-deployments.md).

**aviso**  
La operación [CreateDeployment](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_CreateDeployment.html) puede desinstalar componentes de los dispositivos principales. Si un componente está presente en la implementación anterior y no en la nueva, el dispositivo principal desinstala ese componente. Para evitar la desinstalación de los componentes, use primero la operación [ListDeployments](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_ListDeployments.html) para comprobar si el destino de la implementación ya tiene una implementación existente. A continuación, use la operación [GetDeployment](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_GetDeployment.html) para empezar desde esa implementación existente al crear una nueva implementación.

**Creación de una implementación (AWS CLI)**

1. Cree un archivo llamado `deployment.json` y, a continuación, copie el siguiente objeto JSON en el archivo. Reemplace *targetArn* por el ARN del objeto o grupo de objetos AWS IoT al que se va a destinar la implementación. Los ARN de objetos y grupos de objetos tienen el siguiente formato:
   + Cosa: `arn:aws:iot:region:account-id:thing/thingName`
   + Grupo de cosas: `arn:aws:iot:region:account-id:thinggroup/thingGroupName`

   ```
   {
     "targetArn": "targetArn"
   }
   ```

1. Compruebe si el objetivo de la implementación tiene una implementación existente que desee revisar. Haga lo siguiente:

   1. <a name="revise-deployment-list-deployments-intro"></a>Ejecute el siguiente comando para enumerar las implementaciones del destino de implementación. Reemplace *targetArn* por el ARN del objeto de AWS IoT o el grupo de objetos de destino.

      ```
      aws greengrassv2 list-deployments --target-arn targetArn
      ```

      La respuesta contiene una lista con la implementación más reciente del objetivo. Si la respuesta está vacía, significa que el destino no tiene una implementación existente y puede ir directamente a [Step 3](#create-deployment-define-name-step). De lo contrario, copie el `deploymentId` de la respuesta para usarlo en el paso siguiente.
**nota**  <a name="revise-deployment-list-deployments-revision-note"></a>
También puede revisar una implementación que no sea la revisión más reciente del destino. Especifique el argumento `--history-filter ALL` para enumerar todas las implementaciones del destino. A continuación, copie el ID de la implementación que desee revisar.

   1. <a name="revise-deployment-get-deployment"></a>Ejecute el siguiente comando para obtener los detalles de la implementación. Estos detalles incluyen los metadatos, los componentes y la configuración del trabajo. Reemplace *deploymentId* por el ID del paso anterior.

      ```
      aws greengrassv2 get-deployment --deployment-id deploymentId
      ```

      La respuesta contiene los detalles de la implementación.

   1. Copie cualquiera de los siguientes pares clave-valor de la respuesta del comando anterior a `deployment.json`. Puede cambiar estos valores para la nueva implementación.
      + `deploymentName`: el nombre de la implementación.
      + `components`: los componentes de la implementación. Para desinstalar un componente, elimínelo de este objeto.
      + `deploymentPolicies`: las políticas de la implementación.
      + `iotJobConfiguration`: la configuración del trabajo de la implementación.
      + `tags`: las etiquetas de la implementación.

1. <a name="create-deployment-define-name-step"></a>(Opcional) Defina un nombre para la implementación. Reemplace *deploymentName* con el nombre de la implementación.

   ```
   {
     "targetArn": "targetArn",
     "deploymentName": "deploymentName"
   }
   ```

1. Agregue cada componente para implementar los dispositivos de destino. Para ello, agregue pares clave-valor al objeto `components`, donde la clave es el nombre del componente y el valor es un objeto que contiene los detalles de ese componente. Especifique los siguientes detalles para cada componente que agregue:
   + `version`: la versión del componente que se va a implementar.
   + `configurationUpdate`: la [actualización de configuración](update-component-configurations.md) que se va a implementar. La actualización es una operación de parche que modifica la configuración existente del componente en cada dispositivo de destino o la configuración predeterminada del componente si no existe en el dispositivo de destino. Puede especificar las siguientes actualizaciones de configuración:
     + Restablecer actualizaciones (`reset`): (opcional) una lista de punteros JSON que definen los valores de configuración para restablecer sus valores predeterminados en el dispositivo de destino. El software AWS IoT Greengrass Core aplica las actualizaciones de restablecimiento antes de aplicar las actualizaciones de combinación. Para obtener más información, consulte [Actualizaciones de restablecimiento](update-component-configurations.md#reset-configuration-update).
     + Combinar actualizaciones (`merge`): (opcional) un documento JSON que define los valores de configuración que se van a fusionar en el dispositivo de destino. Debe serializar el documento JSON como una cadena. Para obtener más información, consulte [Actualizaciones de combinación](update-component-configurations.md#merge-configuration-update).
   + <a name="component-run-with-config"></a>`runWith`: (opcional) las opciones de proceso del sistema que usa el software AWS IoT Greengrass Core para ejecutar los procesos de este componente en el dispositivo principal. Si omite un parámetro en el objeto `runWith`, el software AWS IoT Greengrass Core usa los valores predeterminados que configure en el [componente núcleo de Greengrass](greengrass-nucleus-component.md).

     Puede especificar cualquiera de las siguientes opciones:
     + `posixUser`: el usuario del sistema POSIX y, opcionalmente, el grupo que se usan para ejecutar este componente en dispositivos principales de Linux. El usuario y el grupo, si se especifica, deben existir en cada dispositivo principal de Linux. Especifique el usuario y el grupo separados por dos puntos (`:`) con el siguiente formato: `user:group`. El grupo es opcional. Si no especifica un grupo, el software principal de AWS IoT Greengrass utiliza el usuario principal del grupo. Para obtener más información, consulte [Configuración del usuario que ejecuta los componentes](configure-greengrass-core-v2.md#configure-component-user).
     + `windowsUser`: el usuario de Windows que se usa para ejecutar este componente en los dispositivos principales de Windows. El usuario debe existir en cada dispositivo principal de Windows y su nombre y contraseña deben estar en la instancia del Administrador de credenciales de la cuenta LocalSystem. Para obtener más información, consulte [Configuración del usuario que ejecuta los componentes](configure-greengrass-core-v2.md#configure-component-user).

       Esta característica está disponible para la versión 2.5.0 y versiones posteriores del [componente núcleo de Greengrass](greengrass-nucleus-component.md).
     + `systemResourceLimits`: los límites de recursos del sistema que se aplican a los procesos de este componente. Puede aplicar límites de recursos del sistema a los componentes de Lambda genéricos y no contenerizados. Para obtener más información, consulte [Configuración de los límites de recursos del sistema para los componentes](configure-greengrass-core-v2.md#configure-component-system-resource-limits).

       Puede especificar cualquiera de las siguientes opciones:
       + `cpus`: <a name="system-resource-limits-cpu-definition-this"></a>la cantidad máxima de tiempo de CPU que los procesos de este componente pueden usar en el dispositivo principal. El tiempo total de CPU de un dispositivo principal equivale a la cantidad de núcleos de CPU del dispositivo. Por ejemplo, en un dispositivo principal con 4 núcleos de CPU, puede establecer este valor en `2` para limitar los procesos del componente al 50 % de uso de cada núcleo de CPU. En un dispositivo con 1 núcleo de CPU, puede establecer este valor en `0.25` para limitar los procesos del componente al 25 % de uso de la CPU. Si se establece este valor en un número mayor que la cantidad de núcleos de la CPU, el software AWS IoT Greengrass Core no limita el uso de la CPU del componente. 
       + `memory`: <a name="system-resource-limits-memory-definition-this"></a>la cantidad máxima de RAM, expresada en kilobytes, que los procesos de un componente pueden usar en el dispositivo principal. 

       Esta característica está disponible para la versión 2.4.0 y versiones posteriores del [componente núcleo de Greengrass](greengrass-nucleus-component.md). AWS IoT Greengrass actualmente no admite esta función en los dispositivos principales de Windows. 

      
**Example Ejemplo de actualización de la configuración básica**  

   El siguiente objeto `components` de muestra especifica la implementación de un componente, `com.example.PythonRuntime`, que espera un parámetro de configuración denominado `pythonVersion`.

   ```
   {
     "targetArn": "targetArn",
     "deploymentName": "deploymentName",
     "components": {
       "com.example.PythonRuntime": {
         "componentVersion": "1.0.0",
         "configurationUpdate": {
           "merge": "{\"pythonVersion\":\"3.7\"}"
         }
       }
     }
   }
   ```  
**Example Ejemplo de actualización de configuración con actualizaciones de restablecimiento y combinación**  

   Considere un ejemplo de componente de tablero industrial, `com.example.IndustrialDashboard`, que tiene la siguiente configuración predeterminada.

   ```
   {
     "name": null,
     "mode": "REQUEST",
     "network": {
       "useHttps": true,
       "port": {
         "http": 80,
         "https": 443
       },
     },
     "tags": []
   }
   ```

   La siguiente actualización de configuración especifica las siguientes instrucciones:

   1. Restablezca la configuración HTTPS a su valor predeterminado (`true`).

   1. Restablezca la lista de etiquetas industriales a una lista vacía.

   1. Combine una lista de etiquetas industriales que identifiquen los flujos de datos de temperatura y presión de dos calderas.

   ```
   {
     "reset": [
       "/network/useHttps",
       "/tags"
     ],
     "merge": {
       "tags": [
         "/boiler/1/temperature",
         "/boiler/1/pressure",
         "/boiler/2/temperature",
         "/boiler/2/pressure"
       ]
     }
   }
   ```

   El siguiente objeto `components` de ejemplo especifica la implementación de este componente del tablero industrial y la actualización de la configuración.

   ```
   {
     "targetArn": "targetArn",
     "deploymentName": "deploymentName",
     "components": {
       "com.example.IndustrialDashboard": {
         "componentVersion": "1.0.0",
         "configurationUpdate": {
           "reset": [
             "/network/useHttps",
             "/tags"
           ],
           "merge": "{\"tags\":[\"/boiler/1/temperature\",\"/boiler/1/pressure\",\"/boiler/2/temperature\",\"/boiler/2/pressure\"]}"
         }
       }
     }
   }
   ```

1. (Opcional) Defina las políticas de implementación de la implementación. Puede configurar cuándo los dispositivos principales pueden aplicar una implementación de forma segura o qué hacer si un dispositivo principal no puede aplicar la implementación. Para ello, agregue un objeto `deploymentPolicies` a `deployment.json` y, a continuación, realice una de las siguientes acciones:

   1. (Opcional) Especifique la política de actualización de los componentes (`componentUpdatePolicy`). Esta política define si la implementación permite o no a los componentes aplazar una actualización hasta que estén listos para actualizarse. Por ejemplo, es posible que los componentes deban agotar recursos o completar acciones críticas antes de poder reiniciarse para aplicar una actualización. Esta política también define el tiempo del que disponen los componentes para responder a una notificación de actualización.

      Esta política es un objeto con los siguientes parámetros:
      + `action`: (opcional) si se debe notificar o no a los componentes y esperar que informen cuando estén listos para actualizar. Puede elegir entre las siguientes opciones:
        + `NOTIFY_COMPONENTS`: la implementación notifica a cada componente antes de que se detenga y actualice ese componente. Los componentes pueden usar la operación IPC [SubscribeToComponentUpdates](ipc-component-lifecycle.md#ipc-operation-subscribetocomponentupdates) para recibir estas notificaciones.
        + `SKIP_NOTIFY_COMPONENTS`: la implementación no notifica a los componentes ni espera a que se confirme que se pueden actualizar con seguridad.

        El valor predeterminado es `NOTIFY_COMPONENTS`.
      + `timeoutInSeconds`: la cantidad de tiempo en segundos que tiene cada componente para responder a una notificación de actualización con la operación IPC [DeferComponentUpdate](ipc-component-lifecycle.md#ipc-operation-defercomponentupdate). Si el componente no responde en este periodo, la implementación continúa en el dispositivo principal.

        El valor predeterminado es de 60 segundos.

   1. (Opcional) Especifique la política de validación de la configuración (`configurationValidationPolicy`). Esta política define la cantidad de tiempo que tiene cada componente para validar una actualización de configuración de una implementación. Los componentes pueden usar la operación IPC [SubscribeToValidateConfigurationUpdates](ipc-component-configuration.md#ipc-operation-subscribetovalidateconfigurationupdates) para suscribirse a las notificaciones de sus propias actualizaciones de configuración. A continuación, los componentes pueden usar la operación IPC [SendConfigurationValidityReport](ipc-component-configuration.md#ipc-operation-sendconfigurationvalidityreport) para indicar al software AWS IoT Greengrass Core si la actualización de configuración es válida. Si la actualización de la configuración no es válida, la implementación devuelve un error.

      Esta política es un objeto con el siguiente parámetro:
      + `timeoutInSeconds`: (opcional) la cantidad de tiempo en segundos que cada componente posee para validar la actualización de configuración. Si el componente no responde en este periodo, la implementación continúa en el dispositivo principal.

        El valor predeterminado es 30 segundos.

   1. (Opcional) Especifique la política de gestión de errores (`failureHandlingPolicy`). Esta política es una cadena que define si se deben revertir o no los dispositivos en caso de que se produzca un error en la implementación. Puede elegir entre las siguientes opciones:
      + `ROLLBACK`: si la implementación falla en un dispositivo principal, el software AWS IoT Greengrass Core restaura ese dispositivo principal a su configuración anterior.
      + `DO_NOTHING`: si la implementación falla en un dispositivo principal, el software AWS IoT Greengrass Core conserva la nueva configuración. Esto puede provocar que los componentes se estropeen si la nueva configuración no es válida.

      El valor predeterminado es `ROLLBACK`.

   Su implementación en `deployment.json` puede parecerse al siguiente ejemplo:

   ```
   {
     "targetArn": "targetArn",
     "deploymentName": "deploymentName",
     "components": {
       "com.example.IndustrialDashboard": {
         "componentVersion": "1.0.0",
         "configurationUpdate": {
           "reset": [
             "/network/useHttps",
             "/tags"
           ],
           "merge": "{\"tags\":[\"/boiler/1/temperature\",\"/boiler/1/pressure\",\"/boiler/2/temperature\",\"/boiler/2/pressure\"]}"
         }
       }
     },
     "deploymentPolicies": {
       "componentUpdatePolicy": {
         "action": "NOTIFY_COMPONENTS",
         "timeoutInSeconds": 30
       },
       "configurationValidationPolicy": {
         "timeoutInSeconds": 60
       },
       "failureHandlingPolicy": "ROLLBACK"
     }
   }
   ```

1. (Opcional) Defina cómo se detiene, se implementa o se agota el tiempo de espera de la implementación. AWS IoT Greengrass usa los trabajos AWS IoT Core para enviar las implementaciones a los dispositivos principales, por lo que estas opciones son idénticas a las opciones de configuración de los trabajos AWS IoT Core. Para obtener más información, consulte la [configuración de implementación y cancelación de trabajos](https://docs.aws.amazon.com/iot/latest/developerguide/job-rollout-abort.html) en la *Guía para desarrolladores de AWS IoT*.

   Para definir las opciones de trabajo, agregue un objeto `iotJobConfiguration` a `deployment.json`. A continuación, defina las opciones que desee configurar.

   Su implementación en `deployment.json` puede parecerse al siguiente ejemplo:

   ```
   {
     "targetArn": "targetArn",
     "deploymentName": "deploymentName",
     "components": {
       "com.example.IndustrialDashboard": {
         "componentVersion": "1.0.0",
         "configurationUpdate": {
           "reset": [
             "/network/useHttps",
             "/tags"
           ],
           "merge": "{\"tags\":[\"/boiler/1/temperature\",\"/boiler/1/pressure\",\"/boiler/2/temperature\",\"/boiler/2/pressure\"]}"
         }
       }
     },
     "deploymentPolicies": {
       "componentUpdatePolicy": {
         "action": "NOTIFY_COMPONENTS",
         "timeoutInSeconds": 30
       },
       "configurationValidationPolicy": {
         "timeoutInSeconds": 60
       },
       "failureHandlingPolicy": "ROLLBACK"
     },
     "iotJobConfiguration": {
       "abortConfig": {
         "criteriaList": [
           {
             "action": "CANCEL",
             "failureType": "ALL",
             "minNumberOfExecutedThings": 100,
             "thresholdPercentage": 5
           }
         ]
       },
       "jobExecutionsRolloutConfig": {
         "exponentialRate": {
           "baseRatePerMinute": 5,
           "incrementFactor": 2,
           "rateIncreaseCriteria": {
             "numberOfNotifiedThings": 10,
             "numberOfSucceededThings": 5
           }
         },
         "maximumPerMinute": 50
       },
       "timeoutConfig":  {
         "inProgressTimeoutInMinutes": 5
       }
     }
   }
   ```

1. (Opcional) Agregue etiquetas (`tags`) para la implementación. Para obtener más información, consulte [Etiquete sus AWS IoT Greengrass Version 2 recursos](tag-resources.md).

1. Ejecute el siguiente comando para crear la implementación de `deployment.json`.

   ```
   aws greengrassv2 create-deployment --cli-input-json file://deployment.json
   ```

   <a name="check-new-deployment-status"></a>La respuesta incluye un `deploymentId` que identifica esta implementación. Puede usar el ID de la implementación para comprobar el estado de la implementación. Para obtener más información, consulte [Comprobación del estado de la implementación](check-deployment-status.md#check-cloud-deployment-status).

# Actualización de las configuraciones de los componentes
<a name="update-component-configurations"></a>

Las configuraciones de los componentes son objetos JSON que definen los parámetros de cada componente. La receta de cada componente define su configuración predeterminada, que puede modificar al implementar los componentes en los dispositivos principales.

Al crear una implementación, puede especificar la *actualización de configuración* que se aplicará a cada componente. Las actualizaciones de configuración son operaciones de parche, lo que significa que la actualización modifica la configuración del componente que existe en el dispositivo principal. Si el dispositivo principal no tiene el componente, la actualización de configuración modifica y aplica la configuración predeterminada para esa implementación.

La actualización de configuración define las actualizaciones de *restablecimiento* y las actualizaciones de *combinación*. Las actualizaciones de restablecimiento definen qué valores de configuración se deben restablecer a sus valores predeterminados o eliminar. Las actualizaciones de combinación definen los nuevos valores de configuración que se deben establecer para el componente. Al implementar una actualización de configuración, el software AWS IoT Greengrass principal ejecuta la actualización de restablecimiento antes de la actualización de fusión.

Los componentes pueden validar las actualizaciones de configuración que se implementen. El componente se suscribe para recibir una notificación cuando una implementación cambia su configuración y puede rechazar una configuración que no sea compatible. Para obtener más información, consulte [Interacción con la configuración de componentes](ipc-component-configuration.md).

**Topics**
+ [Actualizaciones de restablecimiento](#reset-configuration-update)
+ [Actualizaciones de combinación](#merge-configuration-update)
+ [Ejemplos](#configuration-update-example)

## Actualizaciones de restablecimiento
<a name="reset-configuration-update"></a>

Las actualizaciones de restablecimiento definen qué valores de configuración se deben restablecer a sus valores predeterminados en el dispositivo principal. Si un valor de configuración no tiene un valor predeterminado, la actualización de restablecimiento elimina ese valor de la configuración del componente. Esto puede ayudarlo a reparar un componente que se interrumpe como resultado de una configuración no válida.

Utilice una lista de punteros JSON para definir qué valores de configuración desea restablecer. Los punteros JSON comienzan con una barra diagonal `/`. Para identificar un valor en una configuración de componentes anidados, use barras diagonales (`/`) para separar las claves de cada nivel de la configuración. Para obtener más información, consulte la [especificación de puntero JSON](https://tools.ietf.org/html/rfc6901).

**nota**  
Solo puede restablecer los valores predeterminados de una lista completa. No puede usar las actualizaciones de restablecimiento para restablecer un elemento individual de una lista. 

Para restablecer la configuración completa de un componente a sus valores predeterminados, especifique una única cadena vacía como actualización de restablecimiento.

```
"reset": [""]
```

## Actualizaciones de combinación
<a name="merge-configuration-update"></a>

Las actualizaciones de combinación definen los valores de configuración que se van a insertar en la configuración de los componentes principales. La actualización de fusión es un objeto JSON que el software AWS IoT Greengrass principal fusiona después de restablecer los valores de las rutas que se especificaron en la actualización de restablecimiento. Al usar AWS CLI o AWS SDKs, debe serializar este objeto JSON como una cadena.

Puede combinar un par clave-valor que no exista en la configuración predeterminada del componente. También puede combinar un par clave-valor que tenga un tipo diferente al del valor con la misma clave. El nuevo valor reemplaza al valor anterior. Esto significa que puede cambiar la estructura del objeto de configuración.

Puede combinar valores nulos y cadenas, listas y objetos vacíos.

**nota**  
No puede utilizar las actualizaciones de combinación para insertar o agregar un elemento a una lista. Puede reemplazar una lista completa o definir un objeto en el que cada elemento tenga una clave única.  
<a name="configuration-value-type-note"></a>AWS IoT Greengrass usa JSON para los valores de configuración. JSON especifica un tipo de número, pero no diferencia entre números enteros y flotantes. Como resultado, los valores de configuración pueden convertirse en valores flotantes en AWS IoT Greengrass. Para garantizar que su componente use el tipo de datos correcto, le recomendamos que defina los valores de configuración numéricos como cadenas. A continuación, pida a su componente que los analice como enteros o flotantes. Esto garantiza que los valores de configuración sean del mismo tipo en la configuración y en el dispositivo principal.

### Uso de variables de receta en las actualizaciones de combinación
<a name="merge-configuration-update-recipe-variables"></a>

Esta característica está disponible para la versión 2.6.0 y versiones posteriores del [componente núcleo de Greengrass](greengrass-nucleus-component.md).

Si establece la opción de [interpolateComponentConfiguration](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration-interpolate-component-configuration)configuración del núcleo de Greengrass en`true`, puede utilizar variables de receta distintas de la variable de `component_dependency_name:configuration:json_pointer` receta en las actualizaciones de fusión. Por ejemplo, puede usar la variable de `{iot:thingName}` receta en una actualización de fusión para incluir el nombre del dispositivo principal en el valor de AWS IoT la configuración de un componente, como una política de autorización de [comunicación entre procesos (IPC](interprocess-communication.md#ipc-authorization-policies)).

## Ejemplos
<a name="configuration-update-example"></a>

En el siguiente ejemplo, se muestran las actualizaciones de configuración de un componente del panel que tiene la siguiente configuración predeterminada. Este componente de ejemplo muestra información sobre el equipo industrial.

```
{
  "name": null,
  "mode": "REQUEST",
  "network": {
    "useHttps": true,
    "port": {
      "http": 80,
      "https": 443
    },
  },
  "tags": []
}
```

### Receta de componentes para paneles industriales
<a name="w2ab1c24c25c22c16c17b7b1"></a>

------
#### [ JSON ]

```
{
  "RecipeFormatVersion": "2020-01-25",
  "ComponentName": "com.example.IndustrialDashboard",
  "ComponentVersion": "1.0.0",
  "ComponentDescription": "Displays information about industrial equipment.",
  "ComponentPublisher": "Amazon",
  "ComponentConfiguration": {
    "DefaultConfiguration": {
      "name": null,
      "mode": "REQUEST",
      "network": {
        "useHttps": true,
        "port": {
          "http": 80,
          "https": 443
        },
      },
      "tags": []
    }
  },
  "Manifests": [
    {
      "Platform": {
        "os": "linux"
      },
      "Lifecycle": {
        "Run": "python3 -u {artifacts:path}/industrial_dashboard.py"
      }
    },
    {
      "Platform": {
        "os": "windows"
      },
      "Lifecycle": {
        "Run": "py -3 -u {artifacts:path}/industrial_dashboard.py"
      }
    }
  ]
}
```

------
#### [ YAML ]

```
---
RecipeFormatVersion: '2020-01-25'
ComponentName: com.example.IndustrialDashboard
ComponentVersion: '1.0.0'
ComponentDescription: Displays information about industrial equipment.
ComponentPublisher: Amazon
ComponentConfiguration:
  DefaultConfiguration:
    name: null
    mode: REQUEST
    network:
      useHttps: true
      port:
        http: 80
        https: 443
    tags: []
Manifests:
  - Platform:
      os: linux
    Lifecycle:
      Run: |
        python3 -u {artifacts:path}/industrial_dashboard.py
  - Platform:
      os: windows
    Lifecycle:
      Run: |
        py -3 -u {artifacts:path}/industrial_dashboard.py
```

------

**Example Ejemplo 1: actualización de combinación**  
Cree una implementación que aplique la siguiente actualización de configuración, que especifica una actualización de combinación, pero no una actualización de restablecimiento. Esta actualización de configuración indica al componente que muestre el panel en el puerto HTTP 8080 con los datos de dos calderas.    
**Configuración de combinación**  

```
{
  "name": "Factory 2A",
  "network": {
    "useHttps": false,
    "port": {
      "http": 8080
    }
  },
  "tags": [
    "/boiler/1/temperature",
    "/boiler/1/pressure",
    "/boiler/2/temperature",
    "/boiler/2/pressure"
  ]
}
```
El siguiente comando crea una implementación a un dispositivo principal.  

```
aws greengrassv2 create-deployment --cli-input-json file://dashboard-deployment.json
```
El archivo `dashboard-deployment.json` contiene el siguiente documento JSON.  

```
{
  "targetArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore",
  "deploymentName": "Deployment for MyGreengrassCore",
  "components": {
    "com.example.IndustrialDashboard": {
      "componentVersion": "1.0.0",
      "configurationUpdate": {
        "merge": "{\"name\":\"Factory 2A\",\"network\":{\"useHttps\":false,\"port\":{\"http\":8080}},\"tags\":[\"/boiler/1/temperature\",\"/boiler/1/pressure\",\"/boiler/2/temperature\",\"/boiler/2/pressure\"]}"
      }
    }
  }
}
```
El siguiente comando de la [CLI de Greengrass](greengrass-cli-component.md) crea una implementación local en un dispositivo principal.  

```
sudo greengrass-cli deployment create \
  --recipeDir recipes \
  --artifactDir artifacts \
  --merge "com.example.IndustrialDashboard=1.0.0" \
  --update-config dashboard-configuration.json
```
El archivo `dashboard-configuration.json` contiene el siguiente documento JSON.  

```
{
  "com.example.IndustrialDashboard": {
    "MERGE": {
      "name": "Factory 2A",
      "network": {
        "useHttps": false,
        "port": {
          "http": 8080
        }
      },
      "tags": [
        "/boiler/1/temperature",
        "/boiler/1/pressure",
        "/boiler/2/temperature",
        "/boiler/2/pressure"
      ]
    }
  }
}
```
Tras esta actualización, el componente del panel tiene la siguiente configuración.  

```
{
  "name": "Factory 2A",
  "mode": "REQUEST",
  "network": {
    "useHttps": false,
    "port": {
      "http": 8080,
      "https": 443
    }
  },
  "tags": [
    "/boiler/1/temperature",
    "/boiler/1/pressure",
    "/boiler/2/temperature",
    "/boiler/2/pressure"
  ]
}
```

**Example Ejemplo 2: actualizaciones de restablecimiento y combinación**  
A continuación, cree una implementación que aplique la siguiente actualización de configuración, que especifica una actualización de combinación y una actualización de restablecimiento. Estas actualizaciones especifican mostrar el panel en el puerto HTTPS predeterminado con datos de diferentes calderas. Estas actualizaciones modifican la configuración resultante de las actualizaciones de configuración del ejemplo anterior.    
**Restablecer las rutas**  

```
[
  "/network/useHttps",
  "/tags"
]
```  
**Configuración de combinación**  

```
{
  "tags": [
    "/boiler/3/temperature",
    "/boiler/3/pressure",
    "/boiler/4/temperature",
    "/boiler/4/pressure"
  ]
}
```
El siguiente comando crea una implementación a un dispositivo principal.  

```
aws greengrassv2 create-deployment --cli-input-json file://dashboard-deployment2.json
```
El archivo `dashboard-deployment2.json` contiene el siguiente documento JSON.  

```
{
  "targetArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore",
  "deploymentName": "Deployment for MyGreengrassCore",
  "components": {
    "com.example.IndustrialDashboard": {
      "componentVersion": "1.0.0",
      "configurationUpdate": {
        "reset": [
          "/network/useHttps",
          "/tags"
        ],
        "merge": "{\"tags\":[\"/boiler/3/temperature\",\"/boiler/3/pressure\",\"/boiler/4/temperature\",\"/boiler/4/pressure\"]}"
      }
    }
  }
}
```
El siguiente comando de la [CLI de Greengrass](greengrass-cli-component.md) crea una implementación local en un dispositivo principal.  

```
sudo greengrass-cli deployment create \
  --recipeDir recipes \
  --artifactDir artifacts \
  --merge "com.example.IndustrialDashboard=1.0.0" \
  --update-config dashboard-configuration2.json
```
El archivo `dashboard-configuration2.json` contiene el siguiente documento JSON.  

```
{
  "com.example.IndustrialDashboard": {
    "RESET": [
      "/network/useHttps",
      "/tags"
    ],
    "MERGE": {
      "tags": [
        "/boiler/3/temperature",
        "/boiler/3/pressure",
        "/boiler/4/temperature",
        "/boiler/4/pressure"
      ]
    }
  }
}
```
Tras esta actualización, el componente del panel tiene la siguiente configuración.  

```
{
  "name": "Factory 2A",
  "mode": "REQUEST",
  "network": {
    "useHttps": true,
    "port": {
      "http": 8080,
      "https": 443
    }
  },
  "tags": [
    "/boiler/3/temperature",
    "/boiler/3/pressure",
    "/boiler/4/temperature",
    "/boiler/4/pressure",
  ]
}
```

# Creación de subimplementaciones
<a name="create-subdeployments"></a>

**nota**  
La característica de subimplementación está disponible en la versión 2.9.0 y posteriores del núcleo de Greengrass. No es posible implementar una configuración en una subimplementación con versiones de componentes anteriores del núcleo de Greengrass.

Una subimplementación es una implementación que se dirige a un subconjunto más pequeño de dispositivos dentro de una implementación principal. Puede usar las subimplementaciones para implementar una configuración en un subconjunto más pequeño de dispositivos. También puede crear subimplementaciones para volver a intentar una implementación principal que no funciona cuando fallan uno o más dispositivos de esa implementación principal. Con esta característica, puede seleccionar los dispositivos que fallaron en esa implementación principal y crear una subimplementación para probar las configuraciones hasta que la subimplementación se realice correctamente. Una vez que la subimplementación se haya realizado correctamente, puede volver a implementar esa configuración en la implementación principal.

Siga los pasos de esta sección para crear una subimplementación y comprobar su estado. Para obtener información sobre cómo crear implementaciones, consulte [Crear implementaciones](https://docs.aws.amazon.com/greengrass/v2/developerguide/create-deployments.html).

**Creación de una subimplementación (AWS CLI)**

1. <a name="create-subdeployments-step1"></a>Ejecute el siguiente comando para recuperar las últimas implementaciones de un grupo de objetos. Reemplace el ARN del comando por el ARN del grupo de objetos que se va a consultar. Configure `--history-filter` en **LATEST\$1ONLY** para ver la última implementación de ese grupo de objetos.

   ```
   aws greengrassv2 list-deployments --target-arn arn:aws:iot:region:account-id:thinggroup/thingGroupName --history-filter LATEST_ONLY
   ```

1. Copie el `deploymentId` de la respuesta al comando **list-deployments** para usarlo en el siguiente paso.

1. Ejecute el siguiente comando para recuperar el estado de la implementación. Reemplace `deploymentId` por el ID de la implementación que va a consultar.

   ```
   aws greengrassv2 get-deployment --deployment-id deploymentId
   ```

1. Copie el `iotJobId` de la respuesta al comando **get-deployment** para usarlo en el siguiente paso.

1. Ejecute el siguiente comando para recuperar la lista de ejecuciones de un trabajo especificado. Reemplace *jobID* por el `iotJobId` del paso anterior. Reemplace *status* por el estado que desee filtrar. Puede filtrar los resultados con los siguientes estados:
   + `QUEUED`
   + `IN_PROGRESS`
   + `SUCCEEDED`
   + `FAILED`
   + `TIMED_OUT`
   + `REJECTED`
   + `REMOVED`
   + `CANCELED`

   ```
   aws iot list-job-executions-for-job --job-id jobID --status status
   ```

1. Cree un grupo de objetos AWS IoT nuevo o use un grupo de objetos existente para la subimplementación. A continuación, agregue un objeto de AWS IoT a este grupo de objetos. Los grupos de objetos se usan para administrar las flotas de dispositivos principales de Greengrass. Al implementar componentes de software en sus dispositivos, puede dirigirse a dispositivos individuales o a grupos de dispositivos. Puede agregar un dispositivo a un grupo de objetos con una implementación activa de Greengrass. Una vez agregado, puede implementar los componentes de software de ese grupo de objetos en ese dispositivo.

   Para crear un nuevo grupo de objetos y agregarle sus dispositivos, haga lo siguiente:

   1. Cree un grupo de objetos de AWS IoT. Reemplace *MyGreengrassCoreGroup* por el nombre del nuevo grupo de objetos. No puede usar dos puntos (:) en el nombre de un grupo de objetos.
**nota**  
Si un grupo de objetos de una subimplementación se usa con un `parentTargetArn`, no se puede reutilizar con una flota principal diferente. Si un grupo de objetos ya se ha usado para crear una subimplementación para otra flota, la API devolverá un error.

      ```
      aws iot create-thing-group --thing-group-name MyGreengrassCoreGroup
      ```

      Si la solicitud se realiza correctamente, la respuesta tiene un aspecto similar al del siguiente ejemplo:

      ```
      {
        "thingGroupName": "MyGreengrassCoreGroup",
        "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/MyGreengrassCoreGroup",
        "thingGroupId": "4df721e1-ff9f-4f97-92dd-02db4e3f03aa"
      }
      ```

   1. Agregue un núcleo de Greengrass aprovisionado a su grupo de objetos. Ejecute el siguiente comando con estos parámetros:
      + Reemplace *MyGreengrassCore* por el nombre del núcleo de Greengrass aprovisionado.
      + Reemplace *MyGreengrassCoreGroup* por el nombre su grupo de objetos.

      ```
      aws iot add-thing-to-thing-group --thing-name MyGreengrassCore --thing-group-name MyGreengrassCoreGroup
      ```

      El comando no tiene ningún resultado si la solicitud se realiza correctamente.

1. Cree un archivo llamado `deployment.json` y, a continuación, copie el siguiente objeto JSON en el archivo. Reemplace *targetArn* por el ARN del grupo de objetos AWS IoT al que apuntar la subimplementación. Un objetivo de subimplementación solo puede ser un grupo de objetos. Los ARN del grupo de objetos tienen el siguiente formato:
   + **Grupo de objetos**: `arn:aws:iot:region:account-id:thinggroup/thingGroupName`

   ```
   {
     "targetArn": "targetArn"
   }
   ```

1. Ejecute el siguiente comando nuevamente para obtener los detalles originales de la implementación. Estos detalles incluyen los metadatos, los componentes y la configuración del trabajo. Reemplace *deploymentId* por el ID de [Step 1](#create-subdeployments-step1). Puede usar esta configuración de implementación para configurar su subimplementación y realizar los cambios necesarios.

   ```
   aws greengrassv2 get-deployment --deployment-id deploymentId
   ```

   La respuesta contiene los detalles de la implementación. Copie cualquiera de los siguientes pares clave-valor de la respuesta del comando **get-deployment** en `deployment.json`. Puede cambiar estos valores para la subimplementación. Para obtener más información acerca de los detalles de este comando, consulte [GetDeployment](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_GetDeployment.html).
   + `components`: los componentes de la implementación. Para desinstalar un componente, elimínelo de este objeto.
   + `deploymentName`: el nombre de la implementación.
   + `deploymentPolicies`: las políticas de la implementación.
   + `iotJobConfiguration`: la configuración del trabajo de la implementación.
   + `parentTargetArn`: el objetivo de la implementación principal.
   + `tags`: las etiquetas de la implementación.

1. Ejecute el siguiente comando para crear la subimplementación desde `deployment.json`. Reemplace *subdeploymentName* por un nombre para la subimplementación.

   ```
   aws greengrassv2 create-deployment --deployment-name subdeploymentName --cli-input-json file://deployment.json
   ```

   La respuesta incluye un `deploymentId` que identifica esta subimplementación. Puede usar el ID de la implementación para comprobar el estado de la implementación. Para obtener más información, consulte [Comprobar el estado de la implementación](https://docs.aws.amazon.com/greengrass/v2/developerguide/check-deployment-status.html#check-cloud-deployment-status).

1. Si la subimplementación se realiza correctamente, puede usar su configuración para revisar la implementación principal. Copie el `deployment.json` que usó en el paso anterior. Reemplace el `targetArn` del archivo JSON por el ARN de la implementación principal y ejecute el siguiente comando para crear la implementación principal con esta nueva configuración.
**nota**  
Si crea una nueva revisión de implementación de la flota principal, reemplaza a todas las revisiones y subimplementaciones de la implementación principal. Para obtener más información, consulte [Revisar implementaciones](https://docs.aws.amazon.com/greengrass/v2/developerguide/revise-deployments.html).

   ```
   aws greengrassv2 create-deployment --cli-input-json file://deployment.json
   ```

   <a name="check-new-deployment-status"></a>La respuesta incluye un `deploymentId` que identifica esta implementación. Puede usar el ID de la implementación para comprobar el estado de la implementación. Para obtener más información, consulte [Comprobación del estado de la implementación](check-deployment-status.md#check-cloud-deployment-status).

# Revisión de las implementaciones
<a name="revise-deployments"></a>

Cada objeto o grupo de objetos de destino puede tener una implementación a la vez. Al crear una implementación para un destino que ya tiene una implementación, los componentes de software de la nueva implementación reemplazan a los de la implementación anterior. Si la nueva implementación no define un componente que definió la implementación anterior, el software AWS IoT Greengrass Core elimina ese componente de los dispositivos principales de destino. Puede revisar una implementación existente para no eliminar los componentes que se ejecutan en los dispositivos principales de una implementación anterior a un destino.

Para revisar una implementación, debe crear una implementación que comience con los mismos componentes y configuraciones que existían en una implementación anterior. Se utiliza la operación [CreateDeployment](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_CreateDeployment.html), que es la misma operación que se utiliza para [crear implementaciones](create-deployments.md).

**Cómo revisar una implementación (AWS CLI)**

1. <a name="revise-deployment-list-deployments-intro"></a>Ejecute el siguiente comando para enumerar las implementaciones del destino de implementación. Reemplace *targetArn* por el ARN del objeto de AWS IoT o el grupo de objetos de destino.

   ```
   aws greengrassv2 list-deployments --target-arn targetArn
   ```

   La respuesta contiene una lista con la implementación más reciente del objetivo. Copie el `deploymentId` de la respuesta para usarlo en el siguiente paso.
**nota**  <a name="revise-deployment-list-deployments-revision-note"></a>
También puede revisar una implementación que no sea la revisión más reciente del destino. Especifique el argumento `--history-filter ALL` para enumerar todas las implementaciones del destino. A continuación, copie el ID de la implementación que desee revisar.

1. <a name="revise-deployment-get-deployment"></a>Ejecute el siguiente comando para obtener los detalles de la implementación. Estos detalles incluyen los metadatos, los componentes y la configuración del trabajo. Reemplace *deploymentId* por el ID del paso anterior.

   ```
   aws greengrassv2 get-deployment --deployment-id deploymentId
   ```

   La respuesta contiene los detalles de la implementación.

1. Cree un archivo llamado `deployment.json` y copie la respuesta del comando anterior en el archivo.

1. Elimine los siguientes pares de clave-valor del objeto JSON en `deployment.json`:
   + `deploymentId`
   + `revisionId`
   + `iotJobId`
   + `iotJobArn`
   + `creationTimestamp`
   + `isLatestForTarget`
   + `deploymentStatus`

   La operación [CreateDeployment](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_CreateDeployment.html) espera una carga útil con la siguiente estructura.

   ```
   {
     "targetArn": "String",
     "components": Map of components,
     "deploymentPolicies": DeploymentPolicies,
     "iotJobConfiguration": DeploymentIoTJobConfiguration,
     "tags": Map of tags
   }
   ```

1. En `deployment.json`, realice una de las siguientes acciones:
   + Cambie el nombre de la implementación (`deploymentName`).
   + Cambie los componentes de la implementación (`components`).
   + Cambie las políticas de la implementación (`deploymentPolicies`).
   + Cambie la configuración del trabajo de la implementación (`iotJobConfiguration`).
   + Cambie las etiquetas de la implementación (`tags`).

   Para obtener más información acerca de cómo definir los detalles de la implementación, consulte [Crear implementaciones](create-deployments.md).

1. Ejecute el siguiente comando para crear la implementación de `deployment.json`.

   ```
   aws greengrassv2 create-deployment --cli-input-json file://deployment.json
   ```

   <a name="check-new-deployment-status"></a>La respuesta incluye un `deploymentId` que identifica esta implementación. Puede usar el ID de la implementación para comprobar el estado de la implementación. Para obtener más información, consulte [Comprobación del estado de la implementación](check-deployment-status.md#check-cloud-deployment-status).

# Cancelación de implementaciones
<a name="cancel-deployments"></a>

Puede cancelar una implementación activa para evitar que sus componentes de software se instalen en los dispositivos principales de AWS IoT Greengrass. Si cancela una implementación dirigida a un grupo de objetos, los dispositivos principales que agregue al grupo no recibirán esa implementación continua. Si un dispositivo principal ya ejecuta la implementación, no cambiará los componentes de ese dispositivo cuando cancele la implementación. Debe [crear una nueva implementación](create-deployments.md) o [revisar la implementación](revise-deployments.md) para modificar los componentes que se ejecutan en los dispositivos principales que recibieron la implementación cancelada.

**Cancelación de una implementación (AWS CLI)**

1. Ejecute el siguiente comando para encontrar el ID de la última revisión de implementación de un destino. La última revisión es la única implementación que puede estar activa para un destino, ya que las implementaciones anteriores se cancelan al crear una nueva revisión. Reemplace *targetArn* por el ARN del objeto de AWS IoT o el grupo de objetos de destino.

   ```
   aws greengrassv2 list-deployments --target-arn targetArn
   ```

   La respuesta contiene una lista con la implementación más reciente del objetivo. Copie el `deploymentId` de la respuesta para usarlo en el siguiente paso.

1. Ejecute el siguiente comando para cancelar la implementación. Reemplace *deploymentId* por el ID del paso anterior.

   ```
   aws greengrassv2 cancel-deployment --deployment-id deploymentId
   ```

   Si la operación es exitosa, el estado de la implementación cambia a `CANCELED`.

# Comprobación del estado de la implementación
<a name="check-deployment-status"></a>

Puede comprobar el estado de una implementación que ha creado en AWS IoT Greengrass. También puede comprobar el estado de los trabajos de AWS IoT que hacen la implementación en cada dispositivo principal. Mientras una implementación está activa, el estado del trabajo de AWS IoT es `IN_PROGRESS`. Tras crear una nueva revisión de una implementación, el estado del trabajo de AWS IoT de la revisión anterior cambia a `CANCELLED`.

**Topics**
+ [Comprobación del estado de la implementación](#check-cloud-deployment-status)
+ [Comprobación del estado de la implementación del dispositivo](#check-device-deployment-status)

## Comprobación del estado de la implementación
<a name="check-cloud-deployment-status"></a>

Puede comprobar el estado de una implementación que identifique por su objetivo o su ID.

**Comprobación del estado de la implementación por destino (AWS CLI)**
+ Ejecute el siguiente comando para recuperar el estado de la implementación más reciente por destino. Reemplace *targetArn* por el nombre de recurso de Amazon (ARN) del objeto o grupo de objetos de AWS IoT que la implementación tiene como destino.

  ```
  aws greengrassv2 list-deployments --target-arn targetArn
  ```

  La respuesta contiene una lista con la implementación más reciente del objetivo. Este objeto de implementación incluye el estado de la implementación.

**Comprobación del estado de la implementación por ID (AWS CLI)**
+ Ejecute el siguiente comando para recuperar el estado de la implementación. Reemplace *deploymentId* por el ID de la implementación que va a consultar.

  ```
  aws greengrassv2 get-deployment --deployment-id deploymentId
  ```

  La respuesta contiene el estado de la implementación.

## Comprobación del estado de la implementación del dispositivo
<a name="check-device-deployment-status"></a>

Puede comprobar el estado de un trabajo de implementación que se aplica a un dispositivo principal individual. También puede comprobar el estado de un trabajo de implementación para la implementación de un grupo de objetos.

**Comprobación de los estados del trabajo de implementación de un dispositivo principal (AWS CLI)**
+ Ejecute el siguiente comando para recuperar el estado de todos los trabajos de implementación para un dispositivo principal. Reemplace *coreDeviceName* por el nombre del dispositivo principal que se va a consultar.

  ```
  aws greengrassv2 list-effective-deployments --core-device-thing-name coreDeviceName
  ```

  La respuesta contiene la lista de trabajos de implementación para el dispositivo principal. Puede identificar el trabajo de una implementación por el `deploymentId` o `targetArn` del trabajo. Cada trabajo de implementación contiene el estado del trabajo en el dispositivo principal.

**Comprobación de los estados de implementación de un grupo de objetos (AWS CLI)**

1. Ejecute el siguiente comando para recuperar el ID de una implementación existente. Reemplace *targetArn* por el ARN del grupo de objetos de destino.

   ```
   aws greengrassv2 list-deployments --target-arn targetArn
   ```

   La respuesta contiene una lista con la implementación más reciente del objetivo. Copie el `deploymentId` de la respuesta para usarlo en el siguiente paso.
**nota**  
También puede enumerar una implementación que no sea la implementación más reciente del destino. Especifique el argumento `--history-filter ALL` para enumerar todas las implementaciones del destino. A continuación, copie el ID de la implementación cuyo estado desea comprobar.

1. Ejecute el siguiente comando para obtener los detalles de la implementación. Reemplace *deploymentID* por el ID del paso anterior.

   ```
   aws greengrassv2 get-deployment --deployment-id deploymentId
   ```

   La respuesta contiene información sobre la implementación. Copie el `iotJobId` de la respuesta para usarlo en el siguiente paso.

1. Ejecute el siguiente comando para describir la ejecución del trabajo de un dispositivo principal para la implementación. Reemplace *iotJobId* y *coreDeviceThingName* por el ID de trabajo del paso anterior y el dispositivo principal cuyo estado desea comprobar.

   ```
   aws iot describe-job-execution --job-id iotJobId --thing-name coreDeviceThingName
   ```

   La respuesta contiene el estado de la ejecución del trabajo de implementación del dispositivo principal y detalles sobre el estado. El `detailsMap` contiene la siguiente información:
   + `detailed-deployment-status`: el estado del resultado de la implementación, que puede ser uno de los siguientes valores:
     + `SUCCESSFUL`: la implementación se realizó correctamente.
     + `FAILED_NO_STATE_CHANGE`: la implementación falló mientras el dispositivo principal se preparaba para aplicarla.
     + `FAILED_ROLLBACK_NOT_REQUESTED`: la implementación falló y esta no especificó volver a una configuración de trabajo anterior, por lo que es posible que el dispositivo principal no funcione correctamente.
     + `FAILED_ROLLBACK_COMPLETE`: la implementación falló y el dispositivo principal se restableció correctamente a una configuración de trabajo anterior.
     + `FAILED_UNABLE_TO_ROLLBACK`: la implementación falló y el dispositivo principal no pudo volver a una configuración de trabajo anterior, por lo que es posible que el dispositivo principal no funcione correctamente.

     Si la implementación falló, compruebe el valor `deployment-failure-cause` y los archivos de registro del dispositivo principal para identificar el problema. Para obtener más información sobre cómo acceder a los archivos de registro del dispositivo principal, consulte [Supervisión de los registros de AWS IoT Greengrass](monitor-logs.md).
   + `deployment-failure-cause`: un mensaje de error que proporciona detalles adicionales sobre el motivo por el que se ha producido un error en la ejecución del trabajo.

   La respuesta tiene un aspecto similar a la del siguiente ejemplo.

   ```
   {
     "execution": {
       "jobId": "2cc2698a-5175-48bb-adf2-1dd345606ebd",
       "status": "FAILED",
       "statusDetails": {
         "detailsMap": {
           "deployment-failure-cause": "No local or cloud component version satisfies the requirements. Check whether the version constraints conflict and that the component exists in your Cuenta de AWS with a version that matches the version constraints. If the version constraints conflict, revise deployments to resolve the conflict. Component com.example.HelloWorld version constraints: LOCAL_DEPLOYMENT requires =1.0.0, thinggroup/MyGreengrassCoreGroup requires =1.0.1.",
           "detailed-deployment-status": "FAILED_NO_STATE_CHANGE"
         }
       },
       "thingArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore",
       "queuedAt": "2022-02-15T14:45:53.098000-08:00",
       "startedAt": "2022-02-15T14:46:05.670000-08:00",
       "lastUpdatedAt": "2022-02-15T14:46:20.892000-08:00",
       "executionNumber": 1,
       "versionNumber": 3
     }
   }
   ```