コマンド1発で環境構築!Vagrant+Ansibleで自動構築を実現するansible_local【実践記録8】

実践記録8

実践記録7でAnsibleを使ってnginxにBasic認証を導入してみました。

しかしAnsibleの実行など一部手作業が含まれている状態でしたので、
vagrant upを実行すれば処理が一括で進むようVagrantfileを修正していきたいと思います。

今回だいぶエラーにはまりました。。

前提

VirtualBoxとVagrantがインストールされていること。
インストール方法は以下の記事を参考

関連記事

実践記録1VirtualBoxをインストールしてローカル開発環境を構築してみたいと思います。AWSなどのクラウドサービスを使った方が最近は簡単に環境を準備できますが、まずは自分のPCに仮想環境を構築してみようと思います。[…]

関連記事

実践記録2実践記録1でVirtualBoxを使ってローカル開発環境を構築してみましたが、今回はVagrantという仮想環境構築ツールを使ってVirtualBox上に仮想マシンを構築してみようと思います。前提使用する環境にVi[…]

VagrantでAnsibleを実行する

現在のVagrantfileとAnsibleのplaybookの定義状況は以下の通りです。

関連記事

実践記録7前回までVagrantを用いて環境構築をしていましたが、今回はAnsibleを使用してみたいと思います。Ansibleを使うことでVagrantだけで構成するよりもより汎用的な構成管理を行うことを目指します。前提V[…]

今回は最終的な状態から公開します。
Vagrantfileを以下の様に修正しました。(ついでにちょっと整えました)

目玉でもあるAnsibleの設定は以下の部分です。

VagrantfileからAnsibleを実行する為に「ansible_local」というプロビジョニングを使用しました。

よく似た名称の「ansible」というプロビジョニングを使用すると、ホストOS側にAnsibleを導入する必要が出てきてしまうので、
仮想マシン上のAnsibleを使用するための「ansible_local」の方を使用しています。

ansible_localを使用すると対象サーバにAnsibleが導入されているか自動でチェックして、
インストールされていなければインストールしてくれます。

たったこれだけの定義なのですが、色々な落とし穴にはまったので紹介していきます。

エラー大全

Failed to connect to the host via ssh: Host key verification failed

Ansibleを実行する為には対象サーバへSSHで接続できる必要があります。

SSH接続用の公開鍵認証の設定などは導入済みですが、Vagrantfileから実行する為には1つ問題がありました。

それがこれです。

見たことある方も多いのではないでしょうか。
初回SSH接続時に表示される、「この接続先繋ぐの初めてだけど大丈夫?」確認です。

こいつがある為、VagrantでAnsibleを実行する時にSSH接続ができず、以下のエラーが発生しました。

こいつの解消方法としては
AnsibleがSSH接続を行う時に、確認が行われないようにansible.cfgに以下の設定を組み込む必要があります。

このファイルを後述のprovisioning_pathに配置することでSSH接続ができるようになります。

[WARNING] Ansible is being run in a world writable directory

provisopning_pathはVagrantがansible_localを実行する際に基準とするパスを指定する項目です。
ここにplaybookやansible.cfgを配置します。

ファイルの配置方法ですが、プロビジョンの中で作成するよりも、
予めホストマシンに配置しておいて、フォルダ同期させた方が楽です。

しかし、、、

単純にフォルダ同期させた場所にplaybookやansible.cfgを配置して実行すると以下の様なエラーがでます。

どうやらAnsibleがansible.cfgを書き込み可能な作業ディレクトリからロードすると
エラーとなって、読み込みを行わないようです。。

参考情報

すると当然先ほどのSSH接続エラー回避の定義が読み込まれないのでまたエラーになりました。。。

そこで、フォルダ同期させたフォルダの権限を変更します。

ここで気を付けて頂きたいのが、Vagrantでフォルダ同期を行っている場合、
そのフォルダのディレクトリやファイルの権限をchmodコマンドで変更はできないということです。

変更する為にはVagrantfileを以下の様に修正する必要がありました。

後半の「mount_options」以降が権限設定となります。
デフォルトでは「777」になりますが、ひとまずエラー回避の為に「775」に変更してみたところエラーを回避することができました。

Operation too slow. Less than 1000 bytes/sec transferred the last 30 seconds

Ansibleとは直接関係ないのですが、Vagrantfileで仮想マシンを構築しているときに
時々以下の様なエラーが発生していました。

これはyumコマンド実行時にデフォルトのタイムアウト時間である30秒を超えて、タイムアウトになった為に発生するエラーのようです。

yum.confに以下の定義を入れるようVagrantfileを修正しましたので、
こちらも合わせて記載しておきます。

色々とエラーにひっかかりましたが、

これでvagrant upコマンド一発でAnsibleのホストサーバと、
Basic認証機能付きnginxを搭載したwebサーバが構築できるようになりました!!

個人的には中々の達成感です。

今回はここまでにします。

続きは以下の記事になります!

関連記事

実践記録9前回までVagrnatとAnsibleを使ってIaCっぽい事をしてきましたが、今回は少し路線を変えてDockerを使ってみたいと思います。世の中的には今更って思われるのかもしれませんが、AWS等のクラウドでコン[…]