CUBE SUGAR STORAGE

技術系のことかきます。
Recent Tweets @
何番煎じか、という感じだけど Vagrant で AWS EC2 のインスタンスを使う方法について書く。 下準備が色々と必要だったのが割りと面倒だった。 尚、AWS の WebUI は頻繁にレイアウトが変更されるので、この内容もいつまでそのままで使えるか分からない。 とはいえ、見た目が変わったとしても基本的な考え方は変わらない。

まずは API で AWS をコントロールするために IAM コンソールにログインする。
https://console.aws.amazon.com/iam/home#home



適当な名前を付けてグループを作成する。

ポリシーは Power User Access で良いかな。

ユーザを作ってグループに紐付ける。

ユーザに割り当てられた Access Key ID と Secret Access Key をメモっておく。

次に EC2 インスタンスにログインするためのキーペア (公開鍵) を作る。 AWS マネージメントコンソールにログインする。

キーペアを作成する。

適当な名前でキーペアを作ると pem ファイルがダウンロードされる。

秘密鍵は ~/.ssh ディレクトリ以下にでも移動させておこう。 パーミッションを変更する。 秘密鍵なので取り扱い注意!
$ mv ~/Downloads/aws.pem ~/.ssh/
$ chmod 600 ~/.ssh/aws.pem

次に EC2 インスタンスの通信を制御するセキュリティグループを編集する。

インバウンドルールに SSH と ICMP を通すようにしておく。

最後に、起動する AMI (Amazon Machine Image) の ID を確認する。

AMI ID はリージョン毎に異なる点に注意する。

これで必要な情報は揃った。 まずは Vagrant に AWS プラグインをインストールする。
$ vagrant plugin install vagrant-aws

先ほど手に入れた AWS のアクセスキーとシークレットキーを環境変数としてエクスポートしよう。
$ export AWS_ACCESS_KEY_ID="XXX"
$ export AWS_SECRET_KEY="XXX"

今回使用する Vagrantfile は以下の通り。 アクセスキーとシークレットキーは環境変数から読み込む。 その他、これまでに確認してきたインスタンスを作成するリージョンや AMI ID などを指定する。
$ cat Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "dummy"
  config.vm.box_url = "https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box"
  config.vm.synced_folder ".", "/vagrant", disabled: true

  config.vm.provider "aws" do |aws, override|
    aws.ami = "ami-29dc9228"
    aws.tags = {
      'Name' => 'ec2-vm',
    }
    aws.instance_type = "t2.micro"
    aws.security_groups = "default"

    aws.access_key_id = ENV["AWS_ACCESS_KEY_ID"]
    aws.secret_access_key = ENV["AWS_SECRET_KEY"]
    aws.region = "ap-northeast-1"
    aws.keypair_name = "aws"
    override.ssh.username = "ec2-user"
    override.ssh.private_key_path = "~/.ssh/aws.pem"
  end

end

プロバイダに aws を指定して vagrant up する。
$ vagrant up --provider=aws

上手くいけば EC2 のインスタンスが立ち上がる。
$ vagrant status
Current machine states:

default                   running (aws)

The EC2 instance is running. To stop this machine, you can run
`vagrant halt`. To destroy the machine, you can run `vagrant destroy`.

マネジメントコンソールを見ても EC2 インスタンスが動作していることがわかる。

ここまでくれば、あとは通常の Vagrant と同様に操作できる。
$ vagrant ssh

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2014.03-release-notes/
No packages needed for security; 4 packages available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-172-31-12-139 ~]$ 

SSH ログインに必要な情報も vagrant ssh-config コマンドで手に入る。
$ vagrant ssh-config
Host default
  HostName 54.92.13.113
  User ec2-user
  Port 22
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/amedama/.ssh/aws.pem
  IdentitiesOnly yes
  LogLevel FATAL

もちろん、この情報を元に ssh コマンドでログインすることもできる。
$ ssh -i ~/.ssh/aws.pem -l ec2-user 54.92.13.113

インスタンスを停止する場合にも vagrant halt が使える。 停止しておけば料金はかからない。
$ vagrant halt
==> default: Stopping the instance...

完全に削除する場合には vagrant destroy する。
$ vagrant destroy -f
==> default: Terminating the instance...

めでたしめでたし。
  1. act2012blmomijiameからリブログしました
  2. momijiameの投稿です