Crear implementaciones - AWS IoT Greengrass

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.

Crear implementaciones

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 y Grupos de objetos dinámicos 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.

aviso

La operación CreateDeployment 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 para comprobar si el destino de la implementación ya tiene una implementación existente. A continuación, use la operación GetDeployment 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" }
  2. Compruebe si el objetivo de la implementación tiene una implementación existente que desee revisar. Haga lo siguiente:

    1. 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 Paso 3. De lo contrario, copie el deploymentId de la respuesta para usarlo en el paso siguiente.

      nota

      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.

    2. 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.

    3. 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.

  3. (Opcional) Defina un nombre para la implementación. Reemplace deploymentName con el nombre de la implementación.

    { "targetArn": "targetArn", "deploymentName": "deploymentName" }
  4. 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 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.

      • 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.

    • 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.

      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.

      • 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.

        Esta característica está disponible para la versión 2.5.0 y versiones posteriores del componente núcleo de Greengrass.

      • 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.

        Puede especificar cualquiera de las siguientes opciones:

        • cpus: 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 principal de AWS IoT Greengrass no limita el uso de la CPU del componente.

        • memory: 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. AWS IoT Greengrass actualmente no admite esta función en los dispositivos principales de Windows.

     

    ejemplo 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\"}" } } } }
    ejemplo 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).

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

    3. 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\"]}" } } } }
  5. (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 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. Si el componente no responde en este periodo, la implementación continúa en el dispositivo principal.

        El valor predeterminado es de 60 segundos.

    2. (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 para suscribirse a las notificaciones de sus propias actualizaciones de configuración. A continuación, los componentes pueden usar la operación IPC 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.

    3. (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" } }
  6. (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 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 } } }
  7. (Opcional) Agregue etiquetas (tags) para la implementación. Para obtener más información, consulte Etiquetar los recursos de AWS IoT Greengrass Version 2.

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

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

    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.