gpt4 book ai didi

Terraform:如何从以前的 EC2 实例附加卷?

转载 作者:行者123 更新时间:2023-12-03 23:16:44 25 4
gpt4 key购买 nike

我有一个 terraform 文件,它创建了一个 EC2 实例和几个卷:

resource "aws_instance" "generic" {
count = "${lookup(var.INSTANCE_COUNT, var.SERVICE)}"
ami = "${var.AMI}"
instance_type = "${lookup(var.INSTANCE_TYPE, var.BLD_ENV)}"
subnet_id = "${element(var.SUBNET,count.index)}"
vpc_security_group_ids = ["${var.SECURITY_GROUP}"]
key_name = "${var.AWS_KEY_NAME}"
availability_zone = "${element(var.AWS_AVAILABILITY_ZONE,count.index)}"
iam_instance_profile = "${var.IAM_ROLE}"

root_block_device {
volume_type = "gp2"
delete_on_termination = "${var.DELETE_ROOT_ON_TERMINATION}"
}

ebs_block_device {
device_name = "${lookup(var.DEVICE_NAME,"datalake")}"
volume_type = "${lookup(var.DATALAKE_VOLUME_TYPE, var.SERVICE)}"
volume_size = "${var.NONDATADIR_VOLUME_SIZE}"
delete_on_termination = "${var.DELETE_ROOT_ON_TERMINATION}"
encrypted = true
}

ebs_block_device {
device_name = "${lookup(var.DEVICE_NAME,"datalake_logdir")}"
delete_on_termination = "${var.DELETE_ROOT_ON_TERMINATION}"
volume_type = "${lookup(var.LOGDIR_VOLUME_TYPE, var.SERVICE)}"
volume_size = "${var.NONDATADIR_VOLUME_SIZE}"
encrypted = true
}

volume_tags {
Name = "${lookup(var.TAGS, "Name")}-${count.index}"
}
}

如果 ec2 实例终止,我如何将现有卷附加到重新运行 terraform 时创建的新 ec2 实例?我希望 terraform 能够以某种方式从状态文件中得知实例已经消失但卷没有,因此它们应该附加到新创建的 EC2。

提前致谢!

最佳答案

首先,将您的实例、卷和卷附件分开,如下所示:

resource "aws_instance" "generic" {
ami = "${var.ami_id}"
instance_type = "${var.instance_type}"
count = "${var.node_count}"
subnet_id = "${var.subnet_id}"
key_name = "${var.key_pair}"

root_block_device = {
volume_type = "gp2"
volume_size = 20
delete_on_termination = false
}

vpc_security_group_ids = ["${var.security_group_ids}"]
}

resource "aws_ebs_volume" "vol_generic_data" {
size = 120
count = "${var.node_count}"
type = "gp2"
}

resource "aws_volume_attachment" "generic_data_vol_att" {
device_name = "/dev/xvdf"
volume_id = "${element(aws_ebs_volume.vol_generic_data.*.id, count.index)}"
instance_id = "${element(aws_instance.vol_generic_data.*.id, count.index)}"
count = "${var.node_count}"
}

然后,如果您的实例被手动终止,TF 应检测到该实例已消失但仍以 TF 状态引用,并应尝试重新创建它并附加现有卷。我没有试过这个。但是,我已尝试将现有实例及其卷导入 TF 状态,因此相同的逻辑应该适用于仅导入卷并附加到现有 TF 托管实例。您应该能够像这样简单地导入现有卷:
terraform import module.generic.aws_ebs_volume.vol_generic_data vol-0123456789abcdef0

然后 TF 将附加卷或更新状态(如果已附加)。

关于Terraform:如何从以前的 EC2 实例附加卷?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49393405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com