

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

# Fase 5: Crea il tuo componente nel AWS IoT Greengrass servizio
<a name="upload-first-component"></a>

Quando finisci di sviluppare un componente sul tuo dispositivo principale, puoi caricarlo sul AWS IoT Greengrass servizio in Cloud AWS. Puoi anche creare direttamente il componente nella [AWS IoT Greengrass console](https://console.aws.amazon.com/greengrass). AWS IoT Greengrass fornisce un servizio di gestione dei componenti che ospita i componenti in modo da poterli distribuire su singoli dispositivi o flotte di dispositivi. Per caricare un componente nel AWS IoT Greengrass servizio, è necessario completare i seguenti passaggi:
+ Carica gli artefatti dei componenti in un bucket S3.
+ Aggiungi l'URI Amazon Simple Storage Service (Amazon S3) di ogni elemento alla ricetta del componente.
+ Crea un componente AWS IoT Greengrass dalla ricetta del componente.

In questa sezione, completa questi passaggi sul tuo dispositivo principale Greengrass per caricare il componente Hello World sul AWS IoT Greengrass servizio.

## Crea il tuo componente in AWS IoT Greengrass (console)
<a name="upload-first-component-console"></a>

1. Usa un bucket S3 nel tuo AWS account per ospitare gli artefatti AWS IoT Greengrass dei componenti. Quando distribuisci il componente su un dispositivo principale, il dispositivo scarica gli artefatti del componente dal bucket.

   Puoi usare un bucket S3 esistente oppure puoi crearne uno nuovo. 

   1. **Nella [console Amazon S3](https://console.aws.amazon.com/s3), in Bucket, scegli **Crea bucket**.**

   1. Per **Bucket name, inserisci un nome di bucket** univoco. Per esempio, è possibile utilizzare **greengrass-component-artifacts-*region*-*123456789012***. Sostituiscilo *123456789012* con l'ID del tuo AWS account e *region* con Regione AWS quello che usi per questo tutorial.

   1. Per la **AWS regione**, seleziona la AWS regione che usi per questo tutorial.

   1. Seleziona **Crea bucket**.

   1. In **Bucket**, scegli il bucket che hai creato, carica `hello_world.py` lo script nella `artifacts/com.example.HelloWorld/1.0.0` cartella all'interno del bucket. Per informazioni sul caricamento di oggetti nei bucket S3, consulta [Caricamento di oggetti nella Amazon Simple](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html) *Storage Service User Guide*.

   1. Copia l'URI S3 dell'`hello_world.py`oggetto nel bucket S3. Questo URI dovrebbe essere simile all'esempio seguente. Sostituisci amzn-s3-demo-bucket con il nome del bucket S3.

      ```
      s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
      ```

1. <a name="core-device-allow-s3-bucket-access-console"></a><a name="core-device-allow-s3-bucket-access-console-intro-1"></a>Consenti al dispositivo principale di accedere agli artefatti dei componenti nel bucket S3.

   <a name="core-device-allow-s3-bucket-access-console-intro-2"></a>Ogni dispositivo principale ha un [ruolo IAM del dispositivo principale](device-service-role.md) che gli consente di interagire AWS IoT e inviare log al cloud. AWS Per impostazione predefinita, questo ruolo del dispositivo non consente l'accesso ai bucket S3, quindi è necessario creare e allegare una policy che consenta al dispositivo principale di recuperare gli artefatti dei componenti dal bucket S3.

   <a name="core-device-allow-s3-bucket-access-console-intro-3"></a>Se il ruolo del tuo dispositivo consente già l'accesso al bucket S3, puoi saltare questo passaggio. Altrimenti, crea una policy IAM che consenta l'accesso e collegala al ruolo, come segue:

   1. <a name="core-device-allow-s3-bucket-access-console-step-1"></a>**Nel menu di navigazione [della console IAM](https://console.aws.amazon.com/iam), scegli Policies, quindi scegli **Crea policy**.**

   1. <a name="core-device-allow-s3-bucket-access-console-step-2"></a>Nella scheda **JSON**, sostituire il contenuto del segnaposto con la seguente policy. Sostituisci amzn-s3-demo-bucket con il nome del bucket S3 che contiene gli artefatti dei componenti per il dispositivo principale da scaricare.

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
          }
        ]
      }
      ```

   1. <a name="core-device-allow-s3-bucket-access-console-step-3"></a>Scegli **Next (Successivo)**.

   1. <a name="core-device-allow-s3-bucket-access-console-step-4"></a>**Nella sezione **Dettagli della politica,** per Nome**, inserisci. **MyGreengrassV2ComponentArtifactPolicy**

   1. <a name="core-device-allow-s3-bucket-access-console-step-5"></a>Scegli **Crea policy**.

   1. <a name="core-device-allow-s3-bucket-access-console-step-6"></a>Nel menu di navigazione della [console IAM](https://console.aws.amazon.com/iam), scegli **Ruolo**, quindi scegli il nome del ruolo per il dispositivo principale. Hai specificato questo nome di ruolo quando hai installato il software AWS IoT Greengrass Core. Se non hai specificato un nome, l'impostazione predefinita è`GreengrassV2TokenExchangeRole`.

   1. <a name="core-device-allow-s3-bucket-access-console-step-7"></a>In **Autorizzazioni**, scegli **Aggiungi autorizzazioni**, quindi scegli **Allega** politiche.

   1. <a name="core-device-allow-s3-bucket-access-console-step-8"></a>**Nella pagina **Aggiungi autorizzazioni**, seleziona la casella di controllo accanto alla `MyGreengrassV2ComponentArtifactPolicy` politica che hai creato, quindi scegli Aggiungi autorizzazioni.**

1. [Usa la ricetta del componente per creare un componente nella AWS IoT Greengrass console.](https://console.aws.amazon.com/greengrass)

   1. Nel menu di navigazione della [AWS IoT Greengrass console](https://console.aws.amazon.com/greengrass), scegli **Componenti**, quindi scegli **Crea componente**.

   1. In **Informazioni sui componenti**, scegli **Inserisci la ricetta come JSON**. La ricetta segnaposto dovrebbe essere simile all'esempio seguente. 

      ```
      {
        "RecipeFormatVersion": "2020-01-25",
        "ComponentName": "com.example.HelloWorld",
        "ComponentVersion": "1.0.0",
        "ComponentDescription": "My first AWS IoT Greengrass component.",
        "ComponentPublisher": "Amazon",
        "ComponentConfiguration": {
          "DefaultConfiguration": {
            "Message": "world"
          }
        },
        "Manifests": [
          {
            "Platform": {
              "os": "linux"
            },
            "Lifecycle": {
              "Run": "python3 -u {artifacts:path}/hello_world.py \"{configuration:/Message}\""
            },
            "Artifacts": [
              {
                "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py"
              }
            ]
          },
          {
            "Platform": {
              "os": "windows"
            },
            "Lifecycle": {
              "Run": "py -3 -u {artifacts:path}/hello_world.py \"{configuration:/Message}\""
            },
            "Artifacts": [
              {
                "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py"
              }
            ]
          }
        ]
      }
      ```

   1. Sostituisci l'URI segnaposto in ogni `Artifacts` sezione con l'URI S3 del tuo oggetto. `hello_world.py` 

   1. **Scegli Crea componente.** 

   1. Sul **com.example. **HelloWorld**pagina del componente, verifica che **lo stato** del componente sia Implementabile.**

## Crea il tuo componente in AWS IoT Greengrass ()AWS CLI
<a name="upload-first-component-cli"></a>

**Per caricare il tuo componente Hello World**

1. Usa un bucket S3 Account AWS per ospitare gli artefatti AWS IoT Greengrass dei componenti. Quando distribuisci il componente su un dispositivo principale, il dispositivo scarica gli artefatti del componente dal bucket.

   Puoi utilizzare un bucket S3 esistente o eseguire il seguente comando per creare un bucket. Questo comando crea un bucket con il tuo Account AWS ID e Regione AWS per formare un nome di bucket univoco. Sostituiscilo *123456789012* con il tuo Account AWS ID e *region* con Regione AWS quello che usi per questo tutorial.

   ```
   aws s3 mb s3://greengrass-component-artifacts-123456789012-region
   ```

   Il comando restituisce le seguenti informazioni se la richiesta ha esito positivo.

   ```
   make_bucket: greengrass-component-artifacts-123456789012-region
   ```

1. <a name="core-device-allow-s3-bucket-access-cli"></a>Consenti al dispositivo principale di accedere agli artefatti dei componenti nel bucket S3. 

   Ogni dispositivo principale ha un [ruolo IAM del dispositivo principale](device-service-role.md) che gli consente di interagire AWS IoT e inviare log a. Cloud AWS Per impostazione predefinita, questo ruolo del dispositivo non consente l'accesso ai bucket S3, quindi è necessario creare e allegare una policy che consenta al dispositivo principale di recuperare gli artefatti dei componenti dal bucket S3.

   Se il ruolo del dispositivo principale consente già l'accesso al bucket S3, puoi saltare questo passaggio. Altrimenti, crea una policy IAM che consenta l'accesso e collegala al ruolo, come segue:

   1. Crea un file chiamato `component-artifact-policy.json` e copia il seguente codice JSON nel file. Questa politica consente l'accesso a tutti i file in un bucket S3. Sostituisci amzn-s3-demo-bucket con il nome del bucket S3.

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
          }
        ]
      }
      ```

   1. Esegui il seguente comando per creare la politica dal documento di policy in. `component-artifact-policy.json`

