如何让Ansible通过名称或标签发现指定ECS集群对应的EC2实例
Ansible 自动发现ECS集群关联EC2实例配置方案
前置准备
- 安装基础依赖包:
pip install boto3 ansible
- 安装Ansible AWS官方集合:
ansible-galaxy collection install amazon.aws
- 配置AWS访问凭证:可通过
~/.aws/credentials文件或者环境变量AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY配置,对应IAM用户需拥有ec2:DescribeInstances权限。
步骤1:创建动态清单配置文件
新建名为aws_ec2.yaml的配置文件,内容如下:
plugin: amazon.aws.aws_ec2 # 配置你的AWS区域,多个区域可以用列表形式填写 regions: - cn-north-1 # 过滤规则,匹配ECS集群对应的EC2实例 filters: # ECS默认会给集群内EC2实例打标签aws:ecs:clusterName,值为集群名称,直接匹配即可 tag:aws:ecs:clusterName: "你的ECS集群名称" # 若你使用自定义标签标记集群实例,替换为对应的标签键值即可,示例: # tag:自定义集群标签键: "自定义集群标签值" # 可选配置:按实例标签自动生成分组,方便后续按分组调用 keyed_groups: - key: tags['aws:ecs:clusterName'] prefix: ecs_cluster
步骤2:验证动态清单有效性
执行以下命令验证是否能正确获取到集群下的所有EC2实例:
ansible-inventory -i aws_ec2.yaml --list
输出内容中会列出所有匹配过滤规则的EC2实例的元数据信息,确认实例列表正确即可。
步骤3:使用动态清单执行Ansible操作
示例:对集群内所有实例执行ping检测:
ansible all -i aws_ec2.yaml -m ping
如果配置了keyed_groups,也可以使用自动生成的分组名调用,比如集群名称为prod-cluster,分组名就是ecs_cluster_prod_cluster,调用命令为:
ansible ecs_cluster_prod_cluster -i aws_ec2.yaml -m command -a "uptime"
内容的提问来源于stack exchange,提问作者Roman Newaza
相关产品推荐
相关产品推荐

