2
respostas

[Dúvida] Não consigo criar o arquivo index.html

Aqui está basicamente um controlc controlv do codigo usado ele é identico ao exemplo:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

O problema é que parece que o terraform ignorar o trecho do user_data

 user_data = <<-EOF
                #!/bin/bash
                cd /home/ubuntu
                echo "<h1>Feito com Terraform</h1>" > index.html
                nohup busybox httpd -f -p 8080 &
                EOF

Consigo acesso ssh ao servidor recem criado por ssh, agora o arquivo não existe.

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeOnde está o erro ?

Como eu faria para passar uma instrução para a instancia para alterar o hostname?

2 respostas

Olá, Faustino!

Parece que o script user_data não está sendo executado corretamente. Aqui estão algumas sugestões para resolver o problema:

  1. Verifique os Logs do Cloud-Init:

    • Acesse a instância via SSH.
    • Verifique os logs do cloud-init para ver se o script foi executado e se houve algum erro:
      cat /var/log/cloud-init-output.log
      
  2. Permissões e Diretório:

    • Certifique-se de que o diretório /home/ubuntu existe e tem as permissões corretas. O script está tentando criar o arquivo index.html nesse diretório.
  3. Teste o Script Manualmente:

    • Tente executar manualmente o script dentro da instância para ver se ele funciona como esperado:
      #!/bin/bash
      cd /home/ubuntu
      echo "<h1>Feito com Terraform</h1>" > index.html
      nohup busybox httpd -f -p 8080 &
      
  4. Alterar o Hostname:

    • Para alterar o hostname da instância, você pode adicionar o seguinte comando ao seu script user_data:
      #!/bin/bash
      hostnamectl set-hostname novo-hostname
      

Se essas sugestões não resolverem, pode ser útil revisar a documentação do Terraform e do cloud-init para garantir que tudo esteja configurado corretamente.

Bons estudos!

Obrigado pelas respostas e pelo tshoot vamos lá!

  • 1 - Verifique os Logs do Cloud-Init: Não encontro o arquivo cloud-init-output.log nem no var/logs e nem em outro lugar meu SO, acho que não existe.

  • 2 -Permissões e Diretório: Qual permissão devo usar no home do usuario ubuntu? Executo o processo com root no client e no servidor remoto eu consigo criar o arquivo na mão, o problema está quando eu uso o terraform não consigo criar o arquivo.

  • 3 - Teste o Script Manualmente:

      #!/bin/bash
    

cd /home/ubuntu echo "

Feito com Terraform

" > index.html nohup busybox httpd -f -p 8080 &

Sim ele funciona, tanto com o usuario root quanto o usuario ubuntu.

  • 4 - Alterar o Hostname:

Coloquei o hostnamectl set-hostname lab07 Insira aqui a descrição dessa imagem para ajudar na acessibilidade Insira aqui a descrição dessa imagem para ajudar na acessibilidade Executei o* terraform apply*

Veja a saida:

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:
  # aws_instance.app_server will be created
  + resource "aws_instance" "app_server" {
      + ami                                  = "ami-00c257e12d6828491"
      + arn                                  = (known after apply)
**      Saida omitida...**
      + instance_type                        = "t2.micro"
      + ipv6_address_count                   = (known after apply)
      + ipv6_addresses                       = (known after apply)
      + key_name                             = "key.lab01"
      + monitoring                           = (known after apply)
       ** Saida omitida...**
      + source_dest_check                    = true
      + subnet_id                            = (known after apply)
      + tags                                 = {
          + "Name" = "lab07"
        }
      + tags_all                             = {
          + "Name" = "lab07"
        }
      + tenancy                              = (known after apply)
      + user_data                            = "7f41b5f8c7b327d1be34be4ae99a80dfde213744"
      + user_data_base64                     = (known after apply)
      + user_data_replace_on_change          = false
      + vpc_security_group_ids               = (known after apply)
      + capacity_reservation_specification (known after apply)
      + cpu_options (known after apply)
      + ebs_block_device (known after apply)
      + enclave_options (known after apply)
      + ephemeral_block_device (known after apply)
      + maintenance_options (known after apply)
      + metadata_options (known after apply)
      + network_interface (known after apply)
      + private_dns_name_options (known after apply)
      + root_block_device (known after apply)
    }

Plan: 1 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

aws_instance.app_server: Creating...
aws_instance.app_server: Still creating... [10s elapsed]
aws_instance.app_server: Creation complete after 16s [id=i-02cdfca4e5e14f4ea]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Confirmei se a instancia realmente foi criada na console da AWS

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeE em uma outra console fiz um ssh para o servidor recem criado

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

è o mesmo cenario parece que o terraform não comprende os paramentros que eu passo no arquivo main.tf

Veja o arquivo na integra
      terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.16"
    }
  }

  required_version = ">= 1.2.0"
}

provider "aws" {
  region = "us-west-2"
}

resource "aws_instance" "app_server" {
  ami           = "ami-00c257e12d6828491"
instance_type = "t2.micro"
user_data = <<-EOF
        #!/bin/bash
        hostnamectl set-hostname lab07mectl set-hostname lab07
                EOF

  key_name = "key.lab01"

  tags = {
    Name = "lab07"
  }
}