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