1

我目前正在使用 AWS Lambda 来启动维护窗口,但发现执行超时默认设置为 3600(1 小时),当大规模使用时,1 小时往往会拖慢一点。我试图将超时时间降低到 900(15 分钟),但是虽然在我运行 lambda 时接受了 executionTimeout: ["900"],但创建了维护窗口并且我在执行任务中收到错误:FAILED:"The specified参数不完整或无效。”

这是我正在尝试的代码片段:

        reg_taskmw_res = ssm_client.register_task_with_maintenance_window(
    WindowId=window_id,
    Targets=[
        {
            'Key': 'WindowTargetIds',
            'Values': [
                reg_targetmw_res['WindowTargetId']
            ]
        },
    ],
    TaskArn='AWS-RunPatchBaseline',
    TaskType='RUN_COMMAND',

    TaskInvocationParameters={
        'RunCommand': {
            'DocumentHash': DocHash,
            'DocumentHashType': 'Sha256',
            'Parameters': {
                'Operation': ['Scan'],
                'executionTimeout': ['900']
                },
            'TimeoutSeconds': 60
            },
        },
    Priority=123,
    MaxConcurrency='3',
    MaxErrors='3'
)

如果我不使用 executionTimeout 维护窗口工作,但有 3600 超时。我已经尝试了多种方法来做到这一点,并搜索年龄无济于事。感谢你的帮助!

4

1 回答 1

1

事实证明,内置的 AWS-RunPatchBaseline 文档此时不允许您配置自定义执行超时(令人惊讶)。它允许您配置的超时是交付超时,但执行超时是硬编码的,您无法更改它。因此,要使用不同的执行超时,您必须制作自己的自定义文档以允许您设置它。我向 AWS 支持提出了同样的问题并得到了这个答案:

AWS 提供的 AWS-RunPatchBaseline 文档没有内置 executionTimeout 作为可配置参数,并且硬编码为 7200 分钟:

[AWS-RunPatchBaseline ## Line 34-37 ##] "action": "aws:runPowerShellScript", "name": "PatchWindows", "inputs": { "timeoutSeconds": 7200,

您可以在此处创建自己的自定义文档并自己添加参数,这将允许您配置执行超时以及控制台条目所用的交付超时。为此,您可以基于现有的 [1] 创建一个新的自定义文档,然后添加以下修改:

在第 5 行插入:

  "executionTimeout": {
  "type": "String",
  "default": "900",
  "description": "(Optional) The time in seconds for a command to complete before it is considered to have failed. Default is 900 (15 mins). Maximum is 172800 (48 hours).",
  "allowedPattern": "([1-9][0-9]{0,4})|(1[0-6][0-9]{4})|(17[0-1][0-9]{3})|(172[0-7][0-9]{2})|(172800)"
},

替换 timeoutSeconds 输入:

现存的:

  "action": "aws:runPowerShellScript",
  "name": "PatchWindows",
  "inputs": {
    "timeoutSeconds": 7200,

新的

  "action": "aws:runPowerShellScript",
  "name": "PatchWindows",
  "inputs": {
    "timeoutSeconds": "{{executionTimeout}}",

我对此进行了测试,它接受了 executionTimeout 参数。我希望这有帮助!

参考资料:[1] 复制文档 - https://docs.aws.amazon.com/systems-manager/latest/userguide/copy-document.html

于 2019-12-03T17:47:14.577 回答