2

我正在通过 AWS Systems Manger 在自动化文档中运行 Python 脚本 - 也称为运行手册。该脚本通过操作aws:executeScript调用,所选运行时为 python3.7。

所有可用示例仅显示如何从脚本返回数据。我怎么能表明脚本已经失败了?这似乎是无证的。

我尝试过sys.exit(1),也尝试过raise Exception('oh noes')。两者都使执行程序崩溃。不幸的是,这完全隐藏了脚本的所有标准输出/标准错误,并给我留下了以下信息:

当轮询操作状态为完成时,步骤失败。Traceback(最近一次调用最后一次):文件“/tmp/some-path/customer_script.py”,第 23 行,在 main sys.exit(1) SystemExit - 1。有关更多诊断详细信息,请参阅自动化服务故障排除指南。

处理程序方法需要两个参数 (eventscontext)。同样,这些对象的内容可能是什么似乎完全没有记录。events似乎是一个带有传递给脚本的参数的字典。context是某个对象,但根据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']
4

1 回答 1

0

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")
于 2021-03-27T14:00:41.443 回答