Actualizaciones de OTA para el software AWS IoT Greengrass Core - AWS IoT Greengrass

AWS IoT Greengrass Version 1 entró en la fase de vida útil prolongada el 30 de junio de 2023. Para obtener más información, consulte la política de mantenimiento de AWS IoT Greengrass V1 Después de esta fecha, AWS IoT Greengrass V1 no se publicarán actualizaciones que proporcionen funciones, mejoras, correcciones de errores o parches de seguridad. Los dispositivos que se ejecuten AWS IoT Greengrass V1 no se verán afectados y seguirán funcionando y conectándose a la nube. Le recomendamos encarecidamente que migre a AWS IoT Greengrass Version 2, ya que añade importantes funciones nuevas y es compatible con plataformas adicionales.

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.

Actualizaciones de OTA para el software AWS IoT Greengrass Core

El paquete del software AWS IoT Greengrass Core incluye un agente de actualización que puede realizar actualizaciones transparentes (OTA) del software AWS IoT Greengrass. Puede utilizar las actualizaciones OTA para instalar la última versión del software AWS IoT Greengrass Core o del software de agente de actualización OTA en uno o más núcleos. Con las actualizaciones OTA, no es necesario que los dispositivos del núcleo estén físicamente presentes.

Le recomendamos que utilice las actualizaciones OTA cuando sea posible. Proporcionan un mecanismo que puede utilizar para realizar un seguimiento del estado de la actualización y del historial de actualizaciones. Si se produce un error en la actualización, el agente de actualización de OTA vuelve a la versión de software anterior.

nota

Las actualizaciones OTA no son compatibles cuando se utiliza apt para instalar el software AWS IoT Greengrass Core. En estas instalaciones, le recomendamos que utilice apt para actualizar el software. Para obtener más información, consulte Instalación del software AWS IoT Greengrass Core desde un repositorio de APT.

Las actualizaciones OTA hacen que sea más eficiente:

  • Corrige vulnerabilidades de seguridad.

  • Solucionar problemas de estabilidad del software.

  • Implementar características nuevas o mejoradas.

Esta característica se integra con trabajos de AWS IoT.

Requisitos

Los siguientes requisitos se aplican a las actualizaciones OTA del software AWS IoT Greengrass.

  • El núcleo de Greengrass debe tener al menos 400 MB de espacio en disco disponible en el almacenamiento local. El agente de actualización de OTA requiere aproximadamente tres veces el requisito de uso de tiempo de ejecución del software AWS IoT Greengrass Core. Para obtener más información, consulte Cuotas de servicio para el núcleo de Greengrass en la Referencia general de Amazon Web Services.

  • El núcleo de Greengrass debe tener una conexión con la Nube de AWS.

  • El núcleo de Greengrass debe configurarse y aprovisionarse correctamente con certificados y claves para la autenticación con AWS IoT Core y AWS IoT Greengrass. Para obtener más información, consulte Certificados X.509.

  • El núcleo de Greengrass no se puede configurar para usar un proxy de red.

    nota

    A partir de la versión 1.9.3 de AWS IoT Greengrass, las actualizaciones OTA son compatibles con los núcleos que configuran el tráfico MQTT para utilizar el puerto 443 en lugar del puerto predeterminado 8883. Sin embargo, el agente de actualización de OTA no admite actualizaciones a través de un proxy de red. Para obtener más información, consulte Realizar la conexión en el puerto 443 o a través de un proxy de red.

  • No se puede habilitar el arranque de confianza en la partición que contiene el software AWS IoT Greengrass Core.

    nota

    Puede instalar y ejecutar el software AWS IoT Greengrass Core en una partición con arranque de confianza habilitado, pero las actualizaciones OTA no se admiten.

  • AWS IoT Greengrass debe tener permisos de lectura/escritura en la partición que contiene el software AWS IoT Greengrass Core.

  • Si utiliza un sistema init para administrar su núcleo de Greengrass, debe configurar las actualizaciones OTA para que se integren con el sistema init. Para obtener más información, consulte Integración con sistemas init.

  • Debe crear un rol que se utilice para prefirmar las URL de Amazon S3 para los artefactos de actualización del software AWS IoT Greengrass. Este rol de firmante permite a AWS IoT Core acceder a artefactos de actualización de software almacenados en Amazon S3 en su nombre. Para obtener más información, consulte Permisos de IAM para actualizaciones OTA.

Permisos de IAM para actualizaciones OTA

Cuando AWS IoT Greengrass lanza una nueva versión del software AWS IoT Greengrass Core, AWS IoT Greengrass actualiza los artefactos de software almacenados en Amazon S3 que se utilizan para la actualización OTA.

