概要

  • 今回は、備忘録としてansibleインストール & セットアップ方法をまとめます。前半は、Ubuntu(WSL)にansibleをインストールしています。後半は、ansible からAWS のEC2 に対してplaybook を実行する方法を記載しています。
  • 背景として、playgook を利用した作業があり、手元にansible の環境がなかったためセットアップします。前提として、Windows 10 + WSL2 上のUbuntu を利用します。

Ubuntu(WSL)にansibleインストール手順

パッケージのアップデート

事前作業として、apt-get updateでパッケージリストを更新します。

niikawa@niikawa1:~$ sudo apt-get update
Hit:1 http://archive.ubuntu.com/ubuntu bionic InRelease
Get:2 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
Get:3 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
Get:4 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages [2092 kB]
Get:5 http://archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
Get:6 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages [2439 kB]
Get:7 http://security.ubuntu.com/ubuntu bionic-security/main Translation-en [370 kB]
Get:8 http://security.ubuntu.com/ubuntu bionic-security/restricted amd64 Packages [628 kB]
Get:9 http://archive.ubuntu.com/ubuntu bionic-updates/main Translation-en [462 kB]
Get:10 http://archive.ubuntu.com/ubuntu bionic-updates/restricted amd64 Packages [652 kB]
Get:11 http://security.ubuntu.com/ubuntu bionic-security/restricted Translation-en [85.8 kB]
Get:12 http://archive.ubuntu.com/ubuntu bionic-updates/restricted Translation-en [89.4 kB]
Get:13 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 Packages [1175 kB]
Get:14 http://archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages [1790 kB]
Get:15 http://security.ubuntu.com/ubuntu bionic-security/universe Translation-en [270 kB]
Get:16 http://archive.ubuntu.com/ubuntu bionic-updates/universe Translation-en [387 kB]
Get:17 http://security.ubuntu.com/ubuntu bionic-security/multiverse amd64 Packages [17.6 kB]
Get:18 http://archive.ubuntu.com/ubuntu bionic-updates/multiverse amd64 Packages [24.2 kB]
Get:19 http://security.ubuntu.com/ubuntu bionic-security/multiverse Translation-en [3660 B]
Get:20 http://archive.ubuntu.com/ubuntu bionic-updates/multiverse Translation-en [5980 B]
Get:21 http://archive.ubuntu.com/ubuntu bionic-backports/main amd64 Packages [10.3 kB]
Get:22 http://archive.ubuntu.com/ubuntu bionic-backports/main Translation-en [4824 B]
Get:23 http://archive.ubuntu.com/ubuntu bionic-backports/universe amd64 Packages [11.3 kB]
Get:24 http://archive.ubuntu.com/ubuntu bionic-backports/universe Translation-en [5772 B]
Fetched 10.8 MB in 6s (1800 kB/s)
Reading package lists... Done

requiredパッケージのインストール

  • ansible に必要な software-properties-commonのパッケージをインストールします。
niikawa@niikawa1:~$ sudo apt-get install software-properties-common
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following package was automatically installed and is no longer required:
  libfreetype6
Use 'sudo apt autoremove' to remove it.
The following additional packages will be installed:
  python3-software-properties
The following packages will be upgraded:
  python3-software-properties software-properties-common
2 upgraded, 0 newly installed, 0 to remove and 123 not upgraded.
Need to get 33.8 kB of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 software-properties-common all 0.96.24.32.18 [10.1 kB]
Get:2 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 python3-software-properties all 0.96.24.32.18 [23.8 kB]
Fetched 33.8 kB in 1s (39.7 kB/s)
(Reading database ... 37916 files and directories currently installed.)
Preparing to unpack .../software-properties-common_0.96.24.32.18_all.deb ...
Unpacking software-properties-common (0.96.24.32.18) over (0.96.24.32.14) ...
Preparing to unpack .../python3-software-properties_0.96.24.32.18_all.deb ...
Unpacking python3-software-properties (0.96.24.32.18) over (0.96.24.32.14) ...
Setting up python3-software-properties (0.96.24.32.18) ...
Setting up software-properties-common (0.96.24.32.18) ...
Processing triggers for dbus (1.12.2-1ubuntu1.2) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...

