2025年頃にAnsibleを使ってWebアプリのデプロイ内容をコード化してみた時の記録です。
(情報がやや古めのため要注意!)
今回はコントロールノード・ターゲットノードともにAmazon Linux2を利用し、ansible-core 2.16.14をインストールしました。
(Amazon Linux2の環境でdnfではなくansible.builtin.yumを使いたかったため、古めのバージョンのAnsibleを使用)
Ansibleとは
RedHatが提供しているオープンソースの構成管理ツール。
・Ansibleを使うためにはコントロールノード=管理する側、ターゲットノード=管理される側の2つの環境を用意する。通常、Ansibleはコントロールノード側のみにインストールする。
・コントロールノード側で用意するものとしては、構成内容を記述する「Playbook」や、Playbookの実行対象を決める「inventory(インベントリ)」などがある。
・コントロールノード側でAnsibleのコマンドを実行すると、AnsibleエンジンがPlaybookなどをもとにPythonの実行ファイルを作成する。ターゲットノード側でPythonの実行ファイルが実行されると、Playbook内の構成内容がターゲットノードに反映される。
前提条件
- 以下の環境やバージョンを使用しました。
| コントロールノード | ターゲットノード |
|---|---|
| OS:Amazon Linux2 | OS:Amazon Linux2 |
| Python:3.10.18 | Python:3.6.15 |
| Ansible-core:2.16.4 | - |
作業一覧
- ターゲットノード側の設定
- コントロールノード側の設定・Ansibleインストール
- (※) ansible.cfgの準備
- (※) コレクションのインストール
- inventoryの準備
- playbookの準備
- コマンド実行
手順
1. ターゲットノード側の設定
①パッケージインストール
# development toolsインストール
sudo yum groupinstall "development tools"
# 依存関係パッケージインストール
sudo yum install bzip2-devel gdbm-devel libffi-devel libuuid-devel ncurses-devel \
readline-devel sqlite-devel xz-devel zlib-devel tk-devel
②Pythonインストール
※別記事の通りpyenvでPythonをインストールする。
参考:https://qiita.com/nyanp_p/items/4d666dc28c0bdeabe22c
2. コントロールノード側の設定
コントロールノード側にはAnsibleをインストールする。
Pythonの実行環境の準備と、ターゲットノード側に接続するためのSSH鍵の発行も必要。
①パッケージインストール
# development toolsインストール
sudo yum groupinstall "development tools"
# 依存関係パッケージインストール
sudo yum install bzip2-devel gdbm-devel libffi-devel libuuid-devel ncurses-devel \
readline-devel sqlite-devel xz-devel zlib-devel tk-devel
# OpenSSL 1.1インストール(Python3.10以上の場合)
sudo yum install openssl11 openssl11-devel
②Python仮想環境の構築
※別記事の通りpyenvでPythonをインストール、venvでPython仮想環境を構築する。
参考:https://qiita.com/nyanp_p/items/4d666dc28c0bdeabe22c
③Ansibleインストール
※今回はansibleパッケージではなく、ansible-coreパッケージをインストールする。
# pipでインストールしたpythonパッケージを一覧表示
pip list --format=columns
# AnsibleコアバージョンX.X.Xをインストール
pip install ansible-core==X.X.X
# Ansibleのバージョン確認
ansible --version
④SSH鍵作成・登録
※今回は公開鍵の内容をコピペし、ターゲットノード側の~/.ssh/authorized_keysに貼り付けて登録。
# SSH鍵ペアを作成
ssh-keygen -t rsa -C ansible_ssh_key
# 公開鍵の内容を画面に出力(→この内容をターゲットノード側の~/.ssh/authorized_keysに登録)
cat ~/.ssh/id_rsa.pub
ディレクトリ構成例
今回の構成例は以下の通り。
※単一の環境のみ構成管理する前提、playbookをrole分割する前の状態。
ansible_project/
├── ansible.cfg
├── inventory/
│ └── hosts
├── requirements.yml
└── playbook.yml
3. ansible.cfgの準備
Ansibleのプロジェクト用ディレクトリの配下にansible.cfgを作成し、設定を記述する。
4. inventoryの準備
Ansibleのプロジェクト用ディレクトリの配下にinventoryディレクトリを作成する。inventoryディレクトリの配下にhostsを作成し、設定を記述する。
5. playbookの準備
Ansibleのプロジェクト用ディレクトリの配下にplaybook.ymlを作成し、設定を記述する。
6. コマンド実行
コントロールノードで以下のコマンドを実行する。
※コントロールノード→ターゲットノードへSFTPでファイル転送するため、SSHの設定&接続確認をしておくとよい!
参考
以下を参考にさせていただきました!