------
#### [ Linux or Unix ]

      ```
      aws iam create-policy \\
        --policy-name MyGreengrassV2ComponentArtifactPolicy \\
        --policy-document file://component-artifact-policy.json
      ```

------
#### [ Windows Command Prompt (CMD) ]

      ```
      aws iam create-policy ^
        --policy-name MyGreengrassV2ComponentArtifactPolicy ^
        --policy-document file://component-artifact-policy.json
      ```

------
#### [ PowerShell ]

      ```
      aws iam create-policy `
        --policy-name MyGreengrassV2ComponentArtifactPolicy `
        --policy-document file://component-artifact-policy.json
      ```

------

      Copia la policy Amazon Resource Name (ARN) dai metadati della policy nell'output. Utilizzerai questo ARN per collegare questa policy al ruolo principale del dispositivo nel passaggio successivo.

   1. Esegui il comando seguente per allegare la policy al ruolo principale del dispositivo. Sostituisci *GreengrassV2TokenExchangeRole* con il nome del ruolo per il dispositivo principale. Hai specificato questo nome di ruolo quando hai installato il software AWS IoT Greengrass Core. Sostituisci l'ARN della policy con l'ARN del passaggio precedente.

------
#### [ Linux or Unix ]

      ```
      aws iam attach-role-policy \\
        --role-name GreengrassV2TokenExchangeRole \\
        --policy-arn arn:aws:iam::123456789012:policy/MyGreengrassV2ComponentArtifactPolicy
      ```

