如何通过Python结合aws_ssm连接插件编程运行Ansible Playbook
用PlaybookExecutor结合aws_ssm连接插件运行Ansible Playbook示例
前置准备
- 安装依赖包:
pip install ansible boto3 - 配置AWS凭证:可通过
~/.aws/credentials文件、环境变量(AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY)或IAM角色(如果代码运行在EC2/EKS等AWS服务上) - 目标EC2实例要求:
- 已安装并运行SSM Agent
- 实例IAM角色关联
AmazonSSMManagedInstanceCore权限策略
Python代码示例
以下是完整的Python代码,通过PlaybookExecutor调用aws_ssm连接插件执行Playbook:
from ansible.playbook.playbook import Playbook from ansible.executor.playbook_executor import PlaybookExecutor from ansible.inventory.manager import InventoryManager from ansible.vars.manager import VariableManager from ansible.parsing.dataloader import DataLoader from ansible.module_utils.common.collections import ImmutableDict from ansible import context # 设置Ansible上下文参数 context.CLIARGS = ImmutableDict( connection='aws_ssm', forks=5, check=False, diff=False, verbosity=2, private_key_file=None, remote_user=None, become=None, become_method=None, become_user=None ) # 初始化数据加载器 loader = DataLoader() # 构建Inventory,添加目标EC2实例(替换为你的实例ID和区域) inventory = InventoryManager(loader=loader, sources=['/dev/null']) inventory.add_host( name='i-0123456789abcdef0', variables={ 'ansible_connection': 'aws_ssm', 'ansible_aws_ssm_region': 'us-east-1', # 若需指定AWS profile,取消下方注释 # 'ansible_aws_ssm_profile': 'my-aws-profile' } ) # 初始化变量管理器 variable_manager = VariableManager(loader=loader, inventory=inventory) # 指定Playbook路径(替换为你的Playbook文件路径) playbook_path = './ssm_test_playbook.yml' # 创建Playbook执行器 executor = PlaybookExecutor( playbooks=[playbook_path], inventory=inventory, variable_manager=variable_manager, loader=loader, passwords={} ) # 执行Playbook并获取结果 execution_result = executor.run() print(f"Playbook执行返回码: {execution_result}")
配套Playbook示例(ssm_test_playbook.yml)
- name: 通过AWS SSM连接执行任务 hosts: all gather_facts: true tasks: - name: 查看操作系统版本 command: cat /etc/os-release register: os_info - name: 输出系统版本信息 debug: var: os_info.stdout_lines
关键配置说明
ansible_connection: aws_ssm:强制使用aws_ssm连接插件,替代默认的SSH连接ansible_aws_ssm_region:指定目标EC2实例所在的AWS区域,必须与实例实际区域一致ansible_aws_ssm_profile:可选,当需要使用非默认AWS凭证profile时配置- 若需批量管理实例,可使用AWS动态Inventory(如
aws_ec2插件)替代手动添加主机,只需在Inventory配置中指定过滤标签或实例ID即可
内容的提问来源于stack exchange,提问作者Adaikal Raj
相关产品推荐
相关产品推荐

