【发布时间】:2021-01-03 11:19:34
【问题描述】:
好的,所以我尝试将使用 Terraform 创建的 EBS 卷附加到使用 userdata 的 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)
}
在上述资源中,我使用随机提供程序从 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}。
但是,它失败了,因为实例和卷位于不同的 AZ。
谁能帮我解决这个问题,作为一个比在 ASG 和 Volume 上硬编码 AZ 更好的解决方案?
【问题讨论】:
-
为什么要这样创建 EBS 卷,而不是在启动配置中配置 EBS 卷?
-
因此,当我更改 userdata/lauch 配置中的任何内容时,它不会删除/重新创建卷
标签: amazon-web-services terraform amazon-ebs aws-auto-scaling