AWS Systems Manager运行Ansible playbook报no hosts matched问题咨询
问题根因
AWS-ApplyAnsiblePlaybooks SSM文档默认的执行命令硬编码了-i localhost -c local参数:
-i localhost强制指定Ansible的主机清单仅包含localhost这一个节点,不会自动加载你Github仓库里存放的ini格式hosts文件-c local强制使用本地连接方式,不会通过SSH等远程协议连接清单里的其他节点
Ansible运行时的有效主机清单里根本不存在你定义的dev主机组,自然会触发Could not match supplied host pattern, ignoring: dev警告,最终提示没有匹配的可执行主机。
你将playbook中hosts配置改为all后可以正常运行,是因为当前有效清单里仅有的localhost节点会被all规则匹配到,本质还是没有用到你自定义的hosts清单。
解决方法
根据实际使用场景选择对应方案即可:
- 方案1:需要使用自定义hosts清单执行跨节点任务
运行AWS-ApplyAnsiblePlaybooks文档时,找到清单文件(Inventory File)配置项,填写你仓库中hosts文件的相对路径(比如文件存放在仓库根目录就填./hosts),替换默认的localhost值。同时需要修改连接方式参数为ssh,保证执行命令的目标实例可以正常解析、连通你清单里配置的server.example.com节点,且具备对应SSH访问权限。 - 方案2:仅需要在SSM选定的目标实例本地执行任务
不需要单独维护自定义hosts文件:如果要在所有选定的目标实例上执行,直接将playbook的hosts配置为localhost,保留connection: local配置即可;如果需要按dev等环境分组执行,可以在运行Run Command时通过额外变量传入环境标识,在playbook中用when条件判断当前节点是否匹配环境要求,再决定是否执行任务。 - 方案3:默认文档参数无法满足需求
复制AWS官方提供的AWS-ApplyAnsiblePlaybooks托管文档创建自定义版本,修改文档中硬编码的Ansible执行命令,移除-i localhost -c local的固定配置,替换为你实际需要的清单路径、连接方式等参数,后续使用自定义文档执行Run Command即可。
内容的提问来源于stack exchange,提问作者PSN
相关产品推荐
相关产品推荐

