

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

# Creare distribuzione
<a name="create-deployments"></a>

È possibile creare una distribuzione destinata a un oggetto o a un gruppo di oggetti.

Quando si crea una distribuzione, si configurano i componenti software da distribuire e il modo in cui il processo di distribuzione viene distribuito sui dispositivi di destinazione. È possibile definire la distribuzione nel file JSON fornito a. AWS CLI

L'obiettivo di distribuzione determina i dispositivi su cui si desidera eseguire i componenti. Per eseguire la distribuzione su un dispositivo principale, specifica un elemento. Per eseguire la distribuzione su più dispositivi principali, specificate un gruppo di oggetti che includa tali dispositivi. Per ulteriori informazioni su come configurare i gruppi di oggetti, vedere Thing group [statici e Thing group](https://docs.aws.amazon.com/iot/latest/developerguide/thing-groups.html) [dinamici](https://docs.aws.amazon.com/iot/latest/developerguide/dynamic-thing-groups.html) nella *AWS IoT Developer Guide*.

Segui i passaggi di questa sezione per creare una distribuzione su un target. Per ulteriori informazioni su come aggiornare i componenti software su una destinazione con una distribuzione, consulta[Rivedi le distribuzioni](revise-deployments.md).

**avvertimento**  
L'[CreateDeployment](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_CreateDeployment.html)operazione può disinstallare componenti dai dispositivi principali. Se un componente è presente nella distribuzione precedente e non in quella nuova, il dispositivo principale disinstalla quel componente. Per evitare la disinstallazione dei componenti, utilizza innanzitutto l'[ListDeployments](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_ListDeployments.html)operazione per verificare se la destinazione per la distribuzione ha già una distribuzione esistente. Quindi, utilizza l'[GetDeployment](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_GetDeployment.html)operazione per iniziare da quella distribuzione esistente quando ne crei una nuova.

**Per creare una distribuzione (AWS CLI)**

1. Create un file chiamato`deployment.json`, quindi copiate il seguente oggetto JSON nel file. Sostituisci {{targetArn}} con l'ARN dell' AWS IoT oggetto o del gruppo di oggetti da utilizzare come target per la distribuzione. L'oggetto e il gruppo di ARNs oggetti hanno il seguente formato:
   + Oggetto: `arn:aws:iot:{{region}}:{{account-id}}:thing/{{thingName}}`
   + Gruppo di oggetti: `arn:aws:iot:{{region}}:{{account-id}}:thinggroup/{{thingGroupName}}`

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

1. Controlla se il target di distribuzione ha una distribuzione esistente che desideri modificare. Esegui questa operazione:

   1. <a name="revise-deployment-list-deployments-intro"></a>Esegui il comando seguente per elencare le distribuzioni per l'obiettivo di distribuzione. Sostituisci {{targetArn}} con l'ARN dell' AWS IoT oggetto o del gruppo di oggetti di destinazione.

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

      La risposta contiene un elenco con la distribuzione più recente per l'obiettivo. Se la risposta è vuota, la destinazione non ha una distribuzione esistente e puoi saltare a[Step 3](#create-deployment-define-name-step). Altrimenti, copia il `deploymentId` codice dalla risposta da utilizzare nel passaggio successivo.
**Nota**  <a name="revise-deployment-list-deployments-revision-note"></a>
Puoi anche modificare una distribuzione diversa dalla revisione più recente per la destinazione. Specificare l'`--history-filter ALL`argomento per elencare tutte le distribuzioni per l'obiettivo. Quindi, copia l'ID della distribuzione che desideri modificare.

   1. <a name="revise-deployment-get-deployment"></a>Esegui il comando seguente per ottenere i dettagli della distribuzione. Questi dettagli includono metadati, componenti e configurazione del processo. Sostituisci {{deploymentId}} con l'ID del passaggio precedente.

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

      La risposta contiene i dettagli della distribuzione.

   1. Copia una delle seguenti coppie chiave-valore dalla risposta del comando precedente in. `deployment.json` È possibile modificare questi valori per la nuova distribuzione.
      + `deploymentName`— Il nome della distribuzione.
      + `components`— I componenti della distribuzione. Per disinstallare un componente, rimuovilo da questo oggetto.
      + `deploymentPolicies`— Le politiche della distribuzione.
      + `iotJobConfiguration`— La configurazione del lavoro della distribuzione.
      + `tags`— I tag della distribuzione.

