Blog de Amazon Web Services (AWS)

Acelerar aprendizaje remoto en minutos usando Moodle en AWS

Por Luis Baeza, Arquitecto de Soluciones AWS

Introducción

La Organización de las Naciones Unidas para la Educación, la Ciencia y la Cultura (UNESCO) estimó en un estudio de 2019 que más de 12 millones de personas participaron en algún tipo de educación por medio digital. El año pasado, las instituciones implementaron herramientas de aprendizaje digital como respuesta a las medidas de distanciamiento social adoptadas a nivel mundial como medida de contención del COVID-19.

Una de las herramientas populares en el sector educativo es Moodle con 253 millones de usuarios en 241 países. Moodle es una plataforma de aprendizaje de código abierto diseñada para crear ambientes de aprendizaje personalizados a través de una interfaz simple y de fácil utilización. Sin importar si son 10 alumnos o 10 millones los que necesitan acceder a contenidos digitales, la nube se torna esencial ya que permite contar con un ambiente seguro y escalable para hacerlo.

Para ayudar a las instituciones educativas a acelerar la adopción de Moodle, en este post vamos a mostrar cómo desplegar Moodle en AWS en 4 pasos. El tiempo para completar este tutorial es de aproximadamente 45 minutos y no requiere ninguna experiencia previa en AWS; además puede ser ejecutado dentro de la Capa Gratuita de AWS.

Componentes

La arquitectura de la solución a desplegar está conformada por una instancia de Amazon Elastic Compute Cloud (Amazon EC2) y una base de datos MySQL ejecutándose en Amazon Relational Database Service (Amazon RDS) configurados dentro de una red privada virtual Virtual Private Cloud (VPC), así como 3 buckets de Amazon Simple Storage Service (Amazon S3).

Los 4 pasos a seguir para completar este tutorial son:

  1. Desplegar recursos en AWS
  2. Obtener credenciales de acceso
  3. Cómo preparar su base de datos para Moodle
  4. Configurar el almacenamiento de Moodle

1.    Desplegar recursos en AWS

CloudFormation provee un diseñador. Observe la plantilla proporcionada para este tutorial, visualizada en el diseñador de CloudFormation:

Para comenzar, suscríbase  al AMI de Moodle de Bitnami en el Marketplace de AWS dando clic en el botón Continue to Suscribe.

Proceda a aceptar los términos y condiciones de la AMI dando clic en Accept Terms.

Aparecerá un mensaje de confirmación y luego de un par de minutos, recibirá una confirmación vía correo electrónico.

a la consola de AWS y abra la lista de servicios en la parte superior izquierda de la pantalla. Note que puede acceder a los más de 175 servicios de distintas categorías como machine learning, analítica, bases de datos, entre otros. Escriba EC2 en el buscador y de clic en EC2.

Seleccione Key Pairs ubicado en la parte izquierda del menú y proceda a crear un key pair usando la opción Create key pair ubicada en la parte superior derecha de la consola.

 Escriba un nombre representativo como “moodle-keypair” y seleccione el tipo de key pair a crear con base en el sistema operativo que utilice: PEM para Linux y MacOS, o PPK para Windows.

Ahora lance el stack de CloudFormation. Para ello, abra la lista de los servicios, seleccione CloudFormation y después de clic en la opción de Create stack with new resources (standard), ubicada en la parte superior derecha de la pantalla.

Debido a que la plantilla ya ha sido preparada, seleccione la opción de “Upload a template file” y de clic en “Choose file” para localizar el archivo MoodleQuickStart.json provisto.

Proporcione algunos datos para su stack:

  • Nombre del stack: identificador del stack de CloudFormation, por ejemplo “Moodle-quickstart”
  • DBUsername, DBPassword: Usuario y contraseña que serán creados en la instancia de Amazon RDS
  • KeypairName: Nombre del key pair creado anteriormente
  • MoodleVolumeSize: Tamaño del volumen de almacenamiento donde se alojará Moodle
  • UserPrefix: Identificador que se agregará como prefijo al nombre de los recursos como los buckets. Debe ser único.

 En la siguiente pantalla utilice la configuración por defecto y de clic en Siguiente, para poder avanzar a la pantalla de confirmación donde podrá revisar todas las configuraciones seleccionadas. Para lanzar el despliegue, acepte el mensaje de capacidades de AWS Identity and Access Management (IAM) que nos explica que la plantilla podrá crear recursos de IAM (como usuarios y roles). De clic en Crear Stack.

