【Ansible】第1回 入門編

インフラ・サーバー

こんにちはわっしょい村です。今回からAnsibleの記事を連載していきます。と言うのも2022年は業務でAnsibleを使うことが多く色々調べまくっていたわけですが、記事が少ないのとあっても古い記事ばっかりで苦戦しました。要するに僕も使い始めたばかりと言うわけではあるのですがメモがてら記事にしちゃおうと言うノリです。間違えていることやベストプラクティスが別にある場合は問い合わせフォームかTwitterで教えていただけると助かります。

第1回はAnsibleの概要と簡単な使い方を解説していきます。

Ansibleとは

Ansibleは超簡単に言うとサーバの起動や操作を自動化できるオープンソースのツールです。Pythonで作られており、サーバ操作にはOpenSSHが採用されています。僕が業務でAnsibleを導入する際は「GUI操作やコマンドの手打ち操作をなくし、時間と手間を省き、操作ミスを無くす。」と言う目的でした。Ansibleを導入することで今までEC2の起動からマニュアル通りの大量のコマンドを打っていた作業がAnsibleの実行コマンド一つで終わるようになりました。

Ansibleの最大の性質は冪等性(べきとうせい)を持っていることです。冪等性とは「何回同じ操作をしても同じ状態を保つ性質」のことです。例えばAnsibleでサーバにワードプレスをインストールするとします。1回目の実行ではサーバは空なので想定通りワードプレスがインストールされます。ではそのままもう一回Ansibleを実行したらどうなるでしょう。ワードプレスがもう一つインストールされるかと思いきやインストールされません。Ansibleはワードプレスが既にインストールされていることを知ってくれているため自動でインストールしないことを選択してくれたのです。このようにAnsibleは既に行われている操作を2重操作にならないようにしてくれます。これが冪等性の強みです。

Ansibleはシステムアップデートでも強さを発揮します。例えば以下をAnsibleで組んだとします。

  1. ワードプレスをインストールする。
  2. ワードプレスを最新版にアップデートする。

これを1週間に1回実行するようにしておきます。まず初回はサーバが空なのでワードプレスがインストールされ、最新にアップデートされます。1週間後2回目の実行時ワードプレスは既にインストールされているため手順のひとつ目は飛ばされワードプレスのアップデートのみが行われます。こうすることでサーバが何台になってもワードプレスの準備とアップデートを一つの実行のみで完結させることができるのです。

Ansibleの導入

今回はMacにAnsibleを導入します。以下コマンドでインストールしてください。

brew install ansible
ansible --version

Ansibleを使ってみる

さてここからAnsibleを実際に使ってみたいと思います。まずは恒例のHelloWorldをやってみましょう。以下のようにtest.ymlを作成してください。ファイル名はなんでも大丈夫です。

- hosts: localhost
  tasks:
    - name: HelloWorld Test 
      ansible.builtin.debug: 
        msg: "HelloWorld"

以下のコマンドを実行するとHelloWorldが出力できます。

ansible-playbook test.yml

実行結果はこんな感じになると思います。警告が出ていますが今回は無視して構いません。

$ ansible-playbook test.yml 
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does
not match 'all'

PLAY [localhost] *********************************************************************************************

TASK [Gathering Facts] ***************************************************************************************
ok: [localhost]

TASK [HelloWorld Test] ***************************************************************************************
ok: [localhost] => {
    "msg": "HelloWorld"
}

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

コマンドを見て分かる通りAnsibleでは設定ファイルをPlaybookと呼んでいます。yamlファイルに命令を書きそれを実行するのがAnsibleの流れです。

今回はHelloWorldの出力だけでしたのでホストにlocalhost(今回ではMacのこと)を指定しています。しかしAnsibleではローカルのコンピュータにだけ操作することは少なく、基本的には別サーバに操作を加えることが多いです。

次回はAnsibleでAWSのEC2の起動からサーバ操作をやっていきます。