昨日の作業アタッチ/デタッチするのはどちらかというと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