好的,所以我尝试将使用 Terraform 创建的 EBS 卷附加到使用 userdata 的 ASG 实例,但现在问题是两者都在不同的 AZ 中,因此无法附加。以下是我正在尝试和失败的步骤:
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)
}
在上述资源中,我使用随机提供者从 AZ 列表中获取一个 AZ,并为下面的 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}
上述资源的输出。
但是,它失败了,因为实例和卷位于不同的可用区。
任何人都可以帮助我解决这个问题,而不是在 ASG 和 Volume 上硬编码 AZ吗?