1. <a name="create-deployment-define-name-step"></a>(Facoltativo) Definire un nome per la distribuzione. Sostituisci {{deploymentName}} con il nome della distribuzione.

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

1. Aggiungi ogni componente per distribuire i dispositivi di destinazione. A tale scopo, aggiungete coppie chiave-valore all'`components`oggetto, dove la chiave è il nome del componente e il valore è un oggetto che contiene i dettagli di quel componente. Specificate i seguenti dettagli per ogni componente che aggiungete:
   + `version`— La versione del componente da distribuire.
   + `configurationUpdate`— L'[aggiornamento della configurazione](update-component-configurations.md) da distribuire. L'aggiornamento è un'operazione di patch che modifica la configurazione esistente del componente su ciascun dispositivo di destinazione o la configurazione predefinita del componente se non esiste sul dispositivo di destinazione. È possibile specificare i seguenti aggiornamenti di configurazione:
     + Reset updates (`reset`) — (Facoltativo) Un elenco di puntatori JSON che definiscono i valori di configurazione da ripristinare ai valori predefiniti sul dispositivo di destinazione. Il software AWS IoT Greengrass Core applica gli aggiornamenti di ripristino prima di applicare gli aggiornamenti di fusione. Per ulteriori informazioni, consulta [Reimposta gli aggiornamenti](update-component-configurations.md#reset-configuration-update).
     + Merge updates (`merge`) - (Facoltativo) Un documento JSON che definisce i valori di configurazione da unire al dispositivo di destinazione. È necessario serializzare il documento JSON come stringa. Per ulteriori informazioni, consulta [Unisci gli aggiornamenti](update-component-configurations.md#merge-configuration-update).
   + <a name="component-run-with-config"></a>`runWith`— (Facoltativo) Le opzioni di processo del sistema utilizzate dal software AWS IoT Greengrass Core per eseguire i processi di questo componente sul dispositivo principale. Se omettete un parametro nell'`runWith`oggetto, il software AWS IoT Greengrass Core utilizza i valori predefiniti configurati sul componente [Greengrass](greengrass-nucleus-component.md) nucleus.

     È possibile specificare una delle seguenti opzioni:
     + `posixUser`— L'utente e, facoltativamente, il gruppo del sistema POSIX da utilizzare per eseguire questo componente sui dispositivi core Linux. L'utente e il gruppo, se specificato, devono esistere su ogni dispositivo principale Linux. Specifica l'utente e il gruppo separati da due punti (`:`) nel seguente formato: `user:group`. Il gruppo è facoltativo. Se non si specifica un gruppo, il software AWS IoT Greengrass Core utilizza il gruppo primario per l'utente. Per ulteriori informazioni, consulta [Configurare l'utente che esegue i componenti](configure-greengrass-core-v2.md#configure-component-user).
     + `windowsUser`— L'utente Windows da utilizzare per eseguire questo componente sui dispositivi Windows principali. L'utente deve esistere su ogni dispositivo Windows principale e il nome e la password devono essere memorizzati nell'istanza di Credentials Manager dell' LocalSystem account. Per ulteriori informazioni, consulta [Configurare l'utente che esegue i componenti](configure-greengrass-core-v2.md#configure-component-user).

       Questa funzionalità è disponibile per la versione 2.5.0 e successive del componente [Greengrass](greengrass-nucleus-component.md) nucleus.
     + `systemResourceLimits`— I limiti delle risorse di sistema da applicare ai processi di questo componente. È possibile applicare limiti di risorse di sistema a componenti Lambda generici e non containerizzati. Per ulteriori informazioni, consulta [Configura i limiti delle risorse di sistema per i componenti](configure-greengrass-core-v2.md#configure-component-system-resource-limits).

       È possibile specificare una delle seguenti opzioni:
       + `cpus`— <a name="system-resource-limits-cpu-definition-this"></a>La quantità massima di tempo di CPU che i processi di questo componente possono utilizzare sul dispositivo principale. Il tempo totale della CPU di un dispositivo principale è equivalente al numero di core CPU del dispositivo. Ad esempio, su un dispositivo principale con 4 core CPU, è possibile impostare questo valore in modo da `2` limitare i processi di questo componente al 50% di utilizzo di ciascun core della CPU. Su un dispositivo con 1 core di CPU, puoi impostare questo valore `0.25` per limitare i processi di questo componente al 25 percento di utilizzo della CPU. Se imposti questo valore su un numero maggiore del numero di core della CPU, il software AWS IoT Greengrass Core non limita l'utilizzo della CPU del componente. 
       + `memory`— <a name="system-resource-limits-memory-definition-this"></a>La quantità massima di RAM (in kilobyte) che i processi di questo componente possono utilizzare sul dispositivo principale. 

       Questa funzionalità è disponibile per la versione 2.4.0 e successive del componente [Greengrass](greengrass-nucleus-component.md) nucleus. AWS IoT Greengrass attualmente non supporta questa funzionalità sui dispositivi Windows core. 

      
**Example Esempio di aggiornamento della configurazione di base**  

   L'`components`oggetto di esempio seguente specifica di distribuire un componente`com.example.PythonRuntime`, che prevede un parametro di configurazione denominato. `pythonVersion`

   ```
   {
     "targetArn": "{{targetArn}}",
     "deploymentName": "{{deploymentName}}",
     "components": {
       "com.example.PythonRuntime": {
         "componentVersion": "1.0.0",
         "configurationUpdate": {
           "merge": "{\"pythonVersion\":\"3.7\"}"
         }
       }
     }
   }
   ```  
**Example Esempio di aggiornamento della configurazione con ripristino e unione degli aggiornamenti**  

   Consideriamo un esempio di componente di dashboard industriale con la seguente configurazione predefinita. `com.example.IndustrialDashboard`

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

   Il seguente aggiornamento della configurazione specifica le seguenti istruzioni:

   1. Reimposta l'impostazione HTTPS al valore predefinito (`true`).

   1. Reimposta l'elenco dei tag industriali su un elenco vuoto.

   1. Unisci un elenco di etichette industriali che identificano i flussi di dati di temperatura e pressione per due caldaie.

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

   L'`components`oggetto di esempio seguente specifica la distribuzione di questo componente del dashboard industriale e l'aggiornamento della configurazione.

   ```
   {
     "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. (Facoltativo) Definire le politiche di distribuzione per la distribuzione. È possibile configurare quando i dispositivi principali possono applicare una distribuzione in sicurezza o cosa fare se un dispositivo principale non riesce ad applicare la distribuzione. A tale scopo, aggiungi un `deploymentPolicies` oggetto e quindi esegui una delle seguenti operazioni: `deployment.json`

   1. (Facoltativo) Specificate la politica di aggiornamento dei componenti (`componentUpdatePolicy`). Questa politica definisce se la distribuzione consente o meno ai componenti di posticipare un aggiornamento finché non sono pronti per l'aggiornamento. Ad esempio, potrebbe essere necessario ripulire le risorse o completare azioni critiche prima di poter riavviarsi per applicare un aggiornamento. Questa politica definisce anche la quantità di tempo a disposizione dei componenti per rispondere a una notifica di aggiornamento.

      Questa politica è un oggetto con i seguenti parametri:
      + `action`— (Facoltativo) Se notificare o meno i componenti e attendere che vengano segnalati quando sono pronti per l'aggiornamento. Seleziona una delle opzioni seguenti:
        + `NOTIFY_COMPONENTS`: l'implementazione avvisa ogni componente prima che venga interrotto e aggiornato. I componenti possono utilizzare l'operazione [SubscribeToComponentUpdates](ipc-component-lifecycle.md#ipc-operation-subscribetocomponentupdates) IPC per ricevere queste notifiche.
        + `SKIP_NOTIFY_COMPONENTS`: l'implementazione non avvisa i componenti né attende che vengano aggiornati in sicurezza.

        L'impostazione predefinita è `NOTIFY_COMPONENTS`.
      + `timeoutInSeconds`La quantità di tempo in secondi a disposizione di ciascun componente per rispondere a una notifica di aggiornamento con l'operazione [DeferComponentUpdate](ipc-component-lifecycle.md#ipc-operation-defercomponentupdate) IPC. Se il componente non risponde entro questo lasso di tempo, la distribuzione procede sul dispositivo principale.

        Il valore predefinito è 60 secondi.

   1. (Facoltativo) Specificare la politica di convalida della configurazione (). `configurationValidationPolicy` Questa politica definisce il tempo a disposizione di ciascun componente per convalidare un aggiornamento della configurazione da una distribuzione. I componenti possono utilizzare l'operazione [SubscribeToValidateConfigurationUpdates](ipc-component-configuration.md#ipc-operation-subscribetovalidateconfigurationupdates) IPC per sottoscrivere le notifiche relative ai propri aggiornamenti di configurazione. Quindi, i componenti possono utilizzare l'operazione [SendConfigurationValidityReport](ipc-component-configuration.md#ipc-operation-sendconfigurationvalidityreport) IPC per comunicare al software AWS IoT Greengrass Core se l'aggiornamento della configurazione è valido. Se l'aggiornamento della configurazione non è valido, la distribuzione non riesce.

      Questa politica è un oggetto con il seguente parametro:
      + `timeoutInSeconds`(Facoltativo) La quantità di tempo in secondi a disposizione di ogni componente per convalidare un aggiornamento della configurazione. Se il componente non risponde entro questo lasso di tempo, la distribuzione procede sul dispositivo principale.

        Il valore predefinito è 30 secondi.

   1. (Facoltativo) Specificare la politica di gestione degli errori ()`failureHandlingPolicy`. Questa policy è una stringa che definisce se ripristinare o meno i dispositivi se la distribuzione fallisce. Seleziona una delle opzioni seguenti:
      + `ROLLBACK`— Se l'installazione fallisce su un dispositivo principale, il software AWS IoT Greengrass Core ripristina il dispositivo principale alla configurazione precedente.
      + `DO_NOTHING`— Se l'installazione fallisce su un dispositivo principale, il software AWS IoT Greengrass Core mantiene la nuova configurazione. Ciò può causare il danneggiamento dei componenti se la nuova configurazione non è valida.

      L'impostazione predefinita è `ROLLBACK`.

   La tua distribuzione in `deployment.json` potrebbe essere simile al seguente esempio:

   ```
   {
     "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. (Facoltativo) Definisci in che modo la distribuzione viene interrotta, implementata o scaduta. AWS IoT Greengrass utilizza i AWS IoT Core processi per inviare le distribuzioni ai dispositivi principali, quindi queste opzioni sono identiche alle opzioni di configurazione per AWS IoT Core i lavori. Per ulteriori informazioni, consulta [Job rollout and abort configuration](https://docs.aws.amazon.com/iot/latest/developerguide/job-rollout-abort.html) nella *AWS IoT Developer* Guide.

   Per definire le opzioni di lavoro, aggiungi un `iotJobConfiguration` oggetto a. `deployment.json` Quindi, definite le opzioni da configurare.

   La tua distribuzione in `deployment.json` potrebbe essere simile all'esempio seguente:

   ```
   {
     "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. (Facoltativo) Aggiungi tag (`tags`) per la distribuzione. Per ulteriori informazioni, consulta [Tagga le tue AWS IoT Greengrass Version 2 risorse](tag-resources.md).

1. Esegui il comando seguente per creare la distribuzione da`deployment.json`.

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

   <a name="check-new-deployment-status"></a>La risposta include un messaggio `deploymentId` che identifica questa distribuzione. È possibile utilizzare l'ID di distribuzione per verificare lo stato della distribuzione. Per ulteriori informazioni, consulta [Verifica lo stato della distribuzione](check-deployment-status.md#check-cloud-deployment-status).