

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Procedura Golden Image
<a name="procedure"></a>

Le sezioni seguenti descrivono la procedura per creare un'immagine dorata e scriverla su ogni dispositivo della linea di produzione.

## Crea il tuo dispositivo dorato
<a name="create"></a>

**Fase 1: Installazione e fornitura di Greengrass.**

[Installa il runtime Greengrass edge](https://docs.aws.amazon.com/greengrass/v2/developerguide/install-greengrass-core-v2.html) sul tuo dispositivo golden come faresti normalmente e esegui il provisioning utilizzando il tuo metodo di [provisioning](https://docs.aws.amazon.com/iot/latest/developerguide/iot-provision.html) preferito.

**Fase 2: Implementa i componenti.**

Dal cloud, distribuisci i componenti e la configurazione dell'applicazione sul tuo dispositivo preferito, come faresti normalmente.

## Leggi l'immagine dorata dal tuo dispositivo dorato
<a name="read"></a>

Ora puoi scattare un'istantanea del tuo dispositivo dorato per creare un'immagine dorata.

**Passaggio 1: chiudere Greengrass.**

Disattiva il servizio Greengrass sul tuo dispositivo dorato. Per esempio:

```
sudo systemctl stop greengrass.service
```

**Passaggio 2: crea un'istantanea dell'albero dei file Greengrass.**

A seconda del metodo preferito, scatta un'istantanea completa o parziale dell'albero dei file Greengrass e includila nell'immagine dorata.

**Passaggio 3: Copia le tue immagini Docker.**

Se i tuoi componenti utilizzano immagini Docker come artefatti, scatta un'istantanea del registro delle immagini Docker e includila nell'immagine dorata.

In alternativa, puoi usare `docker save` per creare un archivio di ogni immagine Docker e copiarla dal dispositivo dorato. Per esempio:

```
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
```

In generale, questo approccio è più lento rispetto all'aggiunta del registro delle immagini Docker all'immagine dorata.

## Scrivi l'immagine dorata sui tuoi dispositivi di produzione
<a name="write"></a>

Ora dovete scrivere l'immagine dorata su ciascuno dei dispositivi di produzione che compongono la linea di produzione. I passaggi seguenti vengono in genere automatizzati utilizzando script.

**Passaggio 1: scrivere l'immagine.**

Scrivi la tua immagine dorata sul dispositivo di produzione. Assicurati che includa l'istantanea completa o parziale dell'albero di directory Greengrass e del registro delle immagini Docker, a seconda dei casi.

**Passaggio 2: carica le immagini Docker.**

Se hai scelto di utilizzare `docker save` per copiare gli artefatti delle immagini Docker dal tuo dispositivo dorato, utilizza `docker load` per caricare queste immagini sul tuo dispositivo di produzione. Per esempio:

```
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
```

In generale, questo approccio è più lento rispetto all'aggiunta del registro delle immagini Docker all'immagine dorata.

**Fase 3: Aggiungere le credenziali.**

Se il dispositivo non utilizza il [provisioning del parco veicoli](https://docs.aws.amazon.com/greengrass/v2/developerguide/fleet-provisioning.html), installa il certificato X.509 univoco e la chiave privata per il dispositivo di produzione, sostituendo le credenziali dorate del dispositivo. Il metodo esatto per raggiungere questo obiettivo dipende dal fatto che si utilizzi un [modulo di sicurezza hardware (HSM)](https://docs.aws.amazon.com/greengrass/v2/developerguide/hardware-security.html) e una particolare infrastruttura a chiave pubblica (PKI).

## Configura i tuoi dispositivi di produzione
<a name="configure"></a>

Dopo aver scritto l'immagine dorata, devi configurare ogni dispositivo di produzione. Questa configurazione dipende dall'utilizzo del metodo snapshot Greengrass completo o parziale. I passaggi devono essere automatizzati.

### Metodo snapshot Greengrass completo
<a name="full-snapshot"></a>

**Importante**  
Segui questi passaggi solo se utilizzi il metodo snapshot Greengrass **completo**.

**Passaggio 1: modifica la configurazione.**

Modificare il file `config/effectiveConfig.yaml`. Per esempio:

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

**Fase 2: Impostare il nome dell'oggetto.**

Le azioni necessarie per impostare il nome dell'oggetto del nuovo dispositivo di produzione dipendono dal fatto che si stia utilizzando il provisioning del parco veicoli. Apporta le modifiche corrette per il tuo caso d'uso.

Se non utilizzate il fleet provisioning, potete impostare il nome dell'oggetto del dispositivo di produzione modificando la `thingName` proprietà in modo da sostituire il golden device thing name con il nome dell'oggetto del dispositivo di produzione. Per esempio:

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

Se utilizzate il fleet provisioning, dovete prima cancellare parte della configurazione del golden device per assicurarvi che il [plug-in fleet provisioning](https://github.com/aws-greengrass/aws-greengrass-fleet-provisioning-by-claim) venga eseguito sul dispositivo di produzione. È possibile farlo sostituendo il golden device thing name nella `thingName` proprietà con una stringa vuota. Per esempio:

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

Inoltre, è necessario aggiungere la configurazione del plug-in fleet provisioning alla `services` proprietà e passare il nome dell'oggetto del dispositivo di produzione come proprietà all'interno della `templateParameters` proprietà. L'esempio seguente presuppone che il [modello di fleet provisioning](https://docs.aws.amazon.com/iot/latest/developerguide/provision-template.html#fleet-provision-template) abbia un parametro denominato `ThingName` e che pertanto esista una `ThingName` proprietà all'interno della configurazione `templateParameters` del plug-in:

```
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"
```

Il tuo caso d'uso potrebbe richiedere alcuni parametri di configurazione del plug-in Fleet Provisioning diversi da quelli mostrati qui. Per ulteriori informazioni, consulta [Configurare il plug-in AWS IoT Fleet Provisioning](https://docs.aws.amazon.com/greengrass/v2/developerguide/fleet-provisioning-configuration.html) nella AWS IoT Greengrass documentazione.

**Fase 3: Aggiornare i nomi degli oggetti interpolati.**

Se avete dei componenti che utilizzano la [variabile `iot:thingName` recipe](https://docs.aws.amazon.com/greengrass/v2/developerguide/component-recipe-reference.html#recipe-variables) per [interpolare](https://docs.aws.amazon.com/greengrass/v2/developerguide/greengrass-nucleus-component.html#greengrass-nucleus-component-configuration-interpolate-component-configuration) il nome dell'oggetto, probabilmente avrete istruzioni di controllo degli accessi in cui è stato interpolato il golden device thing name. Ad esempio, nel caso del componente della community [Certificate](https://github.com/awslabs/aws-greengrass-labs-certificate-rotator) 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"
```

In tutti questi casi, è necessario sostituire tutte le istanze del golden device thing name con il nome dell'oggetto del dispositivo di produzione.

**Passaggio 4: Rimuovi i segreti del dispositivo dorato.**

`effectiveConfig.yaml`Cerca eventuali segreti crittografati archiviati dal tuo dispositivo dorato. Questi verranno archiviati nella configurazione del componente Secret Manager. Per esempio:

```
  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"
```

È necessario eliminare questo segreto per assicurarsi che il dispositivo di produzione non tenti di decrittografare un segreto che è stato crittografato dal dispositivo dorato. Eliminare la proprietà. `secretResponse` Per esempio:

```
  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"
```

**Passaggio 5: applicare la configurazione modificata.**

Applica la configurazione modificata, per aggiornarla. `config/config.tlog` Per esempio:

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

### Metodo snapshot Greengrass parziale
<a name="partial-snapshot"></a>

La configurazione dei dispositivi di produzione è semplice se si utilizza il metodo snapshot Greengrass parziale. La procedura è identica alla normale procedura di configurazione parziale di bootstrap quando si [installa Greengrass](https://docs.aws.amazon.com/greengrass/v2/developerguide/install-greengrass-core-v2.html), tranne per il fatto che la configurazione iniziale viene passata al runtime di Greengrass che è già installato.

**Importante**  
Segui questi passaggi solo se utilizzi il metodo snapshot Greengrass **parziale**.

**Fase 1: Creare la configurazione.**

La configurazione parziale richiesta dipende dal fatto che tu stia utilizzando il provisioning della flotta. Assicurati di apportare le modifiche corrette per il tuo caso d'uso.

Se non utilizzi il provisioning della flotta, puoi creare un file di configurazione parziale che non includa alcuna configurazione per il plug-in di provisioning della flotta. Imposta la `thingName` proprietà sul nome dell'oggetto del dispositivo di produzione. Per esempio:

```
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"
```

Se si utilizza il provisioning della flotta, la configurazione parziale dovrebbe includere la configurazione per il plug-in di [provisioning della flotta](https://github.com/aws-greengrass/aws-greengrass-fleet-provisioning-by-claim). Questa configurazione dovrebbe passare il nome dell'oggetto del dispositivo di produzione come proprietà all'interno della `templateParameters` proprietà. L'esempio seguente presuppone che il [modello di fleet provisioning](https://docs.aws.amazon.com/iot/latest/developerguide/provision-template.html#fleet-provision-template) abbia un parametro denominato `ThingName` e che pertanto esista una `ThingName` proprietà all'interno della configurazione `templateParameters` del plug-in:

```
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"
```

Il tuo caso d'uso potrebbe richiedere parametri di configurazione del plug-in Fleet Provisioning diversi da quelli mostrati qui. Per ulteriori informazioni, consulta [Configurare il plug-in AWS IoT Fleet Provisioning](https://docs.aws.amazon.com/greengrass/v2/developerguide/fleet-provisioning-configuration.html) nella AWS IoT Greengrass documentazione.

**Passaggio 2: applicare la configurazione.**

Applica la configurazione da creare`config/config.tlog`. Per esempio:

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