Por defecto, una vez lanzado el despliegue la consola muestra los “Eventos” de CloudFormation. Es posible dirigirse a la pestaña de Resources donde se puede visualizar los recursos que han sido creados.

El despliegue termina después de aproximadamente 10 minutos. Ahora escriba “moodlewebserver” en la barra de búsqueda de los recursos para encontrar el servidor virtual creado a partir del AMI de Moodle.

Seleccione el identificador de la instancia que se muestra con la leyenda “Physical ID” y será direccionado a la consola de EC2 donde encontrará las propiedades del servidor web de Moodle. Copie el valor de Public DNS (IPv4) y péguelo en una nueva pestaña del navegador.

Su sitio web de Moodle está funcionando. En este punto Moodle está utilizando una base de datos instalada dentro del servidor web, podemos cambiar esta configuración más tarde.

2. Obtener credenciales de acceso

Necesitamos obtener 2 credenciales:

  • Credenciales de administrador de Moodle.
  • Un usuario de IAM (access key y secret key) con permisos de Amazon S3 para permitir que Moodle pueda almacenar y recuperar archivos en nuestros buckets.

Para recuperar las credenciales de administrador de Moodle, conéctese al servidor web, cierre la pestaña de Moodle y diríjase a la consola de EC2. Dé clic en Actions y posteriormente en Connect. Se mostrarán indicaciones para conectarse utilizando el key pair creado previamente.

Consulte la guía paso a paso de cómo conectarse dependiendo el sistema operativo que esté utilizando: Linux/MacOS o Windows. En lugar del usuario ec2-user o root, utilice “bitnami”. Una vez que ingresamos a la terminal, encontrará un mensaje similar al siguiente:

Ejecute el siguiente comando:

(BASH)

sudo cat /home/bitnami/bitnami_credentials

Se mostrará el nombre de usuario y contraseña.

Las instrucciones para recuperar las credenciales de administrador de Moodle también se encuentran en el sitio de Bitnami.

Deje abierta la terminal de comandos por ahora, la utilizaremos nuevamente en el paso 3.

Para recuperar el access key y secret key que permitirá a Moodle acceder a nuestros buckets, diríjase nuevamente a la consola de AWS y abra la lista de servicios, seleccione IAM.

Dé clic en Users y escriba “repo” en la barra de búsqueda, encontrará un usuario ya creado con los permisos necesarios de lectura y escritura en S3. Seleccione el nombre de usuario.

Este usuario no tiene credenciales, por lo cual necesita crearlas. Seleccione la pestaña de Security Credentials y posteriormente dé clic en Create Access key.

Guarde temporalmente estas credenciales para el último paso de este blog post. Después de realizar la configuración, se recomienda que sean eliminadas del almacenamiento temporal.

3. Cómo preparar su base de datos para Moodle

Para que Moodle pueda utilizar RDS como motor de base de datos necesitamos preparar una base de datos y un usuario con acceso a la misma. Para ello, conéctese vía el cliente MySQL instalado en el servidor de aplicaciones de Moodle (recuerde que la base de datos fue configurada para ser accedida solamente dentro de la VPC en AWS).

Abra la lista de servicios y escriba RDS, luego seleccione la opción DB Instances.

Seleccione la instancia llamada “moodledbinstance” y en la pestaña de Conectivity & Security encontrará la propiedad llamada Endpoint, anote este valor, lo utilizaremos más adelante.

Diríjase a la terminal de comandos que dejó abierta en el paso anterior y ejecute el siguiente comando reemplazando <RDS_HOSTNAME> por el endpoint que copió arriba. Asimismo, reemplace <RDS_NAME> por el parámetro DBUsername que especificó en el paso 1 cuando lanzó el stack de CloudFormation.

(BASH)

mysql -u <RDS_NAME>-p -h <RDS_HOSTNAME>

Cuando se le solicite, escriba la contraseña de base de datos especificada en el paso 1 a través del parámetro DBPassword.

Como resultado, obtendrá una conexión satisfactoria y la consola mostrará un mensaje similar al siguiente: mysql>

En la documentación de bitnami encontrará las instrucciones para preparar la base de datos para Moodle. Para su comodidad, se incluye un breve resumen. Ejecute los siguientes comandos en la consola de MySQL, reemplace <PASSWORD> por una contraseña personalizada para el usuario de base de datos de Moodle.

