質問: AWSを最近、勉強も兼ねて無料枠の範囲で使い始めたのですが、ローカル開発環境はVagrantでどのように構築すべきか良く分からず困っております。 以下のAMIのいずれかを使って、AWS上でサーバーインスタンスを作成しようとは考えております。 * Amazon Linux AMI 2017.03.1 (HVM), SSD Volume Type * Red Hat Enterprise Linux 7.3 (HVM), SSD Volume Type * Ubuntu Server 16.04 LTS (HVM), SSD Volume Type ただ、上記のAMIでインスタンスを作った場合、入っているOSがCentOSであればCentOSでバージョンが何なのかよくわかりませんし、AWS上のサーバーと同じ環境をローカルに作ることが出来ません。 ※というか、根本的な部分の確認なのですが、本番環境とローカル開発環境は環境を合わせた方が良いのですよね!? 「AWS Vagrant」のようなキーワードでググると「vagrant-aws」というプラグインを使って、AWSをVagrantを使って操作する方法を紹介する記事がいろいろと出てくるのですが、(クラウド上の)AWSのサーバーをVagrantで操作するということが、自分が目的としているローカルで開発を行うことと関係があるのかどうかいまいち分かりません。 クラウド上のAWSサーバーインスタンスをローカルから操作してたら、ローカルで開発しているというより、WEB上に公開されているデータを編集していることになるのではないかと思ってしまうのですが、何が何だかもう良くわかりません。。。 まとまりのない文章になっておりますが、知りたいことは表題の通り、AWSを利用した場合、ローカル開発環境はVagrantでどのように構築すべきかということです。 よろしくお願いいたします!m(_ _)m
回答: Vagrantへの正しい知識が必要そうだね。 まずVagrantは仮想マシンのアプリケーションのラッパー。 一番相性の良いVirtualBoxを例に取ると、下記のような流れになる。 > > Vagrant + VirtualBox 編 > > > 1. VirtualBoxとVagrantをマシンにインストールする 2. Atlas等のサイトからVagrantのBoxファイルをダウンロードする ファイルの実体はVirtualBox等のスナップショットファイル 3. DLしたBoxファイルはVagrantコマンドを使ってVirtualBoxに復元&複製 4. `vagrant up`等のコマンドで起動→実際には`VBoxManage startvm "マシン名"`が叩かれている この場合CentOS6.x系の最新バージョンをAtlasから探して導入する。 BentoユーザーのBoxが一般的だと思うのでこちらを紹介。 VirtualBoxは基本的に仮想的なCPU、仮想的なHDDを個別に作ってその中で完結しているパソコンなので、 開発用のソースコード等を持ち込むには個別の設定が必要になる。 この辺のファイル共有の仕組みもVagrantは提供してくれるので、簡単にローカルで作ったファイルをVirtualBox内のマシンで動作し確認することができる。 参考リンク:Vagrantで共有フォルダを設定してみる - Qiita > > Vagrant + AWS 編 > > > 先程「一番相性の良いVirtualBox」と言ったように、Vagrantには仮想マシンのツールとしての実体はなく、何と連携を取っても自由。 AWSはAPIを公開しており、管理画面にログインせずともこれを利用してインスタンスを作ったり起動させたりということが可能。 参考リンク:Amazon EC2 » API Reference 従って、Vagrantに有志が作っているAWSのプラグインを入れることで、 EC2のAPI自体を仮想マシンに見立ててしまってVagrant越しにインスタンスを作ったり起動させたり出来る。 (VirtualBoxとは違い、Amazonが提供しているイメージの中から選ぶ形式になるためVagrantBoxファイルは使用できない等の違いはある) 参考リンク:Vagrant AWS Provider プラグインでEC2インスタンスを使う ただし、AWSはネットの向こう側にあるのでVagrantが持つファイル連携機能の大多数は動作しない。 Rsync等の機能を使う必要がある。