Help us understand the problem. What is going on with this article?

VagrantでAmazon Web ServicesのVPCにAmazon Linuxのインスタンスを作成

More than 5 years have passed since last update.

1. ローカルでの準備

  1. Vagrantのインストール。
  2. vagrant-aws のインストール。
vagrant plugin install vagrant-aws
  1. dummy ボックスの作成。
vagrant box add dummy https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box

2. AWSでの準備

1. アクセスキー、シークレットIDの取得

  1. AWSのコンソールにログイン。
  2. 自分のアカウント名をクリックして表示されるドロップダウンメニューから「Security Credentials」を選択。
  3. Access Keys (Access Key ID and Secret Access Key) を開いて「Create New Access Key」をクリック。
  4. ポップアップに表示された「Download Key File」をクリックしてアクセスIDとシークレットキーのペアが記載されたファイルをダウンロード。rootkey.csvという名前で落ちてくる。
  5. rootkey.csv には以下のように記載されているので、これを今回はそれぞれMYAPP_AWS_ACCESS_KEY_IDMYAPP_AWS_SECRET_KEYという名前で環境変数として設定した。

    rootkey.csv
    AWSAccessKeyId=yourawsaccesskeyid
    AWSSecretKey=yourawssecretkey
    
    $HOME/.bash_profile
    + export MYAPP_AWS_ACCESS_KEY_ID=yourawsaccesskeyid
    + export MYAPP_AWS_SECRET_KEY=yourawssecretkey
    

2. Key Pairs の作成

  1. EC2 > Key Pairs に移動。
  2. 「Create Key Pair」をクリック。
  3. 適当な名前をつける。ここではnaoyes-myappとしておく。
  4. 「Yes」をクリックすると鍵ペアが作成されてダウンロードされる。naoyes-myapp.pemというファイル名。
  5. これをローカルの任意の場所に置く。ここでは/Users/naoyes/.ssh/naoyes-myapp.pemとしておく。

3. VPC Security Groups の作成

  1. VPC > Security Groups に移動。
  2. 「Create Security Group」をクリック。とりあえず外向けにはWEBとSSHを許容したいので以下の2つのセキュリティグループを作成した。各々sg-XXXXXXXXsg-YYYYYYYYといった感じでIDが振られる。
    • sg-XXXXXXXX : Inbound 80 0.0.0.0/0, Outbound ALL
    • sg-YYYYYYYY : Inbound 22 0.0.0.0/0, Outbound ALL

4. VPC Subnet ID の確認

  1. VPC > Subnets に移動。
  2. 2つあるサブネットのうちの適当な片方のサブネットsubnet-ZZZZZZZZを採用。

以下、その理由を。
デフォルトVPCだとサブネットが2つ存在している。そのどちらも「明示的には」ルートテーブルに紐付けられていない。これはRoute Tablesに存在してる唯一のルートテーブルのAssociated With0 Subnetsとなっていることから分かる。つまり2つのサブネットは一見宙ぶらりんな状態。
翻って、この唯一のルートテーブルはMainYesとなっている。つまりこのルートテーブルはいわゆるメインルートテーブルということになる。「宙ぶらりんな状態のサブネットはみんなこのルートテーブルが適用されますよ」というのがメインルートテーブルの役割。よって実は2つのサブネットはともに暗黙的にはメインルートテーブルを使用することとなっている。
もう一度メインルートテーブルの中身を見てみる。0.0.0.0/0のターゲットがInternet Gatewayに向いていることからこれはインターネットとやりとりできそうだということがわかる。
今回はWEBサーバを設置したいのでこの2つのサブネットのどちらにインスタンスを置いても問題なさそう。というかもう一つインターナルなルートテーブルを作成してそこに片方のサブネットを紐付けてDBサーバインスタンスを置くのが常套か。
今回はとりあえずはそこまではしない。
よって2つあるうちの片方のサブネットsubnet-ZZZZZZZZを仮に採用

5. その他、設定値の決定

  • リージョン
ap-northeast-1
  • インスタンスタイプ
t1.micro
  • AMI Amazon Linux の'PV EBS-Backed 64 ビット'とした。
ami-3561fe34

以下を参考に。EBSルートデバイスとした。インスタンスタイプがmicroだし。
* http://d.hatena.ne.jp/torazuka/20110504/rootdevice
* http://aws.amazon.com/jp/amazon-linux-ami/

3. インスタンスの作成

1. 適当なディレクトリを掘ってvagrantを初期化

cd /path/to/myapp
vagrant init

2. Vagrantfileの作成

/path/to/myapp/Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.define "dev.myapp" do |machine|
    machine.vm.box = "opscode-centos-6.5"
    machine.vm.network :private_network, ip: "192.168.40.10"
  end

  config.vm.define "prod.myapp" do |machine|
    machine.vm.box = "dummy"
    machine.vm.provider :aws do |aws, override|
      aws.access_key_id = ENV['MYAPP_AWS_ACCESS_KEY_ID']
      aws.secret_access_key = ENV['MYAPP_AWS_SECRET_KEY']
      aws.region = 'ap-northeast-1'
      aws.instance_type = 't1.micro'
      aws.ami = 'ami-3561fe34'
      aws.security_groups = [
        'sg-XXXXXXXX', # WEB
        'sg-YYYYYYYY', # SSH
      ]
      aws.keypair_name = 'naoyes-myapp'
      aws.tags = {
        'Name' => 'MYAPP',
        'Env' => 'PROD',
      }
      aws.subnet_id = 'subnet-ZZZZZZZZ'

      override.ssh.username = "ec2-user"
      override.ssh.private_key_path = '/Users/naoyes/.ssh/naoyes-myapp.pem'
      override.ssh.pty = true
    end
  end
end
  • ローカル上の開発環境をdev.myapp、AWS上の本番環境をprod.myappとして同一ファイルに記載してある。
  • Amazon Linuxの場合、override.ssh.pty = true の記述が無いとvagrant upの際に以下のエラーになった。そのあたりの議論はこちらに。 https://github.com/mitchellh/vagrant/issues/1482
stderr from the command:
sudo: sorry, you must have a tty to run sudo

3. インスタンスの作成

vagrant up prod.myapp --provider=aws

これでAWS上のインスタンスのにsshで接続できる。またWEBサーバをインストールしてHTTPアクセスしたらトップページが表示されることを確認した。

naoyes
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした