

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Etapa 5: Crie seu componente no AWS IoT Greengrass serviço
<a name="upload-first-component"></a>

Ao concluir o desenvolvimento de um componente no dispositivo principal, você pode carregá-lo para o serviço AWS IoT Greengrass na Nuvem AWS. Você também pode criar o componente diretamente no [console do AWS IoT Greengrass](https://console.aws.amazon.com/greengrass). O AWS IoT Greengrass oferece um serviço de gerenciamento que hospeda seus componentes para que você possa implantá-los em dispositivos individuais ou em frotas de dispositivos. Para carregar um componente para o AWS IoT Greengrass serviço, você conclui as seguintes etapas:
+ Carregue os artefatos de componente em um bucket do S3.
+ Adicione o URI do Amazon Simple Storage Service (Amazon S3) de cada artefato à fórmula do componente.
+ Crie um componente a AWS IoT Greengrass partir da receita do componente.

Nesta seção, você conclui essas etapas em seu dispositivo principal do Greengrass para carregar seu componente Hello World no AWS IoT Greengrass serviço.

## Crie seu componente em AWS IoT Greengrass (console)
<a name="upload-first-component-console"></a>

1. Use um bucket do S3 em sua AWS conta para hospedar artefatos de AWS IoT Greengrass componentes. Quando você implanta o componente em um dispositivo principal, o dispositivo faz download dos artefatos do componente do bucket.

   Você pode usar um bucket do S3 existente ou criar um novo. 

   1. No [console do Amazon S3](https://console.aws.amazon.com/s3), em **Buckets**, escolha **Criar bucket**.

   1. Em **Nome do bucket**, insira um nome exclusivo para o bucket. Por exemplo, você poderá usar o **greengrass-component-artifacts-*region*-*123456789012***. *123456789012*Substitua pelo ID da sua AWS conta e *region* pelo Região da AWS que você usa neste tutorial.

   1. Para **AWS região**, selecione a AWS região que você usa para este tutorial.

   1. Selecione **Criar bucket**.

   1. Em **Buckets**, escolha o bucket que você criou e carregue o script `hello_world.py` para a pasta `artifacts/com.example.HelloWorld/1.0.0` no bucket. Para mais informações sobre como carregar objetos para buckets do S3, consulte [Como carregar objetos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html) no *Guia do usuário do Amazon Simple Storage Service*.

   1. Copie o URI do S3 do objeto `hello_world.py` no bucket do S3. A aparência do URI deve ser semelhante ao exemplo a seguir. Substitua amzn-s3-demo-bucket pelo nome do bucket do 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>Permita que o dispositivo principal acesse os artefatos do componente no bucket do S3.

   <a name="core-device-allow-s3-bucket-access-console-intro-2"></a>Cada dispositivo principal tem uma [função de IAM do dispositivo principal](device-service-role.md) que permite interagir AWS IoT e enviar registros para a AWS nuvem. Essa função de dispositivo não permite acesso aos buckets do S3 por padrão, então você deve criar e anexar uma política que permita que o dispositivo principal recupere artefatos do componente do bucket do S3.

   <a name="core-device-allow-s3-bucket-access-console-intro-3"></a>Se a função do seu dispositivo já permitir o acesso ao bucket do S3, você pode ignorar essa etapa. Caso contrário, crie uma política do IAM que permita acesso e anexe-a à função, da seguinte forma:

   1. <a name="core-device-allow-s3-bucket-access-console-step-1"></a>No menu de navegação do [console do IAM](https://console.aws.amazon.com/iam), escolha **Políticas** e **Criar política**.

   1. <a name="core-device-allow-s3-bucket-access-console-step-2"></a>Na guia **JSON**, substitua o conteúdo do espaço reservado pela política a seguir. Substitua amzn-s3-demo-bucket pelo nome do bucket do S3 que contém os artefatos do componente que serão baixados do dispositivo principal.

      ```
      {
        "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>Escolha **Próximo**.

   1. <a name="core-device-allow-s3-bucket-access-console-step-4"></a>Na **seção Detalhes da política**, insira **MyGreengrassV2ComponentArtifactPolicy** em **Nome**.

   1. <a name="core-device-allow-s3-bucket-access-console-step-5"></a>Selecione **Criar política**.

   1. <a name="core-device-allow-s3-bucket-access-console-step-6"></a>No menu de navegação do [console do IAM](https://console.aws.amazon.com/iam), escolha **Role** e, em seguida, escolha o nome da função para o dispositivo principal. Você especificou esse nome de função ao instalar o software AWS IoT Greengrass Core. Se você não especificou um nome, o padrão é `GreengrassV2TokenExchangeRole`.

   1. <a name="core-device-allow-s3-bucket-access-console-step-7"></a>Em **Permissões**, escolha **Adicionar permissões** e **Anexar políticas**.

   1. <a name="core-device-allow-s3-bucket-access-console-step-8"></a>Na página **Adicionar permissões**, marque a caixa de seleção ao lado da política `MyGreengrassV2ComponentArtifactPolicy` que você criou e escolha **Adicionar permissões**.

1. Use a fórmula do componente para criar um componente no [console do AWS IoT Greengrass](https://console.aws.amazon.com/greengrass).

   1. No menu de navegação do [console do AWS IoT Greengrass](https://console.aws.amazon.com/greengrass), escolha **Componentes** e **Criar componente**.

   1. Em **Informações do componente**, escolha **Inserir fórmula como JSON**. A fórmula no espaço reservado deve ser semelhante ao exemplo a seguir. 

      ```
      {
        "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. Substitua o URI no espaço reservado em cada seção `Artifacts` pelo URI do S3 do objeto `hello_world.py`. 

   1. Escolha **Criar componente**. 

   1. No **com.example. HelloWorld**página do componente, verifique se o **status** do componente é **Implantável**.

## Crie seu componente em AWS IoT Greengrass (AWS CLI)
<a name="upload-first-component-cli"></a>

**Para carregar o componente Hello World**

1. Use um bucket do S3 em seu Conta da AWS para hospedar artefatos de AWS IoT Greengrass componentes. Quando você implanta o componente em um dispositivo principal, o dispositivo faz download dos artefatos do componente do bucket.

   Você pode usar um bucket do S3 existente ou executar o comando a seguir para criar um bucket. Esse comando cria um bucket com seu Conta da AWS ID e Região da AWS forma um nome de bucket exclusivo. *123456789012*Substitua pelo seu Conta da AWS ID e *region* pelo Região da AWS que você usa neste tutorial.

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

   O comando retorna as informações a seguir quando a solicitação é bem-sucedida.

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

1. <a name="core-device-allow-s3-bucket-access-cli"></a>Permita que o dispositivo principal acesse os artefatos do componente no bucket do S3. 

   Cada dispositivo principal tem uma [função IAM do dispositivo principal](device-service-role.md) que permite interagir AWS IoT e enviar registros para Nuvem AWS o. Por padrão, esse perfil do dispositivo não permite acesso aos buckets do S3, portanto você deve criar e anexar uma política que permita que o dispositivo principal recupere os artefatos do componente do bucket do S3.

   Se o perfil do dispositivo principal já permitir o acesso ao bucket do S3, você poderá ignorar esta etapa. Caso contrário, crie uma política do IAM que permita acesso e anexe-a ao perfil da seguinte forma:

   1. Crie um arquivo chamado `component-artifact-policy.json` e copie o JSON a seguir no arquivo. Essa política permite acesso a todos os arquivos em um bucket do S3. Substitua amzn-s3-demo-bucket pelo nome do bucket do S3.

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

   1. Execute o comando a seguir para criar a política com base no documento em `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
      ```

------

      Copie o nome do recurso da Amazon (ARN) da política dos metadados na saída. Na próxima etapa, você vai usar esse ARN para anexar a política ao perfil do dispositivo principal.

   1. Execute o comando a seguir para anexar a política ao perfil do dispositivo principal. *GreengrassV2TokenExchangeRole*Substitua pelo nome da função do dispositivo principal. Você especificou esse nome de função ao instalar o software AWS IoT Greengrass Core. Substitua o ARN da política pelo ARN da etapa anterior.

------
#### [ 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 for bem-sucedido, o comando não retornará nada. Agora o dispositivo principal pode acessar os artefatos que você carregou nesse bucket do S3.

1. Carregue o artefato do script Hello World em Python para o bucket do S3. 

   Execute o comando a seguir para carregar o script no mesmo caminho no bucket em que o script existe no seu AWS IoT Greengrass núcleo. Substitua amzn-s3-demo-bucket pelo nome do bucket do 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
   ```

------

   O comando retornará uma linha que começa com `upload:` se a solicitação for bem-sucedida.

1. Adicione o URI do Amazon S3 do artefato à fórmula do componente. 

   O URI do Amazon S3 é composto do nome do bucket e do caminho para o objeto de artefato no bucket. O URI do Amazon S3 do artefato no script é onde você carregou o artefato na etapa anterior. A aparência do URI deve ser semelhante ao exemplo a seguir. Substitua amzn-s3-demo-bucket pelo nome do bucket do S3.

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

   Para adicionar o artefato à fórmula, adicione uma lista de `Artifacts` que contenha uma estrutura com o URI do Amazon S3.

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

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

   Abra o arquivo da fórmula em um editor de texto.

   <a name="nano-command-intro"></a>Por exemplo, em um sistema baseado em Linux, você pode executar o comando a seguir para usar o GNU nano para criar o arquivo.

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

   Adicione o artefato à fórmula. O arquivo da fórmula deve ser semelhante ao exemplo a seguir.

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

   Abra o arquivo da fórmula em um editor de texto.

   <a name="nano-command-intro"></a>Por exemplo, em um sistema baseado em Linux, você pode executar o comando a seguir para usar o GNU nano para criar o arquivo.

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

   Adicione o artefato à fórmula. O arquivo da fórmula deve ser semelhante ao exemplo a seguir.

   ```
   ---
   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. Crie um recurso de componente a AWS IoT Greengrass partir da receita. Execute o comando a seguir para criar o componente com base na fórmula, que você fornece como um arquivo binário.

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

------

   Se a solicitação for bem-sucedida, a resposta será semelhante ao exemplo a seguir.

   ```
   {
     "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": {}
     }
   }
   ```

   Copie o `arn` da saída para verificar o estado do componente na próxima etapa.
**nota**  
Você também pode ver o componente Hello World no [console do AWS IoT Greengrass](https://console.aws.amazon.com/greengrass) na página **Componentes**.

1. Verifique se o componente foi criado e está pronto para ser implantado. Quando você cria um componente, o estado dele é `REQUESTED`. Em seguida, AWS IoT Greengrass valida se o componente é implantável. Você pode executar o comando a seguir para consultar o status do componente e verificar se ele é implantável. Substitua `arn` pelo ARN da etapa anterior.

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

   Se o componente for validado, a resposta indicará que o estado dele é `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"
       }
     ]
   }
   ```

Seu componente Hello World agora está disponível em AWS IoT Greengrass. Você pode implantá-lo de volta nesse dispositivo principal do Greengrass ou em outros.