Desarrollo

Consumiendo una función Lambda con Vue JS y Axios. AWS Desde 0. Parte 1.

Por: Mario Negrete

Continuando con información acerca de Vue JS y sus funciones. La entrada anterior fue sobre los conceptos básicos para un despliegue de una aplicación web con Vue JS desde la descarga de un script, aunque también se puede y es recomendado que sea mediante NPM su uso. Esta primera parte será dedicada a la implementación de una función Lambda usando Amazon Web Services Serverless Application Model (AWS SAM). SAM es un framewrok de código abierto que sirve para construir aplicaciones serverless. El enfoque de esta entrada es para aquellos usuarios nuevos con serverless y el proveedor de AWS, el cual recomendamos ampliamente. Esta primera parte está basada en el contenido oficial sobre SAM.

¿Qué es una aplicación Serverless?

Es un modelo de ejecución donde un proveedor es responsable de ejecutar tu código dinámicamente cobrando solo por los recursos utilizados para ejecutarlo. Este código se encuentra dentro de contentedores los cuales son activados por eventos incluyendo las llamadas HTTP. Las aplicaciones serverless son una combinación de funciones Lambda, eventos y otros recursos que trabajando en conjunto realizan ciertas tareas. Hay que remarcar que serverless es más que funciones Lambda ya que puede incluir otro tipo de recursos como APIs, bases de datos entre otros.

Ventajas de Serverless

Cabe destacar que el uso de Serverless no aplica para todos los proyectos, la arquitectura seleccionada para cada proyecto debe ser en base a los atributos de calidad requeridos por el cliente. Dado que el código son funciones las cuales se consultan bajo demanda permiten disminuir los costos que se nos cobran por mantener un servidor activo (ya que no todo el tiempo se están atendiendo solicitudes), al final se es responsable solo del tiempo de actividad y mantenimiento. Las cuestiones de seguridad son propias del Gateway a implementar.

Las funciones Lambda, parte de Serverless se encargan de ejecutar el código solo cuando es necesario por medio de un evento atendiendo las solicitudes pagando solo por el tiempo de computo que se consuma, evitando cargos mientras no se ejecuta. Cualquier servicio de backend puede ser ejecutado sin ningún tipo de administración.

AWS SAM

SAM cuenta los componentes que se citan a continuación

  • Especificación de plantilla SAM. Es usada para definir la aplicación serverless. Proporciona una simple y clara sintaxis para describir las funciones, permisos, configuraciones. Se puede usar esta plantilla para operar una sencilla, desplegable, entidad que tendrá la aplicación.
  • Línea de comandos de SAM. Esta herramienta permite construir aplicaciones serverless definidas desde las plantillas. Esta línea de comandos permite certificar que los archivos han sido escritos de acuerdo a la especificación, invocar funciones lambda localmente y probarlas.

Beneficios

  • Configuración para despliegue individual. SAM hace realmente simple la relación entre componentes y recursos. Compartiendo la configuración y desplegando todas las relaciones como una sola entidad.
  • Extensión de AWS CloudFormation. SAM es una extensión de otro servicio de AWS. CloudFormation el cual está enfocado a infraestructura como código por lo que podrás usar estos comandos en la plantilla.
  • Pruebas locales. SAM permite construir localmente y probar las aplicaciones serverless creadas a partir de las plantillas. Este ambiente proporcionado permite revisar paso por paso además ofrece la integración que ya tiene con algunos editores.

Configuración de SAM

Requsitos
AWS SAM CLI
Cuenta de AWS
Docker

