LoginSignup
7
7

More than 5 years have passed since last update.

MacでAnsible+Ubuntu仮想環境を0から構築する。

Last updated at Posted at 2017-07-24

この記事で書いたこと

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

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7