AWS Automation基于Python输出的aws:branch分支跳转异常问题
问题成因与排查方案
你当前的配置存在高概率导致分支失效的语法问题,可按以下步骤逐一排查修复:
1. 优先修复YAML格式错误
第一个执行脚本步骤的name字段不符合YAML键值对语法要求,当前写法为:
- name extractInfo
name和值之间缺少必填的冒号,正确写法应为:
- name: extractInfo
该错误会导致SSM Automation无法将该步骤识别为ID为extractInfo的有效步骤,后续分支步骤引用extractInfo.infoMsg变量时会拿到空值,无法匹配任何预设的等值条件,因此直接跳转至Default对应的End步骤。
2. 语法修复后仍不生效的排查步骤
补全冒号后如果分支跳转依然不符合预期,按以下规则逐一验证:
- 校验变量引用的大小写敏感性:SSM Automation对步骤名、输出名的大小写完全敏感,确认分支里引用的
extractInfo.infoMsg和第一步定义的步骤名、输出字段名Name: infoMsg大小写完全一致,不要出现拼写大小写偏差。 - 打印实际输出值确认内容:在提取信息步骤和分支步骤中间插入临时调试步骤,打印第一步输出的实际值,确认是否存在转义字符、额外空格等问题:
- name: debugVal action: 'aws:executeScript' inputs: Runtime: python3.6 Handler: script_handler Script: |- def script_handler(events, context): # 打印第一步的全量输出,查看实际值 print(f"DEBUG: extractInfo step output = {extractInfo}") return
运行自动化任务后查看执行日志:
- 如果打印的
infoMsg值为带额外双引号的"one",说明返回值被序列化时带上了转义引号,把分支条件修改为StringEquals: '"one"'即可匹配,也可以在Python脚本返回前做字符串处理去掉多余引号。 - 如果打印的
infoMsg为空,检查第一步的outputs配置,确认Selector: $.Payload写法正确,Python脚本的返回值确实被正确赋值到Payload字段。 - 校验Python脚本的返回格式:python3.6 runtime环境下,
aws:executeScript要求handler返回字符串时不要手动加json序列化逻辑,直接return字符串即可,避免重复序列化导致值格式不匹配。
内容的提问来源于stack exchange,提问作者Yahav Festinger
相关产品推荐
相关产品推荐

