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

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

ただいまの
回答率

88.64%

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

解決済

回答 2

投稿

  • 評価
  • クリップ 3
  • VIEW 5,393
退会済みユーザー

退会済みユーザー

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+5

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/26 18:03

    ご丁寧にご説明ありがとうごございます!謎が凄い紐解けました!!!

    >本番環境で開発やテストしたほうがいいに決まってるんだけど、
    >コストの都合上そう何個も本番環境を借りられないからだよね?
    あ、そうだったのですね。。。そもそもの目的をあまり理解していませんでした。。。

    >月額1000〜2000円程度のマシンを立ち上げて、
    >SSHでログインして使い倒すってのは次世代の開発スタイルとしてはありだと思うよ。
    なるほど!!!

    >その通り、一般的なお客様はまずIPアドレスを適当打ちして入ってくる事は無いけど、
    >うっかり機密情報の流出につながる可能性もある。
    >なのでVPSやEC2を開発環境にする場合、セキュリティに関してはしっかりとね。
    >特定のIPアドレスからしかWebサイトにアクセス出来ないようにしたり、
    >Basic認証を掛けるなんて対策もある。

    凄い納得です!なるほど。ファイヤーフォールで自分のローカル?のIPからのアクセスだけを許可するようにすれば、他の人には公開されていないネット上のサーバーにじぶんだけがアクセスできて、ブラウザーで動作確認ができるという訳ですね。

    謎が溶けて凄い嬉しいです!ありがとうございました!!!!

    キャンセル

  • 2017/06/26 18:06

    >FTP勢もそう捨てたモノじゃなくて、PHPStorm級のIDEを使えばこれに近い快適な開発が出来るんだけどね。

    自分はWebStormを使っているのですが、JetBrain社のIDEの機能をフル活用すれば、vagrantいらずになるのですか?AWS上のサーバーを操作できてしまうのですか?確かにFTP機能があったような気がします。

    キャンセル

  • 2017/06/26 23:12

    JetBrain社のIDEのFTP同期機能を使うと、
    ローカルの最新の状態をよしなに設定先のサーバーにアップロードしてくれる。
    例えばApache+PHPでファイルを設置さえすれば終わりみたいなサーバーならこれで十分だね。

    >vagrantいらずになるのですか?
    Vagrantの最終的な強みは真似出来ないから、覚えた方がいいのは確か。
    その強みは開発環境の設定情報がVagrantfile1個で管理出来るってこと。
    特にプロビジョン回りは覚えると感動物だよ。

    新しくジョインしたメンバーもうちの開発環境これだからと言いながら
    Vagrantファイルを渡すだけで同じサーバーを構築してくれる。
    他にもGitなんかで簡単にバージョン管理出来るから何処にやったか無くす心配もないね。

    キャンセル

+2

一回整理してみましょうか。
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 16:52

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

    キャンセル

  • 2017/06/26 16:56

    AMIを使う場合、ローカル開発環境はとりあえずosはcentos6で、データベースは同じバージョンのmysqlで構築しておけば良いのでしょうか。osもmysqlも6.x.xみたいにバージョンを細かく合わせる必要は特にないのですかね。

    本番環境とローカル開発環境の条件を合わせるということに関する理解が足りてないみたいです。別の質問として投稿した方が良いかもしれませんね。

    キャンセル

  • 2017/06/27 09: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とかへ移行しろって内容だったかな?

    キャンセル

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

  • ただいまの回答率 88.64%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る