在AWS Step Functions中,可以通过调用Lambda函数来向状态机发送外部信号。另外,可以使用Step Functions API调用中断状态机。以下是使用Lambda函数中断状态机的代码示例:
import boto3 import os
region_name = os.environ['AWS_REGION'] client = boto3.client('stepfunctions', region_name=region_name)
def lambda_handler(event, context): execution_arn = event['executionArn'] client.stop_execution(executionArn=execution_arn)
配置Lambda函数的环境变量AWS_REGION,并分配“AWSStepFunctionsFullAccess”策略以获取执行状态机所需的权限。
在状态机的定义中,添加States.Pass状态和States.Task状态,以便处理Lambda函数的结果和错误。
{ "StartAt": "CheckStatus", "States": { "CheckStatus": { "Type": "Task", "Resource": "arn:aws:states:::aws-sdk:lambda:invokeAndWait", "Parameters": { "FunctionName": "lambda-function-name", "Payload": { "executionArn.$": "$$.Execution.Id" } }, "ResultPath": "$.lambdaResult", "Next": "ProcessResult" }, "ProcessResult": { "Type": "Pass", "Result": { "message.$": "$.lambdaResult.Payload" }, "ResultPath": "$.message", "End": true }, "HandleError": { "Type": "Fail", "Cause": "An error occurred", "Error": "ErrorA" } } }
启动状态机并获取执行ARN。
使用以下代码在Lambda函数中调用外部信号:
client = boto3.client('stepfunctions', region_name='region-name') client.send_task_success( taskToken='task-token', output='{"result": "success"}' )
在Lambda函数代码中替换'execution_arn'变量的值。
运行Lambda函数以中断状态机。