目的
- SpotFleetで起動しているインスタンスを常に同一のELBにアタッチする
- 生存戦略はdiversified/lowestで機能する
前提
本構成ではインスタンス1台の運用を想定しているのでインスタンスが停止後、他プールからインスタンスが起動するまで〜2分かかるので、可用性を保つためにはオンデマンドを入れるなり、工夫が必要
方法
スポットインスタンスリクエスト時にユーザーデータを利用する
イメージ
設定
- ELBに対する権限を持つIAMRoleを作成
- IAMRoleを使用するスクリプト作成
- EC2Resourcesのaws_spot_fleet_requestの引数にuser_dataを記述
spot_fleet_request.tf
# Request a Spot fleet
resource "aws_spot_fleet_request" "aws-simple-console-spotfleet" {
iam_fleet_role = "arn:aws:iam::xxxxxx:role/xxxxxx"
spot_price = "0.0127"
allocation_strategy = "diversified"
target_capacity = 2
terminate_instances_with_expiration = false
launch_specification {
instance_type = "m3.medium"
ami = "ami-xxxxxx"
availability_zone = "ap-northeast-1c"
subnet_id = "subnet-xxxxxx"
iam_instance_profile = "xxxxxx"
key_name = "xxxxxx"
vpc_security_group_ids = ["sg-xxxxxx"]
monitoring = false
associate_public_ip_address = true
user_data = "${file("userdata.sh")}"
root_block_device {
volume_size = "10"
volume_type = "gp2"
}
}
}
userdata.sh
#!/bin/bash
export INSTANCEID=`curl http://169.254.169.254/latest/meta-data/instance-id`
aws elb register-instances-with-load-balancer --load-balancer-name xxxxxx --instances $INSTANCEID --region ap-northeast-1