使用aws:sleep实现AWS SSM Association实例间60秒暂停报错,用法是否正确?
问题解答
你的aws:sleep用法不正确,报错原因是:
Command类型的SSM文档不支持aws:sleep插件,该插件仅属于Automation类型的SSM文档,因此会触发"Unknown plugin name"错误。
正确实现实例间60秒暂停的方案
你要实现的是「处理完一台实例后,暂停60秒再处理下一台」,结合你已设置的max_concurrency = "1"(一次仅处理1台实例),无需在SSM文档中添加sleep步骤,以下是两种简单可行的方式:
方式一:在PowerShell脚本中添加延迟
直接在你的PowerShell脚本末尾加入本地sleep命令,利用max_concurrency=1的特性,当前实例脚本执行完成(包含60秒延迟)后,SSM才会启动下一台实例的关联执行。
修改你的local.commands内容(示例):
# 原有业务命令 Write-Host "执行业务操作" # 添加60秒延迟 Start-Sleep -Seconds 60
同时移除SSM文档中的aws:sleep步骤,修改后的SSM文档资源:
resource "aws_ssm_document" "ssm_document" { name = "SSM-Association" document_type = "Command" document_format = "JSON" content = jsonencode({ schemaVersion = "2.2", description = "Document to run a command on Windows instances", parameters = {}, mainSteps = [ { action = "aws:runPowerShellScript", name = "runPowerShellScript", inputs = { runCommand = split("\n", trimspace(local.commands)) }, precondition = { StringEquals = [ "platformType", "Windows" ] } } ] }) }
方式二:改用Automation类型文档(进阶)
如果不想在实例本地占用资源等待,可以将SSM文档类型改为Automation,此时就能合法使用aws:sleep插件,通过Automation流程控制实例遍历、命令执行、延迟的全流程。但这种方式配置相对复杂,适合需要更精细流程控制的场景。
内容的提问来源于stack exchange,提问作者gklucard
相关产品推荐
相关产品推荐

