

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.

# Creación de componentes de AWS IoT Greengrass
<a name="create-components"></a>

Puede desarrollar componentes de AWS IoT Greengrass personalizados en una computadora de desarrollo local o en un dispositivo principal de Greengrass. AWS IoT Greengrass proporciona la [interfaz de línea de comandos del kit de desarrollo de AWS IoT Greengrass (CLI de GDK)](greengrass-development-kit-cli.md) para ayudarlo a crear, compilar y publicar componentes a partir de plantillas de componentes predefinidas y [componentes de comunidad](greengrass-software-catalog.md). También puede ejecutar comandos de intérprete de comandos integrados para crear, compilar y publicar componentes. Elija entre las siguientes opciones para crear componentes de Greengrass personalizados:
+ **Uso de la CLI del kit de desarrollo de Greengrass**

  Use la CLI de GDK para desarrollar componentes en una computadora de desarrollo local. La CLI de GDK crea y empaqueta el código de origen de los componentes en una receta y artefactos que puede publicar como un componente privado en el servicio de AWS IoT Greengrass. Puede configurar la CLI de GDK para que actualice automáticamente la versión del componente y los URI del artefacto al publicar el componente, de modo que no necesite actualizar la receta cada vez. Para desarrollar un componente mediante la CLI de GDK, puede partir de una plantilla o un componente de comunidad del [catálogo de software de Greengrass](greengrass-software-catalog.md). Para obtener más información, consulte [Interfaz de línea de comandos del kit de desarrollo de AWS IoT Greengrass](greengrass-development-kit-cli.md).
+ **Ejecute los comandos de intérprete de comandos integrados**

  Puede ejecutar comandos de intérprete de comandos integrados para desarrollar componentes en una computadora de desarrollo local o en un dispositivo principal de Greengrass. Los comandos de intérprete de comandos se usan para copiar o compilar el código de origen de los componentes en artefactos. Cada vez que cree una nueva versión de un componente, debe crear o actualizar la receta con la nueva versión del componente. Al publicar el componente en el servicio de AWS IoT Greengrass, debe actualizar el URI del artefacto de cada componente de la receta.

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

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

Siga las instrucciones de esta sección para crear y compilar un componente mediante la CLI de GDK.

**Desarrollo de un componente de Greengrass (CLI de GDK)**

1. Si aún no lo ha hecho, instale la CLI de GDK en su computadora de desarrollo. Para obtener más información, consulte [Instalación o actualización de la interfaz de línea de comandos del kit de desarrollo de AWS IoT Greengrass](install-greengrass-development-kit-cli.md).

1. Vaya a la carpeta en la que desea crear las carpetas de componentes.

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

   ```
   mkdir ~/greengrassv2
   cd ~/greengrassv2
   ```

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

   ```
   mkdir %USERPROFILE%\greengrassv2
   cd %USERPROFILE%\greengrassv2
   ```

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

   ```
   mkdir ~/greengrassv2
   cd ~/greengrassv2
   ```

------

