概要
今更ながらにVagrant+Ansibleの環境構築を初めてやってみました。
満足できる環境が出来上がるまでおおよそ1ヶ月。
せっかく苦労して書いたのに何もかも忘れていくのも寂しいので、
こちらに記述しておくことにしました。
今回はVagrantで環境構築するにあたり、すぐAnsibleが使えるようになるまでを
Vagrantfileに書きました。
本記事は連載シリーズです。全3回です。
Vagrant -> Ansible -> ruby_その1(概要)
[Vagrant -> Ansible -> ruby_その2(Vagrantfile)]
Vagrant -> Ansible -> ruby_その3(Ansible - playbook)
ソース
プロビジョニング作成中に思ったこと
その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
を
編集しました。
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 install
とssh-keygen
をまとめて
一つのプロビジョニングで済ませようとしてrootユーザで実行していたら、
rootユーザのssh鍵を生成してしまってました。ssh鍵の生成は
接続ユーザ(vagrantユーザ)の鍵を作るためにも
privileged: false
必須です。
以上、とりまとめなく書きましたが、見てくださった皆様の何かの参考になれば幸いです。