Se realizará una configuración desde 0 para AWS. Si ya cuentas con una cuenta configurada de AWS no habrá pasos adicionales, en caso contrario, solo es entrar al sitio de AWS, crear una cuenta, vincularla con una tarjeta de débito donde se hará un cobro de 1 dólar. Hay varios indicadores para medir el gasto del uso de los servicios en la nube de igual manera AWS ofrece un servicio gratuito para cierto consumo de servicios para su aprendizaje, pruebas e implementación por lo que no hay problema al vincular tu tarjeta. Cabe mencionar que esta práctica no genera ningún tipo de gasto. Después será empezar con SAM con la instalación de la línea de comandos para crear las aplicaciones serverless. Dependiendo del entorno (Linux, Windows o macOS) llevará una configuración diferente la cual adjunto a continuación. Para este caso se seguirá la guía de MacOS El primer paso es crear un usuario de Identify and Access Managament (IAM). ¿Por qué? Como usuario principal de la cuenta se tiene acceso a toda la configuración, por lo que es recomendable la creación de grupos de usuarios conciertos privilegios para la lectura, creación y borrado de recursos. IAM es otro servicio de AWS para administrar identidades y privilegios, como se comenta, es recomendado como buena práctica no usar tu usuario principal de AWS para tareas donde no sea necesario, se puede crear un usuario con ciertos privilegios. Lo primero será habilitar el acceso a los datos de facturación para el usuario administrador de IAM Se escoge en la barra de navegación el nombre del usuario y se desplegará las opciones, se escoge la de My account, en el apartado de IAM User and Role Access to Billing Information se edita la información y se activa el acceso a IAM como se muestra en la imagen Cuenta AWS Después entrar a la consola de IAM IAM

Se puede acceder a todos los servicios de AWS fácilmente desde la barra de búsqueda solo escribiendo el nombre que buscamos ejemplo IAM, S3, etc).

Se escogerá la opción de Users del menú de la izquierda, después con la vista que salga, se presionará el botón Add User donde se mostrará la siguiente pantalla donde escogerás el nombre de tu usuario para esta práctica lo llamamos Administrador con Programmatic access, AWS Management Console y Custom password seleccionado. Setup De esta manera dicho usuario podrá acceder con su respectivo password según los privilegios con los que cuente. Se escogerá añadir el usuario a un grupo, si es una cuenta nueva de AWS, se crea un grupo primero en este caso le pondremos Administrators y se añade la cuenta.

Se recomienda asignar privilegios a grupos y no a usuarios por cuestión de administración pero es libre la decisión.

Grupos AWS

Lo siguiente es agregar una etiqueta, este paso es opcional y será omitido por esta vez. Ahora se verifica el grupo de memebresías que serán agregadas al nuevo usuario, una vez seleccionadas se crea el usuario. Esto generará una página donde se podrá descargar un .csv con información para entrar para con el usuario creado o bien será enviado por correo. De esta manera ya tendremos creado un usuario en AWS. Como la función de Lambda que se creará podrá ser probada de manera local, es necesario para el ambiente de pruebas tener docker ya que estas corren en contenedores. Si tienes dudas sobre contenedores no dudes en revisar nuestras entradas sobre Docker. Se anexa la página de Docker donde podrán consultar la documentación oficial. Si eres usuario MacOS para instalar la consola de SAM requerirás instalar el Homebrew el cual es un gestor de paquetes. Para instalar Homebrew podrás realizarlo con el siguiente comando

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Para revisar que este todo en orden e instalado se puede usar el comando

brew --version

El cual despliega la versión actual. Ahora con Homebrew se podrá instalar la línea de comandos de SAM con los siguientes comandos.

brew tap aws/tap
brew install aws-sam-cli

Una vez que instales y todo pase con éxito, podrás verificar que tu instalación fue correcta con el siguiente comando.

sam --version

Con esto ya estará listo el ambiente de desarrollo. El siguiente paso será el uso del template de Hello World para realizar un Hola Mundo. Esta aplicación implementa un API backend, el cual consiste en un servicio de API Gateway y una función Lambda. Cuando se mande un request GET para el API Gateway, la lambda será invocada y la función regresará un mensaje de Hola Mundo. La arquitectura se muestra en el siguiente diagrama Arquitectura SAM Ahora con SAM CLI se descargará una aplicación de muestra corriendo el siguiente comando

