Procedimiento de imagen dorada - AWS Guía prescriptiva

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.

Procedimiento de imagen dorada

En las siguientes secciones se describe el procedimiento para crear una imagen dorada y grabarla en cada dispositivo de la línea de producción.

Crea tu dispositivo dorado

Paso 1: Instalar y aprovisionar Greengrass.

Instale el motor de ejecución de Greengrass Edge en su dispositivo dorado como lo haría normalmente y aprovisiónelo mediante el método de aprovisionamiento que prefiera.

Paso 2: Implemente sus componentes.

Desde la nube, despliegue los componentes y la configuración de su aplicación en su dispositivo principal, como lo haría normalmente.

Lee la imagen dorada desde tu dispositivo dorado

Ahora puedes hacer una instantánea de tu dispositivo dorado para crear una imagen dorada.

Paso 1: Apaga Greengrass.

Cierra el servicio Greengrass en tu dispositivo dorado. Por ejemplo:

sudo systemctl stop greengrass.service

Paso 2: Haga una instantánea del árbol de archivos de Greengrass.

Según el método dorado que prefiera, tome una instantánea completa o parcial del árbol de archivos de Greengrass e inclúyala en la imagen dorada.

Paso 3: Copia tus imágenes de Docker.

Si sus componentes utilizan imágenes de Docker como artefactos, tome una instantánea del registro de imágenes de Docker e inclúyala en la imagen dorada.

Como alternativa, puedes docker save crear un archivo de cada imagen de Docker y copiarlas desde el dispositivo dorado. Por ejemplo:

user@machine:~/environment $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE homeassistant/home-assistant 2024.6 2b4c9de733f1 9 days ago 1.6GB user@machine:~/environment $ docker save homeassistant/home-assistant | gzip > home-assistant.tar.gz

En general, este enfoque es más lento que añadir el registro de imágenes de Docker a la imagen dorada.

Escriba la imagen dorada en sus dispositivos de producción

Ahora tiene que escribir la imagen dorada en cada uno de los dispositivos de producción que pasen por la línea de fabricación. Los siguientes pasos normalmente se automatizarían mediante secuencias de comandos.

Paso 1: Escribe la imagen.

Escribe tu imagen dorada en el dispositivo de producción. Asegúrese de que incluye la instantánea completa o parcial del árbol de directorios de Greengrass y el registro de imágenes de Docker, según corresponda.

Paso 2: Cargue las imágenes de Docker.

Si ha optado por utilizar imágenes de Docker docker save para copiar artefactos de imagen de su dispositivo de origen, úselas docker load para cargarlas en su dispositivo de producción. Por ejemplo:

user@machine:~/environment $ docker load < home-assistant.tar.gz user@machine:~/environment $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE homeassistant/home-assistant 2024.6 2b4c9de733f1 9 days ago 1.6GB

En general, este método es más lento que añadir el registro de imágenes de Docker a la imagen dorada.

Paso 3: Añadir credenciales.

Si su dispositivo no utiliza el aprovisionamiento de flotas, instale el certificado X.509 y la clave privada exclusivos para el dispositivo de producción, sustituyendo las credenciales de oro del dispositivo. El método exacto para lograrlo depende de si utilizas un módulo de seguridad de hardware (HSM) y tu infraestructura de clave pública (PKI) específica.

Configure sus dispositivos de producción

Después de escribir la imagen dorada, debe configurar cada dispositivo de producción. Esta configuración depende de si utiliza el método de instantáneas de Greengrass total o parcial. Los pasos deben automatizarse.

Método de instantánea completo de Greengrass

importante

Siga estos pasos solo si utiliza el método completo de instantáneas de Greengrass.

Paso 1: Edite la configuración.

Edite el archivo config/effectiveConfig.yaml. Por ejemplo:

sudo nano /greengrass/v2/config/effectiveConfig.yaml

Paso 2: Establece el nombre de la cosa.

Las acciones necesarias para establecer el nombre del nuevo dispositivo de producción dependen de si se utiliza el aprovisionamiento de flotas. Realice las modificaciones correctas para su caso de uso.

Si no utiliza el aprovisionamiento de flotas, puede configurar el nombre del dispositivo de producción editando la thingName propiedad para sustituir el nombre original del dispositivo por el nombre del dispositivo de producción. Por ejemplo:

system: certificateFilePath: "/greengrass/v2/thingCert.crt" privateKeyPath: "/greengrass/v2/privKey.key" rootCaPath: "/greengrass/v2/rootCA.pem" rootpath: "/greengrass/v2" thingName: "ProductionDeviceThingName1"

Si utilizas el aprovisionamiento de flotas, primero debes borrar parte de la configuración básica del dispositivo para asegurarte de que el complemento de aprovisionamiento de flotas se ejecute en el dispositivo de producción. Para ello, sustituya el nombre dorado del dispositivo en la thingName propiedad por una cadena vacía. Por ejemplo:

