LoginSignup
0
1

More than 3 years have passed since last update.

Vagrant -> Ansible -> ruby_その2(Vagrantfile)

Last updated at Posted at 2019-06-16

概要

今更ながらにVagrant+Ansibleの環境構築を初めてやってみました。
満足できる環境が出来上がるまでおおよそ1ヶ月。
せっかく苦労して書いたのに何もかも忘れていくのも寂しいので、
こちらに記述しておくことにしました。

今回はVagrantで環境構築するにあたり、すぐAnsibleが使えるようになるまでを
Vagrantfileに書きました。

本記事は連載シリーズです。全3回です。
Vagrant -> Ansible -> ruby_その1(概要)
[Vagrant -> Ansible -> ruby_その2(Vagrantfile)]
Vagrant -> Ansible -> ruby_その3(Ansible - playbook)

ソース

Vagrantfile 全文

プロビジョニング作成中に思ったこと

その1 日本語化しない

日本語化するにあたり、Ubuntu Japanese Teamのページを参考にして実装してみましたが、多岐に渡るパッケージをダウンロードしてきました。
使い始める際には大変たすかるのですが、環境構築の段階ではクラッシュ&ビルドを繰り返す場合、
時間がかかってしまいますので、はずすことにしました。

その2 プロビジョニングは最低限に。Ansibleのplaybookで出来るだけ構築する。

プロビジョニング機能は強力で、Ansibleでやりたい事は全部できてしまいそうでしたが、
そうすると本番環境の構築で使いまわせなさそうなので、vagrantで行う範囲を
最小限(Ansibleインストールまで)にすることにしました。

その3 プロビジョニングは分けて書く。

最初は一気通貫に書いていましたが、rootでやりたいコマンドとユーザでやりたいコマンドが
出てきてしまい、分けてかけることがわかりました。
それからは(自分ルールの)意味単位で分けて書くようにするとVagrantfileが見やすくなりました。

その4 DNSの参照先はGoogleに設定

拾ってきたboxが外国仕様のせいなのかaptの更新がタイムアウトしてしまいます。
最初はなぜ繋がらないのか分からず、ドメイン名でpingすると繋がらないけど、
インターネット上のアドレスをIPアドレスでpingすると応答を得られたことから、
名前解決に失敗していたことがわかりました。
で、/etc/resolve.confを編集するのではなく、/etc/systemd/resolved.conf
編集しました。

Vagrantfile(抜粋)
control.vm.provision "shell", inline: <<-SHELL
  # DNS config
  sed -i.bak -e "s/^DNS=.*$/DNS=8.8.8.8 8.8.4.4/g" /etc/systemd/resolved.conf
  systemctl restart systemd-resolved.service

SHELL

Google社にはいつもお世話になってて、さらにお世話になるのも心苦しいですが、
DNSの参照先にさせて頂きました。(8.8.8.8, 8.8.8.4)
(jpドメインのDNSサーバも試してみましたが、安定しませんでした。)
ちなみにDNSの参照先を確認する場合systemd-resolve --statusです。

その5 インストールコマンドは公式を確認する

英語を読むのは苦手なので、日本語ページを参考にしていましたが
OSの問題なのか鮮度の問題なのかわかりませんが、
Ansibleのインストール方法にばらつきがあり、なかなかしっくりインストールできませんでした。
で、諦めてAnsible公式サイトを真似ればすんなりできたので、
他のソフトでも面倒をかけてでも公式サイトの
インストール方法をまず最初に探すようになりました。
その方がトータル的に見て手間が少ないように思います。

その6 sshの鍵認証はed25519

他サイトを参考にしていく中でよくrsaの鍵をみかけるのがほとんどですが、
暗号強度が高いed25519 で鍵を生成するようにしました。

control.vm.provision "shell", name: "Setup ssh", privileged: false, inline: <<-SHELL
  # ssh
  mkdir -p ~/.ssh
  ssh-keygen -N "" -t ed25519 -f ~/.ssh/id_ed25519
  rm -f ~/.ssh/known_hosts
SHELL

その7 sshの鍵生成はユーザ自身でやること

ここがユーザで実行する必要があります。
その3とも関連していますが、apt installssh-keygenをまとめて
一つのプロビジョニングで済ませようとしてrootユーザで実行していたら、
rootユーザのssh鍵を生成してしまってました。ssh鍵の生成は
接続ユーザ(vagrantユーザ)の鍵を作るためにも
privileged: false必須です。

以上、とりまとめなく書きましたが、見てくださった皆様の何かの参考になれば幸いです。

0
1
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
0
1