Serverless Framework下如何在Step Function的Lambda中获取执行ARN
如何在Step Function触发的Lambda函数中获取当前执行ARN
是可以获取的,但Step Function默认不会自动把执行ARN传递给调用的Lambda函数,需要你手动在状态机的任务定义中配置传入内置的上下文参数,具体操作方法如下:
- 首先明确Step Functions的内置上下文变量
$$.Execution.Id就是你需要的当前执行ARN,这个变量是所有状态机执行过程中默认自带的,不需要额外配置生成。 - 你需要在调用Lambda的Task状态中,通过
Parameters字段把这个上下文值注入到Lambda的入参event里,注意需要给参数名加后缀.$标识这是一个动态解析的路径值,否则会被当做普通静态字符串处理。
以下是Serverless Framework下使用serverless-step-functions插件的配置示例片段:
# serverless.yml 中状态机定义的示例片段 stepFunctions: stateMachines: MyStateMachine: definition: StartAt: InvokeDemoLambda States: InvokeDemoLambda: Type: Task Resource: arn:aws:states:::lambda:invoke Parameters: FunctionName: ${self:functions.demoLambda.name} Payload: # 将执行ARN传入Lambda的event参数 sfn_execution_arn.$: $$.Execution.Id # 其他你需要传递的自定义参数 custom_param: "test value" End: true
Lambda侧的获取方法非常简单,直接从入参event中读取即可,以下是两种常用运行时的示例:
- Python运行时
def lambda_handler(event, context): sfn_execution_arn = event.get("sfn_execution_arn") # 后续业务逻辑
- Node.js运行时
exports.handler = async (event) => { const sfnExecutionArn = event.sfn_execution_arn; // 后续业务逻辑 };
注意:如果你的Lambda同时对接了其他触发源(比如API网关、SQS),建议对该参数做非空判断,避免其他触发场景下取值报错。
内容的提问来源于stack exchange,提问作者Ninja
相关产品推荐
相关产品推荐

