VagrantでAWSのEC2を操作する
2014.09.20 Author: Jas
お久しぶりです。
最近、AWSがマイブームのjasです。
本日は、VagrantとAWSを連携し、VagrantからEC2のインスタンスを操作する方法をご紹介します。
【本日の献立】
1. IAMユーザーの作成
2. EC2の準備
3. vagrant-awsプラグインのインストール
4. Vagrantfileの編集
5. Vagrantコマンドの実行
※AWSアカウントの作成とVagrantのインストールは完了している前提で作業を進めます。
早速、AWS側の下準備から始めましょう~!
1.IAMユーザーの作成
まずは、VagrantからAWSに接続をするためのアカウント(IAMユーザー)を作成します。 IAMについては、@ITのこちらの記事に簡単な紹介があります。AWSにログインし、サービスメニューから「IAM」を選択します。
IAMメニューのUsersから、「Create New Users」を選択し、Vagrant用のアカウントを作成します。
ユーザー名を入力し、「Generate an access key for each user」にチェックをして、ユーザーを作成します。
ユーザー作成時に精製したアクセスキーIDとセキュリティアクセスキーは後ほど使用しますのでダウンロードしておくか、メモしておきましょう。
作成したユーザーの詳細画面から、IAMポリシーを設定します。
参考:「IAMのポリシーを設定する」 By @IT
Vagrant用には、EC2のインスタンス操作のみを許可すれば問題ありません。
この記事で紹介する範囲なら、以下のようなActionが許可されていれば操作可能です。
{ "Effect": "Allow", "Action": [ "ec2:DescribeImages", "ec2:AttachVolume", "ec2:CreateVolume", "ec2:*Instances", "ec2:DescribeSecurityGroups", "ec2:CreateTags" ], "Resource": [ "*" ] }
これで、VagrantからAWSにアクセスするアカウントの用意できました。
2.EC2の準備
EC2でインスタンスの操作をするため、鍵とセキュリティグループの作成、AMI(イメージ)の用意をしましょう。サービスメニューから「EC2」に移動します。
EC2メニューのKey Pairsから、「Create Key Pair」を選択し、SSHの鍵を作成します。
作成した鍵の「Key pair name」が必要になりますので、メモしておきましょう。
次にEC2メニューのSecurity Groupsから、「Create Security Group」を選択し、VagrantからSSH接続を許可するための設定を行います。
セキュリティグループの「Group Name」が必要になりますので、メモしておきましょう。
最後にAMIですが、公開されているAMIでもよいですし、お好みのインスタンスからImageを作成してもよいので、Vagrantから起動したいマシンのテンプレートになるものを用意し、そのAMI IDを控えておきましょう。
3.vagrant-awsプラグインのインストール
VagrantとWASの連携には、vagrant-awsというプラグインが公開されています。vagrant-aws のインストールは簡単!
> vagrant plugin install vagrant-aws
たったこれだけです。
ついでにVagrantの起動に必要なダミーboxを追加します。
(Vagrantの起動にはboxファイルが必ず必要なため)
> vagrant box add aws-dummy https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box
これでプラグインの準備もできました。
4.Vagrantfileの編集
あともう少し! vagrant init をして、Vagrantfileを編集しましょう。> vagrant init aws-dummy
Vagrantfileファイルの内容はこんな感じです。
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# Box setting
config.vm.box = "aws-dummy"
config.vm.box_url = "https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box"
# AWS Setting
config.vm.provider :aws do |aws, override|
aws.access_key_id = 'IAMのアクセスキーID'
aws.secret_access_key = 'IAMのセキュリティアクセスキー'
aws.keypair_name = 'EC2のKey pair name'
aws.region = 'ap-northeast-1' # リージョンを指定
aws.instance_type = 't1.micro' # インスタンスタイプを指定
aws.ami = 'ami-xxxxxxx' # AMI ID(マシンイメージ)
aws.security_groups = ['セキュリティグループのGroup Name'] # セキュリティグループは複数指定可能
aws.tags = {
'Name' => 'インスタンスのName(255文字以内でご自由に♪)'
}
# Device Mapping
aws.block_device_mapping = [
{
'DeviceName' => '/dev/sda',
'Ebs.DeleteOnTermination' => true # terminate時にEBSを削除する(※)
}
]
override.ssh.username = "sshユーザー名"
override.ssh.private_key_path = 'ローカルに保存してある秘密鍵(pem)のフルパス'
end
end
AWS設定として、1~3で準備したIAMアクセスキー、EC2の鍵やセキュリティグループ、AMI IDなどを指定します。
Device Mappingで指定している'Ebs.DeleteOnTermination'をtrueにしておかないと、Vagrantからインスタンスを終了(terminate)しても、EBSにVolumeだけ残ってしまい、容量に応じて課金されますので注意しましょう。
(私は気づかないうちに大量生産していて、初年度の無料枠をぶっちぎってしまい、ばっちり課金されました・・・)
5.Vagrantコマンドの実行
すべての準備が整ったら、Vagrantコマンドを実行してみましょう。インスタンスの起動は以下のコマンドで行えます。
> vagrant up --provider=aws
どうですか?
エラーが出ずにインスタンスが作成され、起動したでしょうか!?
その他、インスタンスを操作するコマンドは以下の通りです。
# インスタンスの作成&起動(launch)
> vagrant up --provider=aws
# インスタンス停止(stop)
> vagrant halt
# 作成済みインスタンスの起動(start)
> vagrant up
# インスタンスの再起動
> vagrant reload
# インスタンス終了(terminate)
> vagrant destroy
「vagrant up --provider=aws」でインスタンス起動すると、.vagrantフォルダの中にAWSのインスタンスIDが記述されたファイルが格納されるので、再度「vagrant up --provider=aws」を実行すると既にインスタンスが存在していますのエラーとなります。
作成済みインスタンスの起動はオプションなしの「vagrant up」で行えます。
また、一度「vagrant destroy」すれば、再度「vagrant up --provider=aws」で新しいインスタンスを作成できます。
これで、AWSの管理画面にログインしなくても、Vagrantから楽にインスタンスを起動したり、停止したりできるようになりました。
最初の準備が少し大変ですが、Vagrantの操作を知っていれば、簡単にAWSのインスタンスを操作できるのは、かなりメリットがあるのではないでしょうか?