问题描述
我正在自动化文档中通过 AWS Systems manger 运行 Python 脚本 - 也称为 Runbook。该脚本通过操作 aws:executeScript 调用,所选运行时为 python3.7。
所有可用示例仅显示如何从脚本返回数据。 我怎么能表明脚本失败了?这似乎没有记录。
我尝试过 sys.exit(1)
和 raise Exception('oh noes')
。两者都会使执行程序崩溃。不幸的是,这完全隐藏了脚本的所有 stdout/stderr 并给我留下了消息:
当轮询操作状态为完成时,步骤失败。回溯(最近一次调用最后一次):文件“/tmp/some-path/customer_script.py”,第 23 行,位于 main sys.exit(1) SystemExit - 1。更多诊断细节请参考自动化服务故障排除指南。
处理程序方法需要两个参数(events
和 context
)。同样,这些对象的内容似乎完全没有记录。 events
似乎是一个带有传递给脚本的参数的字典。 context
是某个对象,但根据 do dir(context)
,该对象上没有有用的方法可以让我返回失败状态:
['__class__','__contains__','__delattr__','__delitem__','__dir__','__doc__','__eq__','__format__','__ge__','__getattribute__','__getitem__','__gt__','__hash__','__init__','__init_subclass__','__iter__','__le__','__len__','__lt__','__ne__','__new__','__reduce__','__reduce_ex__','__repr__','__setattr__','__setitem__','__sizeof__','__str__','__subclasshook__','clear','copy','fromkeys','get','items','keys','pop','popitem','setdefault','update','values']
解决方法
raise Exception 应该可以工作。看下面的例子。
description: ''
schemaVersion: '0.3'
outputs:
- script.output
mainSteps:
- name: script
action: 'aws:executeScript'
outputs:
- Name: output
Selector: '$.Payload[0]'
Type: String
inputs:
Runtime: python3.7
Handler: script_handler
Script: |-
def script_handler(events,context):
array = ['a','b','d']
if 'c' in array:
return True
else:
raise Exception("c is not there in array")