Implementé una pila ELK en AWS ECS con terraform. Todo funcionó bien durante algunas semanas, pero hace 2 días tuve que reiniciar la instancia.
Lamentablemente, la nueva instancia no se basó en el volumen existente para montar el dispositivo de bloqueo raíz. Entonces, todos mis datos de elasticsearch ya no están disponibles para mi instancia de Kibana.
Los datos todavía están aquí, en el volumen anterior, actualmente no se utilizan.
Así que probé muchas cosas para adjuntar este volumen en "dev/xvda" pero sin, por ejemplo:
Estoy usando aws_autoscaling_group con aws_launch_configuration.
resource "aws_launch_configuration" "XXX" { name = "XXX" image_id = data.aws_ami.latest_ecs.id instance_type = var.INSTANCE_TYPE security_groups = [var.SECURITY_GROUP_ID] associate_public_ip_address = true iam_instance_profile = "XXXXXX" spot_price = "0.04" lifecycle { create_before_destroy = true } user_data = templatefile("${path.module}/ecs_agent_conf_options.tmpl", { cluster_name = aws_ecs_cluster.XXX.name } ) //The volume i want to reuse was created with this configuration. I though it would //be enough to reuse the same volume. It doesn't. root_block_device { delete_on_termination = false volume_size = 50 volume_type = "gp2" } } resource "aws_autoscaling_group" "YYY" { name = "YYY" min_size = var.MIN_INSTANCES max_size = var.MAX_INSTANCES desired_capacity = var.DESIRED_CAPACITY health_check_type = "EC2" availability_zones = ["eu-west-3b"] launch_configuration = aws_launch_configuration.XXX.name vpc_zone_identifier = [ var.SUBNET_1_ID, var.SUBNET_2_ID] }¿Me pierdo algo obvio sobre esto?
Lamentablemente, no puede adjuntar un volumen como volumen raíz a una instancia.
Lo que tiene que hacer es crear una AMI personalizada en función de su volumen. Esto implica crear una instantánea del volumen seguida de la construcción de la AMI:
En terraform, hay aws_ami especialmente para ese propósito.
El siguiente script de terraform ejemplifica el proceso en tres pasos :
provider "aws" { # your data } resource "aws_ebs_snapshot" "snapshot" { volume_id = "vol-0ff4363a40eb3357c" # <-- your EBS volume ID } resource "aws_ami" "my" { name = "my-custom-ami" virtualization_type = "hvm" root_device_name = "/dev/xvda" ebs_block_device { device_name = "/dev/xvda" snapshot_id = aws_ebs_snapshot.snapshot.id volume_type = "gp2" } } resource "aws_instance" "web" { ami = aws_ami.my.id instance_type = "t2.micro" # key_name = "<your-key-name>" tags = { Name = "InstanceFromCustomAMI" } }