

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.

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