【基础】使用Ansible连接AWS EC2

1. 使用Ansible ad-hoc的方式连接AWS EC2

需求:使用ansible连接上EC2执行ping

前置条件:申请AWS账号,根据相关帮助文档创建免费的EC2实例(linux)

1) 第一种配置方式

hosts文件中内容:

[local]
127.0.0.1

[aws]
[email protected]

执行

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

这里默认使用模块为command模块


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模块。





猜你喜欢

转载自blog.csdn.net/wendll/article/details/38345187