AWS Step Functions 1. Qué son las AWS Step Functions
Las Step Functions sirven para orquestar y coordinar los diferentes servicios y componentes de una aplicación utilizando máquinas de estado.
Las aplicaciones realizadas con microservicios son más resilientes y fácilmente escalables. Un microservicio muy simple podría ser desplegado en una función Lambda, pero otras veces los microservicios están formados por varias funciones, las cuales necesitan estar conectadas entre sí.
Hay varias maneras de ejecutar y coordinar funciones.
Ejecutar funciones Lambda de manera secuencial
Podríamos hacer que una función Lambda se ejecutase siempre y cuando la función anterior finalice con éxito. En caso contrario no se ejecutaría.
Ejecutar funciones Lambda en paralelo
Otro de los posibles casos que pueden darse al tener varias funciones es querer ejecutarlas de forma paralela y después ejecutar una siguiente función.
Ejecutar una función u otra en función del resultado de la anterior
Otro posible caso es el de ejecutar de forma secuencial varias funciones, pero no sabemos cuál será ejecutada hasta que no sepamos el resultado de la primera función Lambda que se debe ejecutar.
¿Cómo se utilizan las AWS Step Functions?
Lo cierto es que hay infinitas posibilidades y podríamos escribir código para coordinar todos nuestros servicios y funciones, pero AWS Step Functions nos da una facilidad increíble para realizar tareas de orquestación.
La orquestación con AWS Step Functions se describe con un lenguaje propietario de Amazon llamado ASL (Amazon States Language) que representa los pasos que debe realizar una función tras ejecutarse, dependiendo o no de su resultado.
Ejemplo de AWS Step Functions
Vamos a realizar un ejemplo muy simple de orquestación entre 5 funciones Lambda que modifican el estado de un artículo de un blog y notifican el cambio realizado. La petición podría tener dos formas diferentes:
Actualizar un artículo:
{"ActionType": "UPDATE"}
Eliminar un artículo:
{"ActionType": "DELETE"}
Este JSON de entrada es excesivamente simple para lo que realmente debería tener en caso de querer actualizar un artícuo o eliminarlo, ya que serían necesarios varios campos más como el identificador, contenido, etc. Pero ya que el objetivo de este artículo es conseguir entender qué es AWS Step Functions, he preferido hacerlo lo más sencillo posible.
Vamos a ver la máquina de estados de AWS Step Functions:
En este caso, la función Detect Action
recibe el JSON de entrada, y si su ActionType
es UPDATE
, ejecutará el método Process Update
. En caso de que su ActionType
sea DELETE
ejecutará el método Process Delete
. Tras esto, se ejecutarán las funciones de notificación y finalizará el proceso.
La orquestación de AWS Step Functions se describe utilizando Amazon States Language. No es importante que entiendas todo el JSON porque veremos cómo funciona paso a paso en siguientes artículos.
{
"Comment": "A simple AWS Step Functions to detect if an article is updated or deleted",
"StartAt": "Detect Action",
"States": {
"Detect Action": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.ActionType",
"StringEquals": "UPDATE",
"Next": "Process Update"
},
{
"Variable": "$.ActionType",
"StringEquals": "DELETE",
"Next": "Process Delete"
}
]
},
"Process Update": {
"Type": "Task",
"Resource": "arn:aws:lambda:eu-west-1:abce:function:ProcessUpdate",
"Next": "Notify Update"
},
"Process Delete": {
"Type": "Task",
"Resource": "arn:aws:lambda:eu-west-1:fgeh:function:ProcessDelete",
"Next": "Notify Delete"
},
"Notify Update": {
"Type": "Task",
"Resource": "arn:aws:lambda:eu-west-1:wret:function:NotifyUpdate",
"End": true
},
"Notify Delete": {
"Type": "Task",
"Resource": "arn:aws:lambda:eu-west-1:hask:function:NotifyDelete",
"End": true
}
}
}
Como se puede observar, AWS Step Functions nos permite orquestar nuestra aplicación de manera sencilla y escalable utilizando un formato JSON muy legible.
En siguientes artículos veremos cómo crear AWS Step Functions así como a conectar servicios de AWS entre sí.