使用Ansible在EC2实例上安装Nginx
我正在创建IAM。
在这里创建用户并创建访问密钥和秘密访问密钥。将其定义为环境变量。
export AWS_ACCESS_KEY_ID=XXX
export AWS_SECRET_ACCESS_KEY=XXX
export AWS_REGION=ap-northeast-1
创建密钥对
在这里创建Key Pair。
名称可以是任何东西,我创建了一个名为ansible的key。
将下载的ansible.pem复制到~/.ssh/目录下,并修改其访问权限。
$ cd ~/Download
$ chmod 600 ansible.pem
$ mv ansible.pem ~/.ssh
创建EC2实例
-
- Amazon Linuxを選択
-
- ansibleというNameをつける(違うNameをつける場合は後で指定するinstance_filtersで同じ名前を付ける)
-
- 自分のPCからsshでアクセスできるようにしておく
- 先ほど作ったkey pair(ansible)を選択
他什么都可以接受。
创建Python环境
$ virtualenv -p `which python2.7` venv
$ source venv/bin/activate
创建一个名为requirements.txt的文件,并在其中记录所需的库。
ansible==2.2.1.0
passlib==1.7.1
boto==2.46.1
安装
$ pip install -r requirements.txt
准备 EC2 动态清单
$ mkdir -p inventories/dev/
$ cd inventories/dev/
$ wget https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/ec2.ini
$ wget https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/ec2.py
$ chmod +x ec2.py
查看ec2.ini文件中大约在第170行附近的示例,根据示例定义instance_filters。
instance_filters = tag:Name=ansible(他のNameにした場合は修正)
提前在同一位置创建一个hosts文件。
[all:vars]
ansible_ssh_port=22
ansible_ssh_private_key_file=~/.ssh/ansible.pem
ansible_ssh_user=ec2-user
這種感覺
- inventories
- dev
- ec2.ini
- ec2.py
- hosts
确认动作
试试ping的方法
% ansible -i inventories/dev tag_Name_ansible -m ping
54.64.184.xxx | SUCCESS => {
"changed": false,
"ping": "pong"
}
安装nginx
使用geerlingguy.nginx
- src: geerlingguy.nginx
安装
$ ansible-galaxy install -p ./roles/galaxy -r galaxy-requirements.yml
撰写Playbook
---
- name: provisining for a sample java application.
hosts: all
become: true
roles:
- { role: galaxy/geerlingguy.nginx }
如果按照现在的执行方式,会出现这样的错误,所以需要进行设置修正。
TASK [galaxy/geerlingguy.nginx : Ensure nginx is installed.] *******************
fatal: [54.64.184.xxx]: FAILED! => {"changed": false, "failed": true, "msg": "Failure talking to yum: failure: repodata/repomd.xml from nginx: [Errno 256] No more mirrors to try.\nhttp://nginx.org/packages/centos/NA/x86_64/repodata/repomd.xml: [Errno 14] HTTP Error 404 - Not Found"}
顺便把nginx.conf文件也从模板中读取。
---
nginx_yum_repo_enabled: false
nginx_conf_template: "{{ playbook_dir }}/templates/nginx.conf.j2"
events {
worker_connections 1024;
}
http {
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
对playbook.yml进行修改,以便读取main.yml。
---
- name: provisining for a sample java application.
hosts: all
become: true
vars_files:
- vars/main.yml
roles:
- { role: galaxy/geerlingguy.nginx }
在dev目录下执行playbook.yml文件的ansible-playbook命令。
如果允许入站80端口,则会显示nginx的测试页面。太好了!
已完成的产品。