create user moodleuser@'%' identified by '<PASSWORD>';
create database awsmoodle;
grant all privileges on awsmoodle.* TO moodleuser@'%';
flush privileges;

Debido a que Moodle ya configuró las tablas requeridas en la base de datos local del servidor de aplicaciones, es necesario migrarlas a RDS. Diríjase al navegador con el sitio web de Moodle, y agregue a la barra de direcciones la siguiente ruta: /admin/tool/dbtransfer/index.php

La dirección completa debería lucir similar a lo siguiente: http://0.0.0.0/admin/tool/dbtransfer/index.php

donde 0.0.0.0 es la dirección IP del servidor web.

Capture los valores requeridos:

  • Type: Improved MySQL
  • Host: Endpoint de RDS
  • Database name: awsmoodle
  • Database user: moodleuser
  • Database password: contraseña definida previamente al momento de crear el usuario
  • Tables prefix: mdl_
  • Port: 3306

Una vez que se complete la migración de las tablas, confirme que efectivamente se encuentren ahí, para ello ejecute los siguientes comandos en la terminal de mysql:

use awsmoodle;

show tables;

Debería ver una lista con el nombre de las tablas que comienzan con “mdl_”

Ejecute el siguiente comando para salir de la consola de mysql

exit
 El último paso para configurar nuestra base de datos, es indicar a Moodle que utilice la instancia de RDS en lugar del servidor local. Edite el archivo  
       config.php utilizando los siguientes comandos: 
       
sudo vi /opt/bitnami/moodle/config.php
 Al ingresar al editor vi, presionamos la letra i para comenzar a editar el archivo, modifique el archivo con base en el siguiente ejemplo: 
       
  • dbhost: reemplace <RDS_ENDPOINT> por el Endpoint de la instancia de RDS
  • dbpass: reemplace <PASS> por la contraseña que del usuario moodleuser creado anteriormente
    Al terminar, presione la siguiente combinación de teclas para guardar los cambios: ESCAPE + : + wq! + ENTER Finalmente ejecute el siguiente comando para reiniciar el servidor web y forzar a Moodle para utilizar los nuevos parámetros de base de datos que configuró:
sudo /opt/bitnami/ctlscript.sh restart apache

Abra nuevamente el navegador con el sitio web de Moodle y dé clic en la parte superior izquierda en “Newsite” para dirigirse a la raíz del sitio.

4. Configurar almacenamiento

Para permitir que Moodle pueda utilizar S3 como repositorio, utilice el plugin Amazon S3 de Moodle que por defecto está instalado en su sitio, solo necesita habilitarlo. Navegue a través de las siguientes opciones de Moodle:

Site administration > Plugins > Repositories > Manage repositories

Identifique el repositorio Amazon S3 y seleccione la opción “Enabled and visible”. En seguida, será direccionado a la página de configuración.

Ingrese el access key y secret key que ha generado previamente y dé clic en Save.

Para comprobar que la configuración está funcionando, navegue a la página de cursos, cree un nuevo curso y adicione un archivo.

Al dar clic en seleccionar archivo, encontrará la opción de Amazon S3 donde visualizará los todos los buckets disponibles en su cuenta.

Luego de seleccionar un archivo, observará la pre-visualización con base en los tipos de archivos soportados por Moodle. Debido a que no configuró ninguna política pública, los buckets de su cuenta son privados, por lo cual a través de Moodle usted tiene el control sobre quien puede visualizar y acceder a su contenido. Por defecto los cursos en Moodle están restringidos solo a usuarios autenticados.

¿Qué sigue?

Si desea incrementar la fiabilidad de su despliegue de Moodle, configure el servidor de aplicaciones EC2 con un Elastic Load Balancer y Amazon EC2 Autoscaling o configure la característica Multi-AZ de Amazon RDS. Revise este blog post donde encontrará servicios adicionales para un desempeño mejorado como Amazon ElasticCache y Amazon Elastic File System (Amazon EFS). Tome en cuenta que se pueden aplicar cargos basados en el uso o configuraciones adicionales a las acciones descritas en este post.

 


Acerca del autor

Luis Baeza es arquitecto de soluciones en Amazon Web Services y tiene 10 años de experiencia en transformación de procesos, arquitectura empresarial, adopción de metodologías ágiles e integración de tecnología cloud. Luis ha trabajado con empresas del sector salud, retail y seguros en México y Chile.