1. Elija una plantilla de componentes o un componente de comunidad para descargar. La CLI de GDK descarga la plantilla o el componente de comunidad, por lo que puede empezar con un ejemplo funcional. Use el comando [component list](greengrass-development-kit-cli-component.md#greengrass-development-kit-cli-component-list) para recuperar la lista de plantillas o componentes de comunidad disponibles.
   + Para mostrar una lista de las plantillas de componentes, ejecute el siguiente comando. Cada línea de la respuesta incluye el nombre de la plantilla y el lenguaje de programación.

     ```
     gdk component list --template
     ```
   + Para mostrar una lista de componentes de comunidad, ejecute el siguiente comando.

     ```
     gdk component list --repository
     ```

1. Cree y cambie a una carpeta de componentes en la que la CLI de GDK descargue la plantilla o el componente de comunidad. Reemplace *HelloWorld* por el nombre del componente u otro nombre que lo ayude a identificar esta carpeta de componentes.

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

   ```
   mkdir HelloWorld
   cd HelloWorld
   ```

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

   ```
   mkdir HelloWorld
   cd HelloWorld
   ```

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

   ```
   mkdir HelloWorld
   cd HelloWorld
   ```

------

1. Descargue la plantilla o el componente de comunidad en la carpeta actual. Use el comando [component init](greengrass-development-kit-cli-component.md#greengrass-development-kit-cli-component-init).
   + Para crear una carpeta de componentes a partir de una plantilla, ejecute el siguiente comando. Reemplace *HelloWorld* por el nombre de la plantilla y reemplace *python* por el nombre del lenguaje de programación.

     ```
     gdk component init --template HelloWorld --language python
     ```
   + Para crear una carpeta de componentes a partir de un componente de comunidad, ejecute el siguiente comando. Reemplace *ComponentName* por el nombre del componente de comunidad.

     ```
     gdk component init --repository ComponentName
     ```
**nota**  
<a name="gdk-cli-component-init-empty-folder-requirement"></a>Si usa la versión 1.0.0 de la CLI de GDK, debe ejecutar este comando en una carpeta vacía. La CLI de GDK descarga la plantilla o el componente de comunidad en la carpeta actual.  
<a name="gdk-cli-component-init-empty-folder-requirement-gdk-cli-v1.1.0"></a>Si usa la versión 1.1.0 de la CLI de GDK o una versión posterior, puede especificar el argumento `--name` para especificar la carpeta en la que la CLI de GDK descarga la plantilla o el componente de comunidad. Si usa este argumento, especifique una carpeta que no existe. La CLI de GDK crea la carpeta por usted. Si no se especifica este argumento, la CLI de GDK usa la carpeta actual, que debe estar vacía.

1. La CLI de GDK lee el [archivo de configuración de la CLI de GDK](gdk-cli-configuration-file.md), denominado `gdk-config.json`, para crear y publicar componentes. Este archivo de configuración existe en la raíz de la carpeta del componente. El paso anterior crea este archivo por usted. En este paso, se actualiza `gdk-config.json` con información acerca de su componente. Haga lo siguiente:

   1. Abra `gdk-config.json` en un editor de texto.

   1. (Opcional) Cambie el nombre del componente. El nombre del componente es la clave del objeto `component`.

   1. Cambie el autor del componente.

   1. (Opcional) Cambie la versión del componente. Especifique uno de los siguientes valores:<a name="gdk-cli-configuration-file-component-version-options"></a>
      + `NEXT_PATCH`: al elegir esta opción, la CLI de GDK establece la versión al publicar el componente. La CLI de GDK consulta el servicio de AWS IoT Greengrass para identificar la versión más reciente publicada del componente. A continuación, establece la versión en la siguiente versión del parche posterior a esa versión. Si no ha publicado el componente antes, la CLI de GDK usa la versión `1.0.0`.

        Si elige esta opción, no podrá usar la [CLI de Greengrass](greengrass-cli-component.md) para implementar y probar localmente el componente en su computadora de desarrollo local que ejecuta el software AWS IoT Greengrass Core. Para habilitar las implementaciones locales, debe especificar una versión semántica en su lugar.
      + Una versión semántica, como **1.0.0**. Las versiones semánticas siguen un sistema de números de *major*.*minor*.*patch*. Para obtener más información, consulte la [especificación semántica de la versión](https://semver.org/).

        Si desarrolla componentes en un dispositivo principal de Greengrass en el que desee implementar y probar el componente, elija esta opción. Debe compilar el componente con una versión específica para crear implementaciones locales con la [CLI de Greengrass](greengrass-cli-component.md).

   1. (Opcional) Cambie la configuración de compilación del componente. La configuración de compilación define cómo la CLI de GDK compila el origen del componente en artefactos. Para `build_system`, puede elegir entre las siguientes opciones:<a name="gdk-cli-configuration-file-component-build-system-options"></a>
      + `zip`: empaqueta la carpeta del componente en un archivo ZIP para definirla como el único artefacto del componente. Elija esta opción para los siguientes tipos de componentes:
        + Componentes que usan lenguajes de programación interpretados, como Python o JavaScript.
        + Componentes que empaquetan archivos distintos del código, como modelos de machine learning u otros recursos.

        La CLI de GDK comprime la carpeta del componente en un archivo zip con el mismo nombre que la carpeta del componente. Por ejemplo, si el nombre de la carpeta del componente es `HelloWorld`, la CLI de GDK crea un archivo zip denominado `HelloWorld.zip`.
**nota**  
Si usa la versión 1.0.0 de la CLI de GDK en un dispositivo Windows, los nombres de las carpetas y los archivos zip de los componentes deben contener solo letras minúsculas.

        Cuando la CLI de GDK comprime la carpeta del componente en un archivo zip, omite los siguientes archivos:
        + El archivo `gdk-config.json`
        + El archivo de receta (`recipe.json` o `recipe.yaml`)
        + Carpetas de compilación, como `greengrass-build`
      + `maven`: ejecuta el comando `mvn clean package` para compilar el origen del componente en artefactos. Elija esta opción para los componentes que usan [Maven](https://maven.apache.org/), como los componentes de Java.

        En dispositivos Windows, esta característica está disponible para la versión 1.1.0 y posteriores de la CLI de GDK.
      + `gradle`: ejecuta el comando `gradle build` para compilar el origen del componente en artefactos. Elija esta opción para los componentes que usan [Gradle](https://gradle.org/). Esta característica está disponible para la versión 1.1.0 y posteriores de la CLI de GDK.

        El sistema de compilación `gradle` admite Kotlin DSL como archivo de compilación. Esta característica está disponible para la versión 1.2.0 y versiones posteriores de la CLI de GDK.
      + `gradlew`: ejecuta el comando `gradlew` para compilar el origen del componente en artefactos. Elija esta opción para los componentes que usan el [Gradle Wrapper](https://docs.gradle.org/current/userguide/gradle_wrapper.html).

        Esta característica está disponible para la versión 1.2.0 y versiones posteriores de la CLI de GDK.
      + `custom`: ejecuta un comando personalizado para compilar el origen del componente en una receta y artefactos. Especifique el comando personalizado en el parámetro `custom_build_command`.

   1. Si especifica `custom` para `build_system`, agregue `custom_build_command` al objeto `build`. En `custom_build_command`, especifique una sola cadena o lista de cadenas, donde cada cadena es una palabra del comando. Por ejemplo, para ejecutar un comando de compilación personalizado para un componente de C\$1\$1, puede especificar **["cmake", "--build", "build", "--config", "Release"]**.

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

      Cambie la configuración de publicación del componente. Haga lo siguiente:

      1. Especifique el nombre del bucket de S3 que se usará para alojar artefactos de componentes.

      1. Especifique la Región de AWS donde la CLI de GDK publica el componente.

   Cuando haya terminado con este paso, el archivo `gdk-config.json` tendrá un aspecto similar al siguiente ejemplo.

   ```
   {
     "component": {
       "com.example.PythonHelloWorld": {
         "author": "Amazon",
         "version": "NEXT_PATCH",
         "build": {
           "build_system" : "zip"
         },
         "publish": {
           "bucket": "greengrass-component-artifacts",
           "region": "us-west-2"
         }
       }
     },
     "gdk_version": "1.0.0"
   }
   ```

1. Actualice el archivo de receta del componente, denominado `recipe.yaml` o `recipe.json`. Haga lo siguiente:

   1. Si ha descargado una plantilla o un componente de comunidad que usa el sistema de compilación `zip`, compruebe que el nombre del artefacto zip coincide con el nombre de la carpeta del componente. La CLI de GDK comprime la carpeta del componente en un archivo zip con el mismo nombre que la carpeta del componente. La receta contiene el nombre del artefacto zip en la lista de artefactos de componentes y en los scripts de ciclo de vida que usan archivos del artefacto zip. Actualice las definiciones `Artifacts` y `Lifecycle` de forma que el nombre del archivo zip coincida con el nombre de la carpeta del componente. Los siguientes ejemplos de recetas parciales resaltan el nombre del archivo zip en las definiciones `Artifacts` y `Lifecycle`.

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

      ```
      {
        ...
        "Manifests": [
          {
            "Platform": {
              "os": "all"
            },
            "Artifacts": [
              {
                "URI": "s3://{COMPONENT_NAME}/{COMPONENT_VERSION}/HelloWorld.zip",
                "Unarchive": "ZIP"
              }
            ],
            "Lifecycle": {
              "Run": "python3 -u {artifacts:decompressedPath}/HelloWorld/main.py {configuration:/Message}"
            }
          }
        ]
      }
      ```

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

      ```
      ---
      ...
      Manifests:
        - Platform:
            os: all
          Artifacts:
            - URI: "s3://BUCKET_NAME/COMPONENT_NAME/COMPONENT_VERSION/HelloWorld.zip"
              Unarchive: ZIP
          Lifecycle:
            Run: "python3 -u {artifacts:decompressedPath}/HelloWorld/main.py {configuration:/Message}"
      ```

------

   1. (Opcional) Actualice la descripción del componente, la configuración predeterminada, los artefactos, los scripts del ciclo de vida y el soporte de la plataforma. Para obtener más información, consulte [AWS IoT Greengrass referencia de recetas de componentes](component-recipe-reference.md).

   Cuando haya terminado con este paso, el archivo de receta puede ser similar a los siguientes ejemplos.

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

   ```
   {
     "RecipeFormatVersion": "2020-01-25",
     "ComponentName": "{COMPONENT_NAME}",
     "ComponentVersion": "{COMPONENT_VERSION}",
     "ComponentDescription": "This is a simple Hello World component written in Python.",
     "ComponentPublisher": "{COMPONENT_AUTHOR}",
     "ComponentConfiguration": {
       "DefaultConfiguration": {
         "Message": "World"
       }
     },
     "Manifests": [
       {
         "Platform": {
           "os": "all"
         },
         "Artifacts": [
           {
             "URI": "s3://{COMPONENT_NAME}/{COMPONENT_VERSION}/HelloWorld.zip",
             "Unarchive": "ZIP"
           }
         ],
         "Lifecycle": {
           "Run": "python3 -u {artifacts:decompressedPath}/HelloWorld/main.py {configuration:/Message}"
         }
       }
     ]
   }
   ```

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

   ```
   ---
   RecipeFormatVersion: "2020-01-25"
   ComponentName: "{COMPONENT_NAME}"
   ComponentVersion: "{COMPONENT_VERSION}"
   ComponentDescription: "This is a simple Hello World component written in Python."
   ComponentPublisher: "{COMPONENT_AUTHOR}"
   ComponentConfiguration:
     DefaultConfiguration:
       Message: "World"
   Manifests:
     - Platform:
         os: all
       Artifacts:
         - URI: "s3://BUCKET_NAME/COMPONENT_NAME/COMPONENT_VERSION/HelloWorld.zip"
           Unarchive: ZIP
       Lifecycle:
         Run: "python3 -u {artifacts:decompressedPath}/HelloWorld/main.py {configuration:/Message}"
   ```

------

1. Desarrolle y compile 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
   ```

Cuando esté listo para probar el componente, use la CLI de GDK para publicarlo en el servicio de AWS IoT Greengrass. A continuación, puede implementar el componente en los dispositivos principales de Greengrass. Para obtener más información, consulte [Publique componentes para desplegarlos en sus dispositivos principales](publish-components.md).

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

Siga las instrucciones de esta sección para crear carpetas de recetas y artefactos que contengan el código de origen y los artefactos de varios componentes.

**Desarrollo de un componente de Greengrass (comandos de intérprete de comandos)**

1. <a name="create-component-recipes-artifacts-folder-step"></a>Cree una carpeta para sus componentes con subcarpetas para recetas y artefactos. Ejecute los siguientes comandos en su dispositivo principal de Greengrass para crear estas carpetas y cambiarlas a la carpeta de componentes. Reemplace *\$1/greengrassv2* o *%USERPROFILE%\$1greengrassv2* por la ruta a la carpeta que se usará para el desarrollo 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 un editor de texto para crear un archivo de recetas que define los metadatos, parámetros, dependencias, ciclo de vida y capacidad de plataforma de su componente. Incluya la versión del componente en el nombre del archivo de recetas para poder identificar qué receta refleja qué versión del componente. Puede elegir el formato YAML o JSON para su receta.

   <a name="nano-command-intro"></a>Por ejemplo, en un sistema basado en Linux, puede ejecutar el siguiente comando para usar GNU nano a fin de crear el archivo.

------
#### [ 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 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. Defina la receta de su componente. Para obtener más información, consulte [AWS IoT Greengrass referencia de recetas de componentes](component-recipe-reference.md).

   Es posible que la receta sea similar a la siguiente receta de ejemplo de Hello World.

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

------

   Esta receta ejecuta un script de Python de Hello World, que puede ser similar al siguiente script de ejemplo.

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

1. Cree una carpeta para desarrollar la versión del componente. Le recomendamos que use una carpeta independiente para los artefactos de cada versión del componente, de modo que pueda identificar los artefactos de cada versión del componente. Ejecute el siguiente comando.

------
#### [ 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>
Debe usar el siguiente formato para la ruta de la carpeta de artefactos. Incluya el nombre y la versión del componente que especifique en la receta.  

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

1. Cree los artefactos de su componente en la carpeta creada en el paso anterior. Los artefactos pueden incluir software, imágenes y cualquier otro binario que use el componente.

   Cuando el componente esté listo, [pruébelo](test-components.md).