sam init

Se escogerá la opción 1 (AWS Quick Start Templates), después se preguntará cual runtime, para este caso será Python 3.8. Esto depende del lenguaje que uses. Lo siguiente será que se pedirá el nombre del proyecto, en este caso le pondremos sam-app. Por último se escoge una plantilla por defecto, en este caso la opción 1, el ejemplo de Hello World. CLI SAM Esta configuración crea un directorio con el nombre que se le haya proporcionado al nombre del proyecto. El contenido del proyecto tendrá esta estructura en caso de escoger Python y HelloWorld como la que se muestra a continuación. estructura de proyecto

  • app.py. Contiene la lógica del AWS Lambda handler.
  • requirements.txt. Contiene cualquier dependencia de Python que la aplicación requiera.
  • template.yaml. Contiene la plantilla de SAM que define los recursos de aplicación. Teniendo esta estructura definida se va a entrar desde terminal a la carpeta del proyecto para correr el comando
sam build 

SAM Build SAM viene con abstracciones de varios runtimes de Lambda para construir tus dependencias, y copiar el código de origen dentro de las carpetas provisionales donde todo este listo para ser empaquetado y desplegado. El comando construye las dependencias que la aplicación tiene y las copia bajo el .aws-sam/build el cual será hecho zip y subido a la función Lambda. AWS SAM Esta aplicación no necesita más depedencias o modificación ya que solo será mostrar el Hola Mundo por lo que ahora se desplegará con el siguiente comando.

sam deploy --guided

Si seguiste el tutorial te darás cuenta que te dirá que no cuenta con una configuración cargada pero no hay problema solo es definir el nombre del Stack, la región donde se despliega (viene una opción por default) y aceptar las recomendaciones que te indica. Una vez implementado deberá desplegarse.

Si eres un usuario nuevo en AWS tendrás el siguiente error, y esto es debido a que no cuentas con las credenciales implementadas en el entorno.

Error AWS Para arreglar esto se puede usar la AWS CLI la cual podrás descargarla y configurar dependiendo de tu sistema operativo. Después de configurarla con el siguiente comando podrás ingresar tu Key ID y Secret Access Key.

aws configure

Se puede dejar la region y output format vacíos por defecto.

Si no sabes cómo conseguir estos datos se muestra en la siguiente sección

Obtener Key ID y Secret Access Key

Estos accesos los obtienes desde la siguiente ruta. En la barra de menú al presionar tu nombre de usuario se despliega un barra de opciones, ahí está la opción de My Security Essentials la cual te mostrará el apartado de access key, desde este apartado podrás generar y descargar tus claves a usar. Llaves AWS Una vez configurada esta parte tu despliegue estará con éxito efectuado. Despliegue AWS Te pedirá si deseas desplegarlo y se dirá que sí. Al final debe mostrar el siguiente mensaje Successfully created/updated stack – StackExample in us-east-1. La región depende de la que hayas escogido. Este comando despliega la aplicación en la nube de AWS. Toma los artefactos construidos en el build y los sube desplegando con el uso de CloudFormation. Si entras con tu cuenta a la parte de Lambda donde está la región que se seleccionaste se verá lo siguiente. Web AWS Despliegue AWS Se modificará la plantilla por defecto a Hola Mundo y se guardarán los cambios. Al correrlo se obtendrá el siguiente resultado. Despliegue AWS De esta manera ya se tendrá corriendo una función independiente la cual al ser solicitada en este caso usando un curl mostrará su función. El Hola Mundo en tu función Lambda. La segunda parte de esta entrada irá dirigida a la prueba de la función Lambda creada de una manera local y el consumo de Vue JS usando Axios.

@MarioRguezz

Av. Cerro Gordo del Campestre 201
Int. 303
Col. Las Quintas
León, Gto.
C.P. 37125

ROCKTECH R+D © 2020