Spotインスタンスで Private IPを指定して起動する
VPC内でspot requestする際、Management Consoleでは Private IP を指定する項目が無いため、指定したサブネット内の空きアドレスが自動で振られることになる。(正確には、サブネット内の空きアドレスの一つからENIが作られ割り振られる)
コマンドラインでは、既存ENIを指定することが可能。なので、まずは事前にspotで使いそうな数だけENIを作っておく。
# 例オレゴンリージョンのVPCの サブネットsubnet-a5b991d1 に、 # 172.16.1.101〜108のENIを作成する $ for i in {101..108} ; do ec2-create-network-interface --region us-west-2 --private-ip-address 172.16.1.$i subnet-a5b991d1; done
その上で、起動時には
# 172.16.1.102 のeni-idを取得する $ ENIID=`ec2-describe-network-interfaces --region us-west-2 | grep 172.16.1.102 | grep eni | awk '{print $2;}'` # eniをeth0としてスポットリクエスト発行 $ ec2-request-spot-instances ami-f8f297c8 --region us-west-2 \ --instance-type c3.8xlarge --k id_rsa \ --network-attachment $ENIID:0 \ -p 2.0
ちなみに、通常のオンデマンドインスタンス起動でもこのテクニックは利用可能。コマンドが異なるだけで、オプションはほぼ一緒である(値段指定が無いくらい)ことがわかる。
# 172.16.1.102 のeni-idを取得する $ ENIID=`ec2-describe-network-interfaces --region us-west-2 | grep 172.16.1.102 | grep eni | awk '{print $2;}'` # eniをeth0として起動 $ ec2-run-instances ami-f8f297c8 --region us-west-2 \ --instance-type c3.8xlarge --k id_rsa \ --network-attachment $ENIID:0
これをうまくスクリプト化しておくと便利。