EIP(ENI)/EBSのアタッチをEC2の中から行う 2

昨日の作業アタッチ/デタッチするのはどちらかというとEIPではなくENIの方だったみたいなので、
こちらもメモしておく。

参考: http://exploreaws.doorblog.jp/archives/26049308.html

ENIのアタッチ

例のごとく環境変数の設定

export ENI0=eni-XXXXXXXXX
export ENI1=eni-YYYYYYYYY

デフォルトでDelete On Termination:Trueになっているくさいので
どうにかする。

$ ec2-attach-network-interface $ENI1 -i $INSTANCE_ID -d 1
eni-attach-00000000

コンソールからみると確かにインスタンスにくっついていてしかも
Delete On Termination: false
になっていた。二個目のインターフェイスは勝手にfalseになるのだな。

eth0に当たるようなENIがEC2と共死にしそうだったので裏切るように設定した。

$ ec2-modify-network-interface-attribute $ENI0 --delete-on-termination false -a eni-attach-1111111
NETWORKINTERFACE eni-XXXXXXXXX attachment

コンソールで不揮発になっているのを確認。

準備完了なのでcloud-initにしてみる

事前の説明として、
・AutoScalingで死んだら勝手に起き上がってくる感じにする。起き上がったらとりあえずなんかすぐ使える。
・固定IPが2つ必要(ENIが2つある)。
・可変のデータはインスタンスに付いているものとは別にEBSに全て書いてある(/data =>/dev/sdf(xvdf))
・可変しないデータはAMI化してAutoScalingの時にそれを使って起動するようにする。
・余ったEBSの処理は後々考える。
・(user-dataに登録できるcloud-initスクリプトのサイズ制限は16kbらしいです)

なので
1.cloud-initのスクリプトをコマンドの羅列で書く
2.いらないデータを削除してAMIを作る。
3.実際にインスタンスを葬ってみる。
でしょうか。

なんかこんなかんじかな。

#cloud-config
repo_upgrade: all
runcmd:
- [export, AWS_CREDENTIAL_FILE=/opt/aws/credential-file-path]
- [export, AWS_ACCESS_KEY=YYYYYYYYYYYYYY]
- [export, AWS_SECRET_KEY=XXXXXXXXXXXXXX]
- [export, EC2_URL=https://ec2.ap-northeast-1.amazonaws.com]
- [export, INSTANCE_ID=`curl -s http://169.254.169.254/latest/meta-data/instance-id`]
- [export, EIP=000.000.000.000]
- [export, DEVICE=/dev/sdf]
- [export, ENI0=eni-00000000]
- [export, ENI1=eni-11111111]
- [ec2-attach-volume, $EBS_DATA, -i, $INSTANCE_ID, -d, $DEVICE]
- [mount, /dev/xvdf, /data]
- [ec2-attach-network-interface, $ENI0, -i, $INSTANCE_ID, -d, 0]
- [ec2-attach-network-interface, $ENI1, -i, $INSTANCE_ID, -d, 1]

でAMIを作成する。めんそうなのでEBS AMIで簡単に作ってしまっている。
EC2でくっついているやつだけで作ります。

Auto Scalingの設定

#新しいLaunchConfigの追加
as-create-launch-config MyLCv5 --image-id ami-XXXXXXXX --instance-type
OK-Created launch config
#auto scaling groupの更新
as-update-auto-scaling-group MyGroup -launch-configuration MyLCv5 --availability-zones ap-northeast-1a --min-size 1 --max-size 1
OK-Updated AutoScalingGroup