EIP/EBSのアタッチをEC2の中から行う

導入はやはりこのページです。
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/SettingUp_CommandLine.html

AWSのサイトからCLIをダウンロードしようと思ったら
AMZON LINUXには既に入っているとのこと。

まぁ要はEC2が死んだ時に勝手に生き返って、
生き返ったついでに勝手に可変領域のEBS(死んだ時切り離されたやつ)とかとってマウントして
生き返ったついでに勝手にEIPとかアタッチして何も無いかのように振る舞ってればいいじゃん。
です。

事前に準備

特に入れた記憶がなかったけれど確かになんか入ってた。

$ as-describe-auto-scaling-groups  --headers
as-describe-auto-scaling-groups: Malformed input-No Credentials were provided
Usage:
as-describe-auto-scaling-groups
[AutoScalingGroupNames [AutoScalingGroupNames ...] ] [--max-records
value ] [General Options]
For more information and a full list of options, run "as-describe-auto-scaling-

どうやらここにいるらしい。

$ ls -l /opt/aws/apitools/
合計 36
lrwxrwxrwx 1 root root 11 10月 2 05:46 2013 as -> as-1.0.61.3
drwxr-xr-x 4 root root 4096 10月 2 05:46 2013 as-1.0.61.3
lrwxrwxrwx 1 root root 23 10月 2 05:46 2013 cfn-init -> ./cfn-init-1.3-16.amzn1
drwxr-xr-x 5 root root 4096 5月 9 20:03 2013 cfn-init-1.3-13.amzn1
drwxr-xr-x 5 root root 4096 10月 2 05:46 2013 cfn-init-1.3-16.amzn1
lrwxrwxrwx 1 root root 12 10月 2 05:46 2013 ec2 -> ec2-1.6.10.1
drwxr-xr-x 4 root root 4096 10月 2 05:46 2013 ec2-1.6.10.1
lrwxrwxrwx 1 root root 12 5月 9 20:03 2013 elb -> elb-1.0.17.0
drwxr-xr-x 4 root root 4096 5月 9 20:03 2013 elb-1.0.17.0
lrwxrwxrwx 1 root root 9 5月 9 20:03 2013 iam -> iam-1.5.0
drwxr-xr-x 4 root root 4096 5月 9 20:03 2013 iam-1.5.0
lrwxrwxrwx 1 root root 12 5月 9 20:03 2013 mon -> mon-1.0.13.4
drwxr-xr-x 4 root root 4096 5月 9 20:03 2013 mon-1.0.13.4
lrwxrwxrwx 1 root root 12 9月 18 11:27 2013 rds -> rds-1.14.001
drwxr-xr-x 4 root root 4096 9月 18 11:27 2013 rds-1.14.001
lrwxrwxrwx 1 root root 14 5月 9 20:03 2013 ses -> ses-2012.07.09
drwxr-xr-x 3 root root 4096 5月 9 20:03 2013 ses-2012.07.09

もしかしてと思って環境変数を設定してあるんじゃないかと思って手順よりも先に確かめたら
やっぱり入っているんだね。

$ echo $EC2_HOME
/opt/aws/apitools/ec2

さすがにこの2つは登録されてなかった。
なので登録。

$ echo $AWS_ACCESS_KEY
$ echo $AWS_SECRET_KEY
#環境変数に登録
$ export AWS_ACCESS_KEY=XXXXXXXXXXXXXXXXXXX
$ export AWS_SECRET_KEY=XXXXXXXXXXXXXXXXXXX

アクセスキーID / シークレットアクセスキーの編集
環境変数の設定

sudo cp -ap /opt/aws/credential-file-path.template /opt/aws/credential-file-path #複製
sudo vi /opt/aws/credential-file-path
#templateにあわせてアクセスキーID / シークレットアクセスキーを記載
sudo chmod 600 /opt/aws/credential-file-path #コマンドを叩くユーザの権限でsudo系なしで行けるようにchownとか
$ export AWS_CREDENTIAL_FILE=/opt/aws/credential-file-path
$ echo $AWS_CREDENTIAL_FILE
/opt/aws/credential-file-path
$ ec2-describe-regions                                  
REGION eu-west-1 ec2.eu-west-1.amazonaws.com
REGION sa-east-1 ec2.sa-east-1.amazonaws.com
REGION us-east-1 ec2.us-east-1.amazonaws.com
REGION ap-northeast-1 ec2.ap-northeast-1.amazonaws.com
REGION us-west-2 ec2.us-west-2.amazonaws.com
REGION us-west-1 ec2.us-west-1.amazonaws.com
REGION ap-southeast-1 ec2.ap-southeast-1.amazonaws.com
REGION ap-southeast-2 ec2.ap-southeast-2.amazonaws.com
$ export EC2_URL=https://ec2.ap-northeast-1.amazonaws.com
なんかもろもろ設定するのがめんどくさいので、exportで設定したものは.bashrcに記載しておいた。
あとwindowwsから設定したAuto Scalingの設定がなぜか此処で確認しようとしても出てこない。
各端末固有のところから設定できないんだろうか。
確かに自身のAutoScalingを消せないよな。勝手に死ぬし。
まずEIP系をやってみる
#確認
$ ec2-describe-addresses
ADDRESS 000.000.000.000. i--XXXXXXX vpc 以下略
#なんかIPとインスタンスIDが必要なようなので
$ export INSTANS_ID=`curl http://169.254.169.254/latest/meta-data/instance-id`
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 10 100 10 0 0 1216 0 --:--:-- --:--:-- --:--:-- 1428
$ echo $INSTANS_ID
i--XXXXXXX
$export EIP=000.000.000.000
#割当を外してみる(動かしているインスタンスからやったので、勝手に接続が切れてSSHが落ちました)
$ ec2-disassociate-address $EIP
ADDRESS 000.000.000.000
$ ec2-associate-address -i $INSTANCE_ID $EIP
ADDRESS 000.000.000.000 i-XXXXXXX eipassoc-YYYYYYYY
$ echo $?
0
#オッケイっぽいっすね。
EBSをつけたり外したりしてみる。
今くっついているので、外してみる(起動中にやる無茶っぷり)
$ export EBS_DATA=vol-XXXXXXX
$ echo $EBS_DATA
vol-XXXXXXX
$ ec2-detach-volume $EBS_DATA
ATTACHMENT vol-XXXXXXX i-YYYYYYYY /dev/sdf detaching 2013-10-11T03:33:32+0000
$ echo $?
0
なんかうまく言ったっぽいですね。
コンソールを確認したらavailableでちゃんと外れてるっぽいすね。
そのままマウントまでやっちゃいますか。
[ryo@ip-172-31-0-148 ~]$ export DEVICE=/dev/sdf
[ryo@ip-172-31-0-148 ~]$ ec2-attach-volume $EBS_DATA -i $INSTANCE_ID -d $DEVICE
ATTACHMENT vol-XXXXXXX i-YYYYYYYY /dev/sdf attaching 2013-10-16T14:50:27+0000
dfで見た時にマウントされてなかったので、mountまでしてあげてという感じ。
ということはやっぱりunmountしてあげなきゃいけなかったっぽ。
というわけでなんとかコマンドベースでできることがわかったので、
次回はcloudinit か initスクリプトでこれらをやって何事もなかったかのように振る舞うの巻です。