【EC2 AL2023】Ansible Playbookをローカルで実行する

本サイトで紹介している商品・サービス等の外部リンクには、プロモーションが含まれています。

今回はAnsibleのPlaybookをローカルで実行する方法について解説します。

OSはAmazonLinux2023で検証します。

目次

事前準備

システム構成

今回使用したソフトウェアとバージョンは以下のとおりです。

  • OS: Amazon Linux 2023.6.20241212
  • Python: 3.9.20
  • Ansible core: 2.15.3

コマンドはすべてrootユーザーで実行しています。

Ansbileをインストールする

デフォルトのAmazonLinuxリポジトリにAnsibleが入っているので、dnfでインストールします。

$ dnf install -y ansible
$ ansible --version
ansible [core 2.15.3]
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.9/site-packages/ansible
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.9.20 (main, Dec 11 2024, 00:00:00) [GCC 11.4.1 20230605 (Red Hat 11.4.1-2)] (/usr/bin/python3.9)
  jinja version = 3.1.4
  libyaml = True

設定ファイルを作成する

設定ファイルを作成しておきます。今回は/etc/ansbile/ansible.cfgに作成します。

$ touch /etc/ansible/ansible.cfg

ansible.cfgは配置する場所によって優先順位が決まります。下記のパスを上から順に検索していき、最初に見つかったansible.cfgの設定値を参照します。それ以外は無視されます。

  • ansible.cfg(カレントディレクトリ)
  • ~/.ansible.cfg(ホームディレクトリ)
  • /etc/ansbile/ansible.cfg

どの設定ファイルが適用されているかは、ansible --versionで確認できます。

# ansible --version | grep "config file"
  config file = /etc/ansible/ansible.cfg

作成した設定ファイルを下記のように修正します。

[defaults]
interpreter_python = /usr/bin/python3.9

上記ではAnsibleが使用するPythonのインタープリタを指定しています。

上記の設定がないと、Playbookを実行したときに下記のような警告が出ます。

[WARNING]: Platform linux on host localhost is using the discovered Python interpreter at /usr/bin/python3.9, but future installation of another
Python interpreter could change the meaning of that path. See https://docs.ansible.com/ansible-
core/2.15/reference_appendices/interpreter_discovery.html for more information.

Playbookをローカルで実行

Playbookを作成する

検証用のPlaybookを作成します。今回はansible is runと表示するだけのPlaybookにします。

$ touch local.yml

作成したlocal.ymlを編集します。

- hosts: all
  gather_facts: no
  tasks:
    - name: ansible test on localhost
      shell: echo "ansible is run"

Playbookをローカルで実行する

作成したPlaybookを実行します。

ansible-playbook -v -i localhost, -c local 実行するPlaybook

$ ansible-playbook -v -i localhost, -c local local.yml
Using /etc/ansible/ansible.cfg as config file

PLAY [all] ******************************************************************************************************************************************

TASK [ansible test on localhost] ********************************************************************************************************************
changed: [localhost] => {"changed": true, "cmd": "echo \"ansible is run\"", "delta": "0:00:00.004099", "end": "2025-01-02 15:30:24.722949", "msg": "", "rc": 0, "start": "2025-01-02 15:30:24.718850", "stderr": "", "stderr_lines": [], "stdout": "ansible is run", "stdout_lines": ["ansible is run"]}

PLAY RECAP ******************************************************************************************************************************************
localhost                  : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

各オプションの詳細は下記のとおりです。

-v(verbose)

  • Playbook実行中に出力される詳細な情報を増やします。
    -v を一度指定することで、実行の進行状況やタスクの詳細なログが表示されます。
    さらに詳しく表示したい場合は、-vv-vvv と指定することで、さらに詳細な情報が得られます。
    • -v: 少し詳細な情報
    • -vv: より詳細な情報
    • -vvv: 最大限の詳細な情報(デバッグレベル)

-i localhost,(インベントリの指定)

  • Ansibleがどのホストに対してタスクを実行するかを指定します。
  • localhost, で、ターゲットホストとしてローカルマシン(localhost)を指定します。最後のカンマ(,)は、リストであることを明示するために必要です。
  • localhost, はローカルホストをターゲットとして指定し、インベントリとして1つのホスト(localhost)を指定することを意味します。

-c local(接続タイプの指定)

  • Ansibleがどのようにホストに接続するかを指定します。
  • -c local は、接続方式として「ローカル接続」を指定します。
  • これにより、リモートホストに対してではなく、ローカルホストに対して直接コマンドが実行されます。

参考

この記事が気に入ったら
フォローしてね!

コメント

コメントする

目次