subtitle

RaiseTechの各種コースをはじめとしたイロイロな学習の記録

AWS環境にAnsibleをインストールする

Ansibleについて、色々調べてみたけれど、やはりとにもかくにも動かしてみないと理解ができん。(読んだだけで理解できる人になりたいw)

というわけで、新しく作成したインスタンスに、Ansibleをインストールして、まずは動かしてみたいと思う。

今回の構成は、AMIの中にEC2を2つ作成し、一方をA(コントロールノード)・もう片方をB(ターゲットノード)とする。

Ansibleはコントロールノード側だけに入っていればいいので、インスタンスAにAnsibleをインストールする。


ローカルPCから、コントロールノードとなるインスタンスAにSSH接続した状態からスタート!



Python3をインストールする

現在、EC2にインストールされているPythonのバージョンを確認する

[ec2-user@ip-172-16-16-180 ~]$ python --version
Python 2.7.18
[ec2-user@ip-172-16-16-180 ~]$ python3 --version
-bash: python3: command not found

2.7.18がインストールされているようなので、Python3系をインストールする


pipが入っているか確認する。

[ec2-user@ip-172-16-30-122 ~]$ pip -V
-bash: pip: command not found
[ec2-user@ip-172-16-30-122 ~]$ pip3 -V
-bash: pip3: command not found

pip(Pip Installs Packages / Pip Inastalls Python)とは、Pythonのパッケージ管理システムのこと。

Ansibleをインストールするときに使う。(AnsibleはPythonでできている)


[ec2-user@ip-172-16-16-180 ~]$ sudo yum install python3

=== 省略 ===

Installed:
  python3.x86_64 0:3.7.9-1.amzn2.0.2

Dependency Installed:
  python3-libs.x86_64 0:3.7.9-1.amzn2.0.2
  python3-pip.noarch 0:9.0.3-1.amzn2.0.2
  python3-setuptools.noarch 0:38.4.0-3.amzn2.0.6

Complete!

pipも同時に入った模様。


バージョン確認

[ec2-user@ip-172-16-16-180 ~]$ python3 --version
Python 3.7.9
[ec2-user@ip-172-16-30-122 ~]$ pip -V
-bash: pip: command not found
[ec2-user@ip-172-16-30-122 ~]$ pip3 -V
pip 9.0.3 from /usr/lib/python3.7/site-packages (python 3.7)

Pythonは3.7.9がインストールされた。

pipは9.0.3がインストールされたらしい。ただし、pip3として認識されているようなので、Ansibleをインストールする際は、pip3を使うことにする。



pipとは?

先ほども少し触れたが、pipはPythonのパッケージ管理システムである。

Python公式パッケージのインストールやアンインストールができる。

Python公式パッケージは、Pypl(Python Package Index)で管理されている。

pipは、Rubyで言うところのgemで、PyplがRubyGemsと言ったところか。


少し調べてみたところ、Python2系とPython3系が同居している場合は、pipは2系、pip3が3系に紐づくようだ。(そして、pip3はPython3をインストールすると勝手に入るが、pipの方は意図して入れないと入らないらしい)

紐づけを変える方法もありそうだったが、pip3が使えるならそれでいいw(ホントは良くないけど、先に進みたいw)



Ansibleをインストールする

先ほど書いた通り、pipは使えないので、pip3を使ってAnsibleをインストールする


pip3 install ansible


やや!エラーが出た

Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-bk2kzpkf/cryptography/


DEBUG ASSISTANCEのメッセージを見てみると、pipをアップデートしなさいよ、と書いてあるようだ。

    Complete output from command python setup.py egg_info:

            =============================DEBUG ASSISTANCE==========================
            If you are seeing an error here please try the following to
            successfully install cryptography:

            Upgrade to the latest pip and try again. This will fix errors for most
            users. See: https://pip.pypa.io/en/stable/installing/#upgrading-pip
            =============================DEBUG ASSISTANCE==========================

    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-build-bk2kzpkf/cryptography/setup.py", line 14, in <module>
        from setuptools_rust import RustExtension
    ModuleNotFoundError: No module named 'setuptools_rust'


素直に指示に従って、記載のURLを見に行く



アップデートしたいのはpip3なので、pip3に対してアップデートさせる

[ec2-user@ip-172-16-30-122 ~]$ sudo pip3 install -U pip

=== 省略 ===

Installing collected packages: pip
  Found existing installation: pip 9.0.3
    Uninstalling pip-9.0.3:
      Successfully uninstalled pip-9.0.3
Successfully installed pip-21.0.1


pipが21.0.1まで上がった


[ec2-user@ip-172-16-30-122 ~]$ pip3 install ansible
-bash: /usr/bin/pip3: No such file or directory
[ec2-user@ip-172-16-30-122 ~]$ pip3 -V
-bash: /usr/bin/pip3: No such file or directory

む。なぜpip3がないと言われるのだ。さっきまであったはずなのに。


キャッシュをクリアしてみる

[ec2-user@ip-172-16-30-122 ~]$ hash -r
[ec2-user@ip-172-16-30-122 ~]$ pip3 -V
pip 21.0.1 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)

無事にpip3が復活した


気を取り直して、再度Ansibleをインストール

[ec2-user@ip-172-16-30-122 ~]$ pip3 install ansible

=== 省略 ===

Successfully installed MarkupSafe-1.1.1 PyYAML-5.4.1 ansible-3.2.0 ansible-base-2.10.8 cffi-1.14.5 cryptography-3.4.7 jinja2-2.11.3 packaging-20.9 pycparser-2.20 pyparsing-2.4.7


今度は上手くいったらしい


Ansibleのバージョンを確認する

[ec2-user@ip-172-16-30-122 ~]$ ansible --version
ansible 2.10.8
  config file = None
  configured module search path = ['/home/ec2-user/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/ec2-user/.local/lib/python3.7/site-packages/ansible
  executable location = /home/ec2-user/.local/bin/ansible
  python version = 3.7.9 (default, Feb 18 2021, 03:10:35) [GCC 7.3.1 20180712 (Red Hat 7.3.1-12)]

OK