

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Publique componentes para desplegarlos en sus dispositivos principales
<a name="publish-components"></a>

Después de crear o completar una versión de un componente, puede publicarla en el servicio de AWS IoT Greengrass. Luego, puede implementarlo en los dispositivos principales de Greengrass.

Si utiliza la [CLI del kit de desarrollo de Greengrass (CLI del GDK)](greengrass-development-kit-cli.md) para [desarrollar y crear un componente](create-components.md), puede [utilizar la CLI de GDK](#publish-component-gdk-cli) para publicar el componente en la Nube de AWS. De lo contrario, [utilice el intérprete de comandos integrados y la AWS CLI](#publish-component-shell-commands) para publicar el componente.

También se puede utilizar AWS CloudFormation para crear componentes y otros recursos de AWS a partir de plantillas. Para obtener más información, consulte [¿Qué es AWS CloudFormation?](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) y [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) en la *Guía del usuario de AWS CloudFormation*.

**Topics**
+ [Publicación de un componente (CLI de GDK)](#publish-component-gdk-cli)
+ [Publicación de un componente (intérprete de comandos)](#publish-component-shell-commands)

## Publicación de un componente (CLI de GDK)
<a name="publish-component-gdk-cli"></a>

Siga las instrucciones de esta sección para publicar un componente mediante la CLI de GDK. La CLI de GDK carga los artefactos de compilación en un bucket de S3, actualiza los URI de los artefactos en la receta y crea el componente a partir de la receta. Debe especificar el bucket y la región de S3 que se van a utilizar en el [archivo de configuración de la CLI de GDK](gdk-cli-configuration-file.md).

<a name="gdk-cli-s3-bucket-name-formation"></a>Si usa la versión 1.1.0 o posteriores de la CLI de GDK, puede especificar el argumento `--bucket` para especificar el bucket de S3 en el que la CLI de GDK carga los artefactos del componente. <a name="gdk-cli-s3-bucket-name-formation-format"></a>Si no especifica este argumento, la CLI de GDK se carga en el bucket de S3 cuyo nombre es `bucket-region-accountId`, donde *bucket* y *region* son los valores que especifica en `gdk-config.json` y *acountId* es el ID de su Cuenta de AWS. La CLI de GDK crea el bucket si no existe.

**importante**  <a name="publish-component-s3-bucket-token-exchange-role-permissions"></a>
Los roles de los dispositivos principales no permiten el acceso a los buckets de S3 de forma predeterminada. Si es la primera vez que utiliza este bucket de S3, debe agregar permisos al rol para que los dispositivos principales puedan recuperar los artefactos de los componentes de este bucket de S3. Para obtener más información, consulte [Cómo permitir el acceso a los buckets de S3 para los artefactos del componente](device-service-role.md#device-service-role-access-s3-bucket).

**Publicación de un componente de Greengrass (CLI de GDK)**

1. Abra la carpeta del componente en una ventana del sistema o un terminal.

1. Si aún no lo ha hecho, cree el componente de Greengrass. El comando [component build](greengrass-development-kit-cli-component.md#greengrass-development-kit-cli-component-build) produce una receta y artefactos en la carpeta `greengrass-build` de la carpeta del componente. Ejecute el siguiente comando.

   ```
   gdk component build
   ```

1. Publique el componente en la Nube de AWS. El comando [component publish](greengrass-development-kit-cli-component.md#greengrass-development-kit-cli-component-publish) carga los artefactos del componente en Amazon S3 y actualiza la receta del componente con el URI de cada artefacto. A continuación, crea el componente en el servicio de AWS IoT Greengrass.
**nota**  <a name="publish-component-s3-bucket-artifact-digest-warning"></a>
AWS IoT Greengrass calcula el resumen de cada artefacto al crear el componente. Esto significa que no puede modificar los archivos de artefactos de su bucket de S3 después de crear un componente. Si lo hace, las implementaciones que incluyan este componente fallarán porque el resumen del archivo no coincide. Si modifica un archivo de artefactos, debe crear una nueva versión del componente.

   Si especifica `NEXT_PATCH` para la versión del componente en el archivo de configuración de la CLI del GDK, la CLI del GDK utilizará la siguiente versión del parche que aún no exista en el servicio de AWS IoT Greengrass.

   Ejecute el siguiente comando.

   ```
   gdk component publish
   ```

   El resultado indica la versión del componente que creó la CLI de GDK.

   Una vez publicado el componente, puede implementarlo en los dispositivos principales. Para obtener más información, consulte [Implemente AWS IoT Greengrass componentes en los dispositivos](manage-deployments.md).

## Publicación de un componente (intérprete de comandos)
<a name="publish-component-shell-commands"></a>

Utilice el siguiente procedimiento para publicar un componente mediante los intérprete de comandos y la AWS Command Line Interface (AWS CLI). Al publicar un componente, puede hacer lo siguiente:

1. Publique artefactos de componentes en un bucket de S3.

1. Agregue el URI de Amazon S3 de cada artefacto a la receta del componente.

1. Cree una versión del componente en AWS IoT Greengrass a partir de la receta del componente.

**nota**  <a name="component-version-uniqueness-note"></a>
<a name="component-version-uniqueness-para"></a>Cada versión de componente que cargue debe ser única. Asegúrese de cargar la versión del componente correcta, ya que no podrá editarla después de cargarla.

Puede seguir estos pasos para publicar un componente desde su computadora de desarrollo o su dispositivo principal de Greengrass.

**Publicación de un componente (intérprete de comandos)**

1. Si el componente usa una versión que existe en el servicio de AWS IoT Greengrass, debe cambiarla. Abra la receta en un editor de texto, incremente la versión y guarde el archivo. Elija una nueva versión que refleje los cambios que ha realizado en el componente.
**nota**  <a name="semver-note"></a>
<a name="semver-para"></a>AWS IoT Greengrass usa versiones semánticas para los componentes. Las versiones semánticas siguen un sistema de números de *principal*.*secundario*.*parche*. Por ejemplo, la versión `1.0.0` representa el primer lanzamiento principal de un componente. Para obtener más información, consulte la [especificación semántica de la versión](https://semver.org/).

1. Si el componente tiene artefactos, haga lo siguiente:

   1. Publique los artefactos del componente en un bucket de S3 en su Cuenta de AWS.
**sugerencia**  <a name="artifact-path-tip"></a>
Le recomendamos que incluya el nombre y la versión del componente en la ruta al artefacto del bucket de S3. Este esquema de nomenclatura puede ayudarlo a conservar los artefactos que utilizan las versiones anteriores del componente, de forma que pueda seguir admitiendo las versiones anteriores del componente.

      Ejecute el siguiente comando para publicar un archivo de artefacto en un bucket de S3. Sustituya amzn-s3-demo-bucket por el nombre del bucket y sustituya *artifacts/com.example.helloworld/1.0.0/artifact.py* por la ruta al archivo del artefacto.

      ```
      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
      ```
**importante**  <a name="publish-component-s3-bucket-token-exchange-role-permissions"></a>
Los roles de los dispositivos principales no permiten el acceso a los buckets de S3 de forma predeterminada. Si es la primera vez que utiliza este bucket de S3, debe agregar permisos al rol para que los dispositivos principales puedan recuperar los artefactos de los componentes de este bucket de S3. Para obtener más información, consulte [Cómo permitir el acceso a los buckets de S3 para los artefactos del componente](device-service-role.md#device-service-role-access-s3-bucket).

   1. Agregue una lista llamada `Artifacts` a la receta del componente si no está presente. La lista `Artifacts` aparece en cada manifiesto, donde se definen los requisitos del componente en cada plataforma compatible (o los requisitos predeterminados del componente para todas las plataformas).

   1. Agregue cada artefacto a la lista de artefactos o actualice el URI de los artefactos existentes. El URI de Amazon S3 está compuesto por el nombre del bucket y la ruta al objeto artefacto del bucket. Los URI de Amazon S3 de sus artefactos deberían ser similares al siguiente ejemplo.

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

   Después de completar estos pasos, la receta debería tener una lista `Artifacts` similar a la siguiente.

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

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

**nota**  
Puede agregar la opción `"Unarchive": "ZIP"` para que un artefacto ZIP configure el software AWS IoT Greengrass Core de forma que descomprima el artefacto cuando se implemente el componente.

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

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

**nota**  
Puede utilizar la opción `Unarchive: ZIP` para configurar el software AWS IoT Greengrass Core para descomprimir un artefacto ZIP cuando se implemente el componente. Para obtener más información sobre cómo utilizar los artefactos ZIP en un componente, consulte [la variable de receta artifacts:decompressedPath](component-recipe-reference.md#component-recipe-artifacts-decompressed-path).

------

   Para obtener más información acerca de las recetas, consulte [AWS IoT Greengrass referencia de recetas de componentes](component-recipe-reference.md).

1. Utilice la consola de AWS IoT Greengrass para crear un componente a partir del archivo de recetas.

   Utilice el siguiente comando para crear un componente a partir del archivo de recetas. Este comando crea el componente y lo publica como un componente de AWS IoT Greengrass privado en su Cuenta de AWS. Sustituya *path/to/recipeFile* por la ruta del archivo de receta.

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

   Copie el `arn` de la respuesta para comprobar el estado del componente en el paso siguiente.
**nota**  <a name="publish-component-s3-bucket-artifact-digest-warning"></a>
AWS IoT Greengrass calcula el resumen de cada artefacto al crear el componente. Esto significa que no puede modificar los archivos de artefactos de su bucket de S3 después de crear un componente. Si lo hace, las implementaciones que incluyan este componente fallarán porque el resumen del archivo no coincide. Si modifica un archivo de artefactos, debe crear una nueva versión del componente.

1. Cada componente del servicio de AWS IoT Greengrass tiene un estado. Ejecute el siguiente comando para confirmar el estado de la versión del componente que publique en este procedimiento. Sustituya *com.example.HelloWorld* y *1.0.0* por la versión del componente que desee consultar. Sustituya `arn` por el ARN del paso anterior.

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

   La operación devuelve una respuesta que contiene los metadatos del componente. Los metadatos contienen un objeto `status` que contiene el estado del componente y cualquier error, si corresponde.

   Cuando el estado del componente es `DEPLOYABLE`, puede implementar el componente en los dispositivos. Para obtener más información, consulte [Implemente AWS IoT Greengrass componentes en los dispositivos](manage-deployments.md).