

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 4: desenvolver e testar um componente no dispositivo
<a name="create-first-component"></a>

Um componente é um módulo de software executado em dispositivos AWS IoT Greengrass principais. Os componentes permitem que você crie e gerencie aplicações complexas como componentes básicos que você pode reutilizar de um dispositivo principal do Greengrass para outro. Cada componente é composto por uma *fórmula* e *artefatos*.
+ <a name="component-recipe-definition"></a>**Fórmulas**

  Cada componente contém um arquivo de fórmula, que define os metadados dele. A fórmula também especifica os parâmetros de configuração, dependências do componente, o ciclo de vida e a compatibilidade da plataforma. O ciclo de vida do componente define os comandos que instalam, executam e desligam o componente. Para obter mais informações, consulte [AWS IoT Greengrass referência da receita do componente](component-recipe-reference.md).

  Você pode definir fórmulas no formato [JSON](https://en.wikipedia.org/wiki/JSON) ou [YAML](https://en.wikipedia.org/wiki/YAML).
+ <a name="component-artifacts-definition"></a>**Artefatos**

  Os componentes podem ter qualquer número de artefatos, que são binários de componentes. Os artefatos podem incluir scripts, código compilado, recursos estáticos e quaisquer outros arquivos que um componente consuma. Os componentes também podem consumir artefatos das dependências deles.

Com AWS IoT Greengrass, você pode usar a CLI do Greengrass para desenvolver e testar componentes localmente em um dispositivo principal do Greengrass sem interação com a nuvem. AWS Ao concluir seu componente local, você pode usar a receita e os artefatos do componente para criar esse componente no AWS IoT Greengrass serviço na AWS nuvem e, em seguida, implantá-lo em todos os seus dispositivos principais do Greengrass. Para obter mais informações sobre componentes, consulte [Desenvolver componentes do AWS IoT Greengrass](develop-greengrass-components.md).

Nesta seção, você aprende a criar e executar um componente básico do Hello World localmente no dispositivo principal.

**Para desenvolver um componente Hello World no seu dispositivo**

1. <a name="create-component-recipes-artifacts-folder-step"></a>Crie uma pasta para seus componentes com subpastas para fórmulas e artefatos. Execute os comandos a seguir em seu dispositivo principal do Greengrass para criar essas pastas e mudar para a pasta do componente. Substitua *\$1/greengrassv2* ou *%USERPROFILE%\$1greengrassv2* pelo caminho para a pasta a ser usada no desenvolvimento local.

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

   ```
   mkdir -p ~/greengrassv2/{recipes,artifacts}
   cd ~/greengrassv2
   ```

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

   ```
   mkdir %USERPROFILE%\greengrassv2\\recipes, %USERPROFILE%\greengrassv2\\artifacts
   cd %USERPROFILE%\greengrassv2
   ```

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

   ```
   mkdir ~/greengrassv2/recipes, ~/greengrassv2/artifacts
   cd ~/greengrassv2
   ```

------

1. <a name="create-component-recipe-file-step"></a>Use um editor de texto para criar um arquivo de fórmula que defina os metadados, parâmetros, dependências, o ciclo de vida e a capacidade de plataforma do componente. Inclua a versão do componente no nome do arquivo da fórmula para que você possa identificar qual fórmula reflete qual versão do componente. Você pode escolher o formato YAML ou JSON para sua fórmula.

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

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

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

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

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

------
**nota**  
<a name="semver-para"></a>AWS IoT Greengrass usa versões semânticas para componentes. As versões semânticas seguem um sistema de numeração *principal*.*secundária*.*patch*. Por exemplo, a versão `1.0.0` representa a primeira versão principal de um componente. Para mais informações, consulte a [especificação de versão semântica](https://semver.org/).

1. Cole a seguinte fórmula no arquivo.

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

   ```
   {
     "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}"
         }
       },
       {
         "Platform": {
           "os": "windows"
         },
         "Lifecycle": {
           "run": "py -3 -u {artifacts:path}/hello_world.py {configuration:/Message}"
         }
       }
     ]
   }
   ```

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

   ```
   ---
   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}"
     - Platform:
         os: windows
       Lifecycle:
         run: |
           py -3 -u {artifacts:path}/hello_world.py "{configuration:/Message}"
   ```

------

   A seção `ComponentConfiguration` desta fórmula define um parâmetro, `Message`, cujo padrão é `world`. A seção `Manifests` define um *manifesto*, que é um conjunto de instruções e artefatos do ciclo de vida de uma plataforma. Por exemplo, é possível definir vários manifestos para especificar instruções de instalação diferentes para várias plataformas. No manifesto, a seção `Lifecycle` instrui o dispositivo principal do Greengrass a executar o script Hello World com o valor do parâmetro `Message` como argumento.

1. Execute o comando a seguir para criar uma pasta para os artefatos do componente.

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

   ```
   mkdir -p artifacts/com.example.HelloWorld/1.0.0
   ```

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

   ```
   mkdir artifacts\com.example.HelloWorld\1.0.0
   ```

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

   ```
   mkdir artifacts\com.example.HelloWorld\1.0.0
   ```

------
**Importante**  <a name="local-artifact-folder-name-requirements"></a>
Você deve usar o formato a seguir para o caminho da pasta de artefatos. Inclua o nome e a versão do componente que você especificar na fórmula.  

   ```
   artifacts/componentName/componentVersion/
   ```

1. Use um editor de texto para criar um arquivo de artefato de script do Python para o componente Hello World.

   <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 artifacts/com.example.HelloWorld/1.0.0/hello_world.py
   ```

   Copie e cole o seguinte script Python no arquivo.

   ```
   import sys
   
   message = "Hello, %s!" % sys.argv[1]
   
   # Print the message to stdout, which Greengrass saves in a log file.
   print(message)
   ```

1. Use a AWS IoT Greengrass CLI local para gerenciar componentes em seu dispositivo principal do Greengrass.

   Execute o comando a seguir para implantar o componente no AWS IoT Greengrass núcleo. Substitua `/greengrass/v2` ou *C:\$1greengrass\$1v2* por sua pasta AWS IoT Greengrass V2 raiz e substitua *\$1/greengrassv2* ou *%USERPROFILE%\$1greengrassv2* por sua pasta de desenvolvimento de componentes.

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

   ```
   sudo /greengrass/v2/bin/greengrass-cli deployment create \
     --recipeDir ~/greengrassv2/recipes \
     --artifactDir ~/greengrassv2/artifacts \
     --merge "com.example.HelloWorld=1.0.0"
   ```

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

   ```
   C:\greengrass\v2\bin\greengrass-cli deployment create ^
     --recipeDir %USERPROFILE%\greengrassv2\recipes ^
     --artifactDir %USERPROFILE%\greengrassv2\artifacts ^
     --merge "com.example.HelloWorld=1.0.0"
   ```

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

   ```
   C:\greengrass\v2\bin\greengrass-cli deployment create `
     --recipeDir ~/greengrassv2/recipes `
     --artifactDir ~/greengrassv2/artifacts `
     --merge "com.example.HelloWorld=1.0.0"
   ```

------

   Esse comando adiciona o componente que usa a fórmula em `recipes` e o script Python em `artifacts`. A opção `--merge` adiciona ou atualiza o componente e a versão que você especificar.

1. O software AWS IoT Greengrass Core salva o stdout do processo do componente em arquivos de log na `logs` pasta. Execute o comando a seguir para verificar se o componente Hello World executa e imprime mensagens.

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

   ```
   sudo tail -f /greengrass/v2/logs/com.example.HelloWorld.log
   ```

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

   ```
   type C:\greengrass\v2\logs\com.example.HelloWorld.log
   ```

   <a name="windows-cmd-type-observe-logs"></a>O comando `type` grava o conteúdo do arquivo no terminal. Execute esse comando várias vezes para observar as alterações no arquivo.

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

   ```
   gc C:\greengrass\v2\logs\com.example.HelloWorld.log -Tail 10 -Wait
   ```

------

   Você verá mensagens semelhantes ao exemplo a seguir.

   ```
   Hello, world!
   ```
**nota**  
Se o arquivo não existir, talvez a implantação local ainda não esteja concluída. Se o arquivo não existir em 15 segundos, a implantação provavelmente falhou. Isso pode ocorrer se sua fórmula não for válida, por exemplo. Execute o comando a seguir para visualizar o arquivo de log AWS IoT Greengrass principal. Esse arquivo inclui logs do serviço de implantação do dispositivo principal do Greengrass.  

   ```
   sudo tail -f /greengrass/v2/logs/greengrass.log
   ```

   ```
   type C:\greengrass\v2\logs\greengrass.log
   ```
<a name="windows-cmd-type-observe-logs"></a>O comando `type` grava o conteúdo do arquivo no terminal. Execute esse comando várias vezes para observar as alterações no arquivo.

   ```
   gc C:\greengrass\v2\logs\greengrass.log -Tail 10 -Wait
   ```

1. Modifique o componente local para iterar e testar seu código. Abra `hello_world.py` em um editor de texto e adicione o código a seguir na linha 4 para editar a mensagem que o AWS IoT Greengrass núcleo registra.

   ```
   message += " Greetings from your first Greengrass component."
   ```

   Agora, o script `hello_world.py` deve ter o seguinte conteúdo.

   ```
   import sys
   
   message = "Hello, %s!" % sys.argv[1]
   message += " Greetings from your first Greengrass component."
   
   # Print the message to stdout, which Greengrass saves in a log file.
   print(message)
   ```

1. Execute o comando a seguir para atualizar o componente com as alterações.

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

   ```
   sudo /greengrass/v2/bin/greengrass-cli deployment create \
     --recipeDir ~/greengrassv2/recipes \
     --artifactDir ~/greengrassv2/artifacts \
     --merge "com.example.HelloWorld=1.0.0"
   ```

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

   ```
   C:\greengrass\v2\bin\greengrass-cli deployment create ^
     --recipeDir %USERPROFILE%\greengrassv2\recipes ^
     --artifactDir %USERPROFILE%\greengrassv2\artifacts ^
     --merge "com.example.HelloWorld=1.0.0"
   ```

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

   ```
   C:\greengrass\v2\bin\greengrass-cli deployment create `
     --recipeDir ~/greengrassv2/recipes `
     --artifactDir ~/greengrassv2/artifacts `
     --merge "com.example.HelloWorld=1.0.0"
   ```

------

   Esse comando atualiza o componente `com.example.HelloWorld` com o artefato Hello World mais recente.

1. Execute o seguinte comando para reiniciar o componente. Quando você reinicia um componente, o dispositivo principal usa as alterações mais recentes.

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

   ```
   sudo /greengrass/v2/bin/greengrass-cli component restart \
     --names "com.example.HelloWorld"
   ```

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

   ```
   C:\greengrass\v2\bin\greengrass-cli component restart ^
     --names "com.example.HelloWorld"
   ```

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

   ```
   C:\greengrass\v2\bin\greengrass-cli component restart `
     --names "com.example.HelloWorld"
   ```

------

1. Verifique o log novamente para verificar se o componente Hello World imprime a nova mensagem.

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

   ```
   sudo tail -f /greengrass/v2/logs/com.example.HelloWorld.log
   ```

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

   ```
   type C:\greengrass\v2\logs\com.example.HelloWorld.log
   ```

   <a name="windows-cmd-type-observe-logs"></a>O comando `type` grava o conteúdo do arquivo no terminal. Execute esse comando várias vezes para observar as alterações no arquivo.

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

   ```
   gc C:\greengrass\v2\logs\com.example.HelloWorld.log -Tail 10 -Wait
   ```

------

   Você verá mensagens semelhantes ao exemplo a seguir.

   ```
   Hello, world! Greetings from your first Greengrass component.
   ```

1. Você pode atualizar os parâmetros de configuração do componente para testar configurações diferentes. Ao implantar um componente, é possível especificar uma *atualização de configuração*, que define como modificar a configuração do componente no dispositivo principal. Você pode especificar quais valores de configuração serão redefinidos para os valores padrão e os novos valores de configuração a serem mesclados no dispositivo principal. Para obter mais informações, consulte [Atualizar configurações do componente](update-component-configurations.md).

   Faça o seguinte:

   1. Use um editor de texto para criar um arquivo chamado `hello-world-config-update.json` para conter a atualização de configuração

      <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 hello-world-config-update.json
      ```

   1. Copie e cole o seguinte objeto JSON no arquivo. Esse objeto JSON define uma atualização de configuração que mescla o valor de `friend` ao parâmetro `Message` para atualizar o valor. Essa atualização de configuração não especifica nenhum valor a ser redefinido. Você não precisa redefinir o parâmetro `Message` porque a atualização de mesclagem substitui o valor existente.

      ```
      {
        "com.example.HelloWorld": {
          "MERGE": {
            "Message": "friend"
          }
        }
      }
      ```

   1. Execute o comando a seguir para implantar a atualização de configuração no componente Hello World.

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

      ```
      sudo /greengrass/v2/bin/greengrass-cli deployment create \
        --merge "com.example.HelloWorld=1.0.0" \
        --update-config hello-world-config-update.json
      ```

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

      ```
      C:\greengrass\v2\bin\greengrass-cli deployment create ^
        --merge "com.example.HelloWorld=1.0.0" ^
        --update-config hello-world-config-update.json
      ```

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

      ```
      C:\greengrass\v2\bin\greengrass-cli deployment create `
        --merge "com.example.HelloWorld=1.0.0" `
        --update-config hello-world-config-update.json
      ```

------

   1. Verifique o log novamente para verificar se o componente Hello World gera a nova mensagem.

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

      ```
      sudo tail -f /greengrass/v2/logs/com.example.HelloWorld.log
      ```

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

      ```
      type C:\greengrass\v2\logs\com.example.HelloWorld.log
      ```

      <a name="windows-cmd-type-observe-logs"></a>O comando `type` grava o conteúdo do arquivo no terminal. Execute esse comando várias vezes para observar as alterações no arquivo.

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

      ```
      gc C:\greengrass\v2\logs\com.example.HelloWorld.log -Tail 10 -Wait
      ```

------

      Você verá mensagens semelhantes ao exemplo a seguir.

      ```
      Hello, friend! Greetings from your first Greengrass component.
      ```

1. Depois de terminar de testar seu componente, remova-o do seu dispositivo principal. Execute o comando a seguir.

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

   ```
   sudo /greengrass/v2/bin/greengrass-cli deployment create --remove="com.example.HelloWorld"
   ```

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

   ```
   C:\greengrass\v2\bin\greengrass-cli deployment create --remove="com.example.HelloWorld"
   ```

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

   ```
   C:\greengrass\v2\bin\greengrass-cli deployment create --remove="com.example.HelloWorld"
   ```

------
**Importante**  
Essa etapa é necessária para que você implante o componente de volta no dispositivo principal depois de carregá-lo no AWS IoT Greengrass. Caso contrário, a implantação falhará com um erro de compatibilidade de versão porque a implantação local especifica uma versão diferente do componente.

   Execute o comando a seguir e verifique se o componente `com.example.HelloWorld` não aparece na lista de componentes do dispositivo.

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

   ```
   sudo /greengrass/v2/bin/greengrass-cli component list
   ```

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

   ```
   C:\greengrass\v2\bin\greengrass-cli component list
   ```

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

   ```
   C:\greengrass\v2\bin\greengrass-cli component list
   ```

------

Seu componente Hello World está completo e agora você pode carregá-lo no serviço de AWS IoT Greengrass nuvem. Em seguida, você pode implantar o componente nos dispositivos principais do Greengrass.