Me pregunto si es posible saber cuándo se ejecuta completamente el script en los datos del usuario.
data "template_file" "script" { template = file("${path.module}/installing.sh") } data "template_cloudinit_config" "config" { gzip = false base64_encode = false # Main cloud-config configuration file. part { filename = "install.sh" content = "${data.template_file.script.rendered}" } } resource "aws_instance" "web" { ami = "ami-04e7b4117bb0488e4" instance_type = "t2.micro" key_name = "KEY" vpc_security_group_ids = [aws_default_security_group.default.id] subnet_id = aws_default_subnet.default_az1.id associate_public_ip_address = true iam_instance_profile = "Role_S3" user_data = data.template_cloudinit_config.config.rendered tags = { Name = "Terraform-Ansible" } }
Y en el contenido del script tengo esto. Me dice que Terraform aplicó con éxito los cambios, pero el script aún se está ejecutando, ¿hay alguna manera de que pueda monitorear eso?
#!/usr/bin/env bash exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1 echo BEGIN sudo apt update sudo apt upgrade -y sudo apt install -y unzip echo END
No, no puede confirmar el estado de los datos del usuario desde la terraformación, ya que publica el script de inicio que se ejecuta una vez que se inicia la instancia EC2. Pero necesitará un esfuerzo adicional en el script de inicio que es una forma de verificar.
Cómo verificar el estado de los datos de usuario al iniciar la instancia en aws
Si hace algo que se menciona anteriormente para crear un archivo de marcador una vez que se completan los datos del usuario, puede probar esto para verificar.
resource "null_resource" "user_data_status_check" { provisioner "local-exec" { on_failure = "fail" interpreter = ["/bin/bash", "-c"] command = <<EOT echo -e "\x1B[31m wait for few minute for instance warm up, adjust accordingly \x1B[0m" # wait 30 sec sleep 30 ssh -i yourkey.pem instance_ip ConnectTimeout=30 -o 'ConnectionAttempts 5' test -f "/home/user/markerfile.txt" && echo found || echo not found if [ $? -eq 0 ]; then echo "user data sucessfully executed" else echo "Failed to execute user data" fi EOT } triggers = { #remove this once you test it out as it should run only once always_run ="${timestamp()}" } depends_on = ["aws_instance.my_instance"] }
por lo que esta secuencia de comandos verificará el archivo de marcador en el servidor recién lanzado haciendo ssh con un tiempo de espera de 30 segundos con un máximo de intentos de 5 .