Solutions Arch. Associate Hands-On
El objetivo de este tutorial es el de implementar un flujo de trabajo serverless en AWS. Pero, a diferencia del hands-on original (donde se hace de manera manual en la consola de AWS) utilizaremos Terraform como herramienta de despliegue automatizado.
Caso de Uso:
Implementar una aplicación serveless para automatizar el manejo de incidencias de soporte en un callcenter. El problema principal radica en que si bien se pueden configurar funciones Lambdas para que se llamen entre ellas, a medida que se escale la aplicación y su robustez crezca, manejar estas conexiones se convertiría en un problema, incluso para implementar pequeños cambios en el flujo de la aplicación.
Es por ello que se decide utilizar AWS Step Functions. Este servicio permitirá coordinar de manera eficiente las múltiples funciones Lambda a emplear. Para más detalle en este caso de uso y practicar su implementación manual en la consola de AWS, por favor ingrese en el siguiente enlace: Crear un flujo de trabajo sin servidor.
Diagrama:
Prerrequisitos:
Repositorio:
El codigo del hands-on se encuentra en el siguiente enlace en un repositorio de GitHub, especificamente en el directorio serveless_basic_workflow: Repositorio GitHub.
Detalle del Proyecto:
En primer lugar, procedemos a clonar, copiar o descargar el proyecto que se encuentra en la carpeta serveless_basic_workflow, allí encontraremos la siguiente estructura de archivos:
La carpeta functions contiene el código en javascript, del flujo de soporte del callcenter. Están en formato .zip con el fin de que puedan ser utilizados por Terraform al crear las funciones Lambdas. Ese código es el mismo que está presentado en el tutorial original en AWS y no es necesario modificarlo de ninguna manera.
La carpeta terraform contiene todo el código necesario para implementar el flujo de trabajo, aquí nos detendremos para explicar cada uno de los archivos antes de ejecutarlo.
Variables.tf
No hay mucho que explicar aqui, es donde declaramos las variables a utilizar en los diferentes documentos de Terraform.
Output.tf
Son las salidas que se muestran en el terminal, posterior a la implementación realizada en Terraform. Es muy práctica para revisar si los valores de elementos de algunos recursos son los correctos, como en el caso del output lambda_function_arn donde nos mostrara el valor del arn de cada una de las funciones Lambda luego de creadas.
Provider.tf
Aqui declaramos el proveedor sobre el cual implementaremos la infraestructura y la version del mismo, en este caso seria AWS. Adicionalmente declaramos un default_tags el cual añadira esas etiquetas a todos los recursos de AWS creados.
Data.tf
Data nos permite usar información que está definida fuera de Terraform o que está en una configuración diferente a la que estamos usando. Para este tutorial estamos llamando datos de AWS correspondiente a las políticas IAM relacionadas con Lambda. El aws_caller_identity está a manera de ejemplo y solo es llamado en el output, no tiene incidencia en el flujo de trabajo que estamos desplegando.
Security.tf
En este documento se declaran los recursos relacionados con seguridad e identidad, para este tutorial se requerirá la creación de dos roles, uno para las funciones Lambda y otro para Step Functions.
Estos roles deben estar asociados a unas políticas de acceso. Estas políticas son las que llamamos desde el archivo Data.tf al estar ya definidas por defecto por AWS. Procedemos a asociarlas a su rol correspondiente.
Recomendado por LinkedIn
Main.tf
En este documento se definen los dos recursos serverless requeridos para el tutorial. En primer lugar, creamos las funciones Lambda utilizando para ello un for_each que recorra el diccionario creado en Variables.tf para así evitar duplicidad de código.
Finalmente definimos una state machine en Step Functions donde declararemos en un JSON las tareas necesarias para el flujo de trabajo en la asignacion de tickets del callcenter.
Ejecución del Proyecto:
Luego de revisar en detalle, nos disponemos a implementar este flujo de trabajo por medio de Terraform, para ello ejecutaremos terraform init para inicializar y descargar lo necesario para implementar los recursos. Recuerden que se debe ejecutar los comandos en el mismo directorio donde se encuentre el proyecto de Terraform:
Ahora corremos un terraform plan para validar que esté estructurado correctamente los documentos de terraform y revisar los recursos que crearemos en AWS.
Ha llegado el momento de implementar los recursos, terraform apply --auto-approve nos permitirá crearlos sin pasar por la validación previa (ya que la hemos hecho en el paso anterior).
Hemos creado con éxito 10 recursos en AWS, ahora validaremos dentro de la consola de administración en AWS que este flujo de trabajo funcione de manera correcta.
Validación:
En primer lugar, veamos que estén las funciones Lambdas creadas y configuradas.
Revisamos los roles.
El state machine creado correctamente dentro de AWS Step Functions
Accedemos al state machine y comprobaremos el funcionamiento del flujo de la misma manera que se valida en el tutorial en AWS. En primer lugar, le damos clic a Start execution
En el input sustituimos el valor por defecto por el siguiente: "inputCaseID": "001" y damos clic en Start execution de nuevo.
Esperamos unos minutos que ejecute cada una de las tareas del flujo y al terminar en alguna de las dos salidas comprobamos que la implementación ha sido un éxito.
Para finalizar y evitar cobros innecesarios debemos proceder a destruir el flujo de trabajo creado en AWS. Para esto basta con un terraform destroy al pedir confirmación escribimos "yes" y esperamos que nos confirme la destruccion de los recursos.
Con esto concluimos este hands-on de dificultad básica. Cualquier comentario o corrección al proceso ejecutado será bien recibido.