system: certificateFilePath: "/greengrass/v2/thingCert.crt" privateKeyPath: "/greengrass/v2/privKey.key" rootCaPath: "/greengrass/v2/rootCA.pem" rootpath: "/greengrass/v2" thingName: ""

Además, debe añadir la configuración del complemento de aprovisionamiento de flotas a la services propiedad y pasar el nombre del dispositivo de producción como una propiedad dentro de la templateParameters propiedad. En el siguiente ejemplo, se supone que la plantilla de aprovisionamiento de flotas tiene un parámetro denominado yThingName, por lo tanto, hay una ThingName propiedad dentro templateParameters de la configuración del complemento:

system: certificateFilePath: "/greengrass/v2/thingCert.crt" privateKeyPath: "/greengrass/v2/privKey.key" rootCaPath: "/greengrass/v2/rootCA.pem" rootpath: "/greengrass/v2" thingName: "" services: aws.greengrass.FleetProvisioningByClaim: configuration: rootPath: "/greengrass/v2" awsRegion: "us-east-1" iotDataEndpoint: "<prefix>-ats.iot.us-east-1.amazonaws.com" iotCredentialEndpoint: "<prefix>.credentials.iot.us-east-1.amazonaws.com" iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias" provisioningTemplate: "GreengrassFleetProvisioningTemplate" claimCertificatePath: "/greengrass/v2/claim-certs/claim.pem.crt" claimCertificatePrivateKeyPath: "/greengrass/v2/claim-certs/claim.private.pem.key" rootCaPath: "/greengrass/v2/rootCA.pem" templateParameters: ThingName: "ProductionDeviceThingName1"

Es posible que tu caso de uso requiera parámetros de configuración del complemento de aprovisionamiento de flotas diferentes a los que se muestran aquí. Para obtener más información, consulta Cómo configurar el complemento de aprovisionamiento de AWS IoT flotas en la AWS IoT Greengrass documentación.

Paso 3: Actualiza los nombres de las cosas interpolados.

Si tiene algún componente que utilice la variable de iot:thingName receta para interpolar el nombre de la cosa, es probable que tenga instrucciones de control de acceso en las que se haya interpolado el nombre dorado de la cosa del dispositivo. Por ejemplo, en el caso del componente comunitario Certificate Rotator:

services: aws.greengrass.labs.CertificateRotator: componentType: "GENERIC" configuration: accessControl: aws.greengrass.ipc.mqttproxy: aws.greengrass.labs.CertificateRotator:mqttproxy:1: operations: - "aws.greengrass#PublishToIoTCore" policyDescription: "Allows access to publish to relevant topics" resources: - "$aws/things/GoldenDeviceThingName/jobs/+/get" - "$aws/things/GoldenDeviceThingName/jobs/+/update" - "awslabs/things/GoldenDeviceThingName/certificate/create" - "awslabs/things/GoldenDeviceThingName/certificate/commit" aws.greengrass.labs.CertificateRotator:mqttproxy:2: operations: - "aws.greengrass#SubscribeToIoTCore" policyDescription: "Allows access to subscribe to relevant topics" resources: - "$aws/things/GoldenDeviceThingName/jobs/notify-next" - "$aws/things/GoldenDeviceThingName/jobs/+/get/accepted" - "$aws/things/GoldenDeviceThingName/jobs/+/get/rejected" - "$aws/things/GoldenDeviceThingName/jobs/+/update/accepted" - "$aws/things/GoldenDeviceThingName/jobs/+/update/rejected" - "awslabs/things/GoldenDeviceThingName/certificate/create/accepted" - "awslabs/things/GoldenDeviceThingName/certificate/create/rejected" - "awslabs/things/GoldenDeviceThingName/certificate/commit/accepted" - "awslabs/things/GoldenDeviceThingName/certificate/commit/rejected" keyAlgorithm: "RSA-2048" signingAlgorithm: "SHA256WITHRSA"

En todos estos casos, debe reemplazar todas las instancias del nombre original del dispositivo por el nombre del dispositivo de producción.

Paso 4: Elimine los secretos del dispositivo dorado.

Examine effectiveConfig.yaml los secretos cifrados que haya almacenado su dispositivo dorado. Se almacenarán en la configuración de los componentes del administrador de secretos. Por ejemplo:

