【連載】Ansible入門 その2:環境構築編

★★★ Live配信告知 ★★★

Azureでクラウドネイティブな開発をするための方法について、世界一わかりみ深く説明致します!!複数回シリーズでお届けしている第4回目は、「特別編!!Azureに関する大LT大会!!」と題しまして、Azureに関するお役立ちノウハウをたくさんお届けします!!
【2021/7/28(水) 12:00〜13:00】

この連載では、Ansibleとはどういったものなのかを理解し、実際に使えるようになるまでを説明します。

第二回では環境構築を行います。ノードを用意し、Ansibleのインストールを行い、構成管理を実行できるところまで準備します。

  1. Ansibleとは
  2. 環境構築編

ノード準備

実際にAnsibleを使って構成管理を行いたい場合、構成管理を行うノードが元々存在することと思います。しかし、検証を行う場合はノードを自身で用意しなければなりません。

ノードを用意する方法はいくつか考えられます。

  • 実機
  • 仮想マシン
  • コンテナ

などでしょうか。

今回は準備の手間をかけたくないのでコンテナでターゲットノードとコントロールノードを用意します。Windows 10でWSL2を動かし、その上でコンテナを立ち上げるという環境を想定します。「コンテナ使うならDockerfileで構成管理すればいいじゃん」というツッコミはご遠慮ください。

Docker環境が無い場合はこちらの記事を参考にしてください。

【連載】世界一わかりみが深いコンテナ & Docker入門 〜 その1:コンテナってなに? 〜

【連載】WSL2、Visual Studio Code、DockerでグッとよくなるWindows開発環境 〜 その1:まずは概要 〜

今回検証環境として使用する構成は以下のようになります。ターゲットノードとコントロールノードが直接つながる構成です。ターゲットノードが1台だけだと構成管理を行う意味も薄いのですが、今回は検証環境なので1台だけにしています。実際にはターゲットノードが複数存在することが多いでしょう。

WSL2上でDockerでコンテナを立ち上げます。ターゲットノードを「ansible_target」、コントロールノードを「ansible_control」としました。今回はCentOS7で作成しました。pythonはデフォルトでインストールされています。

 

Dockerの公式イメージは最低限の機能しか含まれていないので必要な機能をインストールします。SSH接続をするのでopenssh-serverとopenssh-clients、コントロールノードでは設定ファイルを編集するのでvimもインストールします。

 

Dockerコンテナは起動時にrootパスワードが設定されていないので設定します。SSH接続時にターゲットノード側のパスワードが必要になります。

 

ターゲットノードのIPアドレスかドメイン名を確認しておきます。こちらもSSH接続時に必要になります。筆者の環境では「172.17.0.4」だったので以降のコマンドではこのアドレスを使いますが、お使いの環境に合わせて変更してください。

 

以上でノードの用意は完了です。コンテナではなく実機や仮想マシンでも必要なものは同じになります。IPアドレスの確認とパスワードの設定は必要ですが、上記のインストールしたパッケージはほとんどの場合デフォルトでインストールされているでしょう。

ちなみにですが、ここまでの作業を行ったDockerイメージを作れば、次回以降はこの設定は不要になります。

Ansible検証環境用にDockerを利用した話

インストール

コントロールノードでAnsibleのインストールを行います。

 

yumの場合は最新バージョンがインストールされますが、pipを使えばバージョンを指定してインストールすることができます。

SSH設定

ノード間の通信に使用するSSHの設定を行います。

まずはコントロールノードで公開鍵認証用の鍵を生成します。いくつか入力を求められますが、すべて何も入力せずにエンターで問題ありません。.sshディレクトリにid_rsaとid_rsa.pubが生成されていることを確認します。

 

authorized_keysを作成し、パーミッションを変更します。

 

scpでターゲットノードに鍵を転送します。初回実行時にはAre you sure you want to continue connecting (yes/no)?と聞かれるので、yesと入力してください。ターゲットノードのパスワードを求められるので、先程設定したパスワードを入力してください。

 

ターゲットノード側に鍵がコピーされていることを確認します。

 

コントロールノードからターゲットノードにSSH接続を試みます。接続できれば設定は完了です。

 

インベントリファイルの設定

インベントリファイル(hosts)に接続するターゲットノードの情報を書き込みます。IPアドレスはお使いの環境に合わせて変更してください。

 

このファイルに登録したノードに対して処理を実行することができます。インベントリファイルはini形式で記載されます。

[]の中に記載した名前によってグルーピングすることができます。IPアドレスやドメイン名を並べて、グループ単位で構成管理を行います。以下のような使い方ができます。

 

playbook実行時にtarget1を指定すると172.17.0.1と172.17.0.2、target2を指定すると172.17.0.3と172.17.0.4に対して処理を実行できます。

以下のように書くことで、各ノード単位での接続も可能です。

 

疎通テスト

最後にAnsibleによる処理の実行ができているかを確認します。以下のように表示されれば成功です。

 

うまく通信ができていないと以下のように表示されます。原因はIPアドレスの指定が間違っている、sshdが動いていないなどが考えられます。

 

ansibleコマンドは単一のモジュール(命令)を実行するコマンドです。引数には対象となるターゲットノードを指定します。オプションは以下の通りです

オプション 説明
-i インベントリファイルの指定(デフォルトは/etc/ansible/hosts)
-m 実行するモジュールの指定

 

上記の例はインベントリファイル内のすべてのノードに対しpingモジュールを実行するコマンドになります。グループもしくはノード単位での指定も可能です。

 

モジュールは以下のページで調べることができます。

https://docs.ansible.com/ansible/2.9_ja/modules/modules_by_category.html#modules-by-category

まとめ

この記事ではAnsibleの検証環境を導入する方法についてまとめました。

次回はplaybookを記述し構成管理を行います。

最後までお読みいただきありがとうございます。





ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!


ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

Be the first to comment

Leave a Reply

Your email address will not be published.


*