使用 Anshible 在 Amazon EC2 上使用 yum 安装指定的包
首先
在Amazon EC2实例(Amazon Linux)上安装Ansible,并使用Ansible在Amazon EC2实例上通过yum安装指定的软件包的步骤。
环境:
我們使用了以下的AMI在本次操作中創建了Amazon EC2實例(Amazon Linux)。
亚马逊 Linux AMI 2016.03.3 (HVM), SSD卷类型 – ami-374db956
amzn-ami-hvm-2016.03.3.x86_64-gp2 (ami-374db956)
在Amazon EC2实例上安装的Ansible版本如下所示。
ansible-playbook 2.1.1.0的版本
请参考以下资料
非常感谢您提供的参考资料。
yum – 使用yum软件包管理器来管理软件包
https://docs.ansible.com/ansible/yum_module.html
检查模式(“干跑”)
https://docs.ansible.com/ansible/playbooks_checkmode.html
关于Ansible构建管理工具
http://apatheia.info/blog/2013/04/06/about-ansible/
(Note: The provided information is the paraphrased translation of the original text.)
使用 yum 在 AmazonLinux 上安装 Ansible 但无法运行。
在Amazon EC2上安装Ansible的步骤
(1) 登录AWS管理控制台,创建一个Amazon EC2实例(Amazon Linux)以安装Ansible。
在已创建的Amazon EC2实例上,使用ec2-user进行ssh登录。
ssh ec2-user@EC2インスタンスのIPアドレス
更新 Amazon EC2 实例上的 yum 软件包。
$ sudo su -
# yum -y update
(4) 重新启动Amazon EC2实例。
在这个例子中,我们将改变Amazon EC2实例的主机名如下。
# vi /etc/sysconfig/network
(中略)
HOSTNAME=example-ansible-server
(中略)
重新启动Amazon EC2实例。
# reboot
当Amazon EC2实例启动后,您将再次使用ec2-user进行SSH登录。
(5) 确认 Amazon EC2 实例中的 Python 版本。
运行Anshible的机器必须安装Python。请确认Python已安装在Amazon EC2实例上。
(自2016年9月25日起,EC2实例默认已安装以下版本的Python。)
[ec2-user@example-ansible-server ~]$ python --version
Python 2.7.12
[ec2-user@example-ansible-server ~]$
[ec2-user@example-ansible-server ~]$ uname -a
Linux example-ansible-server 4.4.19-29.55.amzn1.x86_64 #1 SMP Mon Aug 29 23:29:40 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
[ec2-user@example-ansible-server ~]$
在Amazon EC2实例上安装pip。
[ec2-user@example-ansible-server ~]$ sudo easy_install pip
Searching for pip
Best match: pip 6.1.1
Adding pip 6.1.1 to easy-install.pth file
Installing pip script to /usr/local/bin
Installing pip2.7 script to /usr/local/bin
Installing pip2 script to /usr/local/bin
Using /usr/lib/python2.7/dist-packages
Processing dependencies for pip
Finished processing dependencies for pip
[ec2-user@example-ansible-server ~]$
(7)在Amazon EC2实例上安装Ansible。
安装Ansible。
[ec2-user@example-ansible-server ~]$ sudo pip install ansible
You are using pip version 6.1.1, however version 8.1.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Collecting ansible
Downloading ansible-2.1.1.0.tar.gz (1.9MB)
100% |????????????????????????????????| 1.9MB 249kB/s
Requirement already satisfied (use --upgrade to upgrade): paramiko in /usr/lib/python2.7/dist-packages (from ansible)
Requirement already satisfied (use --upgrade to upgrade): jinja2 in /usr/lib/python2.7/dist-packages (from ansible)
Requirement already satisfied (use --upgrade to upgrade): PyYAML in /usr/lib64/python2.7/dist-packages (from ansible)
Requirement already satisfied (use --upgrade to upgrade): setuptools in /usr/lib/python2.7/dist-packages (from ansible)
Requirement already satisfied (use --upgrade to upgrade): pycrypto>=2.6 in /usr/lib64/python2.7/dist-packages (from ansible)
Requirement already satisfied (use --upgrade to upgrade): ecdsa>=0.11 in /usr/lib/python2.7/dist-packages (from paramiko->ansible)
Requirement already satisfied (use --upgrade to upgrade): markupsafe in /usr/lib64/python2.7/dist-packages (from jinja2->ansible)
Installing collected packages: ansible
Running setup.py install for ansible
Successfully installed ansible-2.1.1.0
[ec2-user@example-ansible-server ~]$
确认安装了 Aansible。
[ec2-user@example-ansible-server ~]$ which ansible
/usr/local/bin/ansible
[ec2-user@example-ansible-server ~]$
[ec2-user@example-ansible-server ~]$ ansible --version
ansible 2.1.1.0
config file =
configured module search path = Default w/o overrides
[ec2-user@example-ansible-server ~]$
Ansible配置的设置
(8) 创建 Ansible 操作目标机器的 IP 地址列表。
在安装了Ansible的Amazon EC2实例上,创建Ansible操作目标机器的IP地址列表。
[ec2-user@example-ansible-server ~]$ sudo mkdir /etc/ansible
[ec2-user@example-ansible-server ~]$
[ec2-user@example-ansible-server ~]$ sudo vi /etc/ansible/hosts
[local_node]
127.0.0.1
(9) 创建一个Ansible的playbook。
使用Aansible在Amazon EC2实例上安装指定的 yum 包。
在这个例子中,我们将使用yum命令在EC2实例上安装jq、sysstat(sar命令)、git和gcc。
创建Ansible的Playbook文件。在Playbook文件中写入所要安装的yum包。
[ec2-user@example-ansible-server ~]$ vi /home/ec2-user/example_playbook.yml
---
- hosts:
- localhost
connection: local
tasks:
- name: update all packages
yum: name=* state=latest
become: yes
- name: install the latest version of gcc
yum: name=gcc state=latest
become: yes
- name: install the latest version of git
yum: name=git state=latest
become: yes
- name: install the latest version of jq
yum: name=jq state=latest
become: yes
- name: install the latest version of sysstat
yum: name=sysstat state=latest
become: yes
[ec2-user@example-ansible-server ~]$ cat /home/ec2-user/example_playbook.yml
---
- hosts:
- localhost
connection: local
tasks:
- name: update all packages
yum: name=* state=latest
become: yes
- name: install the latest version of gcc
yum: name=gcc state=latest
become: yes
- name: install the latest version of git
yum: name=git state=latest
become: yes
- name: install the latest version of jq
yum: name=jq state=latest
become: yes
- name: install the latest version of sysstat
yum: name=sysstat state=latest
become: yes
[ec2-user@example-ansible-server ~]$
(10) 检查 Ansible playbook 的语法。
检查所创建的playbook文件的语法,并确认没有问题。
[ec2-user@example-ansible-server ~]$ ansible-playbook --syntax-check /home/ec2-user/example_playbook.yml
playbook: /home/ec2-user/example_playbook.yml
[ec2-user@example-ansible-server ~]$
(11) 以测试模式运行Aansible的playbook。
将使用Ansible playbook以测试模式运行。在测试模式下,实际上不会安装yum软件包。
确认所指定的安装包名称会显示出来。
[ec2-user@example-ansible-server ~]$ ansible-playbook --check /home/ec2-user/example_playbook.yml
PLAY [localhost] ***************************************************************
TASK [setup] *******************************************************************
ok: [localhost]
TASK [update all packages] *****************************************************
ok: [localhost]
TASK [install the latest version of gcc] ***************************************
changed: [localhost]
TASK [install the latest version of git] ***************************************
changed: [localhost]
TASK [install the latest version of jq] ****************************************
changed: [localhost]
TASK [install the latest version of sysstat] ***********************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=6 changed=4 unreachable=0 failed=0
[ec2-user@example-ansible-server ~]$
使用Ansible在Amazon EC2实例上通过yum安装指定的软件包。
(12)执行 Ansible 的 playbook,在 Amazon EC2 实例上使用 yum 安装软件包。
运行Ansible的playbook,在EC2实例上使用yum安装jq、sysstat、git和gcc。
首先,我们会检查安装前的状态。
[ec2-user@example-ansible-server ~]$ rpm -qa | grep jq
[ec2-user@example-ansible-server ~]$
[ec2-user@example-ansible-server ~]$ rpm -qa | grep sysstat
[ec2-user@example-ansible-server ~]$
[ec2-user@example-ansible-server ~]$ rpm -qa | grep git
[ec2-user@example-ansible-server ~]$
[ec2-user@example-ansible-server ~]$ rpm -qa | grep gcc
libgcc48-4.8.3-9.109.amzn1.x86_64
[ec2-user@example-ansible-server ~]$
执行 Ansible playbook,在 Amazon EC2 实例上使用 yum 安装软件包。
[ec2-user@example-ansible-server ~]$ ansible-playbook /home/ec2-user/example_playbook.yml
PLAY [localhost] ***************************************************************
TASK [setup] *******************************************************************
ok: [localhost]
TASK [update all packages] *****************************************************
ok: [localhost]
TASK [install the latest version of gcc] ***************************************
changed: [localhost]
TASK [install the latest version of git] ***************************************
changed: [localhost]
TASK [install the latest version of jq] ****************************************
changed: [localhost]
TASK [install the latest version of sysstat] ***********************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=6 changed=4 unreachable=0 failed=0
[ec2-user@example-ansible-server ~]$
(13) 确认 Amazon EC2 实例上已安装 yum 包。
通过上述Ansible的playbook执行,确认在Amazon EC2实例上安装了yum包。
再次执行Ansible的playbook,并确认在Amazon EC2实例上已安装yum软件包。
您可以再次执行Ansible的playbook,并确认Amazon EC2实例安装了yum软件包。
由于Ansible具有幂等性,因此即使再次运行Playbook,如果yum包已经安装,安装过程也将被跳过。
在这个例子中,我们确认命令执行结果会显示“ok=6”。
[ec2-user@example-ansible-server ~]$ ansible-playbook /home/ec2-user/example_playbook.yml
PLAY [localhost] ***************************************************************
TASK [setup] *******************************************************************
ok: [localhost]
TASK [update all packages] *****************************************************
ok: [localhost]
TASK [install the latest version of gcc] ***************************************
ok: [localhost]
TASK [install the latest version of git] ***************************************
ok: [localhost]
TASK [install the latest version of jq] ****************************************
ok: [localhost]
TASK [install the latest version of sysstat] ***********************************
ok: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=6 changed=0 unreachable=0 failed=0
[ec2-user@example-ansible-server ~]$
使用手动方式执行命令,确认在Amazon EC2实例上已安装了yum包。(13-2)
不使用Ansible的playbook,手动确认Amazon EC2实例上是否已安装了yum包也是可能的。
可以执行以下命令来确认每个包已经通过yum安装了。
[ec2-user@example-ansible-server ~]$ rpm -qa | grep jq
jq-libs-1.5-1.2.amzn1.x86_64
jq-1.5-1.2.amzn1.x86_64
[ec2-user@example-ansible-server ~]$
[ec2-user@example-ansible-server ~]$ rpm -qa | grep git
git-2.7.4-1.47.amzn1.x86_64
[ec2-user@example-ansible-server ~]$
[ec2-user@example-ansible-server ~]$ rpm -qa | grep sysstat
sysstat-9.0.4-27.10.amzn1.x86_64
[ec2-user@example-ansible-server ~]$
[ec2-user@example-ansible-server ~]$ rpm -qa | grep gcc
libgcc48-4.8.3-9.109.amzn1.x86_64
gcc48-4.8.3-9.109.amzn1.x86_64
gcc-4.8.3-3.20.amzn1.noarch
[ec2-user@example-ansible-server ~]$
[ec2-user@example-ansible-server ~]$ which jq
/usr/bin/jq
[ec2-user@example-ansible-server ~]$
[ec2-user@example-ansible-server ~]$ which git
/usr/bin/git
[ec2-user@example-ansible-server ~]$
[ec2-user@example-ansible-server ~]$ which sar
/usr/bin/sar
[ec2-user@example-ansible-server ~]$
[ec2-user@example-ansible-server ~]$ which gcc
/usr/bin/gcc
[ec2-user@example-ansible-server ~]$
[ec2-user@example-ansible-server ~]$ jq --version
jq-1.5
[ec2-user@example-ansible-server ~]$
[ec2-user@example-ansible-server ~]$ git --version
git version 2.7.4
[ec2-user@example-ansible-server ~]$
[ec2-user@example-ansible-server ~]$ sar -v
Linux 4.4.19-29.55.amzn1.x86_64 (example-ansible-server) 09/25/2016 _x86_64_ (1 CPU)
[ec2-user@example-ansible-server ~]$ gcc --version
gcc (GCC) 4.8.3 20140911 (Red Hat 4.8.3-9)
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
[ec2-user@example-ansible-server ~]$
以上就是。