Хорошо, поэтому я пытаюсь прикрепить том EBS, который я создал с помощью Terraform, к экземпляру ASG с использованием пользовательских данных, но теперь проблема заключается в том, что оба находятся в разных зонах доступности, из-за чего он не может подключиться. Ниже приведены шаги, которые я пытаюсь и не могу:
resource "aws_ebs_volume" "this" {
for_each = var.ebs_block_device
size = lookup(each.value,"volume_size", null)
type = lookup(each.value,"volume_type", null)
iops = lookup(each.value, "iops", null)
encrypted = lookup(each.value, "volume_encrypt", null)
kms_key_id = lookup(each.value, "kms_key_id", null)
availability_zone = join(",",random_shuffle.az.result)
}
В приведенном выше ресурсе я использую случайного провайдера, чтобы получить одну зону доступности из списка зон доступности, и тот же список предоставляется ресурсу ASG ниже:
resource "aws_autoscaling_group" "this" {
desired_capacity = var.desired_capacity
launch_configuration = aws_launch_configuration.this.id
max_size = var.max_size
min_size = var.min_size
name = var.name
vpc_zone_identifier = var.subnet_ids // <------ HERE
health_check_grace_period = var.health_check_grace_period
load_balancers = var.load_balancer_names
target_group_arns = var.target_group_arns
tag {
key = "Name"
value = var.name
propagate_at_launch = true
}
}
И вот пользовательские данные, которые я использую:
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
instanceId = curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/instance-id
aws ec2 attach-volume --volume-id ${ebs_volume_id} --instance-id $instanceId --device /dev/nvme1n1
Выше будет прикреплен вновь созданный том, поскольку я передаю выходные данные ${ebs_volume_id}
указанного выше ресурса.
Но это не удается, потому что экземпляр и том находятся в разных зонах доступности.
Может ли кто-нибудь помочь мне в этом как лучшем решении, чем жесткое кодирование AZ на ASG и Volume?