------
#### [ Windows Command Prompt (CMD) ]

      ```
      aws iam attach-role-policy ^
        --role-name GreengrassV2TokenExchangeRole ^
        --policy-arn arn:aws:iam::123456789012:policy/MyGreengrassV2ComponentArtifactPolicy
      ```

------
#### [ PowerShell ]

      ```
      aws iam attach-role-policy `
        --role-name GreengrassV2TokenExchangeRole `
        --policy-arn arn:aws:iam::123456789012:policy/MyGreengrassV2ComponentArtifactPolicy
      ```

------

      Se il comando non ha alcun risultato, è stato eseguito correttamente. Il dispositivo principale può ora accedere agli artefatti caricati in questo bucket S3.

1. Carica l'elemento dello script Hello World Python nel bucket S3. 

   Esegui il comando seguente per caricare lo script nello stesso percorso nel bucket in cui lo script si trova nel core. AWS IoT Greengrass Sostituisci amzn-s3-demo-bucket con il nome del bucket S3.

------
#### [ Linux or Unix ]

   ```
   aws s3 cp \
     artifacts/com.example.HelloWorld/1.0.0/hello_world.py \
     s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   aws s3 cp ^
     artifacts/com.example.HelloWorld/1.0.0/hello_world.py ^
     s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
   ```

------
#### [ PowerShell ]

   ```
   aws s3 cp `
     artifacts/com.example.HelloWorld/1.0.0/hello_world.py `
     s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
   ```

------

   Il comando genera una riga che inizia con se la richiesta ha esito positivo. `upload:`

1. Aggiungi l'URI Amazon S3 dell'artefatto alla ricetta del componente. 

   L'URI di Amazon S3 è composto dal nome del bucket e dal percorso dell'oggetto artefatto nel bucket. L'URI Amazon S3 del tuo elemento di script è l'URI in cui carichi l'artefatto nel passaggio precedente. Questo URI dovrebbe essere simile all'esempio seguente. Sostituisci amzn-s3-demo-bucket con il nome del bucket S3.

   ```
   s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
   ```

   Per aggiungere l'artefatto alla ricetta, aggiungi un elenco `Artifacts` contenente una struttura con l'URI di Amazon S3.

------
#### [ JSON ]

   ```
   "Artifacts": [
     {
       "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py"
     }
   ]
   ```

   Apri il file della ricetta in un editor di testo.

   <a name="nano-command-intro"></a>Ad esempio, su un sistema basato su Linux, è possibile eseguire il comando seguente per utilizzare GNU nano per creare il file.

   ```
   nano recipes/com.example.HelloWorld-1.0.0.json
   ```

   Aggiungi l'artefatto alla ricetta. Il file della ricetta dovrebbe essere simile all'esempio seguente.

   ```
   {
     "RecipeFormatVersion": "2020-01-25",
     "ComponentName": "com.example.HelloWorld",
     "ComponentVersion": "1.0.0",
     "ComponentDescription": "My first AWS IoT Greengrass component.",
     "ComponentPublisher": "Amazon",
     "ComponentConfiguration": {
       "DefaultConfiguration": {
         "Message": "world"
       }
     },
     "Manifests": [
       {
         "Platform": {
           "os": "linux"
         },
         "Lifecycle": {
           "Run": "python3 -u {artifacts:path}/hello_world.py \"{configuration:/Message}\""
         },
         "Artifacts": [
           {
             "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py"
           }
         ]
       },
       {
         "Platform": {
           "os": "windows"
         },
         "Lifecycle": {
           "Run": "py -3 -u {artifacts:path}/hello_world.py \"{configuration:/Message}\""
         },
         "Artifacts": [
           {
             "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py"
           }
         ]
       }
     ]
   }
   ```

