質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

VirtualBox

VirtualBoxは、現在米オラクル社が開発している、 x86仮想化ソフトウェア・パッケージの一つです。

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

2回答

2315閲覧

AWSを利用した場合、ローカル開発環境はどのように構築すべき?

退会済みユーザー

退会済みユーザー

総合スコア0

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

VirtualBox

VirtualBoxは、現在米オラクル社が開発している、 x86仮想化ソフトウェア・パッケージの一つです。

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

3クリップ

投稿2017/06/25 05:02

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Vagrantへの正しい知識が必要そうだね。

まずVagrantは仮想マシンのアプリケーションのラッパー。
一番相性の良いVirtualBoxを例に取ると、下記のような流れになる。

Vagrant + VirtualBox 編

  1. VirtualBoxVagrantをマシンにインストールする
  2. Atlas等のサイトからVagrantのBoxファイルをダウンロードする

ファイルの実体はVirtualBox等のスナップショットファイル
3. DLしたBoxファイルはVagrantコマンドを使ってVirtualBoxに復元&複製
4. vagrant up等のコマンドで起動→実際にはVBoxManage startvm "マシン名"が叩かれている

この場合CentOS6.x系の最新バージョンをAtlasから探して導入する。
BentoユーザーのBoxが一般的だと思うのでこちらを紹介。
https://atlas.hashicorp.com/bento/boxes/centos-6.9

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等の機能を使う必要がある。

投稿2017/06/25 05:55

miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/06/25 09:37

ご回答ありがとうございます!VagrantのプロバイダーとしてVirtualboxではなくEC2を選択出来るというところまでは理解しているのですが、ネットの向こう側にあるEC2を仮想マシン化してローカル開発を行うというのがいまいち良くわかりません。ネット上のサーバーをいじっていたら、それはローカル開発環境と言えるものなのでしょうか?なんだかFTPソフトでサーバー上のデータを直接編集しているような感じがしてしまうのですが、そういったこととは全く異なるのでしょうか?EC2インスタンスをローカルから操作してデータを作成したり編集するということは、そのサーバーがネット上に公開されていて、ブラウザーで確認するときも公開されているipアドレスをアドレスバーに入れて表示させるのでしょうか?ネット上のデータを非公開にしてローカルから操作、ブラウザでの確認なんて出来るものなのでしょうか?混乱しまくりです(汗)
miyabi-sun

2017/06/25 18:54 編集

なるほど、OK!一つずつ紐解いていこう。 >ローカル開発環境と言えるものなのでしょうか? それはそうだ。 でも、そもそもなんでローカル開発環境作りに精を出すかっていうと、 本番環境で開発やテストしたほうがいいに決まってるんだけど、コストの都合上そう何個も本番環境を借りられないからだよね? 開発用の端末ってのは普通自分や同僚等の少数がテストの為にアクセスするくらいしか使われない。 だから一番しょぼくて安いインスタンスで大丈夫だね。 月額1000〜2000円程度のマシンを立ち上げて、SSHでログインして使い倒すってのは次世代の開発スタイルとしてはありだと思うよ。 >なんだかFTPソフトでサーバー上のデータを直接編集 昔ながらの手作業でアップロードしてF5キーの時代からすると、 Vagrantを併用するとファイルの同期がとっても楽。 一度設定してしまえばあたかもローカル開発環境かのようにEC2のファイルを同期出来るようになる。 とはいえFTP勢もそう捨てたモノじゃなくて、PHPStorm級のIDEを使えばこれに近い快適な開発が出来るんだけどね。 >そのサーバーがネット上に公開されていて、ブラウザーで確認するときも公開されているipアドレスをアドレスバーに入れて表示させるのでしょうか? その通り、一般的なお客様はまずIPアドレスを適当打ちして入ってくる事は無いけど、 うっかり機密情報の流出につながる可能性もある。 なのでVPSやEC2を開発環境にする場合、セキュリティに関してはしっかりとね。 特定のIPアドレスからしかWebサイトにアクセス出来ないようにしたり、Basic認証を掛けるなんて対策もある。 懸念事項はこれである程度解消出来ると思うよ。
退会済みユーザー

退会済みユーザー

2017/06/26 09:03

ご丁寧にご説明ありがとうごございます!謎が凄い紐解けました!!! >本番環境で開発やテストしたほうがいいに決まってるんだけど、 >コストの都合上そう何個も本番環境を借りられないからだよね? あ、そうだったのですね。。。そもそもの目的をあまり理解していませんでした。。。 >月額1000〜2000円程度のマシンを立ち上げて、 >SSHでログインして使い倒すってのは次世代の開発スタイルとしてはありだと思うよ。 なるほど!!! >その通り、一般的なお客様はまずIPアドレスを適当打ちして入ってくる事は無いけど、 >うっかり機密情報の流出につながる可能性もある。 >なのでVPSやEC2を開発環境にする場合、セキュリティに関してはしっかりとね。 >特定のIPアドレスからしかWebサイトにアクセス出来ないようにしたり、 >Basic認証を掛けるなんて対策もある。 凄い納得です!なるほど。ファイヤーフォールで自分のローカル?のIPからのアクセスだけを許可するようにすれば、他の人には公開されていないネット上のサーバーにじぶんだけがアクセスできて、ブラウザーで動作確認ができるという訳ですね。 謎が溶けて凄い嬉しいです!ありがとうございました!!!!
退会済みユーザー

