1. 使用Ansible ad-hoc的方式连接AWS EC2
需求:使用ansible连接上EC2执行ping
前置条件:申请AWS账号,根据相关帮助文档创建免费的EC2实例(linux)
1) 第一种配置方式
hosts文件中内容:
[local]
127.0.0.1
[aws]
ec2-user@54.88.1.1
执行
ansible aws -i hosts --private-key ../private/aws-ec2-a.pem -m ping
2) 第二种配置方式:
hosts文件中内容:
[local]
127.0.0.1
[aws]
54.88.174.221
ansible aws -i hosts --private-key ../private/aws-ec2-a.pem -m ping -u ec2-user
3)第三种配置方式
hosts文件内容:
[local]
127.0.0.1
[aws]
54.88.174.221 ansible_ssh_private_key_file=../private/aws-ec2-wendll2.pem
54.88.174.221 ansible_ssh_user=ec2-user
执行
ansible aws -i hosts -m ping
三种配置都能够执行成功。
这里也可以使用sudo来使用root用户执行ping命令
ansible aws -i hosts --private-key ../private/aws-ec2-a.pem -m ping -u ec2-user -s -U root -K
-u为ssh连接时使用的用户。
-s表示用sudo,也可以使用--sudo
-U表示ssh连接后sudo的用户,也可以使用--sudo-user=SUDO_USER
-K表示可以交互的输入密码,也可以使用--ask-sudo-pass
如果sudo时只需要是默认超级用户root且不用输入密码,则只需要在ec2-user后加-s即可
还可以使用su来使用root用户执行ping命令
ansible aws -i hosts --private-key ../private/aws-ec2-a.pem -m ping -u ec2-user -S -R root --ask-su-pass
-S表示为su,也可以使用--su
-R表示su用户,也可以使用--su-user=SU_USER
--ask-su-pass表示交互输入密码
上面使用的是ping模块。也可以使用如下方式来执行shell命令
ansible aws -i hosts --private-key ../private/aws-ec2-a.pem -a "/bin/echo hello" -u ec2-user
2. 使用Ansible Playbook的方式
需求:使用Ansible Playbook在EC2上创建用户
Hosts文件内容:
[local]
127.0.0.1
[aws]
54.88.174.221 ansible_ssh_private_key_file=../private/aws-ec2-wendll2.pem
54.88.174.221 ansible_ssh_user=ec2-user
create_user.yml文件内容
---
- name: create user
hosts: aws
user: root
gather_facts: false
vars:
- user: "wendll"
tasks:
- name: create {{ user }} on aws
user: name="{{ user }}"
执行
ansible-playbook -i hosts -s create_user.yml
需求:将本地文件拷贝至EC2中
在create_user.yml文件的tasks中增加:
- name: Copy ansible inventory file to client
copy: src=template/HelloWorld.java dest=/home/ec2-user
owner=root group=root mode=0644
执行
ansible-playbook -i hosts -s create_user.yml
yml文件task中的user,copy都为ansible提供的模块名。常用的还有command, template,notify,service模块。