Ubuntu 16.04へのAnsibleのインストールと使用

**Ansible**は、アプリケーションのデプロイと管理を可能にするフリーでオープンソースの設定管理システムです。

*本ブログは英語版からの翻訳です。オリジナルは[こちら](https://www.alibabacloud.com/blog/how-to-install-and-use-ansible-on-ubuntu-1604_583003)からご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。*

[Alibaba Cloud Tech Share](https://www.alibabacloud.com/campaign/techshare?spm=a2c65.11461447.0.0.530e1dc7SjDKy5)執筆者、Hitesh Jethva。

Ansibleはフリーのオープンソース構成管理システムで、アプリケーションを自動的にデプロイして集中管理することができます。Ansibleを使用することで、中央の場所から大量のサーバーを簡単に管理・制御することができます。Ansibleは、開始するためのオーバーヘッドがはるかに小さいので、ChefやPuppetの素晴らしい代替ソリューションになります。AnsibleはSSHチャンネルを使用してリモートシステムから情報を取得するので、クライアントコンピュータに追加のソフトウェアをインストールする必要はありません。

このチュートリアルでは、[Alibaba Cloud ECS](https://www.alibabacloud.com/product/ecs?spm=a2c65.11461447.0.0.530e1dc7SjDKy5) Ubuntu 16.04サーバにAnsibleをインストールして使用する方法をステップバイステップで説明します。

###前提条件
- Ubuntu 16.04をインストールした[Alibaba Cloud ECS](https://www.alibabacloud.com/product/ecs?spm=a2c65.11461447.0.0.530e1dc7SjDKy5)インスタンスを2台使用しています。
- サーバーノードに静的IPアドレス192.168.0.103が構成されています。
- クライアントノードには静的IPアドレス192.168.0.104が設定されています。
- 各ノードにルートパスワードが設定されています。

###Alibaba Cloud ECSインスタンスを起動する
まず、[https://ecs.console.aliyun.com/?spm=a3c0i.o25424en.a3.13.388d499ep38szx">Alibaba Cloud ECS Console](https://account.alibabacloud.com/login/login.htm?spm=a2c65.11461447.0.0.530e1dc7SjDKy5&oauth_callback=)にログインします。メインダッシュボードにリダイレクトされます。適切なリージョンを選択して、[ECSインスタンス](https://www.alibabacloud.com/product/ecs?spm=a2c65.11461447.0.0.530e1dc7SjDKy5)に移動する必要があります。このチュートリアルでは、シンガポールのリージョンで[ECSインスタンス](https://www.alibabacloud.com/product/ecs?spm=a2c65.11461447.0.0.530e1dc7SjDKy5)を作成しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/2f7604ac-60d1-12e4-9c11-51cc1c2d7317.png)

インスタンスを作成していない場合は、[このチュートリアル](https://www.alibabacloud.com/blog/3-ways-to-set-up-a-linux-server-on-alibaba-cloud_572384?spm=a2c65.11461447.0.0.530e1dc7SjDKy5)をチェックするか、この[クイックスタートガイド](https://www.alibabacloud.com/help/doc-detail/25422.htm?spm=a2c65.11461447.0.0.530e1dc7SjDKy5)のステップに従ってください。できれば同じリージョン上で、2つの[ECSインスタンス](https://www.alibabacloud.com/product/ecs?spm=a2c65.11461447.0.0.530e1dc7SjDKy5)を実行している必要があります。

私はクレデンシャルとしてSSHキーペアで[ECSインスタンス](https://www.alibabacloud.com/product/ecs?spm=a2c65.11461447.0.0.530e1dc7SjDKy5)を設定していることに注意してください。これにより、SSH を使用してインスタンスに接続することができます。

###Ansibleのインストール
デフォルトでは、Ubuntu 16.04のリポジトリではAnsibleは利用できません。そのため、サーバノード上にAnsibleのパーソナルリポジトリを追加する必要があります。以下のコマンドでリポジトリを追加することができます。

`apt-add-repository ppa:ansible/ansible`

以下のような出力が表示されるはずです。

```
Ansible is a radically simple IT automation platform that makes your applications and systems easier to deploy. Avoid writing scripts or custom code to deploy and update your applications— automate in a language that approaches plain English, using SSH, with no agents to install on remote systems.

http://ansible.com/
 More info: https://launchpad.net/~ansible/+archive/ubuntu/ansible
Press [ENTER] to continue or ctrl-c to cancel adding it

gpg: keyring `/tmp/tmpiylu9n1t/secring.gpg' created
gpg: keyring `/tmp/tmpiylu9n1t/pubring.gpg' created
gpg: requesting key 7BB9C367 from hkp server keyserver.ubuntu.com
gpg: /tmp/tmpiylu9n1t/trustdb.gpg: trustdb created
gpg: key 7BB9C367: public key "Launchpad PPA for Ansible, Inc." imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
OK
```

Ansibleのリポジトリを追加した後、リポジトリがシステムに追加されるようにシステムをアップデートする必要があります。以下のコマンドを実行してシステムをアップデートします。

`apt-get update -y`

リポジトリが更新されたら、以下のコマンドでAnsibleをインストールします。

`apt-get install ansible -y`

###Ansibleホストの設定
Ansible は、hosts ファイルを使用してすべてのサーバノードとクライアントノードを追跡しています。そのため、他のノードと通信する前にこのファイルを設定する必要があります。

まず、以下のコマンドでファイルを開きます。

`nano /etc/ansible/hosts`

すべてのコメント行が表示されているはずです。ここでは、以下のように管理したいクライアントノードをすべて追加する必要があります。



```
[servers]
client-node ansible_ssh_host=192.168.0.104
```

保存して終了したらファイルを閉じます。

###リモートホスト用のSSHキーを設定する
Ansible は他のノードとの通信に SSH を使用します。そのため、サーバノードでSSH鍵を生成し、そのSSH鍵をクライアントノードにコピーする必要があります。

サーバノードでは、以下のコマンドを実行してSSH鍵を生成します。

`ssh-keygen -t rsa -b 4096`

以下のような出力が表示されるはずです。

```
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:3FvzXmI3EhW7idSZy+ITzW7UrefZP/R5AYx2VBu3ytU root@server-node
The key's randomart image is:
+---[RSA 4096]----+
|              .+.|
|             .. @|
|            +. XE|
|       . . oo+O *|
|        S o +B.Oo|
|           o.o*+ |
|          .  +*+B|
|             o+O*|
|              ..B|
+----[SHA256]-----+
```

次に、以下のコマンドで作成した鍵をクライアントノードにコピーします。

`ssh-copy-id root@192.168.0.104`

次に、クライアントノードで ssh 鍵認証を行い、認証ができているかどうかを確認します。

`ssh root@192.168.0.104`

正しく設定していれば、パスワードの入力を促されることはありません。

###Ansible のテスト
すべてが正しく設定できたら、いよいよAnsibleのテストをしてみましょう。

まず、以下のコマンドを実行して、hosts ファイルで指定したすべてのクライアントノードを ping します。

`ansible -m ping all`

クライアントノードが起動していれば、以下のような出力が表示されるはずです。

```
client-node | SUCCESS => {
    "changed": false, 
    "failed": false, 
    "ping": "pong"
}
```

注意: "all" は、hosts ファイルで複数のホストを指定している場合、上記のコマンドはすべてのホストに対して ping コマンドを実行することを意味します。

また、以下のコマンドで単一のホストやホストグループに対して ping コマンドを実行することもできます。

```
ansible -m ping client-node
ansible -m ping servers
```

クライアントノードのメモリ使用量を知りたい場合は、以下のコマンドを実行します。

`ansible -m shell -a 'free -m' client-node`

以下のような出力が表示されるはずです。

```
client-node | SUCCESS | rc=0 >>
             total       used       free     shared    buffers     cached
Mem:          3835       3185        649        177         77        929
-/+ buffers/cache:       2179       1656
Swap:        10793          0      10793
```

クライアントノードのパーティションサイズを確認するには、以下のコマンドを実行します。

`ansible -m shell -a 'df -h' client-node`

出力します。

```
client-node | SUCCESS | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda4        92G   27G   61G  31% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            1.9G  4.0K  1.9G   1% /dev
tmpfs           384M  1.2M  383M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            1.9G  1.9M  1.9G   1% /run/shm
none            100M   44K  100M   1% /run/user
/dev/sda5       353G   75G  261G  23% /Data
```

###結論
おめでとうございます。[Alibaba Cloud ECSサーバ](https://www.alibabacloud.com/product/ecs?spm=a2c65.11461447.0.0.530e1dc7SjDKy5)にAnsibleを設定することに成功しました。これで、中央の場所から単一のコマンドを実行することで、複数のサーバーを簡単に管理できるようになりました。

*アリババクラウドは日本に２つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
[アリババクラウドジャパン公式ページ](https://www.alibabacloud.com/ja)*