退会済みユーザー

2017/06/26 09:06

>FTP勢もそう捨てたモノじゃなくて、PHPStorm級のIDEを使えばこれに近い快適な開発が出来るんだけどね。 自分はWebStormを使っているのですが、JetBrain社のIDEの機能をフル活用すれば、vagrantいらずになるのですか?AWS上のサーバーを操作できてしまうのですか?確かにFTP機能があったような気がします。
miyabi-sun

2017/06/26 14:12

JetBrain社のIDEのFTP同期機能を使うと、 ローカルの最新の状態をよしなに設定先のサーバーにアップロードしてくれる。 例えばApache+PHPでファイルを設置さえすれば終わりみたいなサーバーならこれで十分だね。 >vagrantいらずになるのですか? Vagrantの最終的な強みは真似出来ないから、覚えた方がいいのは確か。 その強みは開発環境の設定情報がVagrantfile1個で管理出来るってこと。 特にプロビジョン回りは覚えると感動物だよ。 新しくジョインしたメンバーもうちの開発環境これだからと言いながら Vagrantファイルを渡すだけで同じサーバーを構築してくれる。 他にもGitなんかで簡単にバージョン管理出来るから何処にやったか無くす心配もないね。
guest

0

一回整理してみましょうか。
AWSを使う理由はなんでしょうか?

1.サービスを公開するために必要(勉強で作ったWebアプリの公開)
2.AWSそのものの使い方を覚えたい
3.その他

以下の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上のサーバーと同じ環境をローカルに作ることが出来ません。

Amazon LinuxはCentOSをベースに開発されたものなので、AWSでAmazonLinuxを使う場合はローカルでCentOS 6を使っています。※CentOSはRed Hat Enterprise Linux(以下、RHEL)のソースから商標や商用パッケージ等を除去したものをリビルドして作成されています
RHELは別途ライセンスも必要となります。AWSのAMIで利用する場合は時間単価が多少高くなっていますが、それがライセンス料だと思ってください。(Windowsも同様)

※というか、根本的な部分の確認なのですが、本番環境とローカル開発環境は環境を合わせた方が良いのですよね!?

合わせる理由がなければ合わせなくてもいいです。
仕事ではシステムテスト等では合わせますが、その場合はそもそもローカルではなくAWS上に丸っと環境を複製しています。

個人で勉強が目的であれば、同じ環境を使う必要はないと思いますがいかがでしょうか。

ローカルでRHELを使う場合、少なくとも初年度はRHELを入手するためにサポートサービスを購入する必要があります。(約10万くらい)

CentOS, RHEL系とUbuntu系ではパッケージ管理やディレクトリ構成が異なります。
私は両方触れているので慣れていますが、これから勉強を、という人にはかなりきついかもしれません。

ディストリビューションの採用の指標として、以下
CentOS, RHEL系:国内での利用割合が多い
Ubuntu LTS:海外での利用割合が多い

最後に、私の利用方法。
AWS(本番)でRHELを使う場合、ローカルではCentOSを選定。
AWS(本番)でUbuntuを使う場合、ローカルもそのままUbuntuを選定。
但し、Ubuntuは様々な理由から個人的に好みではない。私が新規プロジェクトでこのOSを採用することはありません。

投稿2017/06/26 00:43

moonphase

総合スコア6621

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/06/26 07:52

いろいろと詳しく教えて頂きありがとうございます!Red Hat Enterprise Linux 7.3 (HVM), SSD Volume Typeはライセンスの関係でamazonのパッケージより割高なのですね!知りませんでした。ubunchuはまだ使ったこともないので、AMIを使うようにしてみます!
退会済みユーザー

退会済みユーザー

2017/06/26 07:56

AMIを使う場合、ローカル開発環境はとりあえずosはcentos6で、データベースは同じバージョンのmysqlで構築しておけば良いのでしょうか。osもmysqlも6.x.xみたいにバージョンを細かく合わせる必要は特にないのですかね。 本番環境とローカル開発環境の条件を合わせるということに関する理解が足りてないみたいです。別の質問として投稿した方が良いかもしれませんね。
moonphase

2017/06/27 00:48

OSの選定は、以下の感じで合わせておけばいいです。 RHEL6系:RHEL 6, CentOS 6, Amazon Linux RHEL7系:RHEL 7, CentOS 7 Ubuntu:Ubuntu XX.XX LTS ※LTSとついたものを選定するといい データベース(MySQL)の選定は5.6か5.7あたりが無難。 MySQL 5.1 既にサポートが終了しているので利用しない MySQL 5.5 既にサポートが終了しているので利用しない MySQL 5.6 割と主流、情報が多い。 MySQL 5.7 5.6系の次期バージョン。5.6に比べるとまだまだ情報が少ないか。 MySQL 8.0 5.7系の次期バージョン。まだ開発リリースの段階。 RDSのMySQLエンジンの古いバージョンはAWSによるサポートが切れるので移行しろと案内がきています。現在は5.6系の古いエンジンが5.6系の新しいものに移行する期限の直前です。5.6.35とかへ移行しろって内容だったかな?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問