Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Intégrelo AWS Lambda en una máquina de estados de Step Functions con Amazon SQS y Amazon SNS
Este proyecto de ejemplo muestra cómo integrar AWS Lambda funciones en máquinas de estados de Step Functions.
En este proyecto, Step Functions utiliza funciones de Lambda para consultar el precio de una acción y determinar una recomendación de compra o venta. A continuación, el usuario recibe esta recomendación y puede decidir si compra o vende las acciones. El resultado de la operación se devuelve utilizando un SNS tema.
Para obtener más información acerca de las integraciones de servicios de Step Functions, consulte los temas siguientes.
-
IAMpolíticas para:
nota
Este proyecto de muestra puede generar cargos.
Para AWS los nuevos usuarios, hay disponible un nivel de uso gratuito. En esta capa, los servicios son gratuitos por debajo de determinado nivel de uso. Para obtener más información sobre AWS los costos y el nivel gratuito, consulta los precios
Paso 1: Crear la máquina de estado y aprovisionar recursos
-
Abra la consola de Step Functions
y seleccione Crear máquina de estado. -
Escriba
Orchestrate Lambda functions
en el cuadro de búsqueda y, a continuación, seleccione Organizar funciones de Lambda en los resultados de búsqueda que aparecen. -
Elija Siguiente para continuar.
-
Step Functions muestra una lista de las Servicios de AWS utilizadas en el proyecto de muestra que ha seleccionado. También muestra un gráfico del flujo de trabajo para el proyecto de muestra. Implemente este proyecto en su empresa Cuenta de AWS o utilícelo como punto de partida para crear sus propios proyectos. En función de cómo desee continuar, elija Ejecutar una demostración o Crear a partir de ella.
En este proyecto de muestra se implementan los siguientes recursos:
-
Cinco funciones de Lambda
-
Una cola de Amazon Simple Queue Service
-
Un tema de Amazon Simple Notification Service
-
Una máquina de estado de AWS Step Functions
-
Roles de AWS Identity and Access Management (IAM) relacionados
En la siguiente imagen se ilustra el gráfico del flujo de trabajo del proyecto de muestra Orquestar funciones de Lambda:
-
-
Elija Utilizar plantilla para continuar con la selección.
-
Realice una de las siguientes acciones siguientes:
-
Si seleccionó Construir a partir de él, Step Functions crea el prototipo de flujo de trabajo, pero no despliega los recursos de la definición del flujo de trabajo, por lo que puede seguir creando su prototipo de flujo de trabajo.
En Workflow StudioModo Diseño, puedes añadir estados adicionales a tu prototipo de flujo de trabajo. O bien, puede cambiar Modo Código al editor de código integrado para editar la definición Amazon States Language (ASL) de su máquina de estados desde la consola Step Functions.
importante
Es posible que tengas que actualizar el marcador de posición Amazon Resource Name (ARN) para los recursos utilizados en el proyecto de ejemplo antes de poder ejecutar tu flujo de trabajo.
-
Si seleccionó Ejecutar una demostración, Step Functions crea un proyecto de solo lectura que utiliza una AWS CloudFormation plantilla para implementar los AWS recursos de esa plantilla en su empresa. Cuenta de AWS Puede ver la definición de la máquina de estados seleccionando el modo Código.
Elija Implementar y ejecutar para implementar el proyecto y crear los recursos.
Tenga en cuenta que la implementación puede tardar hasta 10 minutos en crearse IAM los recursos y los permisos. Mientras se despliegan tus recursos, puedes abrir el enlace AWS CloudFormation Stack ID para ver qué recursos se están aprovisionando.
Una vez creados todos los recursos, deberías ver el proyecto en la página State Machines de la consola.
importante
Se pueden aplicar cargos estándar por cada servicio utilizado en la CloudFormation plantilla.
-
Paso 2: Ejecutar la máquina de estado
Una vez aprovisionados e implementados todos los recursos, aparece el cuadro de diálogo Iniciar ejecución.
-
En la página Máquina de estado, elija su proyecto de muestra.
-
En la página del proyecto de muestra, seleccione Iniciar ejecución.
-
En el cuadro de diálogo Iniciar ejecución, haga lo siguiente:
-
(Opcional) Para identificar la ejecución, puede especificar un nombre o utilizar el nombre de ejecución generado por defecto.
nota
Step Functions acepta nombres para máquinas de estados, ejecuciones, actividades y etiquetas que no contengan ASCII caracteres. Como los nombres que no contengan ASCII caracteres no funcionan en Amazon CloudWatch, te recomendamos que utilices solo ASCII caracteres para poder realizar un seguimiento de las métricas. CloudWatch
-
(Opcional) En el cuadro de entrada, introduce los valores de entrada en el JSON formato adecuado para ejecutar tu flujo de trabajo.
Si se ha seleccionado Ejecutar una demostración, no es necesario proporcionar ninguna entrada de ejecución.
nota
Si el proyecto de demostración que implementó contiene datos de entrada de ejecución rellenados previamente, utilice esa entrada para ejecutar la máquina de estado.
-
Seleccione Iniciar ejecución.
-
La consola de Step Functions le dirige a una página cuyo título es su ID de ejecución. Esta página se conoce como Detalles de la ejecución. En esta página, puede revisar los resultados de la ejecución a medida que avanza la ejecución o una vez finalizada.
Para revisar los resultados de la ejecución, elija los estados individuales en la Vista de gráfico y, a continuación, elija las pestañas individuales del panel Detalles del paso para ver los detalles de cada estado, incluidas la entrada, la salida y la definición, respectivamente. Para obtener más información sobre la ejecución que puede ver en la página Detalles de la ejecución, consulte Página de detalles de ejecución: información general de la interfaz.
-
Acerca de la máquina de estado y su ejecución
La máquina de estados de este proyecto de ejemplo se integra AWS Lambda pasando los parámetros directamente a esos recursos, utiliza una SQS cola de Amazon para gestionar la solicitud de aprobación humana y utiliza un SNS tema de Amazon para devolver los resultados de la consulta.
Una ejecución de Step Functions recibe un JSON texto como entrada y pasa esa entrada al primer estado del flujo de trabajo. Los estados individuales reciben JSON datos como entrada y, por lo general, JSON los pasan como salida al siguiente estado. En este proyecto de muestra, la salida de cada paso se transfiere como entrada al siguiente paso del flujo de trabajo. Por ejemplo, el paso Generar recomendación de compra/venta recibe como la salida del paso Consultar el precio de una acción como entrada. Además, la salida del paso Generar recomendación de compra/venta se transfiere como entrada al siguiente paso, Solicitar aprobación humana, que imita un paso de aprobación humana.
nota
Para ver el resultado devuelto por un paso y la entrada transferida a un paso, abra la página Detalles de la ejecución de su flujo de trabajo. En la sección Detalles del paso, visualice la entrada y la salida de cada paso que seleccione en el Modo de visualización.
Para implementar un paso de aprobación humana, normalmente se pausa la ejecución del flujo de trabajo hasta que se devuelva un token de tarea. En este proyecto de ejemplo, se pasa un mensaje a una SQS cola de Amazon, que se utiliza como activador de la función Lambda definida para gestionar la funcionalidad de devolución de llamadas. El mensaje contiene un token de tarea y la salida devuelta en el paso anterior. La función de Lambda se invoca con la carga del mensaje. La ejecución del flujo de trabajo se detiene hasta que recibe el token de la tarea con una llamada. SendTaskSuccess
API Para obtener más información acerca de los tokens de tarea, consulte Cómo esperar una devolución de llamada con el token de tarea.
El siguiente código de la StepFunctionsSample-HelloLambda-ApproveSqsLambda
función muestra cómo se define para aprobar automáticamente cualquier tarea enviada por la SQS cola de Amazon a través de la máquina de estados Step Functions.
exports.lambdaHandler = (event, context, callback) => {
const stepfunctions = new aws.StepFunctions();
// For every record in sqs queue
for (const record of event.Records) {
const messageBody = JSON.parse(record.body);
const taskToken = messageBody.TaskToken;
const params = {
output: "\"approved\"",
taskToken: taskToken
};
console.log(`Calling Step Functions to complete callback task with params ${JSON.stringify(params)}`);
// Approve
stepfunctions.sendTaskSuccess(params, (err, data) => {
if (err) {
console.error(err.message);
callback(err.message);
return;
}
console.log(data);
callback(null);
});
}
};
Eche un vistazo a este ejemplo de máquina de estados para ver cómo Step Functions controla Lambda y Amazon. SQS
Para obtener más información sobre cómo AWS Step Functions puede controlar otros AWS servicios, consulteIntegración de otros servicios con Step Functions.
{
"StartAt": "Check Stock Price",
"States": {
"Check Stock Price": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLam-CheckStockPriceLambda-444455556666",
"Next": "Generate Buy/Sell recommendation"
},
"Generate Buy/Sell recommendation": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-Hello-GenerateBuySellRecommend-123456789012",
"ResultPath": "$.recommended_type",
"Next": "Request Human Approval"
},
"Request Human Approval": {
"Type": "Task",
"Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken",
"Parameters": {
"QueueUrl": "https://sqs.us-west-1.amazonaws.com/111122223333/StepFunctionsSample-HelloLambda4444-5555-6666-RequestHumanApprovalSqs-777788889999",
"MessageBody": {
"Input.$": "$",
"TaskToken.$": "$$.Task.Token"
}
},
"ResultPath": null,
"Next": "Buy or Sell?"
},
"Buy or Sell?": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.recommended_type",
"StringEquals": "buy",
"Next": "Buy Stock"
},
{
"Variable": "$.recommended_type",
"StringEquals": "sell",
"Next": "Sell Stock"
}
]
},
"Buy Stock": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-BuyStockLambda-000000000000",
"Next": "Report Result"
},
"Sell Stock": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-SellStockLambda-111111111111",
"Next": "Report Result"
},
"Report Result": {
"Type": "Task",
"Resource": "arn:aws:states:::sns:publish",
"Parameters": {
"TopicArn": "arn:aws:sns:us-west-1:111122223333:StepFunctionsSample-HelloLambda1111-2222-3333-ReportResultSnsTopic-222222222222",
"Message": {
"Input.$": "$"
}
},
"End": true
}
}
}
Para obtener información sobre cómo configurar el IAM uso de Step Functions con otros AWS servicios, consulteCómo Step Functions genera IAM políticas para servicios integrados.
IAMEjemplos
Estas políticas de ejemplo AWS Identity and Access Management (IAM) generadas por el proyecto de muestra incluyen los privilegios mínimos necesarios para ejecutar la máquina de estados y los recursos relacionados. Le recomendamos que incluya solo los permisos que sean necesarios en sus IAM políticas.
{
"Statement": [
{
"Action": [
"lambda:InvokeFunction"
],
"Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLam-CheckStockPriceLambda-444455556666",
"Effect": "Allow"
}
]
}
{
"Statement": [
{
"Action": [
"lambda:InvokeFunction"
],
"Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-Hello-GenerateBuySellRecommend-123456789012",
"Effect": "Allow"
}
]
}
{
"Statement": [
{
"Action": [
"lambda:InvokeFunction"
],
"Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-BuyStockLambda-777788889999",
"Effect": "Allow"
}
]
}
{
"Statement": [
{
"Action": [
"lambda:InvokeFunction"
],
"Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-SellStockLambda-000000000000",
"Effect": "Allow"
}
]
}
{
"Statement": [
{
"Action": [
"sqs:SendMessage*"
],
"Resource": "arn:aws:sqs:us-west-1:111122223333:StepFunctionsSample-HelloLambda4444-5555-6666-RequestHumanApprovalSqs-111111111111",
"Effect": "Allow"
}
]
}
{
"Statement": [
{
"Action": [
"sns:Publish"
],
"Resource": "arn:aws:sns:us-west-1:111122223333:StepFunctionsSample-HelloLambda1111-2222-3333-ReportResultSnsTopic-222222222222",
"Effect": "Allow"
}
]
}
Para obtener información sobre cómo configurar el IAM uso de Step Functions con otros AWS servicios, consulteCómo Step Functions genera IAM políticas para servicios integrados.