EC2实例创建后如何等待SSM Agent就绪以执行Ansible Playbook?
解决方案
问题核心在于wait_for_connection任务默认针对SSH连接检测,而你使用的是community.aws.aws_ssm连接插件,因此该任务无法正确识别SSM Agent的就绪状态。以下是两种可行的解决方法:
方法1:使用Ansible官方SSM等待模块(推荐)
借助community.aws.ssm_wait_for_target_status模块直接等待EC2实例的SSM Agent进入在线状态:
- 先确保已安装
community.aws集合:
ansible-galaxy collection install community.aws
- 替换原有的
wait_for_connection任务为:
- name: 等待SSM Agent就绪 community.aws.ssm_wait_for_target_status: target_ids: "{{ ansible_host }}" status: online delay: 10 # 每次检查间隔10秒 max_attempts: 30 # 最多检查30次,总超时300秒
方法2:通过AWS CLI循环验证
若不想依赖额外模块,可直接在Ansible中调用AWS CLI,直到能成功建立SSM会话:
- name: 等待SSM会话可用 shell: aws ssm start-session --target {{ ansible_host }} --command "exit 0" register: ssm_session_check until: ssm_session_check.rc == 0 retries: 30 delay: 10
补充说明
- 两种方法的超时逻辑和你原配置的300秒保持一致,可根据实际需求调整
delay和retries/max_attempts参数。 - 确保执行Ansible的主机已配置好AWS凭证(环境变量、
~/.aws/credentials或IAM角色),并拥有启动SSM会话、查看实例状态的权限。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

