

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.

# Ejecute AWS IoT Greengrass el software principal en un contenedor de Docker
<a name="run-greengrass-docker"></a>

AWS IoT Greengrass se puede configurar para que se ejecute en un contenedor de Docker. Docker es una plataforma que le permite crear, ejecutar, probar e implementar aplicaciones basadas en contenedores de Linux. Al ejecutar una imagen de AWS IoT Greengrass Docker, puede elegir si desea proporcionar sus AWS credenciales al contenedor de Docker y permitir que el instalador del software AWS IoT Greengrass Core aprovisione automáticamente los AWS recursos que un dispositivo principal de Greengrass necesita para funcionar. Si no desea proporcionar AWS credenciales, puede aprovisionar AWS recursos manualmente y ejecutar el software AWS IoT Greengrass Core en el contenedor de Docker.

**Topics**
+ [Plataformas compatibles y requisitos](#greengrass-docker-supported-platforms)
+ [Descargas de software](#greengrass-docker-downloads)
+ [Elija cómo aprovisionar los recursos AWS](#greengrass-docker-resource-provisioning)
+ [Cree la AWS IoT Greengrass imagen a partir de un Dockerfile](build-greengrass-dockerfile.md)
+ [Se ejecuta AWS IoT Greengrass en Docker con aprovisionamiento automático](run-greengrass-docker-automatic-provisioning.md)
+ [Se ejecuta AWS IoT Greengrass en Docker con aprovisionamiento manual](run-greengrass-docker-manual-provisioning.md)
+ [Solución de problemas AWS IoT Greengrass en un contenedor Docker](docker-troubleshooting.md)

## Plataformas compatibles y requisitos
<a name="greengrass-docker-supported-platforms"></a>

Los ordenadores host deben cumplir los siguientes requisitos mínimos para instalar y ejecutar el software AWS IoT Greengrass principal en un contenedor de Docker:
+ <a name="docker-host-reqs"></a>Sistema operativo basado en Linux con conexión a Internet.
+ <a name="docker-engine-reqs"></a>[Docker Engine](https://docs.docker.com/engine/install/), versión 18.09 o posterior.
+ <a name="docker-compose-reqs"></a>(Opcional) [Docker Compose](https://docs.docker.com/compose/install/) versión 1.22 o posterior. Docker Compose solo es necesario si quiere usar la CLI de Docker Compose para ejecutar sus imágenes de Docker.

Para ejecutar componentes de función de Lambda dentro del contenedor de Docker, debe configurar el contenedor para cumplir con requisitos adicionales. Para obtener más información, consulte [Requisitos de la función de Lambda](setting-up.md#greengrass-v2-lambda-requirements).

### Ejecución de los componentes en modo de proceso
<a name="docker-container-mode-limitation"></a>

AWS IoT Greengrass no admite la ejecución de funciones de Lambda o componentes AWS proporcionados en un entorno de ejecución aislado dentro del AWS IoT Greengrass contenedor de Docker. Debe ejecutar estos componentes en modo de proceso sin ningún tipo de aislamiento.

Al configurar un componente de la función de Lambda, defina el modo de aislamiento en **Sin contenedor**. Para obtener más información, consulte [Ejecución de funciones de AWS Lambda](run-lambda-functions.md). 

Al implementar cualquiera de los siguientes componentes AWS proporcionados, actualice la configuración de cada componente para establecer el parámetro en. `containerMode` `NoContainer` Para obtener más información acerca de las actualizaciones de configuración, consulte [Actualización de las configuraciones de los componentes](update-component-configurations.md).
+ [CloudWatch métricas](cloudwatch-metrics-component.md)
+ [Device Defender](device-defender-component.md)
+ [Firehose](kinesis-firehose-component.md)
+ [Adaptador de protocolo Modbus-RTU](modbus-rtu-protocol-adapter-component.md)
+ [Amazon SNS](sns-component.md)

## AWS IoT Greengrass descargas del software Docker
<a name="greengrass-docker-downloads"></a>

AWS IoT Greengrass proporciona un Dockerfile para crear una imagen de contenedor que tiene el software AWS IoT Greengrass principal y las dependencias instaladas en una imagen base de Amazon Linux 2 (x86\$164). Puede modificar la imagen base del Dockerfile para que se ejecute en una arquitectura de plataforma diferente. AWS IoT Greengrass 

Descargue el paquete Dockerfile desde. [GitHub](https://github.com/aws-greengrass/aws-greengrass-docker)

El Dockerfile usa una versión anterior de Greengrass. Debe actualizar el archivo para usar la versión de Greengrass que desee. Para obtener información sobre cómo crear la imagen del AWS IoT Greengrass contenedor a partir del Dockerfile, consulte. [Cree la imagen del AWS IoT Greengrass contenedor a partir de un Dockerfile](build-greengrass-dockerfile.md)

## Elija cómo aprovisionar los recursos AWS
<a name="greengrass-docker-resource-provisioning"></a>

Al instalar el software AWS IoT Greengrass Core en un contenedor de Docker, puede elegir si desea aprovisionar automáticamente los AWS recursos que un dispositivo principal de Greengrass necesita para funcionar o usar los recursos que aprovisiona manualmente.
+ **Aprovisionamiento automático de recursos**: el instalador proporciona la AWS IoT AWS IoT cosa, el grupo de cosas, la función de IAM y el alias de la AWS IoT función al ejecutar la imagen del AWS IoT Greengrass contenedor por primera vez. El instalador también puede implementar las herramientas de desarrollo locales en el dispositivo principal, de modo que usted pueda usar el dispositivo para desarrollar y probar componentes de software personalizados. Para aprovisionar estos recursos automáticamente, debe proporcionar credenciales de AWS como variables de entorno a la imagen de Docker.

  Para utilizar el aprovisionamiento automático, debe configurar la variable de entorno `PROVISION=true` de Docker y montar un archivo de credenciales para proporcionar sus credenciales de AWS al contenedor.
+ **Aprovisionamiento manual de recursos**: si no desea proporcionar AWS credenciales al contenedor, puede aprovisionar los AWS recursos manualmente antes de ejecutar la imagen del contenedor. AWS IoT Greengrass Debe crear un archivo de configuración para proporcionar información sobre estos recursos al instalador del software AWS IoT Greengrass principal dentro del contenedor de Docker.

  Para utilizar el aprovisionamiento manual, debe configurar la variable de entorno de Docker `PROVISION=false`. La opción predeterminada es el aprovisionamiento manual.

Para obtener más información, consulte [Cree la imagen del AWS IoT Greengrass contenedor a partir de un Dockerfile](build-greengrass-dockerfile.md).

# Cree la imagen del AWS IoT Greengrass contenedor a partir de un Dockerfile
<a name="build-greengrass-dockerfile"></a>

AWS proporciona un Dockerfile que puede descargar y usar para ejecutar AWS IoT Greengrass el software principal en un contenedor de Docker. Los archivos Docker contienen código fuente para crear imágenes de contenedores. AWS IoT Greengrass 

Antes de crear una imagen de AWS IoT Greengrass contenedor, debe configurar su Dockerfile para seleccionar la versión del software AWS IoT Greengrass principal que desea instalar. También puede configurar las variables de entorno para elegir cómo aprovisionar los recursos durante la instalación y personalizar otras opciones de instalación. En esta sección se describe cómo configurar y crear una imagen de Docker a partir de un AWS IoT Greengrass Dockerfile. 



## Descarga del paquete Dockerfile
<a name="download-dockerfile-package"></a>

Puede descargar el paquete AWS IoT Greengrass Dockerfile desde: GitHub

[Repositorio Docker de AWS Greengrass](https://github.com/aws-greengrass/aws-greengrass-docker)

Tras descargar el paquete, extraiga el contenido a la carpeta `download-directory/aws-greengrass-docker-nucleus-version` de su computadora. El Dockerfile usa una versión anterior de Greengrass. Debe actualizar el archivo para usar la versión de Greengrass que desee.

## Especifique la versión del AWS IoT Greengrass software principal
<a name="set-dockerfile-build-argument"></a>

Usa el siguiente argumento de compilación en el Dockerfile para especificar la versión del software AWS IoT Greengrass principal que deseas usar en la imagen de AWS IoT Greengrass Docker. De forma predeterminada, el Dockerfile usa la última versión del software Core. AWS IoT Greengrass 

`GREENGRASS_RELEASE_VERSION`  
La versión del software AWS IoT Greengrass principal. De forma predeterminada, el Dockerfile descarga la última versión disponible del núcleo de Greengrass. Establezca el valor en la versión del núcleo que quiere descargar.

## Configuración de las variables de entorno
<a name="set-dockerfile-environment-variables"></a>

Las variables de entorno le permiten personalizar la forma en que se instala el software AWS IoT Greengrass principal en el contenedor de Docker. Puede configurar las variables de entorno para la imagen de AWS IoT Greengrass Docker de varias maneras. 
+ Para usar las mismas variables de entorno para crear varias imágenes, configure las variables de entorno directamente en el Dockerfile.
+ Si usa `docker run` para iniciar el contenedor, pase variables de entorno como argumentos en el comando o establezca las variables de entorno en un archivo de variables de entorno y, a continuación, pase el archivo como un argumento. Para obtener más información sobre cómo configurar las variables de entorno en Docker, consulte [las variables de entorno](https://docs.docker.com/engine/reference/commandline/run/#env) en la documentación de Docker.
+ Si usa `docker-compose up` para iniciar su contenedor, configure las variables de entorno en un archivo de variables de entorno y, a continuación, pase el archivo como un argumento. Para obtener más información sobre cómo configurar las variables de entorno en Compose, consulte la [documentación de Docker](https://docs.docker.com/compose/environment-variables/).

Puede configurar las siguientes variables de entorno para la imagen de AWS IoT Greengrass Docker.

**nota**  
No modifique la variable `TINI_KILL_PROCESS_GROUP` en el Dockerfile. Esta variable permite reenviarla `SIGTERM` a todos los miembros PIDs del grupo PID para que el software AWS IoT Greengrass principal se pueda cerrar correctamente cuando se detenga el contenedor de Docker.

`GGC_ROOT_PATH`  
(Opcional) La ruta a la carpeta dentro del contenedor que se usará como raíz del software AWS IoT Greengrass Core.  
Valor predeterminado: `/greengrass/v2`

`PROVISION`  
(Opcional) Determina si el AWS IoT Greengrass núcleo AWS aprovisiona recursos.   
+ Si lo especificas`true`, el software AWS IoT Greengrass Core registra la imagen del contenedor como una AWS IoT cosa y aprovisiona los AWS recursos que requiere el dispositivo principal de Greengrass. El software AWS IoT Greengrass Core aprovisiona AWS IoT cualquier cosa, (opcional) un grupo de AWS IoT cosas, un rol de IAM y un alias de AWS IoT rol. Para obtener más información, consulte [Se ejecuta AWS IoT Greengrass en un contenedor Docker con aprovisionamiento automático de recursos](run-greengrass-docker-automatic-provisioning.md).
+ Si lo especifica`false`, debe crear un archivo de configuración para proporcionárselo al instalador AWS IoT Greengrass principal que especifique el uso de los AWS recursos y certificados que creó manualmente. Para obtener más información, consulte [Se ejecuta AWS IoT Greengrass en un contenedor Docker con aprovisionamiento manual de recursos](run-greengrass-docker-manual-provisioning.md).
Valor predeterminado: `false`

`AWS_REGION`  
(Opcional) El Región de AWS que el software AWS IoT Greengrass principal utiliza para recuperar o crear AWS los recursos necesarios.   
Predeterminado: `us-east-1`.

`THING_NAME`  
(Opcional) El nombre de AWS IoT lo que se registra como este dispositivo principal. Si el elemento con este nombre no existe en el tuyo Cuenta de AWS, será creado por el software AWS IoT Greengrass Core.   
Debe especificar `PROVISION=true` si desea aplicar este argumento.  
Valor predeterminado: `GreengrassV2IotThing_` más un UUID asignado al azar.

`THING_GROUP_NAME`  
(Opcional) El nombre del grupo de elementos al AWS IoT que se agrega este dispositivo principal. AWS IoT Si una implementación se dirige a este grupo, este y otros dispositivos principales de ese grupo reciben ese despliegue cuando se conectan AWS IoT Greengrass. Si el grupo de cosas con este nombre no existe en su empresa Cuenta de AWS, el software AWS IoT Greengrass Core lo crea.  
Debe especificar `PROVISION=true` si desea aplicar este argumento.

`TES_ROLE_NAME`  
(Opcional) El nombre de la función de IAM que se utilizará para adquirir AWS las credenciales que permiten al dispositivo principal de Greengrass interactuar con AWS los servicios. Si el rol con este nombre no existe en su cuenta Cuenta de AWS, el software AWS IoT Greengrass principal lo crea con la `GreengrassV2TokenExchangeRoleAccess` política. Este rol no tiene acceso a los buckets de S3 donde aloja los artefactos de los componentes. Por lo tanto, debe agregar permisos a los buckets y objetos de S3 de sus artefactos al crear un componente. Para obtener más información, consulte [Autorizar a los dispositivos principales a interactuar con AWS los servicios](device-service-role.md).  
Valor predeterminado: `GreengrassV2TokenExchangeRole`

`TES_ROLE_ALIAS_NAME`  
(Opcional) El nombre del alias del AWS IoT rol que apunta al rol de IAM que proporciona AWS las credenciales para el dispositivo principal de Greengrass. Si el alias del rol con este nombre no existe en su cuenta Cuenta de AWS, el software AWS IoT Greengrass principal lo crea y lo dirige al rol de IAM que especifique.  
Valor predeterminado: `GreengrassV2TokenExchangeRoleAlias`

`COMPONENT_DEFAULT_USER`  
(Opcional) El nombre o ID del usuario y grupo del sistema que el software AWS IoT Greengrass principal utiliza para ejecutar los componentes. Especifique el usuario y el grupo, separados por dos puntos. El grupo es opcional. Por ejemplo, puede especificar **ggc\$1user:ggc\$1group** o **ggc\$1user**.  
+ Si se ejecuta como raíz, el usuario y el grupo que defina el archivo de configuración son de forma predeterminada. Si el archivo de configuración no define un usuario ni un grupo, el valor predeterminado es `ggc_user:ggc_group`. Si no existen `ggc_user` o `ggc_group`, el software los crea.
+ Si se ejecuta como un usuario que no es root, el software AWS IoT Greengrass principal utiliza ese usuario para ejecutar los componentes.
+ Si no especifica un grupo, el software AWS IoT Greengrass Core utiliza el grupo principal del usuario del sistema.
Para obtener más información, consulte [Configuración del usuario que ejecuta los componentes](configure-greengrass-core-v2.md#configure-component-user).

`DEPLOY_DEV_TOOLS`  
Define si se debe descargar e implementar el [componente de la CLI de Greengrass](greengrass-cli-component.md) en la imagen del contenedor. Puede usar la CLI de Greengrass para desarrollar y depurar componentes localmente.  
 <a name="local-dev-tools-production-environment-warning"></a>Se recomienda usar este componente solo en entornos de desarrollo y no en entornos de producción. Este componente brinda acceso a información y operaciones que, por lo general, no necesitará en un entorno de producción. Siga el principio de privilegio mínimo al implementar este componente solo en los dispositivos principales donde lo necesite. 
Valor predeterminado: `false`

`INIT_CONFIG`  
(Opcional) La ruta al archivo de configuración que se utilizará para instalar el software AWS IoT Greengrass principal. Puede usar esta opción para configurar nuevos dispositivos principales de Greengrass con una configuración de núcleo específica o para especificar recursos aprovisionados manualmente, por ejemplo. Debe montar el archivo de configuración en la ruta que especifique en este argumento. 

`TRUSTED_PLUGIN`  
Esta característica está disponible para la versión 2.4.0 y versiones posteriores del [componente núcleo de Greengrass](greengrass-nucleus-component.md).  
(Opcional) La ruta a un archivo JAR para cargarlo como un complemento de confianza. Use esta opción para aprovisionar archivos JAR, como instalar con el [aprovisionamiento de flota](fleet-provisioning.md) o el [aprovisionamiento personalizado](custom-provisioning.md). 

`THING_POLICY_NAME`  
Esta característica está disponible para la versión 2.4.0 y versiones posteriores del [componente núcleo de Greengrass](greengrass-nucleus-component.md).  
(Opcional) El nombre de la AWS IoT política que se va a adjuntar al certificado AWS IoT Thing de este dispositivo principal. Si la AWS IoT política con este nombre no existe en su software AWS IoT Greengrass Core Cuenta de AWS la crea.   
Debe especificar `PROVISION=true` si desea aplicar este argumento.  
El software AWS IoT Greengrass Core crea una AWS IoT política permisiva de forma predeterminada. Puede limitar el alcance de esta política o crear una política personalizada en la que restrinja los permisos según su caso de uso. Para obtener más información, consulte [AWS IoT Política mínima para los dispositivos AWS IoT Greengrass V2 principales](device-auth.md#greengrass-core-minimal-iot-policy). 

## Especificación de las dependencias que desea instalar
<a name="dockerfile-run-instruction"></a>

La instrucción RUN del AWS IoT Greengrass Dockerfile prepara el entorno del contenedor para ejecutar el instalador del AWS IoT Greengrass software Core. Puede personalizar las dependencias que se instalan antes de que el instalador del software AWS IoT Greengrass Core se ejecute en el contenedor de Docker. 

## Cree la imagen AWS IoT Greengrass
<a name="build-greengrass-docker-image"></a>

Usa el AWS IoT Greengrass Dockerfile para crear una imagen de AWS IoT Greengrass contenedor. Puede usar la CLI de Docker o la CLI de Docker Compose para crear la imagen e iniciar el contenedor. También puede usar la CLI de Docker para crear la imagen y, a continuación, usar Docker Compose para iniciar el contenedor a partir de esa imagen.

------
#### [ Docker ]

1. En la máquina host, ejecute el siguiente comando para cambiar al directorio que contiene el Dockerfile configurado.

   ```
   cd download-directory/aws-greengrass-docker-nucleus-version
   ```

1. Ejecute el siguiente comando para crear la imagen del AWS IoT Greengrass contenedor a partir del Dockerfile.

   ```
   sudo docker build -t "platform/aws-iot-greengrass:nucleus-version" ./
   ```

------
#### [ Docker Compose ]

1. En la máquina host, ejecute el siguiente comando para cambiar al directorio que contiene el Dockerfile y el archivo Compose.

   ```
   cd download-directory/aws-greengrass-docker-nucleus-version
   ```

1. Ejecuta el siguiente comando para usar el archivo Compose para crear la imagen del AWS IoT Greengrass contenedor.

   ```
   docker-compose -f docker-compose.yml build
   ```

------

Ha creado correctamente la imagen del AWS IoT Greengrass contenedor. La imagen de Docker tiene instalado el software AWS IoT Greengrass principal. Ahora puede ejecutar el software AWS IoT Greengrass principal en un contenedor de Docker.

# Se ejecuta AWS IoT Greengrass en un contenedor Docker con aprovisionamiento automático de recursos
<a name="run-greengrass-docker-automatic-provisioning"></a>

En este tutorial, se muestra cómo instalar y ejecutar el software AWS IoT Greengrass principal en un contenedor Docker con AWS recursos aprovisionados automáticamente y herramientas de desarrollo local. Puedes usar este entorno de desarrollo para explorar las AWS IoT Greengrass funciones de un contenedor Docker. El software requiere las credenciales de AWS para aprovisionar estos recursos e implementar las herramientas de desarrollo local.

Si no puede proporcionar AWS credenciales al contenedor, puede aprovisionar los AWS recursos que el dispositivo principal necesita para funcionar. También puede implementar las herramientas de desarrollo en un dispositivo principal para usarlas como dispositivo de desarrollo. Esto le permite conceder menos permisos al dispositivo al ejecutar el contenedor. Para obtener más información, consulte [Se ejecuta AWS IoT Greengrass en un contenedor Docker con aprovisionamiento manual de recursos](run-greengrass-docker-manual-provisioning.md).



## Requisitos previos
<a name="docker-automatic-provisioning-prereqs"></a>

Necesitará lo siguiente para completar este tutorial.
+ Un Cuenta de AWS. Si no dispone de una, consulte [Configura un Cuenta de AWS](setting-up.md#set-up-aws-account). 
+ Un usuario de AWS IAM con permisos para aprovisionar los recursos AWS IoT de IAM para un dispositivo principal de Greengrass. El instalador del software AWS IoT Greengrass principal utiliza sus AWS credenciales para aprovisionar automáticamente estos recursos. Para obtener información sobre la política de IAM mínima para aprovisionar recursos automáticamente, consulte [Política de IAM mínima para que el instalador aprovisione recursos](provision-minimal-iam-policy.md).
+ Una imagen de AWS IoT Greengrass Docker. Puede [crear una imagen a partir del AWS IoT Greengrass Dockerfile](build-greengrass-dockerfile.md).
+ El equipo host en el que ejecute el contenedor de Docker debe cumplir los siguientes requisitos:
  + <a name="docker-host-reqs"></a>Sistema operativo basado en Linux con conexión a Internet.
  + <a name="docker-engine-reqs"></a>[Docker Engine](https://docs.docker.com/engine/install/), versión 18.09 o posterior.
  + <a name="docker-compose-reqs"></a>(Opcional) [Docker Compose](https://docs.docker.com/compose/install/) versión 1.22 o posterior. Docker Compose solo es necesario si quiere usar la CLI de Docker Compose para ejecutar sus imágenes de Docker.

## Configura tus credenciales AWS
<a name="configure-aws-credentials-for-docker"></a>

En este paso, crea un archivo de credenciales en la computadora host que contiene sus credenciales de seguridad de AWS . Al ejecutar la imagen de AWS IoT Greengrass Docker, debe montar la carpeta que contiene este archivo de credenciales `/root/.aws/` en el contenedor de Docker. El AWS IoT Greengrass instalador usa estas credenciales para aprovisionar recursos en su. Cuenta de AWS Para obtener información sobre la política de IAM mínima que requiere el instalador para aprovisionar recursos automáticamente, consulte [Política de IAM mínima para que el instalador aprovisione recursos](provision-minimal-iam-policy.md).

1. Recuperación de uno de los siguientes elementos.
   + Credenciales a largo plazo para un usuario de IAM. Para obtener información sobre cómo recuperar credenciales a largo plazo, consulte [Administrar claves de acceso para usuarios de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html) en la * Guía del usuario de IAM*.
   + (Recomendado) Credenciales temporales para un rol de IAM. Para obtener información sobre cómo obtener credenciales temporales, consulte [Uso de credenciales de seguridad temporales con la AWS CLI](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html#using-temp-creds-sdk-cli) en la *Guía del usuario de IAM*.

1. Cree una carpeta en la que coloque el archivo de credenciales.

   ```
   mkdir ./greengrass-v2-credentials
   ```

1. Utilice un editor de texto para crear un archivo de configuración denominado `credentials` en la carpeta `./greengrass-v2-credentials`.

   Por ejemplo, puede ejecutar el comando siguiente para usar GNU nano para crear el archivo `credentials`. 

   ```
   nano ./greengrass-v2-credentials/credentials
   ```

1. Añada sus AWS credenciales al `credentials` archivo en el siguiente formato.

   ```
   [default]
   aws_access_key_id = AKIAIOSFODNN7EXAMPLE
   aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
   aws_session_token = AQoEXAMPLEH4aoAH0gNCAPy...truncated...zrkuWJOgQs8IZZaIv2BXIa2R4Olgk
   ```

   Incluya `aws_session_token` solo para credenciales temporales.

**importante**  
Elimine el archivo de credenciales de la computadora host después de iniciar el AWS IoT Greengrass contenedor. Si no elimina el archivo de credenciales, sus AWS credenciales permanecerán montadas dentro del contenedor. Para obtener más información, consulte [Ejecute el software AWS IoT Greengrass principal en un contenedor](#run-greengrass-image-automatic-provisioning).

## Creación de un archivo de entorno
<a name="create-env-file-automatic-provisioning"></a>

En este tutorial, se utiliza un archivo de entorno para configurar las variables de entorno que se transferirán al instalador del software AWS IoT Greengrass principal dentro del contenedor de Docker. También puede utilizar [el argumento `-e` o `--env`](https://docs.docker.com/engine/reference/commandline/run/#env) en su comando `docker run` para establecer variables de entorno en el contenedor de Docker o puede establecer las variables en [un bloque `environment`](https://docs.docker.com/compose/compose-file/compose-file-v3/#environment) en el archivo `docker-compose.yml`.

1. Utilice un editor de texto para crear un archivo de política llamado `.env`.

   Por ejemplo, en un sistema basado en Linux, puede ejecutar el siguiente comando para usar GNU nano para crearlo en el `.env` en el directorio actual.

   ```
   nano .env
   ```

1. Copie el contenido siguiente en el archivo.

   ```
   GGC_ROOT_PATH=/greengrass/v2
   AWS_REGION=region
   PROVISION=true
   THING_NAME=MyGreengrassCore
   THING_GROUP_NAME=MyGreengrassCoreGroup
   TES_ROLE_NAME=GreengrassV2TokenExchangeRole
   TES_ROLE_ALIAS_NAME=GreengrassCoreTokenExchangeRoleAlias
   COMPONENT_DEFAULT_USER=ggc_user:ggc_group
   ```

   Reemplace los siguientes valores.
   + `/greengrass/v2`. La carpeta raíz de Greengrass que quiera usar para la instalación. Puede establecer este valor mediante la variable de entorno `GGC_ROOT`.
   + *region*. El Región de AWS lugar donde creaste los recursos.
   + *MyGreengrassCore*. El nombre de la AWS IoT cosa. Si el objeto no existe, el instalador la crea. El instalador descarga los certificados para autenticarse como tal AWS IoT . 
   + *MyGreengrassCoreGroup*. El nombre del grupo de AWS IoT cosas. Si el grupo de objetos no existe, el instalador lo crea y le agrega un objeto. Si el grupo de objetos existe y tiene una implementación activa, el dispositivo principal descarga y ejecuta el software que especifique la implementación.
   +  *GreengrassV2TokenExchangeRole*. Sustitúyalo por el nombre de la función de intercambio de fichas de IAM que permite al dispositivo principal de Greengrass obtener AWS credenciales temporales. Si el rol no existe, el instalador lo crea y crea y adjunta una política denominada Access. *GreengrassV2TokenExchangeRole* Para obtener más información, consulte [Autorizar a los dispositivos principales a interactuar con AWS los servicios](device-service-role.md).
   + *GreengrassCoreTokenExchangeRoleAlias*. El alias del rol de intercambio de fichas. Si el alias del rol no existe, el instalador lo crea y lo dirige al rol de intercambio de token de IAM que especifique. Para obtener más información, consulte 
**nota**  <a name="docker-local-dev-tools-production-environment-warning"></a>
Puede configurar la variable de entorno `DEPLOY_DEV_TOOLS` a `true` para implementar el [componente CLI de Greengrass](greengrass-cli-component.md), que le permite desarrollar componentes personalizados dentro del contenedor de Docker. <a name="local-dev-tools-production-environment-warning"></a>Se recomienda usar este componente solo en entornos de desarrollo y no en entornos de producción. Este componente brinda acceso a información y operaciones que, por lo general, no necesitará en un entorno de producción. Siga el principio de privilegio mínimo al implementar este componente solo en los dispositivos principales donde lo necesite. 

## Ejecute el software AWS IoT Greengrass principal en un contenedor
<a name="run-greengrass-image-automatic-provisioning"></a>

Este tutorial le muestra cómo iniciar la imagen de Docker que creó en un contenedor de Docker. Puede usar la CLI de Docker o la CLI de Docker Compose para ejecutar la imagen del software AWS IoT Greengrass principal en un contenedor de Docker. 

------
#### [ Docker ]

1. Ejecute el siguiente comando para iniciar el contenedor de Docker. 

   ```
   docker run --rm --init -it --name docker-image \
    -v path/to/greengrass-v2-credentials:/root/.aws/:ro \
    --env-file .env \
    -p 8883 \
    your-container-image:version
   ```

   Este comando de ejemplo usa los siguientes argumentos para [ejecutar docker](https://docs.docker.com/engine/reference/commandline/run/):
   + <a name="docker-run-rm"></a>[https://docs.docker.com/engine/reference/run/#clean-up---rm](https://docs.docker.com/engine/reference/run/#clean-up---rm). Limpia el contenedor al salir.
   + <a name="docker-run-init"></a>[https://docs.docker.com/engine/reference/run/#specify-an-init-process](https://docs.docker.com/engine/reference/run/#specify-an-init-process). Utiliza un proceso de inicio en el contenedor. 
**nota**  
El `--init` argumento es necesario para cerrar el software AWS IoT Greengrass Core al detener el contenedor de Docker.
   + <a name="docker-run-it"></a>[https://docs.docker.com/engine/reference/run/#foreground](https://docs.docker.com/engine/reference/run/#foreground). (Opcional) Ejecuta el contenedor de Docker en primer plano como un proceso interactivo. En su lugar, puede sustituirlo por el argumento `-d` para ejecutar el contenedor de Docker en modo separado. Para obtener más información, consulte [Separado frente a Primer plano](https://docs.docker.com/engine/reference/run/#detached-vs-foreground) en la documentación de Docker.
   + <a name="docker-run-name"></a>[https://docs.docker.com/engine/reference/run/#name---name](https://docs.docker.com/engine/reference/run/#name---name). Ejecuta un contenedor llamado `aws-iot-greengrass` 
   + <a name="docker-run-v"></a>[https://docs.docker.com/storage/volumes/](https://docs.docker.com/storage/volumes/). Monta un volumen en el contenedor de Docker para que el archivo de configuración y los archivos de certificado estén disponibles para su AWS IoT Greengrass ejecución dentro del contenedor.
   + <a name="docker-run-env-file"></a>[https://docs.docker.com/engine/reference/commandline/run/#env](https://docs.docker.com/engine/reference/commandline/run/#env). (Opcional) Especifica el archivo de entorno para establecer las variables de entorno que se pasarán al instalador del software AWS IoT Greengrass principal dentro del contenedor de Docker. Este argumento solo es necesario si ha creado un [archivo de entorno](run-greengrass-docker-manual-provisioning.md#create-env-file-manual-provisioning) para establecer variables de entorno. Si no creó un archivo de entorno, puede usar argumentos `--env` para establecer las variables de entorno directamente en el comando run de Docker.
   + <a name="docker-run-p"></a>[https://docs.docker.com/engine/reference/commandline/run/#publish](https://docs.docker.com/engine/reference/commandline/run/#publish). (Opcional) Publica el puerto contenedor 8883 en la máquina host. Este argumento es obligatorio si desea conectarse y comunicarse a través de MQTT, ya que AWS IoT Greengrass utiliza el puerto 8883 para el tráfico de MQTT. Para abrir otros puertos, utilice argumentos adicionales `-p`.
**nota**  <a name="docker-run-cap-drop"></a>
Para ejecutar su contenedor de Docker con mayor seguridad, puede usar los argumentos `--cap-drop` y `--cap-add` para habilitar de forma selectiva las capacidades de Linux para su contenedor. Para obtener más información, consulte [Privilegios en tiempo de ejecución y capacidades de Linux](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) en el sitio web de Docker.

1. <a name="docker-automatic-provisioning-remove-credentials-file"></a>Elimine las credenciales del `./greengrass-v2-credentials` en el dispositivo host.

   ```
   rm -rf ./greengrass-v2-credentials
   ```
**importante**  
Va a eliminar estas credenciales porque proporcionan amplios permisos que el dispositivo principal solo necesita durante la configuración. Si no elimina estas credenciales, los componentes de Greengrass y otros procesos que se ejecutan en el contenedor podrán acceder a ellas. Si necesita proporcionar AWS credenciales a un componente de Greengrass, utilice el servicio de intercambio de fichas. Para obtener más información, consulte [Interacción con servicios de AWS](interact-with-aws-services.md).

------
#### [ Docker Compose ]

1. Utilice un editor de texto para crear un archivo Docker Compose llamado `docker-compose.yml`.

   Por ejemplo, en un sistema basado en Linux, puede ejecutar el siguiente comando para usar GNU nano para crearlo en el `docker-compose.yml` en el directorio actual.

   ```
   nano docker-compose.yml
   ```
**nota**  
También puede descargar y usar la última versión del archivo Compose AWS proporcionado desde. [GitHub](https://github.com/aws-greengrass/aws-greengrass-docker/releases/)

1. Agregue el siguiente contenido al archivo Compose. El archivo debe ser similar al siguiente ejemplo. *docker-image*Sustitúyelo por el nombre de la imagen de Docker. 

   ```
   version: '3.7'
    
   services:
     greengrass:
       init: true
       container_name: aws-iot-greengrass
       image: docker-image
       volumes:
         - ./greengrass-v2-credentials:/root/.aws/:ro 
       env_file: .env
       ports:
         - "8883:8883"
   ```<a name="docker-compose-optional-params"></a>

   Los siguientes parámetros del archivo Compose de ejemplo son opcionales:
   + `ports`: (Opcional) Publica el puerto contenedor 8883 en la máquina host. Este parámetro es obligatorio si desea conectarse y comunicarse a través de MQTT, ya que AWS IoT Greengrass utiliza el puerto 8883 para el tráfico de MQTT. 
   + `env_file`—Especifica el archivo de entorno para establecer las variables de entorno que se pasarán al instalador del software AWS IoT Greengrass principal dentro del contenedor de Docker. Este parámetro solo es necesario si ha creado un [archivo de entorno](run-greengrass-docker-manual-provisioning.md#create-env-file-manual-provisioning) para establecer variables de entorno. Si no creó un archivo de entorno, puede usar el parámetro de [entorno](https://docs.docker.com/compose/compose-file/compose-file-v3/#environment) para configurar las variables directamente en su archivo Compose.
**nota**  <a name="docker-compose-cap-drop"></a>
Para ejecutar su contenedor de Docker con mayor seguridad, puede usar `cap_drop` y `cap_add` en su archivo Compose para habilitar de forma selectiva las capacidades de Linux para su contenedor. Para obtener más información, consulte [Privilegios en tiempo de ejecución y capacidades de Linux](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) en el sitio web de Docker.

1. Ejecute el siguiente comando para iniciar el contenedor de Docker.

   ```
   docker-compose -f docker-compose.yml up
   ```

1. <a name="docker-automatic-provisioning-remove-credentials-file"></a>Elimine las credenciales del `./greengrass-v2-credentials` en el dispositivo host.

   ```
   rm -rf ./greengrass-v2-credentials
   ```
**importante**  
Va a eliminar estas credenciales porque proporcionan amplios permisos que el dispositivo principal solo necesita durante la configuración. Si no elimina estas credenciales, los componentes de Greengrass y otros procesos que se ejecutan en el contenedor podrán acceder a ellas. Si necesita proporcionar AWS credenciales a un componente de Greengrass, utilice el servicio de intercambio de fichas. Para obtener más información, consulte [Interacción con servicios de AWS](interact-with-aws-services.md).

------

## Siguientes pasos
<a name="run-greengrass-docker-next-steps"></a>

<a name="run-greengrass-docker-success"></a>AWS IoT Greengrass El software principal se ejecuta ahora en un contenedor de Docker. Ejecute el siguiente comando para recuperar el ID del contenedor en el contenedor de ejecución actual.

```
docker ps
```

A continuación, puede ejecutar el siguiente comando para acceder al contenedor y explorar el software AWS IoT Greengrass principal que se ejecuta dentro del contenedor.

```
docker exec -it container-id /bin/bash
```

Para obtener más información sobre cómo crear un componente simple, consulte [Paso 4: Desarrollo y prueba de un componente en su dispositivo](create-first-component.md) en [Tutorial: Introducción a AWS IoT Greengrass V2](getting-started.md)

**nota**  <a name="run-greengrass-commands-in-docker-note"></a>
Cuando utiliza `docker exec` para ejecutar comandos dentro del contenedor de Docker, esos comandos no se capturan en los registros de Docker. Para registrar los comandos en los registros de Docker, asocie un intérprete de comandos interactivo al contenedor de Docker. Para obtener más información, consulte [Asociación de un intérprete de comandos interactivo a un contenedor de Docker](docker-troubleshooting.md#debugging-docker-attach-shell).

El archivo de registro AWS IoT Greengrass Core se llama `greengrass.log` y se encuentra en`/greengrass/v2/logs`. Los archivos de registro de componentes también se encuentran en el mismo directorio. Para copiar los registros de Greengrass en un directorio temporal del host, ejecute el siguiente comando:

```
docker cp container-id:/greengrass/v2/logs /tmp/logs
```

Si desea conservar los registros después de que un contenedor se cierre o se haya eliminado, le recomendamos que monte únicamente el directorio `/greengrass/v2/logs` en el directorio de registros temporales del host, en lugar de montar todo el directorio de Greengrass. Para obtener más información, consulte [Conservación de los registros de Greengrass fuera del contenedor de Docker](docker-troubleshooting.md#debugging-docker-persist-logs).

<a name="greengrass-docker-stop"></a>Para detener un contenedor AWS IoT Greengrass Docker en ejecución, ejecute `docker stop` o`docker-compose -f docker-compose.yml stop`. Esta acción envía `SIGTERM` al proceso de Greengrass y cierra todos los procesos asociados que se iniciaron en el contenedor. El contenedor de Docker se inicializa con el ejecutable `docker-init` como PID 1, lo que ayuda a eliminar los procesos zombis restantes. Para obtener más información, consulte la sección [Especificar un proceso de instalación](https://docs.docker.com/engine/reference/run/#specify-an-init-process) de la documentación de Docker.

<a name="see-docker-troubleshooting"></a>Para obtener más información acerca de la solución de problemas relacionados con la ejecución de AWS IoT Greengrass en un contenedor de Docker, consulte [Solución de problemas AWS IoT Greengrass en un contenedor Docker](docker-troubleshooting.md).

# Se ejecuta AWS IoT Greengrass en un contenedor Docker con aprovisionamiento manual de recursos
<a name="run-greengrass-docker-manual-provisioning"></a>

En este tutorial, se muestra cómo instalar y ejecutar el software AWS IoT Greengrass principal en un contenedor Docker con recursos aprovisionados manualmente. AWS 

**Topics**
+ [Requisitos previos](#docker-manual-provisioning-prereqs)
+ [Recupere los puntos finales AWS IoT](#retrieve-iot-endpoints)
+ [Crea cualquier AWS IoT cosa](#create-iot-thing)
+ [Creación del certificado del objeto](#create-thing-certificate-mp)
+ [Creación de un rol de intercambio de token](#create-token-exchange-role)
+ [Descarga de certificados al dispositivo](#download-thing-certificates)
+ [Creación de un archivo de configuración](#create-docker-install-configuration-file)
+ [Creación de un archivo de entorno](#create-env-file-manual-provisioning)
+ [Ejecute el software AWS IoT Greengrass principal en un contenedor](#run-greengrass-image-manual-provisioning)
+ [Siguientes pasos](#run-greengrass-docker-next-steps)

## Requisitos previos
<a name="docker-manual-provisioning-prereqs"></a>

Necesitará lo siguiente para completar este tutorial:
+ Un. Cuenta de AWS Si no dispone de una, consulte [Configura un Cuenta de AWS](setting-up.md#set-up-aws-account). 
+ Una imagen de AWS IoT Greengrass Docker. Puede [crear una imagen a partir del AWS IoT Greengrass Dockerfile](build-greengrass-dockerfile.md).
+ El equipo host en el que ejecute el contenedor de Docker debe cumplir los siguientes requisitos:
  + <a name="docker-host-reqs"></a>Sistema operativo basado en Linux con conexión a Internet.
  + <a name="docker-engine-reqs"></a>[Docker Engine](https://docs.docker.com/engine/install/), versión 18.09 o posterior.
  + <a name="docker-compose-reqs"></a>(Opcional) [Docker Compose](https://docs.docker.com/compose/install/) versión 1.22 o posterior. Docker Compose solo es necesario si quiere usar la CLI de Docker Compose para ejecutar sus imágenes de Docker.

## Recupere los puntos finales AWS IoT
<a name="retrieve-iot-endpoints"></a>

Obtenga los AWS IoT puntos finales que desee y guárdelos para usarlos más adelante. Cuenta de AWS El dispositivo usa estos puntos de conexión para conectarse a AWS IoT. Haga lo siguiente:

1. Obtenga el punto final AWS IoT de datos para su. Cuenta de AWS

   ```
   aws iot describe-endpoint --endpoint-type iot:Data-ATS
   ```

   Si la solicitud se realiza exitosamente, la respuesta se parece al siguiente ejemplo.

   ```
   {
     "endpointAddress": "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
   }
   ```

1. Obtenga el punto final de AWS IoT credenciales para su Cuenta de AWS.

   ```
   aws iot describe-endpoint --endpoint-type iot:CredentialProvider
   ```

   Si la solicitud se realiza exitosamente, la respuesta se parece al siguiente ejemplo.

   ```
   {
     "endpointAddress": "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
   }
   ```

## Crea cualquier AWS IoT cosa
<a name="create-iot-thing"></a>

AWS IoT *las cosas* representan dispositivos y entidades lógicas a las que se conectan AWS IoT. Los dispositivos principales de Greengrass son AWS IoT cosas. Cuando registras un dispositivo como una AWS IoT cosa, ese dispositivo puede usar un certificado digital para autenticarse. AWS

En esta sección, crearás AWS IoT algo que represente tu dispositivo.

**Para crear cualquier AWS IoT cosa**

1. Crea cualquier AWS IoT cosa para tu dispositivo. En su equipo de desarrollo, ejecute el siguiente comando.
   + *MyGreengrassCore*Sustitúyalo por el nombre de la cosa que se va a utilizar. Este nombre también es el nombre de su dispositivo principal de Greengrass.
**nota**  <a name="install-argument-thing-name-constraint"></a>
El nombre del objeto no puede contener dos puntos (`:`).

   ```
   aws iot create-thing --thing-name MyGreengrassCore
   ```

   Si la solicitud se realiza exitosamente, la respuesta se parece al siguiente ejemplo.

   ```
   {
     "thingName": "MyGreengrassCore",
     "thingArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore",
     "thingId": "8cb4b6cd-268e-495d-b5b9-1713d71dbf42"
   }
   ```

1. (Opcional) Añada la AWS IoT cosa a un grupo de cosas nuevo o existente. Los grupos de objetos se usan para administrar las flotas de dispositivos principales de Greengrass. Al implementar componentes de software en sus dispositivos, puede dirigirlos a dispositivos individuales o a grupos de dispositivos. Puede agregar un dispositivo a un grupo de objetos con una implementación activa de Greengrass para implementar los componentes de software de ese grupo de objetos en el dispositivo. Haga lo siguiente:

   1. (Opcional) Cree un grupo de AWS IoT cosas.
      + *MyGreengrassCoreGroup*Sustitúyalo por el nombre del grupo de cosas que desee crear.
**nota**  <a name="install-argument-thing-group-name-constraint"></a>
El nombre del grupo de objetos no puede contener dos puntos (`:`).

      ```
      aws iot create-thing-group --thing-group-name MyGreengrassCoreGroup
      ```

      Si la solicitud se realiza exitosamente, la respuesta se parece al siguiente ejemplo.

      ```
      {
        "thingGroupName": "MyGreengrassCoreGroup",
        "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/MyGreengrassCoreGroup",
        "thingGroupId": "4df721e1-ff9f-4f97-92dd-02db4e3f03aa"
      }
      ```

   1. Añada la AWS IoT cosa a un grupo de cosas.
      + *MyGreengrassCore*Sustitúyala por el nombre de la AWS IoT cosa.
      + *MyGreengrassCoreGroup*Sustitúyalo por el nombre del grupo de cosas.

      ```
      aws iot add-thing-to-thing-group --thing-name MyGreengrassCore --thing-group-name MyGreengrassCoreGroup
      ```

      El comando no tiene ningún resultado si la solicitud se realiza correctamente.

## Creación del certificado del objeto
<a name="create-thing-certificate-mp"></a>

<a name="create-thing-certificate-intro-1"></a>Al registrar un dispositivo como una AWS IoT cosa, ese dispositivo puede utilizar un certificado digital para autenticarse AWS. Este certificado permite que el dispositivo se comunique con AWS IoT y AWS IoT Greengrass.

<a name="create-thing-certificate-intro-2"></a>En esta sección, puede crear y descargar certificados que el dispositivo puede usar para conectarse a AWS.<a name="create-thing-certificate-cloud-steps"></a>

**Creación del certificado del objeto**

1. Crea una carpeta donde descargues los certificados de la AWS IoT cosa.

   ```
   mkdir greengrass-v2-certs
   ```

1. Crea y descarga los certificados de la AWS IoT cosa.

   ```
   aws iot create-keys-and-certificate --set-as-active --certificate-pem-outfile greengrass-v2-certs/device.pem.crt --public-key-outfile greengrass-v2-certs/public.pem.key --private-key-outfile greengrass-v2-certs/private.pem.key
   ```

   Si la solicitud se realiza exitosamente, la respuesta se parece al siguiente ejemplo.

   ```
   {
     "certificateArn": "arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificateId": "aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificatePem": "-----BEGIN CERTIFICATE-----
   MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w
    0BAQUFADCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZ
    WF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIw
    EAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5
    jb20wHhcNMTEwNDI1MjA0NTIxWhcNMTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBh
    MCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBb
    WF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMx
    HzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wgZ8wDQYJKoZIhvcNAQE
    BBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ21uUSfwfEvySWtC2XADZ4nB+BLYgVI
    k60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9TrDHudUZg3qX4waLG5M43q7Wgc/MbQ
    ITxOUSQv7c7ugFFDzQGBzZswY6786m86gpEIbb3OhjZnzcvQAaRHhdlQWIMm2nr
    AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4nUhVVxYUntneD9+h8Mg9q6q+auN
    KyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0FkbFFBjvSfpJIlJ00zbhNYS5f6Guo
    EDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTbNYiytVbZPQUQ5Yaxu2jXnimvw
    3rrszlaEXAMPLE=
   -----END CERTIFICATE-----",
     "keyPair": {
       "PublicKey": "-----BEGIN PUBLIC KEY-----\
   MIIBIjANBgkqhkEXAMPLEQEFAAOCAQ8AMIIBCgKCAQEAEXAMPLE1nnyJwKSMHw4h\
   MMEXAMPLEuuN/dMAS3fyce8DW/4+EXAMPLEyjmoF/YVF/gHr99VEEXAMPLE5VF13\
   59VK7cEXAMPLE67GK+y+jikqXOgHh/xJTwo+sGpWEXAMPLEDz18xOd2ka4tCzuWEXAMPLEahJbYkCPUBSU8opVkR7qkEXAMPLE1DR6sx2HocliOOLtu6Fkw91swQWEXAMPLE\\GB3ZPrNh0PzQYvjUStZeccyNCx2EXAMPLEvp9mQOUXP6plfgxwKRX2fEXAMPLEDa\
   hJLXkX3rHU2xbxJSq7D+XEXAMPLEcw+LyFhI5mgFRl88eGdsAEXAMPLElnI9EesG\
   FQIDAQAB\
   -----END PUBLIC KEY-----\
   ",
       "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\
   key omitted for security reasons\
   -----END RSA PRIVATE KEY-----\
   "
     }
   }
   ```

   Guarde el nombre de recurso de Amazon (ARN) del certificado para usarlo para configurar el certificado más adelante.

A continuación, configure el certificado de la cosa. Para obtener más información, consulte [Configuración del certificado del objeto](manual-installation.md#configure-thing-certificate).

## Creación de un rol de intercambio de token
<a name="create-token-exchange-role"></a>

<a name="installation-create-token-exchange-role-intro"></a>Los dispositivos principales de Greengrass utilizan una función de servicio de IAM, denominada función de *intercambio de fichas*, para autorizar las llamadas a los servicios. AWS El dispositivo utiliza el proveedor de AWS IoT credenciales para obtener AWS credenciales temporales para esta función, lo que permite al dispositivo interactuar con Amazon Logs AWS IoT, enviar registros a Amazon CloudWatch Logs y descargar artefactos de componentes personalizados de Amazon S3. Para obtener más información, consulte [Autorizar a los dispositivos principales a interactuar con AWS los servicios](device-service-role.md).

<a name="installation-create-token-exchange-role-alias-intro"></a>Se utiliza un *alias de AWS IoT rol* para configurar el rol de intercambio de fichas para los dispositivos principales de Greengrass. Los alias de rol le permiten cambiar el rol de intercambio de token de un dispositivo, pero mantener la configuración del dispositivo igual. Para obtener más información, consulte [Autorización de llamadas a los servicios de AWS](https://docs.aws.amazon.com/iot/latest/developerguide/authorizing-direct-aws.html) en la *Guía para desarrolladores de AWS IoT Core *.

En esta sección, creará un rol de IAM de intercambio de tokens y un alias de AWS IoT rol que apunte al rol. Si ya ha configurado un dispositivo principal de Greengrass, puede usar su rol de intercambio de token y su alias de rol en lugar de crear otros nuevos. A continuación, configure el objeto AWS IoT del dispositivo para que use ese rol y ese alias.

**Creación de un rol de IAM de intercambio de token**

1. <a name="create-token-exchange-role-create-iam-role"></a>Creación de un rol de IAM que su dispositivo puede usar como rol de intercambio de token. Haga lo siguiente:

   1. Creación de un archivo que contenga el documento de política de confianza que requiere el rol de intercambio de token.

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

      ```
      nano device-role-trust-policy.json
      ```

      Copie el siguiente JSON en el archivo.

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "credentials.iot.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }
      ```

   1. Creación del rol de intercambio de token con el documento de política de confianza.
      + *GreengrassV2TokenExchangeRole*Sustitúyalo por el nombre del rol de IAM que se va a crear.

      ```
      aws iam create-role --role-name GreengrassV2TokenExchangeRole --assume-role-policy-document file://device-role-trust-policy.json
      ```

      Si la solicitud se realiza exitosamente, la respuesta se parece al siguiente ejemplo.

      ```
      {
        "Role": {
          "Path": "/",
          "RoleName": "GreengrassV2TokenExchangeRole",
          "RoleId": "AROAZ2YMUHYHK5OKM77FB",
          "Arn": "arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole",
          "CreateDate": "2021-02-06T00:13:29+00:00",
          "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",		 	 	 
            "Statement": [
              {
                "Effect": "Allow",
                "Principal": {
                  "Service": "credentials.iot.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
              }
            ]
          }
        }
      ```

   1. Creación de un archivo que contenga el documento de política de acceso que requiere el rol de intercambio de token.

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

      ```
      nano device-role-access-policy.json
      ```

      Copie el siguiente JSON en el archivo.

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "logs:CreateLogGroup",
              "logs:CreateLogStream",
              "logs:PutLogEvents",
              "logs:DescribeLogStreams",
              "s3:GetBucketLocation"
            ],
            "Resource": "*"
          }
        ]
      }
      ```
**nota**  
Esta política de acceso no permite el acceso a los artefactos de componentes en los buckets de S3. Para implementar componentes personalizados que definan artefactos en Amazon S3, debe agregar permisos al rol para permitir que su dispositivo principal recupere artefactos de componentes. 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).  
Si aún no tiene un bucket de S3 para los artefactos de los componentes, puede agregar estos permisos más adelante, después de crear un bucket.

   1. Creación de la política de IAM a partir del documento de política.
      + *GreengrassV2TokenExchangeRoleAccess*Sustitúyalo por el nombre de la política de IAM que se va a crear.

      ```
      aws iam create-policy --policy-name GreengrassV2TokenExchangeRoleAccess --policy-document file://device-role-access-policy.json
      ```

      Si la solicitud se realiza exitosamente, la respuesta se parece al siguiente ejemplo.

      ```
      {
        "Policy": {
          "PolicyName": "GreengrassV2TokenExchangeRoleAccess",
          "PolicyId": "ANPAZ2YMUHYHACI7C5Z66",
          "Arn": "arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess",
          "Path": "/",
          "DefaultVersionId": "v1",
          "AttachmentCount": 0,
          "PermissionsBoundaryUsageCount": 0,
          "IsAttachable": true,
          "CreateDate": "2021-02-06T00:37:17+00:00",
          "UpdateDate": "2021-02-06T00:37:17+00:00"
        }
      }
      ```

   1. Adjunte la política de IAM al rol de intercambio de token.
      + Reemplace *GreengrassV2TokenExchangeRole* por el nombre del rol de IAM.
      + Reemplace el ARN de la política por el ARN de la política de IAM que creó en el paso anterior.

      ```
      aws iam attach-role-policy --role-name GreengrassV2TokenExchangeRole --policy-arn arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess
      ```

      El comando no tiene ningún resultado si la solicitud se realiza correctamente.

1. <a name="create-token-exchange-role-create-iot-role-alias"></a>Cree un alias de AWS IoT rol que apunte al rol de intercambio de fichas.
   + *GreengrassCoreTokenExchangeRoleAlias*Sustitúyalo por el nombre del alias del rol que se va a crear.
   + Reemplace el ARN del rol por el ARN del rol de IAM que creó en el paso anterior.

   ```
   aws iot create-role-alias --role-alias GreengrassCoreTokenExchangeRoleAlias --role-arn arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole
   ```

   Si la solicitud se realiza exitosamente, la respuesta se parece al siguiente ejemplo.

   ```
   {
     "roleAlias": "GreengrassCoreTokenExchangeRoleAlias",
     "roleAliasArn": "arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias"
   }
   ```
**nota**  
Para crear un alias de rol, debe tener el permiso para transferir el rol de IAM de intercambio de token a AWS IoT. Si recibe un mensaje de error al intentar crear un alias de rol, compruebe que el AWS usuario tiene este permiso. Para obtener más información, consulte [Conceder permisos a un usuario para transferir un rol a un AWS servicio](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html) en la *Guía del AWS Identity and Access Management usuario*.

1. Cree y adjunte una AWS IoT política que permita a su dispositivo principal de Greengrass utilizar el alias del rol para asumir el rol de intercambio de fichas. Si ya ha configurado un dispositivo principal de Greengrass, puede adjuntar su AWS IoT política de alias de rol en lugar de crear una nueva. Haga lo siguiente:

   1. (Opcional) Cree un archivo que contenga el documento AWS IoT de política que requiere el alias del rol.

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

      ```
      nano greengrass-v2-iot-role-alias-policy.json
      ```

      Copie el siguiente JSON en el archivo.
      + Reemplace el ARN del recurso por el ARN del alias de rol.

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "iot:AssumeRoleWithCertificate",
            "Resource": "arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias"
          }
        ]
      }
      ```

   1. Cree una AWS IoT política a partir del documento de política.
      + *GreengrassCoreTokenExchangeRoleAliasPolicy*Sustitúyala por el nombre de la AWS IoT política que se va a crear.

      ```
      aws iot create-policy --policy-name GreengrassCoreTokenExchangeRoleAliasPolicy --policy-document file://greengrass-v2-iot-role-alias-policy.json
      ```

      Si la solicitud se realiza exitosamente, la respuesta se parece al siguiente ejemplo.

      ```
      {
        "policyName": "GreengrassCoreTokenExchangeRoleAliasPolicy",
        "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassCoreTokenExchangeRoleAliasPolicy",
        "policyDocument": "{
          \\"Version\\":\\"2012-10-17		 	 	 \\",
          \\"Statement\\": [
            {
              \\"Effect\\": \\"Allow\\",
              \\"Action\\": \\"iot:AssumeRoleWithCertificate\\",
              \\"Resource\\": \\"arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias\\"
            }
          ]
        }",
        "policyVersionId": "1"
      }
      ```

   1. Adjunta la AWS IoT política al certificado de la AWS IoT cosa.
      + *GreengrassCoreTokenExchangeRoleAliasPolicy*Sustitúyala por el nombre de la AWS IoT política de alias del rol.
      + Reemplace el ARN de destino por el ARN del certificado de su objeto AWS IoT .

      ```
      aws iot attach-policy --policy-name GreengrassCoreTokenExchangeRoleAliasPolicy --target arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4
      ```

      El comando no tiene ningún resultado si la solicitud se realiza correctamente.

## Descarga de certificados al dispositivo
<a name="download-thing-certificates"></a>

Anteriormente, descargó el certificado de su dispositivo en su computadora de desarrollo. En esta sección, puede descargar el certificado de autoridad de certificación (CA) raíz de Amazon. A continuación, si planea ejecutar el software AWS IoT Greengrass principal de Docker en un equipo diferente al de desarrollo, debe copiar los certificados en ese equipo host. El software AWS IoT Greengrass Core usa estos certificados para conectarse al servicio AWS IoT en la nube.

**Descarga de certificados al dispositivo**

1. En tu ordenador de desarrollo, descarga el certificado de la autoridad de certificación raíz (CA) de Amazon. AWS IoT los certificados están asociados al certificado de CA raíz de Amazon de forma predeterminada.

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

   ```
   sudo curl -o ./greengrass-v2-certs/AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

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

   ```
   curl -o .\greengrass-v2-certs\AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

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

   ```
   iwr -Uri https://www.amazontrust.com/repository/AmazonRootCA1.pem -OutFile .\greengrass-v2-certs\AmazonRootCA1.pem
   ```

------

1. Si planea ejecutar el software AWS IoT Greengrass principal de Docker en un dispositivo diferente al de su ordenador de desarrollo, copie los certificados en el ordenador host. Si SSH y SCP están habilitados en la computadora de desarrollo y en la computadora host, puede utilizar el comando `scp` de la computadora de desarrollo para transferir el certificado. *device-ip-address*Sustitúyalos por la dirección IP de la computadora host.

   ```
   scp -r greengrass-v2-certs/ device-ip-address:~
   ```

## Creación de un archivo de configuración
<a name="create-docker-install-configuration-file"></a>

1. En la computadora host, cree una carpeta en la que coloque el archivo de configuración.

   ```
   mkdir ./greengrass-v2-config
   ```

1. Utilice un editor de texto para crear un archivo de configuración denominado `config.yaml` en la carpeta `./greengrass-v2-config`.

   Por ejemplo, puede ejecutar el comando siguiente para usar GNU nano para crear el `config.yaml`. 

   ```
   nano ./greengrass-v2-config/config.yaml
   ```

1. Copie el siguiente contenido YAML en el archivo. Este archivo de configuración parcial especifica los parámetros del sistema y los parámetros del núcleo de Greengrass.

   ```
   ---
   system:
     certificateFilePath: "/tmp/certs/device.pem.crt"
     privateKeyPath: "/tmp/certs/private.pem.key"
     rootCaPath: "/tmp/certs/AmazonRootCA1.pem"
     rootpath: "/greengrass/v2"
     thingName: "MyGreengrassCore"
   services:
     aws.greengrass.Nucleus:
       componentType: "NUCLEUS"
       version: "nucleus-version"
       configuration:
         awsRegion: "region"
         iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
         iotDataEndpoint: "device-data-prefix-ats.iot.region.amazonaws.com"
         iotCredEndpoint: "device-credentials-prefix.credentials.region.amazonaws.com"
   ```

   Reemplace los siguientes valores:
   + */tmp/certs*. El directorio del contenedor de Docker en el que se montan los certificados descargados al iniciar el contenedor.
   + `/greengrass/v2`. La carpeta raíz de Greengrass que quiera usar para la instalación. Puede establecer este valor mediante la variable de entorno `GGC_ROOT`.
   + *MyGreengrassCore*. El nombre de la AWS IoT cosa.
   + *nucleus-version*. La versión del software AWS IoT Greengrass principal que se va a instalar. Este valor debe coincidir con la versión de la imagen de Docker o del Dockerfile que ha descargado. Si ha descargado la imagen de Docker de Greengrass con la etiqueta `latest`, use ****docker inspect *image-id***** para ver la versión de la imagen.
   + *region*. El Región de AWS lugar donde creaste tus AWS IoT recursos. También debe especificar el mismo valor para la variable de entorno `AWS_REGION` en el [archivo de entorno](#create-env-file-manual-provisioning).
   + *GreengrassCoreTokenExchangeRoleAlias*. El alias del rol de intercambio de fichas.
   + *device-data-prefix*. El prefijo del punto final AWS IoT de datos.
   + *device-credentials-prefix*. El prefijo del punto final de tus AWS IoT credenciales.

## Creación de un archivo de entorno
<a name="create-env-file-manual-provisioning"></a>

En este tutorial, se utiliza un archivo de entorno para configurar las variables de entorno que se transferirán al instalador del software AWS IoT Greengrass principal dentro del contenedor de Docker. También puede utilizar [el argumento `-e` o `--env`](https://docs.docker.com/engine/reference/commandline/run/#env) en su comando `docker run` para establecer variables de entorno en el contenedor de Docker o puede establecer las variables en [un bloque `environment`](https://docs.docker.com/compose/compose-file/compose-file-v3/#environment) en el archivo `docker-compose.yml`.

1. Utilice un editor de texto para crear un archivo de política llamado `.env`.

   Por ejemplo, en un sistema basado en Linux, puede ejecutar el siguiente comando para usar GNU nano para crearlo en el `.env` en el directorio actual.

   ```
   nano .env
   ```

1. Copie el contenido siguiente en el archivo.

   ```
   GGC_ROOT_PATH=/greengrass/v2
   AWS_REGION=region
   PROVISION=false
   COMPONENT_DEFAULT_USER=ggc_user:ggc_group
   INIT_CONFIG=/tmp/config/config.yaml
   ```

   Reemplace los siguientes valores.
   + `/greengrass/v2`. La ruta a la carpeta raíz que se va a utilizar para instalar el software AWS IoT Greengrass principal.
   + *region*. El Región de AWS lugar donde creaste tus AWS IoT recursos. Debe especificar el mismo valor para el parámetro `awsRegion` de configuración en el [archivo de configuración](#create-docker-install-configuration-file).
   + */tmp/config/*. La carpeta en la que se monta el archivo de configuración al iniciar el contenedor de Docker.
**nota**  <a name="docker-local-dev-tools-production-environment-warning"></a>
Puede configurar la variable de entorno `DEPLOY_DEV_TOOLS` a `true` para implementar el [componente CLI de Greengrass](greengrass-cli-component.md), que le permite desarrollar componentes personalizados dentro del contenedor de Docker. <a name="local-dev-tools-production-environment-warning"></a>Se recomienda usar este componente solo en entornos de desarrollo y no en entornos de producción. Este componente brinda acceso a información y operaciones que, por lo general, no necesitará en un entorno de producción. Siga el principio de privilegio mínimo al implementar este componente solo en los dispositivos principales donde lo necesite. 

## Ejecute el software AWS IoT Greengrass principal en un contenedor
<a name="run-greengrass-image-manual-provisioning"></a>

Este tutorial le muestra cómo iniciar la imagen de Docker que creó en un contenedor de Docker. Puede usar la CLI de Docker o la CLI de Docker Compose para ejecutar la imagen del software AWS IoT Greengrass principal en un contenedor de Docker. 

------
#### [ Docker ]
+ Este tutorial le muestra cómo iniciar la imagen de Docker que creó en un contenedor de Docker. 

  ```
  docker run --rm --init -it --name docker-image \
   -v path/to/greengrass-v2-config:/tmp/config/:ro \
   -v path/to/greengrass-v2-certs:/tmp/certs:ro \ 
   --env-file .env \
   -p 8883 \
   your-container-image:version
  ```

  Este comando de ejemplo usa los siguientes argumentos para [ejecutar docker](https://docs.docker.com/engine/reference/commandline/run/):
  + <a name="docker-run-rm"></a>[https://docs.docker.com/engine/reference/run/#clean-up---rm](https://docs.docker.com/engine/reference/run/#clean-up---rm). Limpia el contenedor al salir.
  + <a name="docker-run-init"></a>[https://docs.docker.com/engine/reference/run/#specify-an-init-process](https://docs.docker.com/engine/reference/run/#specify-an-init-process). Utiliza un proceso de inicio en el contenedor. 
**nota**  
El `--init` argumento es necesario para cerrar el software AWS IoT Greengrass Core al detener el contenedor de Docker.
  + <a name="docker-run-it"></a>[https://docs.docker.com/engine/reference/run/#foreground](https://docs.docker.com/engine/reference/run/#foreground). (Opcional) Ejecuta el contenedor de Docker en primer plano como un proceso interactivo. En su lugar, puede sustituirlo por el argumento `-d` para ejecutar el contenedor de Docker en modo separado. Para obtener más información, consulte [Separado frente a Primer plano](https://docs.docker.com/engine/reference/run/#detached-vs-foreground) en la documentación de Docker.
  + <a name="docker-run-name"></a>[https://docs.docker.com/engine/reference/run/#name---name](https://docs.docker.com/engine/reference/run/#name---name). Ejecuta un contenedor llamado `aws-iot-greengrass` 
  + <a name="docker-run-v"></a>[https://docs.docker.com/storage/volumes/](https://docs.docker.com/storage/volumes/). Monta un volumen en el contenedor de Docker para que el archivo de configuración y los archivos de certificado estén disponibles para su AWS IoT Greengrass ejecución dentro del contenedor.
  + <a name="docker-run-env-file"></a>[https://docs.docker.com/engine/reference/commandline/run/#env](https://docs.docker.com/engine/reference/commandline/run/#env). (Opcional) Especifica el archivo de entorno para establecer las variables de entorno que se pasarán al instalador del software AWS IoT Greengrass principal dentro del contenedor de Docker. Este argumento solo es necesario si ha creado un [archivo de entorno](#create-env-file-manual-provisioning) para establecer variables de entorno. Si no creó un archivo de entorno, puede usar argumentos `--env` para establecer las variables de entorno directamente en el comando run de Docker.
  + <a name="docker-run-p"></a>[https://docs.docker.com/engine/reference/commandline/run/#publish](https://docs.docker.com/engine/reference/commandline/run/#publish). (Opcional) Publica el puerto contenedor 8883 en la máquina host. Este argumento es obligatorio si desea conectarse y comunicarse a través de MQTT, ya que AWS IoT Greengrass utiliza el puerto 8883 para el tráfico de MQTT. Para abrir otros puertos, utilice argumentos adicionales `-p`.
**nota**  <a name="docker-run-cap-drop"></a>
Para ejecutar su contenedor de Docker con mayor seguridad, puede usar los argumentos `--cap-drop` y `--cap-add` para habilitar de forma selectiva las capacidades de Linux para su contenedor. Para obtener más información, consulte [Privilegios en tiempo de ejecución y capacidades de Linux](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) en el sitio web de Docker.

------
#### [ Docker Compose ]

1. Utilice un editor de texto para crear un archivo Docker Compose llamado `docker-compose.yml`.

   Por ejemplo, en un sistema basado en Linux, puede ejecutar el siguiente comando para usar GNU nano para crearlo en el `docker-compose.yml` en el directorio actual.

   ```
   nano docker-compose.yml
   ```
**nota**  
También puedes descargar y usar la última versión del archivo Compose AWS proporcionado desde. [GitHub](https://github.com/aws-greengrass/aws-greengrass-docker/releases/)

1. Agregue el siguiente contenido al archivo Compose. El archivo debe ser similar al siguiente ejemplo. *your-container-name:version*Sustitúyelo por el nombre de la imagen de Docker. 

   ```
   version: '3.7'
    
   services:
     greengrass:
       init: true
       build:
         context: .
       container_name: aws-iot-greengrass
       image: your-container-name:version
       volumes:
         - /path/to/greengrass-v2-config:/tmp/config/:ro
         - /path/to/greengrass-v2-certs:/tmp/certs:ro 
       env_file: .env
       ports:
         - "8883:8883"
   ```<a name="docker-compose-optional-params"></a>

   Los siguientes parámetros del archivo Compose de ejemplo son opcionales:
   + `ports`: (Opcional) Publica el puerto contenedor 8883 en la máquina host. Este parámetro es obligatorio si desea conectarse y comunicarse a través de MQTT, ya que AWS IoT Greengrass utiliza el puerto 8883 para el tráfico de MQTT. 
   + `env_file`—Especifica el archivo de entorno para establecer las variables de entorno que se pasarán al instalador del software AWS IoT Greengrass principal dentro del contenedor de Docker. Este parámetro solo es necesario si ha creado un [archivo de entorno](#create-env-file-manual-provisioning) para establecer variables de entorno. Si no creó un archivo de entorno, puede usar el parámetro de [entorno](https://docs.docker.com/compose/compose-file/compose-file-v3/#environment) para configurar las variables directamente en su archivo Compose.
**nota**  <a name="docker-compose-cap-drop"></a>
Para ejecutar su contenedor de Docker con mayor seguridad, puede usar `cap_drop` y `cap_add` en su archivo Compose para habilitar de forma selectiva las capacidades de Linux para su contenedor. Para obtener más información, consulte [Privilegios en tiempo de ejecución y capacidades de Linux](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) en el sitio web de Docker.

1. Para iniciar el contenedor, ejecute el siguiente comando.

   ```
   docker-compose -f docker-compose.yml up
   ```

------

## Siguientes pasos
<a name="run-greengrass-docker-next-steps"></a>

<a name="run-greengrass-docker-success"></a>AWS IoT Greengrass El software principal se ejecuta ahora en un contenedor de Docker. Ejecute el siguiente comando para recuperar el ID del contenedor en el contenedor de ejecución actual.

```
docker ps
```

A continuación, puede ejecutar el siguiente comando para acceder al contenedor y explorar el software AWS IoT Greengrass principal que se ejecuta dentro del contenedor.

```
docker exec -it container-id /bin/bash
```

Para obtener más información sobre cómo crear un componente simple, consulte [Paso 4: Desarrollo y prueba de un componente en su dispositivo](create-first-component.md) en [Tutorial: Introducción a AWS IoT Greengrass V2](getting-started.md)

**nota**  <a name="run-greengrass-commands-in-docker-note"></a>
Cuando utiliza `docker exec` para ejecutar comandos dentro del contenedor de Docker, esos comandos no se capturan en los registros de Docker. Para registrar los comandos en los registros de Docker, asocie un intérprete de comandos interactivo al contenedor de Docker. Para obtener más información, consulte [Asociación de un intérprete de comandos interactivo a un contenedor de Docker](docker-troubleshooting.md#debugging-docker-attach-shell).

El archivo de registro AWS IoT Greengrass Core se llama `greengrass.log` y se encuentra en`/greengrass/v2/logs`. Los archivos de registro de componentes también se encuentran en el mismo directorio. Para copiar los registros de Greengrass en un directorio temporal del host, ejecute el siguiente comando:

```
docker cp container-id:/greengrass/v2/logs /tmp/logs
```

Si desea conservar los registros después de que un contenedor se cierre o se haya eliminado, le recomendamos que monte únicamente el directorio `/greengrass/v2/logs` en el directorio de registros temporales del host, en lugar de montar todo el directorio de Greengrass. Para obtener más información, consulte [Conservación de los registros de Greengrass fuera del contenedor de Docker](docker-troubleshooting.md#debugging-docker-persist-logs).

<a name="greengrass-docker-stop"></a>Para detener un contenedor AWS IoT Greengrass Docker en ejecución, ejecute `docker stop` o`docker-compose -f docker-compose.yml stop`. Esta acción envía `SIGTERM` al proceso de Greengrass y cierra todos los procesos asociados que se iniciaron en el contenedor. El contenedor de Docker se inicializa con el ejecutable `docker-init` como PID 1, lo que ayuda a eliminar los procesos zombis restantes. Para obtener más información, consulte la sección [Especificar un proceso de instalación](https://docs.docker.com/engine/reference/run/#specify-an-init-process) de la documentación de Docker.

<a name="see-docker-troubleshooting"></a>Para obtener más información acerca de la solución de problemas relacionados con la ejecución de AWS IoT Greengrass en un contenedor de Docker, consulte [Solución de problemas AWS IoT Greengrass en un contenedor Docker](docker-troubleshooting.md).

# Solución de problemas AWS IoT Greengrass en un contenedor Docker
<a name="docker-troubleshooting"></a>

Usa la siguiente información como ayuda para solucionar problemas relacionados con la ejecución AWS IoT Greengrass en un contenedor de Docker y para depurar los problemas AWS IoT Greengrass en el contenedor de Docker.

**Topics**
+ [Solución de problemas al ejecutar el contenedor de Docker](#troubleshooting-container-errors)
+ [Depuración en un contenedor de Docker AWS IoT Greengrass](#debugging-greengrass-in-docker)

## Solución de problemas al ejecutar el contenedor de Docker
<a name="troubleshooting-container-errors"></a>

Usa la siguiente información para solucionar problemas relacionados con la ejecución AWS IoT Greengrass en un contenedor de Docker.

**Topics**
+ [Error: No se puede realizar un inicio de sesión interactivo desde un dispositivo que no sea TTY](#docker-troubleshootin-ecr-get-login-password)
+ [Error: opciones desconocidas: - no-include-email](#docker-troubleshooting-cli-version)
+ [Error: A firewall is blocking file Sharing between windows and the containers.](#docker-troubleshooting-firewall)
+ [Error: se produjo un error (AccessDeniedException) al llamar a la GetAuthorizationToken operación: el usuario: arn:aws:iam: ::user/ <user-name>no *account-id* está autorizado a realizar: ecr: on resource: \$1 GetAuthorizationToken](#docker-troubleshooting-ecr-perms)
+ [Error: Ha alcanzado su límite de tasa de cambios](#docker-troubleshooting-too-many-requests)

### Error: No se puede realizar un inicio de sesión interactivo desde un dispositivo que no sea TTY
<a name="docker-troubleshootin-ecr-get-login-password"></a>

Este error puede producirse al ejecutar el comando `aws ecr get-login-password`. Asegúrese de haber instalado la AWS CLI versión 2 o 1 más reciente. Le recomendamos que utilice la AWS CLI versión 2. Para obtener más información, consulte [Installing the AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) en la *Guía del usuario de AWS Command Line Interface *.

### Error: opciones desconocidas: - no-include-email
<a name="docker-troubleshooting-cli-version"></a>

Este error puede producirse al ejecutar el comando `aws ecr get-login`. Asegúrese de tener instalada la última AWS CLI versión (por ejemplo, Run:`pip install awscli --upgrade --user`). Para obtener más información, consulte [Instalación de AWS Command Line Interface en Microsoft Windows](https://docs.aws.amazon.com/cli/latest/userguide/awscli-install-windows.html) en la *Guía del AWS Command Line Interface usuario*.

### Error: A firewall is blocking file Sharing between windows and the containers.
<a name="docker-troubleshooting-firewall"></a>

Puede que reciba este error o un mensaje `Firewall Detected` al ejecutar Docker en un equipo Windows. Esto también puede ocurrir si ha iniciado sesión en una red privada virtual (VPN) y su configuración de red impide el montaje de la unidad compartida. En esta situación, desactive la VPN y vuelva a ejecutar el contenedor Docker.

### Error: se produjo un error (AccessDeniedException) al llamar a la GetAuthorizationToken operación: el usuario: arn:aws:iam: ::user/ <user-name>no *account-id* está autorizado a realizar: ecr: on resource: \$1 GetAuthorizationToken
<a name="docker-troubleshooting-ecr-perms"></a>

Puede recibir este error al ejecutar el comando `aws ecr get-login-password` si no tiene los permisos suficientes para acceder a un repositorio de Amazon ECR. Para obtener más información, consulte los [Ejemplos de políticas de repositorios de Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-policy-examples.html) y el [Acceso a un repositorio de Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security_iam_id-based-policy-examples.html) en la *Guía del usuario de Amazon ECR*.

### Error: Ha alcanzado su límite de tasa de cambios
<a name="docker-troubleshooting-too-many-requests"></a>

Docker Hub limita la cantidad de solicitudes de cambio que pueden realizar los usuarios anónimos y gratuitos de Docker Hub. Si supera los límites de tasa de solicitudes de cambio de usuarios anónimos o gratuitos, entonces recibe uno de los siguientes errores: 

  

```
ERROR: toomanyrequests: Too Many Requests.
```

  

```
You have reached your pull rate limit.
```

Para resolver estos errores, puede esperar unas horas antes de intentar realizar otra solicitud de cambio. Si planea enviar una gran cantidad de solicitudes de cambio de forma constante, visite el [sitio web de Docker Hub](https://www.docker.com/increase-rate-limits) para obtener información sobre los límites de tasa y las opciones para autenticar y actualizar su cuenta de Docker. 

## Depuración en un contenedor de Docker AWS IoT Greengrass
<a name="debugging-greengrass-in-docker"></a>

Para depurar problemas con un contenedor de Docker, puede conservar los registros del tiempo de ejecución de Greengrass o asociar un intérprete de comandos interactivo al contenedor de Docker.

### Conservación de los registros de Greengrass fuera del contenedor de Docker
<a name="debugging-docker-persist-logs"></a>

Tras detener un AWS IoT Greengrass contenedor, puede usar el siguiente `docker cp ` comando para copiar los registros de Greengrass del contenedor de Docker a un directorio de registros temporal. 

```
docker cp container-id:/greengrass/v2/logs /tmp/logs
```

Para conservar los registros incluso después de que un contenedor salga o se elimine, debe ejecutar el contenedor AWS IoT Greengrass Docker después de montar el directorio en un enlace. `/greengrass/v2/logs` 

Para montar el `/greengrass/v2/logs` directorio de forma binaria, realiza una de las siguientes acciones cuando ejecutes un nuevo contenedor de Docker. AWS IoT Greengrass 
+ Incluya `-v /tmp/logs:/greengrass/v2/logs:ro` en su comando `docker run`.

  Modifique el bloque `volumes` en el archivo de Compose para incluir la siguiente línea antes de ejecutar el comando `docker-compose up`.

  ```
  volumes:
   - /tmp/logs:/greengrass/v2/logs:ro
  ```

A continuación, puede comprobar sus registros `/tmp/logs` en su host para ver los registros de Greengrass mientras AWS IoT Greengrass se ejecuta dentro del contenedor de Docker.

Para obtener información sobre cómo ejecutar contenedores de Docker de Greengrass, consulte [Se ejecuta AWS IoT Greengrass en Docker con aprovisionamiento manual](run-greengrass-docker-manual-provisioning.md) y [Se ejecuta AWS IoT Greengrass en Docker con aprovisionamiento automático](run-greengrass-docker-automatic-provisioning.md).

### Asociación de un intérprete de comandos interactivo a un contenedor de Docker
<a name="debugging-docker-attach-shell"></a>

Cuando utiliza `docker exec` para ejecutar comandos dentro del contenedor de Docker, esos comandos no se capturan en los registros de Docker. Registrar los comandos en los registros de Docker puede ayudarlo a investigar el estado del contenedor de Docker de Greengrass. Realice una de las siguientes acciones:
+ Ejecute el siguiente comando en un terminal independiente para adjuntar la entrada, la salida y el error estándar del terminal al contenedor en ejecución. Esto le permite ver y controlar el contenedor de Docker desde su terminal actual.

  ```
  docker attach container-id
  ```
+ Ejecute el siguiente comando en un terminal independiente. Esto le permite ejecutar sus comandos en modo interactivo, incluso si el contenedor no está conectado.

  ```
  docker exec -it container-id sh -c "command > /proc/1/fd/1"
  ```

Para obtener información general sobre la AWS IoT Greengrass solución de problemas, consulte. [Solución de problemas AWS IoT Greengrass V2](troubleshooting.md)