何番煎じか、という感じだけど 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...
めでたしめでたし。