1. 程式人生 > >【基礎】使用Ansible連線AWS EC2

【基礎】使用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模組。