リポジトリの追加

  • ansible のリポジトリを追加します。
niikawa@niikawa1:~$ sudo apt-add-repository --yes --update ppa:ansible/ansible
Hit:1 http://security.ubuntu.com/ubuntu bionic-security InRelease
Get:2 http://ppa.launchpad.net/ansible/ansible/ubuntu bionic InRelease [15.9 kB]
Hit:3 http://archive.ubuntu.com/ubuntu bionic InRelease
Hit:4 http://archive.ubuntu.com/ubuntu bionic-updates InRelease
Hit:5 http://archive.ubuntu.com/ubuntu bionic-backports InRelease
Get:6 http://ppa.launchpad.net/ansible/ansible/ubuntu bionic/main amd64 Packages [704 B]
Get:7 http://ppa.launchpad.net/ansible/ansible/ubuntu bionic/main Translation-en [472 B]
Fetched 17.1 kB in 2s (9680 B/s)
Reading package lists... Done

ansible のインストール

  • apt-get install でansible をインストールします。
niikawa@niikawa1:~$ sudo apt-get install ansible
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following package was automatically installed and is no longer required:
  libfreetype6
Use 'sudo apt autoremove' to remove it.
The following additional packages will be installed:
  python-asn1crypto python-cffi-backend python-crypto python-cryptography python-enum34 python-httplib2 python-idna
  python-ipaddress python-jinja2 python-markupsafe python-paramiko python-pyasn1 python-six python-yaml sshpass
Suggested packages:
  python-crypto-doc python-cryptography-doc python-cryptography-vectors python-enum34-doc python-jinja2-doc
  python-gssapi
The following NEW packages will be installed:
  ansible python-asn1crypto python-cffi-backend python-crypto python-cryptography python-enum34 python-httplib2
  python-idna python-ipaddress python-jinja2 python-markupsafe python-paramiko python-pyasn1 python-six python-yaml
  sshpass
