Terraform - ASG со смешанной политикой экземпляров
Я использую AWS с Terraform для ускорения инфраструктуры, но, в частности, у меня возникают проблемы с развертыванием ASG со смешанной политикой экземпляров. Я пытаюсь раскрутить ASG, где один экземпляр всегда будет по требованию, а остальные места (все одного типа), на первый взгляд это выглядит просто, но я пытался некоторое время и продолжаю сталкиваться с различными ошибками, Вот что я сейчас использую:
resource "aws_launch_template" "lt" {
name_prefix = "danny_test-"
vpc_security_group_ids = [
"${module.sec_groups.security_group_id_common}",
"${module.sec_groups.security_group_id_ssh}",
"${module.sec_groups.security_group_id_web}"
]
image_id = "${module.core_ami.core_ami_id}"
instance_type = "t2.small"
key_name = "${var.ssh_privkey_name}"
user_data = "${base64encode(data.template_file.common_user_data.rendered)}"
iam_instance_profile {
name = "${module.infradev_remote_state.iam_profile_updater_id}"
}
lifecycle {
create_before_destroy = true
}
}
resource "aws_autoscaling_group" "asg" {
name = "danny_test"
vpc_zone_identifier = ["${split(",", module.environment.private_subnet_ids)}"]
#launch_configuration = "${aws_launch_configuration.lc.name}"
min_size = "0"
max_size = "1"
desired_capacity = "1"
health_check_grace_period = "600"
health_check_type = "EC2"
launch_template {
id = "${aws_launch_template.lt.id}"
}
mixed_instances_policy {
instances_distribution {
on_demand_base_capacity = "1"
}
}
}
Но я получаю эту ошибку:
Error: aws_autoscaling_group.asg: "mixed_instances_policy.0.launch_template": required field is not set
Согласно документации, launch_template там не является обязательным. Я попытался установить это, но он просто проходит через кроличью нору якобы необязательных настроек, некоторые из которых я просто не хочу устанавливать (например, переопределения).
Как правильно добиться того, чего я добиваюсь? В любом случае, похоже, что документы, по крайней мере, частично неверны, основываясь на вышеизложенном...
1 ответ
Документация кажется неправильной, потому что она установлена как Required
поле в фактическом коде:
"mixed_instances_policy": {
Type: schema.TypeList,
Optional: true,
MaxItems: 1,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
# ...
"launch_template": {
Type: schema.TypeList,
Required: true,
MinItems: 1,
MaxItems: 1,
aws_autoscaling_group
Документация по ресурсам показывает полезный пример, который включает в себя необязательные переопределения, которые вы упомянули:
resource "aws_launch_template" "example" {
name_prefix = "example"
image_id = "${data.aws_ami.example.id}"
instance_type = "c5.large"
}
resource "aws_autoscaling_group" "example" {
availability_zones = ["us-east-1a"]
desired_capacity = 1
max_size = 1
min_size = 1
mixed_instances_policy {
launch_template {
launch_template_specification {
launch_template_id = "${aws_launch_template.example.id}"
}
override {
instance_type = "c4.large"
}
override {
instance_type = "c3.large"
}
}
}
}
Эти переопределения на самом деле являются необязательными, как показано в коде:
"override": {
Type: schema.TypeList,
Optional: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"instance_type": {
Type: schema.TypeString,
Optional: true,
},
},
},
},