我目前正在使用 AWS Lambda 启动维护时段,但发现执行超时默认设置为 3600(1 小时(,当大规模使用 1 小时时,往往会拖一点时间。 我试图将超时降低到 900(15 分钟(,但尽管当我运行 lambda 时接受执行超时:["900"], 维护窗口已创建,我在执行任务中收到错误: 失败:"指定的参数不完整或无效。
这是我正在尝试的代码片段:
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。 我已经尝试了多种方法来做到这一点,并搜索了很长时间无济于事。 感谢您的帮助!
事实证明,内置的AWS-RunPatchBaseline文档目前不允许您配置自定义执行超时(令人惊讶(。它允许您配置的超时是传递超时,但执行超时是硬编码的,您无法更改它。 因此,要使用不同的执行超时,您必须创建自己的自定义文档,该文档允许您设置此超时。 我向 AWS 支持人员提出了同样的问题,并得到了以下答案:
AWS提供的 AWS-RunPatchBaseline 文档没有 执行超时内置为可配置参数,并且 用 7200 分钟硬编码:
[AWS-RunPatchBaseline ## 第 34-37 行 ##] "action": "aws:runPowerShellScript", "名称": "补丁窗口", "输入":{ "超时秒数":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)" },
替换超时秒输入:
现存:
"action": "aws:runPowerShellScript", "name": "PatchWindows", "inputs": { "timeoutSeconds": 7200,
新增功能
"action": "aws:runPowerShellScript", "name": "PatchWindows", "inputs": { "timeoutSeconds": "{{executionTimeout}}",
我对此进行了测试,它接受了 执行超时参数。我希望这有帮助!
参考资料: [1] 复制文档 - https://docs.aws.amazon.com/systems-manager/latest/userguide/copy-document.html