Su cuenta de Cuenta de AWS debe incluir un rol de firmante de URL de Amazon S3 que pueda utilizarse para acceder a estos artefactos. El rol debe tener una política de permisos que permita la acción s3:GetObject en los buckets de las Región de AWS de destino. El rol también debe tener una política de confianza que permita a iot.amazonaws.com asumir el rol como una entidad de confianza.

Política de permisos

Para los permisos de rol, puede utilizar la política administrada de AWS o crear una política personalizada.

  • Utilizar la política administrada de AWS

    La política administrada GreenGrassotaupdateartActAccess la proporciona AWS IoT Greengrass. Utilice esta política si desea permitir el acceso en todas las regiones de Amazon Web Services admitidas por AWS IoT Greengrass, tanto actuales como futuras.

  • Crear una política personalizada

    Debe crear una política personalizada si desea especificar explícitamente en qué regiones de Amazon Web Services se implementan sus núcleos. La siguiente política de ejemplo permite el acceso a actualizaciones de software de AWS IoT Greengrass en seis regiones.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccessToGreengrassOTAUpdateArtifacts", "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::us-east-1-greengrass-updates/*", "arn:aws:s3:::us-west-2-greengrass-updates/*", "arn:aws:s3:::ap-northeast-1-greengrass-updates/*", "arn:aws:s3:::ap-southeast-2-greengrass-updates/*", "arn:aws:s3:::eu-central-1-greengrass-updates/*", "arn:aws:s3:::eu-west-1-greengrass-updates/*" ] } ] }
Política de confianza

La política de confianza asociada al rol debe permitir la acción sts:AssumeRole y definir iot.amazonaws.com como principal. Esto permite a AWS IoT Core asumir el rol como una entidad de confianza. A continuación se muestra un ejemplo de documento de política.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowIotToAssumeRole", "Action": "sts:AssumeRole", "Principal": { "Service": "iot.amazonaws.com" }, "Effect": "Allow" } ] }

Además, el usuario que inicia una actualización OTA debe tener permisos para usar greengrass:CreateSoftwareUpdateJob y iot:CreateJob, y para usar iam:PassRole para transferir los permisos del rol de firmante. A continuación se muestra un ejemplo de política de IAM.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "greengrass:CreateSoftwareUpdateJob" ], "Effect": "Allow", "Resource": "*" }, { "Effect": "Allow", "Action": [ "iot:CreateJob" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn-of-s3-url-signer-role" } ] }

Consideraciones

Antes de lanzar una actualización OTA del software Greengrass Core, tenga en cuenta el impacto en los dispositivos de su grupo de Greengrass, tanto en el dispositivo del núcleo como en los dispositivos cliente conectados localmente a ese dispositivo del núcleo:

  • El dispositivo principal se cierra durante la actualización.

  • Las funciones Lambda que se ejecuten en el dispositivo principal se cerrarán. Si estas funciones escriben en recursos locales, es posible que dejen esos recursos en un estado incorrecto, salvo que se cierren correctamente.

  • Durante el tiempo de inactividad del dispositivo principal, se perderán todas sus conexiones con la Nube de AWS. Los mensajes enviados a través del dispositivo principal por los dispositivos cliente se perderán.

  • Las cachés de credenciales se perderán.

  • Las colas que mantienen los trabajos pendientes de las funciones Lambda se perderán.

  • Las funciones de Lambda de larga duración perderán la información de estado dinámico y se eliminarán todos los trabajos pendientes.

La siguiente información de estado se guarda durante una actualización OTA:

  • Configuración de Core

  • Configuración del grupo de Greengrass

  • Sombras locales

  • Registros de Greengrass

  • Registros del agente de actualización de OTA

Agente de actualización de OTA para Greengrass

El agente de actualización de OTA de Greengrass es el componente de software en el dispositivo, que se encarga de actualizar los trabajos creados e implementados en la nube. El agente de actualización de OTA se distribuye en el mismo paquete de software que el software AWS IoT Greengrass Core. El agente se encuentra en /greengrass-root/ota/ota_agent/ggc-ota. Escribe registros en /var/log/greengrass/ota/ggc_ota.txt.

nota

greengrass-root representa la ruta donde está instalado el software de AWS IoT Greengrass Core en su dispositivo. Normalmente, este es el directorio /greengrass.

Puede iniciar el agente de actualización de OTA mediante la ejecución manual del binario o integrándolo como parte de un script init, por ejemplo, un archivo del servicio systemd. Si ejecuta el binario manualmente, debe ejecutarse como raíz. Cuando se inicia, el agente de actualización de OTA escucha los trabajos de actualización del software AWS IoT Greengrass desde AWS IoT Core y los ejecuta secuencialmente. El agente de actualización de OTA ignora todos los demás tipos de trabajo de AWS IoT.

El siguiente extracto muestra un ejemplo de un archivo de servicio systemd para iniciar, detener y reiniciar el agente de actualización de OTA:

[Unit] Description=Greengrass OTA Daemon [Service] Type=forking Restart=on-failure ExecStart=/greengrass/ota/ota_agent/ggc-ota [Install] WantedBy=multi-user.target

Un núcleo que sea el destino de una actualización no debe ejecutar dos instancias del agente de actualización de OTA. Si lo hace, los dos agentes procesarán los mismos trabajos, lo que causará conflictos.

Integración con sistemas init

Durante una actualización OTA, el agente de actualización de OTA reinicia los binarios en el núcleo. Si los binarios se están ejecutando, esto puede provocar conflictos cuando un sistema init está supervisando el estado del software AWS IoT Greengrass Core o del agente durante la actualización. Para ayudarle a integrar el mecanismo de actualización OTA con sus estrategias de monitorización init, puede escribir scripts de shell que se ejecuten antes y después de una actualización. Por ejemplo, puede utilizar el script ggc_pre_update.sh para realizar copias de seguridad de los datos o detener procesos antes de que el dispositivo se apague.

Para indicar al agente de actualización de OTA que ejecute estos scripts, debe incluir la marca "managedRespawn" : true en el archivo config.json. Este ajuste se muestra en el siguiente fragmento:

{ "coreThing": { … }, "runtime": { … }, "managedRespawn": true … }

Regeneración administrada con actualizaciones OTA

Los siguientes requisitos se aplican a las actualizaciones de OTA con managedRespawn establecidas en true:

  • Los siguientes scripts de shell deben estar presentes en el directorio /greengrass-root/usr/scripts:

    • ggc_pre_update.sh

    • ggc_post_update.sh

    • ota_pre_update.sh

    • ota_post_update.sh

  • Los scripts deben devolver un código de devolución correcto.

  • Los scripts deben ser propiedad de la raíz y deben ser ejecutables desde la raíz únicamente.

  • El script ggc_pre_update.sh debe detener al daemon de Greengrass.

  • El script ggc_post_update.sh debe detener al daemon de Greengrass.

nota

Como el agente de actualización OTA gestiona su propio proceso, no es necesario que los scripts ota_pre_update.sh y ota_post_update.sh detengan ni inicien el servicio OTA.

El agente de actualización OTA ejecuta los scripts desde /greengrass-root/usr/scripts. El árbol de directorios debe ser similar al siguiente:

<greengrass_root> |-- certs |-- config | |-- config.json |-- ggc |-- usr/scripts | |-- ggc_pre_update.sh | |-- ggc_post_update.sh | |-- ota_pre_update.sh | |-- ota_post_update.sh |-- ota

Si managedRespawn se establece en true, el agente de actualización de OTA comprueba el directorio /greengrass-root/usr/scripts de los scripts antes y después de la actualización del software. Si los scripts no existen, se produce un error en la actualización. AWS IoT Greengrass no valida el contenido de estos scripts. Como práctica recomendada, compruebe que los scripts funcionan correctamente y emita los códigos de salida adecuados para detectar errores.

Para las actualizaciones OTA del software AWS IoT Greengrass Core:
  • Antes de iniciar la actualización, el agente ejecuta el script ggc_pre_update.sh. Utilice este script para los comandos que deben ejecutarse antes de que el agente de actualización OTA inicie la actualización del software de AWS IoT Greengrass Core, por ejemplo, para hacer copias de seguridad de los datos o detener cualquier proceso en ejecución. En el ejemplo siguiente se muestra una secuencia de comandos simple para detener el daemon Greengrass.

    #!/bin/bash set -euo pipefail systemctl stop greengrass
  • Después de completar la actualización, el agente ejecuta el script ggc_post_update.sh. Utilice este script para comandos que deban ejecutarse después de que el agente de actualización OTA inicie la actualización del software de AWS IoT Greengrass Core, como para reiniciar procesos. En el ejemplo siguiente se muestra una secuencia de comandos simple para iniciar el daemon Greengrass.

    #!/bin/bash set -euo pipefail systemctl start greengrass
Para las actualizaciones OTA del agente de actualización OTA:
  • Antes de iniciar la actualización, el agente ejecuta el script ota_pre_update.sh. Utilice este script para comandos que deban ejecutarse antes de que el agente de actualización OTA se actualice a sí mismo, como para realizar copias de seguridad de los datos o detener cualquier proceso en ejecución.

  • Después de completar la actualización, el agente ejecuta el script ota_post_update.sh. Utilice este script para comandos que deban ejecutarse después de que el agente de actualización OTA se actualice a sí mismo, como para reiniciar procesos.

nota

Si managedRespawn se establece en false, el agente de actualización de OTA no ejecuta los scripts.

Crear una actualización OTA

Siga estos pasos para realizar una actualización OTA del software AWS IoT Greengrass en uno o más núcleos:

  1. Asegúrese de que los núcleos cumplan los requisitos de las actualizaciones OTA.

    nota

    Si configuró un sistema init para administrar el software de AWS IoT Greengrass Core o el agente de actualización de OTA, compruebe lo siguiente en los núcleos:

    • El archivo config.json especifica "managedRespawn" : true.

    • El directorio /greengrass-root/usr/scripts contiene los siguientes scripts:

      • ggc_pre_update.sh

      • ggc_post_update.sh

      • ota_pre_update.sh

      • ota_post_update.sh

    Para obtener más información, consulte Integración con sistemas init.

  2. En un terminal de dispositivo del núcleo, inicie el agente de actualización de OTA.

    cd /greengrass-root/ota/ota_agent sudo ./ggc-ota
    nota

    greengrass-root representa la ruta donde está instalado el software de AWS IoT Greengrass Core en su dispositivo. Normalmente, este es el directorio /greengrass.

    No inicie varias instancias del agente de actualización de OTA en un núcleo porque podría causar conflictos.

  3. Utilice la API de AWS IoT Greengrass para crear un trabajo de actualización de software.

    1. Llamada a la API CreateSoftwareUpdateJob En este procedimiento de ejemplo, usamos comandos de la AWS CLI.

      El siguiente comando crea un trabajo que actualiza el software AWS IoT Greengrass Core en un núcleo. Reemplace los valores de ejemplo y, a continuación, ejecute el comando.

      Linux or macOS terminal
      aws greengrass create-software-update-job \ --update-targets-architecture x86_64 \ --update-targets [\"arn:aws:iot:region:123456789012:thing/myCoreDevice\"] \ --update-targets-operating-system ubuntu \ --software-to-update core \ --s3-url-signer-role arn:aws:iam::123456789012:role/myS3UrlSignerRole \ --update-agent-log-level WARN \ --amzn-client-token myClientToken1
      Windows command prompt
      aws greengrass create-software-update-job ^ --update-targets-architecture x86_64 ^ --update-targets [\"arn:aws:iot:region:123456789012:thing/myCoreDevice\"] ^ --update-targets-operating-system ubuntu ^ --software-to-update core ^ --s3-url-signer-role arn:aws:iam::123456789012:role/myS3UrlSignerRole ^ --update-agent-log-level WARN ^ --amzn-client-token myClientToken1

      El comando devuelve el siguiente resultado.

      { "IotJobId": "GreengrassUpdateJob_c3bd7f36-ee80-4d42-8321-a1da0EXAMPLE", "IotJobArn": "arn:aws:iot:region:123456789012:job/GreengrassUpdateJob_c3bd7f36-ee80-4d42-8321-a1da0EXAMPLE", "PlatformSoftwareVersion": "1.10.1" }
    2. Copie el IoTJobId de la respuesta.

    3. Llame a DescribeJob en la API de AWS IoT Core para ver el estado del trabajo. Reemplace el valor de ejemplo con su ID de trabajo y, a continuación, ejecute el comando.

      aws iot describe-job --job-id GreengrassUpdateJob_c3bd7f36-ee80-4d42-8321-a1da0EXAMPLE

      El comando devuelve un objeto de respuesta que contiene información sobre el trabajo, incluidos status y jobProcessDetails.

      { "job": { "jobArn": "arn:aws:iot:region:123456789012:job/GreengrassUpdateJob_c3bd7f36-ee80-4d42-8321-a1da0EXAMPLE", "jobId": "GreengrassUpdateJob_c3bd7f36-ee80-4d42-8321-a1da0EXAMPLE", "targetSelection": "SNAPSHOT", "status": "IN_PROGRESS", "targets": [ "arn:aws:iot:region:123456789012:thing/myCoreDevice" ], "description": "This job was created by Greengrass to update the Greengrass Cores in the targets with version 1.10.1 of the core software running on x86_64 architecture.", "presignedUrlConfig": { "roleArn": "arn:aws::iam::123456789012:role/myS3UrlSignerRole", "expiresInSec": 3600 }, "jobExecutionsRolloutConfig": {}, "createdAt": 1588718249.079, "lastUpdatedAt": 1588718253.419, "jobProcessDetails": { "numberOfCanceledThings": 0, "numberOfSucceededThings": 0, "numberOfFailedThings": 0, "numberOfRejectedThings": 0, "numberOfQueuedThings": 1, "numberOfInProgressThings": 0, "numberOfRemovedThings": 0, "numberOfTimedOutThings": 0 }, "timeoutConfig": {} } }

    Para obtener ayuda sobre la resolución de problemas, consulte Solución de problemas de AWS IoT Greengrass.

API CreateSoftwareUpdateJob

Puede utilizar la API de CreateSoftwareUpdateJob para actualizar el software de AWS IoT Greengrass Core o el agente de actualización de OTA en los dispositivos del núcleo. Esta API crea un trabajo de instantánea de AWS IoT que notifica a los dispositivos cuando hay una actualización disponible. Después de llamar a CreateSoftwareUpdateJob, puede utilizar otros comandos de trabajo de AWS IoT para realizar un seguimiento de la actualización de software. Para obtener más información, consulte Empleos en la Guía para desarrolladores de AWS IoT.

En el siguiente ejemplo se muestra cómo usar la AWS CLI para crear un trabajo que actualiza el software AWS IoT Greengrass Core en un dispositivo del núcleo:

aws greengrass create-software-update-job \ --update-targets-architecture x86_64 \ --update-targets [\"arn:aws:iot:region:123456789012:thing/myCoreDevice\"] \ --update-targets-operating-system ubuntu \ --software-to-update core \ --s3-url-signer-role arn:aws:iam::123456789012:role/myS3UrlSignerRole \ --update-agent-log-level WARN \ --amzn-client-token myClientToken1

El comando create-software-update-job devuelve una respuesta JSON que contiene el ID de trabajo, el ARN del trabajo y la versión de software instalada por la actualización:

{ "IotJobId": "GreengrassUpdateJob_c3bd7f36-ee80-4d42-8321-a1da0EXAMPLE", "IotJobArn": "arn:aws:iot:region:123456789012:job/GreengrassUpdateJob_c3bd7f36-ee80-4d42-8321-a1da0EXAMPLE", "PlatformSoftwareVersion": "1.9.2" }

Para ver los pasos que muestran cómo utilizar create-software-update-job para actualizar un dispositivo del núcleo, consulte Crear una actualización OTA.

El comando create-software-update-job tiene los parámetros siguientes:

--update-targets-architecture

La arquitectura del dispositivo del núcleo.

Valores válidos: armv7l, armv6l, x86_64 o aarch64

--update-targets

Los núcleos que se van a actualizar. La lista puede contener ARN de núcleos individuales y ARN de grupos de objetos cuyos miembros son núcleos. Para obtener más información acerca de los grupos de objetos, consulte Grupos de objetos estáticos en la Guía para desarrolladores de AWS IoT.

--update-targets-operating-system

El sistema operativo del dispositivo del núcleo.

Valores válidos: ubuntu, amazon_linux, raspbian o openwrt

--software-to-update

Especifica si el software del dispositivo principal o el software del agente de actualización de OTA deberían actualizarse.

Valores válidos: core o ota_agent

--s3-url-signer-role

El ARN del rol de IAM que se utiliza para prefirmar la URL de Amazon S3 que enlaza con los artefactos de actualización del software AWS IoT Greengrass. La política de permisos asociada al rol debe permitir la acción s3:GetObject en los buckets de las Región de AWS de destino. El rol también debe permitir a iot.amazonaws.com asumir el rol como una entidad de confianza. Para obtener más información, consulte Permisos de IAM para actualizaciones OTA.

--amzn-client-token

(Opcional) Un token de cliente utilizado para realizar solicitudes idempotentes. Proporcione un token exclusivo para evitar que se creen actualizaciones duplicadas debido a reintentos internos.

--update-agent-log-level

(Opcional) El nivel de registro para las instrucciones de registro generadas por el agente de actualización de OTA. El valor predeterminado es ERROR.

Valores válidos: NONE, TRACE, DEBUG, VERBOSE, INFO, WARN, ERROR o FATAL

nota

CreateSoftwareUpdateJob acepta solicitudes solo para las siguientes combinaciones de arquitectura y sistema operativo compatibles:

  • ubuntu/x86_64

  • ubuntu/aarch64

  • amazon_linux/x86_64

  • raspbian/armv7l

  • raspbian/armv6l

  • openwrt/aarch64

  • openwrt/armv7l