0 upgraded, 16 newly installed, 0 to remove and 123 not upgraded.
Need to get 6982 kB of archives.
After this operation, 64.8 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://ppa.launchpad.net/ansible/ansible/ubuntu bionic/main amd64 ansible all 2.9.27-1ppa~bionic [5804 kB]
Get:2 http://archive.ubuntu.com/ubuntu bionic/main amd64 python-markupsafe amd64 1.0-1build1 [13.0 kB]
Get:3 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 python-jinja2 all 2.10-1ubuntu0.18.04.1 [94.8 kB]
Get:4 http://archive.ubuntu.com/ubuntu bionic/main amd64 python-yaml amd64 3.12-1build2 [115 kB]
Get:5 http://archive.ubuntu.com/ubuntu bionic/main amd64 python-asn1crypto all 0.24.0-1 [72.7 kB]
Get:6 http://archive.ubuntu.com/ubuntu bionic/main amd64 python-cffi-backend amd64 1.11.5-1 [63.4 kB]
Get:7 http://archive.ubuntu.com/ubuntu bionic/main amd64 python-enum34 all 1.1.6-2 [34.8 kB]
Get:8 http://archive.ubuntu.com/ubuntu bionic/main amd64 python-idna all 2.6-1 [32.4 kB]
Get:9 http://archive.ubuntu.com/ubuntu bionic/main amd64 python-ipaddress all 1.0.17-1 [18.2 kB]
Get:10 http://archive.ubuntu.com/ubuntu bionic/main amd64 python-six all 1.11.0-2 [11.3 kB]
Get:11 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 python-cryptography amd64 2.1.4-1ubuntu1.4 [276 kB]
Get:12 http://archive.ubuntu.com/ubuntu bionic/main amd64 python-pyasn1 all 0.4.2-3 [46.7 kB]
Get:13 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 python-paramiko all 2.0.0-1ubuntu1.2 [110 kB]
Get:14 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 python-httplib2 all 0.9.2+dfsg-1ubuntu0.3 [34.9 kB]
Get:15 http://archive.ubuntu.com/ubuntu bionic/main amd64 python-crypto amd64 2.6.1-8ubuntu2 [244 kB]
Get:16 http://archive.ubuntu.com/ubuntu bionic/universe amd64 sshpass amd64 1.06-1 [10.5 kB]
Fetched 6982 kB in 5s (1295 kB/s)
Selecting previously unselected package python-markupsafe.
(Reading database ... 37916 files and directories currently installed.)
Preparing to unpack .../00-python-markupsafe_1.0-1build1_amd64.deb ...
Unpacking python-markupsafe (1.0-1build1) ...
Selecting previously unselected package python-jinja2.
Preparing to unpack .../01-python-jinja2_2.10-1ubuntu0.18.04.1_all.deb ...
Unpacking python-jinja2 (2.10-1ubuntu0.18.04.1) ...
Selecting previously unselected package python-yaml.
Preparing to unpack .../02-python-yaml_3.12-1build2_amd64.deb ...
Unpacking python-yaml (3.12-1build2) ...
Selecting previously unselected package python-asn1crypto.
Preparing to unpack .../03-python-asn1crypto_0.24.0-1_all.deb ...
Unpacking python-asn1crypto (0.24.0-1) ...
Selecting previously unselected package python-cffi-backend.
Preparing to unpack .../04-python-cffi-backend_1.11.5-1_amd64.deb ...
Unpacking python-cffi-backend (1.11.5-1) ...
Selecting previously unselected package python-enum34.
Preparing to unpack .../05-python-enum34_1.1.6-2_all.deb ...
Unpacking python-enum34 (1.1.6-2) ...
Selecting previously unselected package python-idna.
Preparing to unpack .../06-python-idna_2.6-1_all.deb ...
Unpacking python-idna (2.6-1) ...
Selecting previously unselected package python-ipaddress.
Preparing to unpack .../07-python-ipaddress_1.0.17-1_all.deb ...
Unpacking python-ipaddress (1.0.17-1) ...
Selecting previously unselected package python-six.
Preparing to unpack .../08-python-six_1.11.0-2_all.deb ...
Unpacking python-six (1.11.0-2) ...
Selecting previously unselected package python-cryptography.
Preparing to unpack .../09-python-cryptography_2.1.4-1ubuntu1.4_amd64.deb ...
Unpacking python-cryptography (2.1.4-1ubuntu1.4) ...
Selecting previously unselected package python-pyasn1.
Preparing to unpack .../10-python-pyasn1_0.4.2-3_all.deb ...
Unpacking python-pyasn1 (0.4.2-3) ...
Selecting previously unselected package python-paramiko.
Preparing to unpack .../11-python-paramiko_2.0.0-1ubuntu1.2_all.deb ...
Unpacking python-paramiko (2.0.0-1ubuntu1.2) ...
Selecting previously unselected package python-httplib2.
Preparing to unpack .../12-python-httplib2_0.9.2+dfsg-1ubuntu0.3_all.deb ...
Unpacking python-httplib2 (0.9.2+dfsg-1ubuntu0.3) ...
Selecting previously unselected package python-crypto.
Preparing to unpack .../13-python-crypto_2.6.1-8ubuntu2_amd64.deb ...
Unpacking python-crypto (2.6.1-8ubuntu2) ...
Selecting previously unselected package sshpass.
Preparing to unpack .../14-sshpass_1.06-1_amd64.deb ...
Unpacking sshpass (1.06-1) ...
Selecting previously unselected package ansible.
Preparing to unpack .../15-ansible_2.9.27-1ppa~bionic_all.deb ...
Unpacking ansible (2.9.27-1ppa~bionic) ...
Setting up python-idna (2.6-1) ...
Setting up python-yaml (3.12-1build2) ...
Setting up python-asn1crypto (0.24.0-1) ...
Setting up python-crypto (2.6.1-8ubuntu2) ...
Setting up python-pyasn1 (0.4.2-3) ...
Setting up python-markupsafe (1.0-1build1) ...
Setting up python-httplib2 (0.9.2+dfsg-1ubuntu0.3) ...
Setting up python-cffi-backend (1.11.5-1) ...
Setting up python-six (1.11.0-2) ...
Setting up sshpass (1.06-1) ...
Setting up python-enum34 (1.1.6-2) ...
Setting up python-ipaddress (1.0.17-1) ...
Setting up python-jinja2 (2.10-1ubuntu0.18.04.1) ...
Setting up python-cryptography (2.1.4-1ubuntu1.4) ...
Setting up python-paramiko (2.0.0-1ubuntu1.2) ...
Setting up ansible (2.9.27-1ppa~bionic) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
  • インストールされたことを確認します。
