使用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的测试页面。太好了!

已完成的产品。

广告
将在 10 秒后关闭
bannerAds