aws.greengrass.SecretManager: componentType: "PLUGIN" configuration: cloudSecrets: - arn: "arn:aws:secretsmanager:us-east-1:111122223333:secret:greengrass-home-assistant-KIzJfZ" dependencies: - "aws.greengrass.Nucleus:SOFT" lifecycle: {} runtime: secretResponse: "{\"secrets\":[{\"arn\":\"arn:aws:secretsmanager:us-east-1:111122223333:secret:greengrass-home-assistant-KIzJfZ\"\ ,\"name\":\"greengrass-home-assistant\",\"versionId\":\"8e481177-9250-4458-9f1f-3690d28e4ae9\"\ ,\"encryptedSecretString\":\"AgV4Rpc9 ... MYeVALYQ==\"\ ,\"versionStages\":[\"AWSCURRENT\"],\"createdDate\":1660648425915}]}" version: "2.1.8"

Debe eliminar este secreto para asegurarse de que su dispositivo de producción no intente descifrar un secreto que haya sido cifrado por el dispositivo dorado. Elimine la secretResponse propiedad. Por ejemplo:

aws.greengrass.SecretManager: componentType: "PLUGIN" configuration: cloudSecrets: - arn: "arn:aws:secretsmanager:us-east-1:111122223333:secret:greengrass-home-assistant-KIzJfZ" dependencies: - "aws.greengrass.Nucleus:SOFT" lifecycle: {} runtime: version: "2.1.8"

Paso 5: Aplicar la configuración modificada.

Aplique la configuración modificada para actualizarlaconfig/config.tlog. Por ejemplo:

sudo java -Droot="/greengrass/v2" \ -jar /greengrass/v2/alts/current/distro/lib/Greengrass.jar \ --start false \ --init-config /greengrass/v2/config/effectiveConfig.yaml

Método de instantánea parcial de Greengrass

La configuración de sus dispositivos de producción es trivial si utiliza el método de instantáneas parciales de Greengrass. El procedimiento es idéntico al procedimiento normal de configuración parcial de bootstrap al instalar Greengrass, excepto que la configuración inicial se pasa al motor de ejecución de Greengrass que ya está instalado.

importante

Siga estos pasos solo si utiliza el método de instantánea parcial de Greengrass.

Paso 1: Cree la configuración.

La configuración parcial requerida depende de si utiliza el aprovisionamiento de flotas. Asegúrese de realizar las modificaciones correctas para su caso de uso.

Si no utilizas el aprovisionamiento de flotas, puedes crear un archivo de configuración parcial que no incluya ninguna configuración para el complemento de aprovisionamiento de flotas. Defina la thingName propiedad con el nombre del dispositivo de producción. Por ejemplo:

system: certificateFilePath: "/greengrass/v2/device.pem.crt" privateKeyPath: "/greengrass/v2/private.pem.key" rootCaPath: "/greengrass/v2/AmazonRootCA1.pem" rootpath: "/greengrass/v2" thingName: "ProductionDeviceThingName1" services: aws.greengrass.Nucleus: componentType: "NUCLEUS" version: "2.12.6" configuration: awsRegion: "us-east-1" iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias" iotDataEndpoint: "<prefix>-ats.iot.us-east-1.amazonaws.com" iotCredEndpoint: "<prefix>.credentials.iot.us-east-1.amazonaws.com"

Si utiliza el aprovisionamiento de flotas, la configuración parcial debe incluir la configuración del complemento de aprovisionamiento de flotas. Esta configuración debe incluir el nombre del dispositivo de producción como una propiedad dentro de la templateParameters propiedad. En el siguiente ejemplo, se supone que la plantilla de aprovisionamiento de flota tiene un parámetro denominado yThingName, por lo tanto, hay una ThingName propiedad dentro templateParameters de la configuración del complemento:

services: aws.greengrass.Nucleus: version: "2.12.6" aws.greengrass.FleetProvisioningByClaim: configuration: rootPath: "/greengrass/v2" awsRegion: "us-east-1" iotDataEndpoint: "<prefix>-ats.iot.us-east-1.amazonaws.com" iotCredentialEndpoint: "<prefix>.credentials.iot.us-east-1.amazonaws.com" iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias" provisioningTemplate: "GreengrassFleetProvisioningTemplate" claimCertificatePath: "/greengrass/v2/claim-certs/claim.pem.crt" claimCertificatePrivateKeyPath: "/greengrass/v2/claim-certs/claim.private.pem.key" rootCaPath: "/greengrass/v2/AmazonRootCA1.pem" templateParameters: ThingName: "ProductionDeviceThingName1"

Es posible que tu caso de uso requiera parámetros de configuración del complemento de aprovisionamiento de flotas diferentes a los que se muestran aquí. Para obtener más información, consulta Cómo configurar el complemento de aprovisionamiento de AWS IoT flotas en la AWS IoT Greengrass documentación.

Paso 2: Aplica la configuración.

Aplique la configuración para crearconfig/config.tlog. Por ejemplo:

sudo java -Droot="/greengrass/v2" \ -jar /greengrass/v2/alts/current/distro/lib/Greengrass.jar \ --start false \ --init-config config.yaml