

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

# Publish components to deploy to your core devices
<a name="publish-components"></a>

Depois de criar ou concluir uma versão de um componente, você pode publicá-la no AWS IoT Greengrass serviço. Em seguida, você pode implantá-lo nos dispositivos principais do Greengrass.

Se você usa a [CLI do Greengrass Development Kit (GDK CLI)](greengrass-development-kit-cli.md) para [desenvolver e criar um componente](create-components.md), você pode usar a [CLI do GDK](#publish-component-gdk-cli) para publicar o componente no Nuvem AWS. Caso contrário, [use os comandos shell integrados e o AWS CLI](#publish-component-shell-commands) para publicar o componente.

Você também pode usar AWS CloudFormation para criar componentes e outros AWS recursos a partir de modelos. Para obter mais informações, consulte [O que é AWS CloudFormation?](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) e [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-greengrassv2-componentversion.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-greengrassv2-componentversion.html)no *Guia do AWS CloudFormation usuário*.

**Topics**
+ [Publicar um componente (GDK CLI)](#publish-component-gdk-cli)
+ [Publicar um componente (comandos shell)](#publish-component-shell-commands)

## Publicar um componente (GDK CLI)
<a name="publish-component-gdk-cli"></a>

Siga as instruções nesta seção para publicar um componente usando a CLI do GDK. A CLI do GDK carrega artefatos de construção em um bucket do S3, atualiza os URIs do artefato na fórmula e cria o componente a partir da fórmula. Você especifica o bucket e a região do S3 a serem usados no [arquivo de configuração da CLI do GDK](gdk-cli-configuration-file.md).

<a name="gdk-cli-s3-bucket-name-formation"></a>Se você usar a CLI do GDK v1.1.0 ou posterior, poderá especificar o argumento `--bucket` para especificar o bucket do S3 em que a CLI do GDK carrega os artefatos do componente. <a name="gdk-cli-s3-bucket-name-formation-format"></a>Se você não especificar esse argumento, a CLI do GDK será carregada no bucket do S3 cujo nome `{{bucket}}-{{region}}-{{accountId}}` é, {{bucket}} onde {{region}} e onde estão os valores que você especifica e é seu `gdk-config.json` ID. {{accountId}} Conta da AWS  A CLI do GDK criará o bucket, se ele não existir.

**Importante**  <a name="publish-component-s3-bucket-token-exchange-role-permissions"></a>
As funções principais do dispositivo não permitem acesso aos buckets do S3 por padrão. Se for a primeira vez que você usa esse bucket do S3, você deve adicionar permissões à função para permitir que os dispositivos principais recuperem artefatos de componentes desse bucket do S3. Para obter mais informações, consulte [Permitir acesso aos buckets do S3 para artefatos de componentes](device-service-role.md#device-service-role-access-s3-bucket).

**Para publicar um componente do Greengrass (GDK CLI)**

1. Abra a pasta do componente em um prompt de comando ou terminal.

1. Caso ainda não tenha feito, crie o componente Greengrass. O comando de [compilação do componente](greengrass-development-kit-cli-component.md#greengrass-development-kit-cli-component-build) produz uma fórmula e artefatos na pasta `greengrass-build` contida na pasta do componente. Execute o comando a seguir.

   ```
   gdk component build
   ```

1. Publique o componente no Nuvem AWS. O comando de [publicação do componente](greengrass-development-kit-cli-component.md#greengrass-development-kit-cli-component-publish) carrega os artefatos do componente no Amazon S3 e atualiza a fórmula do componente com o URI de cada artefato. Em seguida, ele cria o componente no AWS IoT Greengrass serviço.
**nota**  <a name="publish-component-s3-bucket-artifact-digest-warning"></a>
AWS IoT Greengrass calcula o resumo de cada artefato quando você cria o componente. Isso significa que você não pode modificar os arquivos de artefatos em seu bucket do S3 depois de criar um componente. Se você fizer isso, as implantações que incluam esse componente falharão, porque o resumo do arquivo não corresponde. Se você modificar um arquivo de artefato, deverá criar uma nova versão do componente.

   Se você especificar `NEXT_PATCH` a versão do componente no arquivo de configuração da CLI do GDK, a CLI do GDK usará a próxima versão do patch que ainda não existe no serviço. AWS IoT Greengrass 

   Execute o comando a seguir.

   ```
   gdk component publish
   ```

   A saída informa a versão do componente que a CLI do GDK criou.

   Depois de publicar o componente, você pode implantá-los em dispositivos principais. Para obter mais informações, consulte [Implemente AWS IoT Greengrass componentes em dispositivos](manage-deployments.md).

## Publicar um componente (comandos shell)
<a name="publish-component-shell-commands"></a>

Use o procedimento a seguir para publicar um componente usando comandos shell e o AWS Command Line Interface (AWS CLI). Ao publicar um componente, faça o seguinte:

1. Publique artefatos de componentes em um bucket do S3.

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

1. Crie uma versão do componente a AWS IoT Greengrass partir da receita do componente.

**nota**  <a name="component-version-uniqueness-note"></a>
<a name="component-version-uniqueness-para"></a>Cada versão do componente que você carrega deve ser exclusiva. Certifique-se de fazer o upload da versão correta do componente, pois você não poderá editá-la depois de carregá-la.

Você pode seguir estas etapas para publicar um componente do seu computador de desenvolvimento ou do seu dispositivo principal do Greengrass.

**Para publicar um componente (comandos shell)**

1. Se o componente usar uma versão que existe no AWS IoT Greengrass serviço, você deverá alterar a versão do componente. Abra a fórmula em um editor de texto, incremente a versão e salve o arquivo. Escolha uma nova versão que reflita as alterações feitas no componente.
**nota**  <a name="semver-note"></a>
<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. Se seu componente tiver artefatos, faça o seguinte:

   1. Publique os artefatos do componente em um bucket do S3 no seu. Conta da AWS
**dica**  <a name="artifact-path-tip"></a>
Recomendamos que você inclua o nome e a versão do componente no caminho para o artefato no bucket do S3. Esse esquema de nomenclatura pode ajudar você a manter os artefatos que as versões anteriores do componente usam, para que você possa continuar oferecendo suporte às versões anteriores do componente.

      Execute o comando a seguir para publicar um arquivo de artefato em um bucket do S3. Substitua amzn-s3-demo-bucket pelo nome do bucket e {{artifacts/com.example.HelloWorld/1.0.0/artifact.py}} substitua pelo caminho para o arquivo do artefato.

      ```
      aws s3 cp {{artifacts/com.example.HelloWorld/1.0.0/artifact.py}} s3://amzn-s3-demo-bucket/{{artifacts/com.example.HelloWorld/1.0.0/artifact.py}}
      ```
**dica**  
Para acelerar a criação de componentes para artefatos grandes, considere fazer o upload de seus artefatos para o S3 como um upload de uma única parte com as somas de verificação ativadas. SHA-256 Use a `--checksum-algorithm SHA256` opção com o AWS CLI, e defina um tamanho `s3.multipart_threshold` maior que o tamanho do arquivo para evitar o upload de várias partes. Por exemplo, para fazer upload de um artefato de 2 GB:  

      ```
      aws configure set s3.multipart_threshold 5GB
      aws s3 cp {{artifacts/com.example.HelloWorld/1.0.0/artifact.bin}} s3://amzn-s3-demo-bucket/{{artifacts/com.example.HelloWorld/1.0.0/artifact.bin}} --checksum-algorithm SHA256
      ```
Se seu bucket do S3 usa uma política restritiva de bucket, certifique-se de que a política permita a `s3:GetObjectAttributes` ação para que AWS IoT Greengrass possa recuperar a soma de verificação pré-computada.
**Importante**  <a name="publish-component-s3-bucket-token-exchange-role-permissions"></a>
As funções principais do dispositivo não permitem acesso aos buckets do S3 por padrão. Se for a primeira vez que você usa esse bucket do S3, você deve adicionar permissões à função para permitir que os dispositivos principais recuperem artefatos de componentes desse bucket do S3. Para obter mais informações, consulte [Permitir acesso aos buckets do S3 para artefatos de componentes](device-service-role.md#device-service-role-access-s3-bucket).

   1. Adicione uma lista nomeada `Artifacts` à fórmula do componente se ela não estiver presente. A lista `Artifacts` aparece em cada manifesto, que define os requisitos do componente em cada plataforma que ele suporta (ou os requisitos padrão do componente para todas as plataformas).

   1. Adicione cada artefato à lista de artefatos ou atualize o URI dos artefatos existentes. O URI do Amazon S3 é composto pelo nome do bucket e pelo caminho para o objeto de artefato no bucket. Os URIs do Amazon S3 de seus artefatos devem ser semelhantes ao exemplo a seguir.

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

   Depois de concluir essas etapas, sua fórmula deve ter uma lista `Artifacts` semelhante à seguinte.

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

   ```
   {
     {{...}}
     "Manifests": [
       {
         "Lifecycle": {
           {{...}}
         },
         "Artifacts": [
           {
             "URI": "s3://amzn-s3-demo-bucket/{{artifacts/MyGreengrassComponent/1.0.0/artifact.py}}",
             "Unarchive": "NONE"
           }
         ]
       }
     ]
   }
   ```

**nota**  
Você pode adicionar a `"Unarchive": "ZIP"` opção de um artefato ZIP para configurar o software AWS IoT Greengrass Core para descompactar o artefato quando o componente for implantado.

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

   ```
   {{...}}
   Manifests:
     - Lifecycle:
         {{...}}
       Artifacts:
         - URI: s3://amzn-s3-demo-bucket/{{artifacts/MyGreengrassComponent/1.0.0/artifact.py}}
           Unarchive: NONE
   ```

**nota**  
Você pode usar a `Unarchive: ZIP` opção de configurar o software AWS IoT Greengrass Core para descompactar um artefato ZIP quando o componente for implantado. Para obter mais informações sobre como usar artefatos ZIP em um componente, consulte a [variável de fórmula artifacts:decompressedPath](component-recipe-reference.md#component-recipe-artifacts-decompressed-path).

------

   Para obter mais informações sobre receitas, consulte [AWS IoT Greengrass referência da receita do componente](component-recipe-reference.md).

1. Use o AWS IoT Greengrass console para criar um componente a partir do arquivo de receita.

   Execute o comando a seguir para criar o componente a partir de um arquivo de fórmula. Esse comando cria o componente e o publica como um AWS IoT Greengrass componente privado no seu Conta da AWS. {{path/to/recipeFile}}Substitua pelo caminho para o arquivo da receita.

   ```
   aws greengrassv2 create-component-version --inline-recipe fileb://{{path/to/recipeFile}}
   ```

   Copie `arn` da resposta para verificar o estado do componente na próxima etapa.
**nota**  <a name="publish-component-s3-bucket-artifact-digest-warning"></a>
AWS IoT Greengrass calcula o resumo de cada artefato quando você cria o componente. Isso significa que você não pode modificar os arquivos de artefatos em seu bucket do S3 depois de criar um componente. Se você fizer isso, as implantações que incluam esse componente falharão, porque o resumo do arquivo não corresponde. Se você modificar um arquivo de artefato, deverá criar uma nova versão do componente.

1. Cada componente no AWS IoT Greengrass serviço tem um estado. Execute o comando a seguir para confirmar o estado da versão do componente que você publica neste procedimento. Substitua {{com.example.HelloWorld}} e {{1.0.0}} pela versão do componente a ser consultada. Substitua `arn` pelo ARN da etapa anterior.

   ```
   aws greengrassv2 describe-component --arn "arn:aws:greengrass:{{region}}:{{account-id}}:components:{{com.example.HelloWorld}}:versions:{{1.0.0}}"
   ```

   A operação retorna uma resposta contendo os metadados do componente. Os metadados contêm um objeto `status` que contém o estado do componente e quaisquer erros, se aplicável.

   Quando o estado do componente é `DEPLOYABLE`, você pode implantar o componente em dispositivos. Para obter mais informações, consulte [Implemente AWS IoT Greengrass componentes em dispositivos](manage-deployments.md).