この記事で書いたこと
CentOS関係の仮想環境を用いたAnsibleはよく記事がありますが、Ubuntu環境を構築したうえでAnsibleを行うやり方を書いたものがあまりなかったので、macで0から作ってみました。
この記事では、Mac上にVirtualBoxのUbuntu環境を作ります。さらに、Mac上のansibleでUbuntuにソフトをインストールするところまで書きます。
環境
- Mac OSX 10.12.4(16E195)
HomeBrewでVagrantとVirtualBoxをインストール
brewとcaskのインストール
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install caskroom/cask/brew-cask
VagrantとVirtualBoxのインストール
brew cask install virtualbox
brew cask install vagrant
Ansibleのインストール
Ansible動作にはpythonが必要です。
macにpythonが入っていない人は、インストールしておきます。
brew install python
ansibleをインストールします。
brew install ansible
簡単ですね。
仮想環境Ubuntuのインストール
vagrant initでVagrantの初期設定を作ります。vagrantのボックスはこちらから参照しました。→Vagrant box ubuntu/trusty64 v20170619.0.0 - Vagrant Cloud
vagrant init ubuntu/trusty64
成功すると、Vagrantfileが作られています。vagrantは基本的にこちらにサーバ設定を書きます。
ローカルのansibleからにubuntuにアクセスするため、ローカルIPアドレスを設定します。Vagrantfile以下の文のコメントアウトを外します。
config.vm.network "private_network", ip: "192.168.33.10"
Vagrantfileから必要箇所だけ取り出すと以下のようにすっきりします。
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.network "private_network", ip: "192.168.33.10"
end
さて、いよいよUbuntuを起動します。コマンドは以下。
初期化時に自動でubuntu/trusty64のイメージをダウンロードしてくれます。
vagrant up
大きいファイルを落としてくるので、やや時間がかかります。うまく行きましたでしょうか?赤文字でエラーなどでなければ成功です。
ではこちらでubuntuにログインします。
vagrant ssh
vagrant@vagrant-ubuntu-trusty-64:~$
とでて、ログインできたことが確認できます。
(※vagtantはデフォルトだとユーザー:vagrant, パスワード: vagrantという設定になっています)
sshでログインする。
vagrant sshを使用せず、macからsshでログインするように設定します。
まず、秘密鍵と公開鍵のペアを作成し、公開鍵をubuntuにssh-copy-idで送り込みます。
ssh-keygen -t rsa
問いかけがでますが、すべてEnter。すでに~/.ssh/id_rsaの秘密鍵が存在していれば、このコマンドは不要です。
ssh-copy-idで、公開鍵をubuntuに送ります。このコマンド一つでアクセス許可してくれるので、便利です。
ssh-copy-id -i ~/.ssh/id_rsa vagrant@192.168.33.10
入れるか試しましょう。
ssh vagrant@192.168.33.10
パスワードを聞かれずログインできれば成功です。
Ansibleを試してみる。
とりあえず最初のplaybook(Ansibleで行いたい構成を書いたファイル)を作ってみます。
./test.yml:
- hosts: ubuntu
user: vagrant
tasks:
- name: output message.
debug: msg="hello ansible"
ubuntuという名前のサーバに対して、vagrantというユーザー名でログインし、ログを出してみます。
hosts: ubuntuとしてサーバーにubuntuという名前を付けています。任意の名前でOKです。
user: vagrantについて、今回、ubuntuへはデフォルトでvagrantというユーザーでしかログインできないので、vagrantと設定します。
さらに、同じディレクトリにホストの情報を別ファイルhostsに書きます。
./hosts:
[ubuntu]
192.168.33.10
注意!ubuntuというところは、先程hosts:に設定したホスト名です。
その下にvagrantのIPを書きました。
さて、以下コマンドでAnsibleをためします。
ansible-playbook -i hosts test.yml
hostsファイルに設定したターゲットのubuntuサーバに対して、test.ymlに書いたアクションを実行します
以下出力がでて、うまくメッセージが出力されました。
PLAY [ubuntu] ******************************************************************
TASK [Gathering Facts] *********************************************************
ok: [192.168.33.10]
TASK [output message.] *********************************************************
ok: [192.168.33.10] => {
"msg": "hello ansible"
}
PLAY RECAP *********************************************************************
192.168.33.10 : ok=2 changed=0 unreachable=0 failed=0
aptでソフトをインストール
aptで最新のNTPをインストールしてみます。
以下のプレイブックを作成します。
apt.yml(名前は任意です):
- hosts: ubuntu
user: vagrant
become: yes
tasks:
- name: install latest ntp package
apt: pkg=ntp state=latest
sudoユーザーでないとパッケージのインストールができないため3行目にbecome: yesを付けています。
(ansible1.8以前はsudo:yesでよかったのですが、deplicationになり文法が変わりました。)
パッケージインストールは最終行のapt: コマンドで実行します。
以下コマンドで実行します。
ansible-playbook -i hosts apt.yml
エラー無く終了したら成功です。
以前chefを使用したことがありますが、それと比べるとymlに設定項目を描くだけで、ansibleは比較的覚えることが少なく扱いやすい印象を受けました。
あとは、ansible公式ドキュメント等を参照していろいろ作っていけそうです。
Ansible Documentation — Ansible Documentation
参考
大変参考になりました😄 Ansibleとはそもそも何か?と言うところから学びたい人はこちら。
Ansibleをはじめる人に。 - Qiita
ベストプラクティスの構成例が書いてあります。
Ansible チュートリアル | Ansible Tutorial in Japanese