------
#### [ YAML ]

   ```
   Artifacts:
     - URI: s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
   ```

   Aprite il file delle ricette in un editor di testo.

   <a name="nano-command-intro"></a>Ad esempio, su un sistema basato su Linux, è possibile eseguire il comando seguente per utilizzare GNU nano per creare il file.

   ```
   nano recipes/com.example.HelloWorld-1.0.0.yaml
   ```

   Aggiungi l'artefatto alla ricetta. Il file della ricetta dovrebbe essere simile all'esempio seguente.

   ```
   ---
   RecipeFormatVersion: '2020-01-25'
   ComponentName: com.example.HelloWorld
   ComponentVersion: '1.0.0'
   ComponentDescription: My first AWS IoT Greengrass component.
   ComponentPublisher: Amazon
   ComponentConfiguration:
     DefaultConfiguration:
       Message: world
   Manifests:
     - Platform:
         os: linux
       Lifecycle:
         Run: |
           python3 -u {artifacts:path}/hello_world.py "{configuration:/Message}"
       Artifacts:
         - URI: s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
     - Platform:
         os: windows
       Lifecycle:
         Run: |
           py -3 -u {artifacts:path}/hello_world.py "{configuration:/Message}"
       Artifacts:
         - URI: s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
   ```

------

1. Crea una risorsa componente AWS IoT Greengrass dalla ricetta. Eseguite il comando seguente per creare il componente dalla ricetta, che fornite come file binario.

------
#### [ JSON ]

   ```
   aws greengrassv2 create-component-version --inline-recipe fileb://recipes/com.example.HelloWorld-1.0.0.json
   ```

------
#### [ YAML ]

   ```
   aws greengrassv2 create-component-version --inline-recipe fileb://recipes/com.example.HelloWorld-1.0.0.yaml
   ```

------

   La risposta è simile all'esempio seguente se la richiesta ha esito positivo.

   ```
   {
     "arn": "arn:aws:greengrass:region:123456789012:components:com.example.HelloWorld:versions:1.0.0",
     "componentName": "com.example.HelloWorld",
     "componentVersion": "1.0.0",
     "creationTimestamp": "Mon Nov 30 09:04:05 UTC 2020",
     "status": {
       "componentState": "REQUESTED",
       "message": "NONE",
       "errors": {}
     }
   }
   ```

   Copia il file `arn` dall'output per verificare lo stato del componente nel passaggio successivo.
**Nota**  
Puoi anche vedere il tuo componente Hello World nella [AWS IoT Greengrass console](https://console.aws.amazon.com/greengrass) nella pagina **Componenti**.

1. Verifica che il componente sia stato creato e sia pronto per essere distribuito. Quando create un componente, il suo stato è`REQUESTED`. Quindi, AWS IoT Greengrass verifica che il componente sia implementabile. È possibile eseguire il comando seguente per interrogare lo stato del componente e verificare che il componente sia distribuibile. Sostituisci `arn` con l'ARN del passaggio precedente.

   ```
   aws greengrassv2 describe-component --arn "arn:aws:greengrass:region:123456789012:components:com.example.HelloWorld:versions:1.0.0"
   ```

   Se il componente viene convalidato, la risposta indica che lo stato del componente è. `DEPLOYABLE`

   ```
   {
     "arn": "arn:aws:greengrass:region:123456789012:components:com.example.HelloWorld:versions:1.0.0",
     "componentName": "com.example.HelloWorld",
     "componentVersion": "1.0.0",
     "creationTimestamp": "2020-11-30T18:04:05.823Z",
     "publisher": "Amazon",
     "description": "My first Greengrass component.",
     "status": {
       "componentState": "DEPLOYABLE",
       "message": "NONE",
       "errors": {}
     },
     "platforms": [
       {
         "os": "linux",
         "architecture": "all"
       }
     ]
   }
   ```

Il tuo componente Hello World è ora disponibile in AWS IoT Greengrass. Puoi reinstallarlo su questo dispositivo principale Greengrass o su altri dispositivi principali.