niikawa@niikawa1:~$ which ansible
/usr/bin/ansible
niikawa@niikawa1:~$ ansible --version
ansible 2.9.27
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/home/niikawa/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.17 (default, Feb 27 2021, 15:10:58) [GCC 7.5.0]

ansible コマンドをテストする

  • テストのため、localhost に対してping を行います。無事に、成功しました。
niikawa@niikawa1:~$ ansible -m ping localhost
localhost | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

AWS EC2 にplaybook を実行する

inventory とplaybook の準備

  • inventory を準備します。inventory は、ターゲットノードを管理するためのファイルです。ansible_host にserver1 で使用するIPアドレスを定義します。
  • “[ ]"で囲み、グループの定義も可能です。グループに対して、ユーザー名、ssh秘密鍵を指定しています。
$ cat test01_inventory.ini
[server]
server1 ansible_host=11.11.11.11

[server:vars]
ansible_user=ec2-user
ansible_ssh_private_key_file=./niikawa-testkey.pem
  • playbook を準備します。playbook は、タスクを定義する YAMLファイルです。今回のタスクは、/tmp にtest.txt を作成します。
$ cat test_book.yml
- hosts: server
  tasks:
   - name: playbook-test
     file:
        path: /tmp/test.txt
        state: touch

ansible-playbook コマンドでplaybook を実行する

  • ansible-playbook コマンドを実行します。playbook の実行は成功しました。
$ ansible-playbook -i test01_inventory.ini test_book.yml

PLAY [server] **********************************************************************************************************

TASK [Gathering Facts] *************************************************************************************************
The authenticity of host '11.11.11.11 (11.11.11.11)' can't be established.
ECDSA key fingerprint is SHA256:ET+dyyO9ibjPcnkO367b2g8NjXOTIUf6ofQyup1BIqg.
Are you sure you want to continue connecting (yes/no)? yes
[WARNING]: Platform linux on host server1 is using the discovered Python interpreter at /usr/bin/python, but future
installation of another Python interpreter could change this. See
https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information.
ok: [server1]

TASK [playbook-test] ***************************************************************************************************
changed: [server1]

PLAY RECAP *************************************************************************************************************
server1                    : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
  • 念のため、ssh でログインし、期待値通り、/tmp にtest.txt が作成されたことを確認します。
$ ssh -i ./niikawa-testkey.pem ec2-user@11.11.11.11
Last login: Tue Jul 26 01:26:09 2022 from xxx.xxx.xxx.xxx

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
37 package(s) needed for security, out of 82 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-172-31-23-227 ~]$ ls -l /tmp/test.txt
-rw-rw-r-- 1 ec2-user ec2-user 0 Jul 26 01:26 /tmp/test.txt
  • これで準備が整いましたので、目的のplaybook を使った作業に入ります!

元記事はこちら

Ubuntu(WSL)にansibleインストール& 作業準備
著者:新川貴章