

# Paso 3: implementar en producción mediante el servicio de DynamoDB
<a name="TicTacToe.Phase3"></a>

**Topics**
+ [3.1: crear un rol de IAM para Amazon EC2](#TicTacToe.DeployInProd.IAMCreateRole)
+ [3.2: crear la tabla de juegos en Amazon DynamoDB](#TicTacToe.DeployInProd.CreateTable)
+ [3.3: agrupar e implementar el código de la aplicación tic-tac-toe (tres en raya)](#TicTacToe.DeployInProd.IAMBundleDeployCode)
+ [3.4: configurar el entorno de AWS Elastic Beanstalk](#TicTacToe.DeployInProd.SetUpElasticBeanstalk)

En las secciones anteriores, hemos implementado y probado la aplicación Tic-Tac-Toe (Tres en raya) localmente en su equipo utilizando DynamoDB Local. Ahora, vamos a implementarla en un entorno de producción, del siguiente modo:
+ Implemente la aplicación con AWS Elastic Beanstalk, un servicio fácil de utilizar para implementar y ampliar servicios y aplicaciones web. Para obtener más información, consulte [Implementar una aplicación flask en AWS Elastic Beanstalk](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-flask.html).

  Elastic Beanstalk lanzará una o varias instancias Amazon Elastic Compute Cloud (Amazon EC2), que configura a través de Elastic Beanstalk, en las que se ejecutará su aplicación Tic-Tac-Toe (Tres en raya).
+ Con el servicio de Amazon DynamoDB, cree una tabla `Games` que exista en AWS, en lugar de existir localmente en su ordenador. 

Además, tendrá que configurar los permisos. Todos los recursos de AWS que cree, tales como la tabla `Games` en DynamoDB, son privados de forma predeterminada. Solo el propietario del recurso, es decir, la cuenta de AWS que ha creado la tabla `Games`, puede obtener acceso a esta tabla. Por lo tanto, la aplicación Tic-Tac-Toe (Tres en raya) no puede actualizar la tabla `Games` de forma predeterminada. 

Para conceder los permisos necesarios, cree un rol de AWS Identity and Access Management (IAM) y concédale permisos para tener acceso a la tabla `Games`. Primero, la instancia de Amazon EC2 asume este rol. En respuesta, AWS devuelve credenciales de seguridad temporales que la instancia de Amazon EC2 puede utilizar para actualizar la tabla `Games` en nombre de la aplicación Tic-Tac-Toe (Tres en raya). Al configurar su aplicación en Elastic Beanstalk, debe especificar el rol de IAM que la instancia o instancias de Amazon EC2 pueden asumir. Para obtener más información acerca de los roles de IAM, consulte [Roles de IAM para Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html) en la *Guía del usuario de Amazon EC2*.

**nota**  
Antes de crear instancias de Amazon EC2 para la aplicación Tic-Tac-Toe (Tres en raya), primero debe decidir en qué región de AWS desea que Elastic Beanstalk las cree. Después de crear la aplicación de Elastic Beanstalk, proporcione el mismo nombre de región y el mismo punto de enlace en un archivo de configuración. La aplicación Tic-Tac-Toe (Tres en raya) utiliza la información de este archivo para crear la tabla `Games` y enviar las solicitudes subsiguientes en una región de AWS específica. Tanto la tabla `Games` de DynamoDB como las instancias de Amazon EC2 que Elastic Beanstalk lanza deben estar en la misma región. Para ver una lista de regiones disponibles, consulte [Amazon DynamoDB ](https://docs.aws.amazon.com/general/latest/gr/rande.html#ddb_region) en la *Referencia general de Amazon Web Services*.

Resumiendo, debe hacer lo siguiente para implementar la aplicación Tic-Tac-Toe en un entorno de producción:

1. Cree un rol de IAM mediante el servicio IAM. Debe adjuntar una política a este rol que conceda permisos para realizar las acciones de DynamoDB que se requieren para obtener acceso a la tabla `Games`. 

1. Empaquete el código de la aplicación Tic-Tac-Toe y un archivo de configuración y cree un archivo `.zip`. Utilice este archivo `.zip` para proporcionar el código de la aplicación Tic-Tac-Toe (Tres en raya) a Elastic Beanstalk y ponerlo en sus servidores. Para obtener más información sobre cómo crear una agrupación, consulte [Creación de una agrupación de origen de aplicación](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.deployment.source.html) en la *Guía para desarrolladores de AWS Elastic Beanstalk*.

   En el archivo de configuración (`beanstalk.config`), se indica la información sobre la región y el punto de enlace de AWS. La aplicación Tic-Tac-Toe (Tres en raya) utiliza esta información para determinar con qué región de DynamoDB debe comunicarse. 

1. Configure el entorno de Elastic Beanstalk. Elastic Beanstalk lanzará una o varias instancias de Amazon EC2 e implementará el paquete de la aplicación Tic-Tac-Toe (Tres en raya) en ellas. Una vez que el entorno de Elastic Beanstalk esté preparado, deberá indicar el nombre del archivo de configuración agregando la variable de entorno `CONFIG_FILE`.

1. Crear una tabla de DynamoDB Con el servicio de Amazon DynamoDB, cree una tabla `Games` en AWS, en lugar de localmente en su ordenador. Recuerde que esta tabla posee una clave principal simple que consta de la clave de partición `GameId`, de tipo String. 

1. Pruebe el juego en el entorno de producción. 

## 3.1: crear un rol de IAM para Amazon EC2
<a name="TicTacToe.DeployInProd.IAMCreateRole"></a>

La creación de un rol de IAM del tipo **Amazon EC2** permitirá que la instancia de Amazon EC2 en la que se ejecuta la aplicación Tic-Tac-Toe (Tres en raya) asuma el rol correcto y realice solicitudes a la aplicación para obtener acceso a la tabla `Games`. Al crear el rol, elija la opción **Custom Policy (Política personalizada)** y copie y pegue la siguiente política.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Action":[
            "dynamodb:ListTables"
         ],
         "Effect":"Allow",
         "Resource":"*"
      },
      {
         "Action":[
            "dynamodb:*"
         ],
         "Effect":"Allow",
         "Resource":[
            "arn:aws:dynamodb:us-west-2:922852403271:table/Games",
            "arn:aws:dynamodb:us-west-2:922852403271:table/Games/index/*"
         ]
      }
   ]
}
```

------

Para obtener más instrucciones, consulte [Creación de un rol para un servicio de AWS (Consola de administración de AWS)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html) en la *Guía del usuario de IAM.*

## 3.2: crear la tabla de juegos en Amazon DynamoDB
<a name="TicTacToe.DeployInProd.CreateTable"></a>

La tabla `Games` en DynamoDB almacena datos del juego. Si la tabla no existiera, la aplicación la crearía automáticamente. En este caso, permita que la aplicación cree la tabla `Games`.

## 3.3: agrupar e implementar el código de la aplicación tic-tac-toe (tres en raya)
<a name="TicTacToe.DeployInProd.IAMBundleDeployCode"></a>

Si ha seguido los pasos de este ejemplo, ya tendrá la aplicación Tic-Tac-Toe descargada. Si no es así, descargue la aplicación y extraiga todos los archivos en una carpeta en su equipo local. Para obtener instrucciones, consulte [Paso 1: implementar y probar localmente](TicTacToe.Phase1.md).

Después de extraer todos los archivos, observe que se ha creado la carpeta `code`. Para proporcionar esta carpeta a Elastic Beanstalk, debe empaquetar su contenido en un archivo `.zip`. En primer lugar, debe agregar un archivo de configuración a dicha carpeta. Su aplicación utiliza la información sobre la región y el punto de enlace para crear una tabla de DynamoDB en la región especificada y para realizar las solicitudes de operaciones subsiguientes a la tabla con el punto de enlace indicado.

1. Cambie a la carpeta en la que ha descargado la aplicación Tic-Tac-Toe.

1. En la carpeta raíz de la aplicación, cree un archivo de texto denominado `beanstalk.config` con el contenido siguiente.

   ```
   [dynamodb]
   region={{<AWS region>}}
   endpoint={{<DynamoDB endpoint>}}
   ```

   Por ejemplo, podría utilizar el contenido siguiente.

   ```
   [dynamodb]
   region=us-west-2
   endpoint=dynamodb.us-west-2.amazonaws.com
   ```

   Para obtener una lista de regiones disponibles, consulte [Amazon DynamoDB ](https://docs.aws.amazon.com/general/latest/gr/rande.html#ddb_region) en la *Referencia general de Amazon Web Services.* 
**importante**  
La región especificada en el archivo de configuración es la ubicación donde la aplicación Tic-Tac-Toe (Tres en raya) creará la tabla `Games` en DynamoDB. Debe crear la aplicación de Elastic Beanstalk que se describe en la siguiente sección en la misma región. 
**nota**  
Al crear la aplicación de Elastic Beanstalk, solicita que se lance un entorno cuyo tipo sea posible elegir el tipo de entorno. Para probar la aplicación Tic-Tac-Toe del ejemplo, puede elegir el tipo de entorno **Single Instance (Instancia individual)**, omitir el resto e ir al paso siguiente.   
No obstante, tenga en cuenta que el tipo de entorno **Load balancing, autoscaling (Auto Scaling con balanceo de carga)** proporciona un entorno altamente disponible y escalable, algo que debe tener en cuenta al crear e implementar otras aplicaciones. Si elige este tipo de entorno, también debe generar un UUID y agregárselo al archivo de configuración, tal y como se muestra a continuación.  

   ```
   [dynamodb]
   region=us-west-2
   endpoint=dynamodb.us-west-2.amazonaws.com
   [flask]
   secret_key= 284e784d-1a25-4a19-92bf-8eeb7a9example
   ```
En la comunicación cliente-servidor en la cual el servidor envía la respuesta, por motivos de seguridad el servidor envía una cookie firmada que el cliente devuelve al servidor en la siguiente solicitud. Cuando hay un único servidor, este puede generar localmente una clave de cifrado al iniciarse. Si hay muchos servidores, todos ellos deben conocer la misma clave de cifrado; de lo contrario, no podrán leer las cookies establecidas por los demás servidores. Si se agrega `secret_key` al archivo de configuración, indica a todos los servidores que utilicen esta clave de cifrado.

1. Comprima el contenido de la carpeta raíz de la aplicación (que incluye el archivo `beanstalk.config`); por ejemplo, `TicTacToe.zip`. 

1. Cargue el archivo `.zip` en un bucket de Amazon Simple Storage Service (Amazon S3). En la siguiente sección, proporcionaremos este archivo `.zip` a Elastic Beanstalk para cargarlo en el o los servidores.

   Para obtener instrucciones sobre cómo cargar un archivo en un bucket de Amazon S3, consulte [Crear un Bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingABucket.html) y [Agregar un objeto a un bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/PuttingAnObjectInABucket.html) en la *Guía del usuario de Amazon Simple Storage Service*.

## 3.4: configurar el entorno de AWS Elastic Beanstalk
<a name="TicTacToe.DeployInProd.SetUpElasticBeanstalk"></a>

En este paso, se crea una aplicación de Elastic Beanstalk, que es una colección de componentes, incluidos los entornos. En este ejemplo vamos a lanzar una instancia Amazon EC2 para implementar y ejecutar la aplicación Tic-Tac-Toe (Tres en raya).

1. Ingrese la siguiente URL personalizada con el fin de configurar una consola de Elastic Beanstalk para configurar el entorno.

   ```
   https://console.aws.amazon.com/elasticbeanstalk/?region={{<AWS-Region>}}#/newApplication
   ?applicationName=TicTacToe{{your-name}}
   &solutionStackName=Python
   &sourceBundleUrl=https://s3.amazonaws.com/{{<bucket-name>}}/{{TicTacToe.zip}}
   &environmentType=SingleInstance
   &instanceType=t1.micro
   ```

   Para obtener más información sobre las URL personalizadas, consulte [Construir una URL de lanzamiento inmediato](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/launch-now-url.html) en la *Guía de desarrolladores de Elastic Beanstalk de AWS Elastic Beanstalk.* Para la URL, tenga en cuenta lo siguiente:
   + Debe proporcionar el nombre de una región de AWS (el mismo que ha facilitado en el archivo de configuración), un bucket de Amazon S3 y el nombre de objeto. 
   + Para las pruebas, la URL solicita el tipo de entorno **SingleInstance** y `t1.micro` como tipo de instancia.
   + El nombre de la aplicación debe ser único. Así pues, en la URL anterior, sugerimos que anteponga su propio nombre a `applicationName`.

   Al hacerlo, se abre la consola de Elastic Beanstalk. En algunos casos, es posible que deba iniciar sesión.

1. En la consola de Elastic Beanstalk, elija **Review and Launch** y, a continuación, elija **Launch**. 

1. Anote la URL para futuras consultas. Esta URL abre la página de inicio de la aplicación Tic-Tac-Toe.   
![Captura de pantalla de la aplicación que muestra el mensaje de que el entorno se está creando en la página de inicio.](http://docs.aws.amazon.com/es_es/amazondynamodb/latest/developerguide/images/tic-tac-toe-beanstalk-setup-50.png)

1. Configure la aplicación Tic-Tac-Toe de modo que conozca la ubicación del archivo de configuración.

   Una vez que Elastic Beanstalk haya creado la aplicación, elija **Configuration**. 

   1. Elija el icono con forma de engranaje que aparece junto a **Software Configuration (Configuración de software)**, tal y como se muestra en la captura de pantalla siguiente.  
![Captura de pantalla de la aplicación Tic-Tac-toe (Tres en raya) que muestra el icono con forma de engranaje junto a Software Configuration (Configuración de software).](http://docs.aws.amazon.com/es_es/amazondynamodb/latest/developerguide/images/tic-tac-toe-beanstalk-setup-60.png)

   1. Al final de la sección **Environment Properties (Propiedades de entorno)**, escriba **CONFIG\_FILE** y su valor **beanstalk.config**; a continuación, elija **Save (Guardar)**.

      Puede que la actualización del entorno tarde unos minutos en completarse.   
![Captura de pantalla de la aplicación que muestra la sección Environment Properties (Propiedades de entorno).](http://docs.aws.amazon.com/es_es/amazondynamodb/latest/developerguide/images/tic-tac-toe-beanstalk-setup-70.png)

   Una vez completada la actualización, ya puede jugar.

1. En el navegador, escriba la URL que copió en el paso anterior, tal y como se muestra en el siguiente ejemplo. 

   ```
   http://{{<pen-name>}}.elasticbeanstalk.com
   ```

   Se abrirá la página de inicio de la aplicación.  
![Captura de pantalla de la página de inicio de la aplicación que muestra el botón Create (Crear), invitaciones, partidas en curso y el historial reciente.](http://docs.aws.amazon.com/es_es/amazondynamodb/latest/developerguide/images/tic-tac-toe-inprod-playgame-10.png)

1. Inicie sesión como testuser1 y elija **CREATE (CREAR)** para comenzar una nueva partida de tres en raya. 

1. Escriba **testuser2** en el cuadro **Choose an Opponent (Elegir un contrincante)**.  
![Captura de pantalla de la aplicación que muestra el cuadro Choose an Opponent (Elegir un contrincante).](http://docs.aws.amazon.com/es_es/amazondynamodb/latest/developerguide/images/tic-tac-toe-inprod-playgame-20.png)

1. Abra otra ventana del navegador. 

   Asegúrese de borrar todas las cookies en la ventana del navegador para no iniciar sesión con el mismo nombre de usuario.

1. Escriba la misma URL para abrir la página de inicio de la aplicación, tal y como se muestra en el ejemplo siguiente.

   ```
   http://{{<env-name>}}.elasticbeanstalk.com
   ```

1. Inicie sesión como testuser2.

1. Vaya a la invitación de testuser1 en la lista de invitaciones pendientes y elija **accept (aceptar)**.  
![Captura de pantalla de la aplicación que muestra la invitación testuser1 en la lista de invitaciones.](http://docs.aws.amazon.com/es_es/amazondynamodb/latest/developerguide/images/tic-tac-toe-inprod-playgame-30.png)

1. Ahora aparece la página de la partida.  
![Captura de pantalla de la aplicación que muestra una cuadrícula vacía de Tic-Tac-Toe (Tres en raya).](http://docs.aws.amazon.com/es_es/amazondynamodb/latest/developerguide/images/tic-tac-toe-inprod-playgame-40.png)

   Pueden jugar la partida los usuarios testuser1 y testuser2. La aplicación guardará cada jugada en el elemento correspondiente de la tabla `Games`. 