7
respostas

Não consigo acessar a aplicação após deploy

Boa noite! Eu escrevi a infra via terraform, buildei a imagem com docker e mandei pro ecr. Mas quando tento acessar a aplicação via endereço do load balancer eu não consigo. Só cai na página padrão do docker:

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

A aplicação parece estar rodando porque nas métricas do container no elastic bean stalk há atividade de cpu, rede etc mas na verificação de integridade do container ele não consegue se comunicar com a ec2. Já editei o grupo de segurança que originalmente só estava com a porta 80 e acrescentei para a porta 8000 também mas sem sucesso.

Localmente eu consigo acessar a aplicação(o que mostra que não é nada com minha imagem):

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

7 respostas

Olá!

Aqui estão algumas sugestões que podem ajudar:

  1. Verifique a Porta de Exposição: Certifique-se de que a aplicação dentro do container está escutando na porta correta. Se a aplicação está configurada para escutar na porta 8000, o Elastic Beanstalk precisa estar configurado para redirecionar o tráfego para essa porta.

  2. Configuração do Load Balancer: Verifique se o Load Balancer está configurado para direcionar o tráfego para a porta correta. Você pode precisar ajustar as configurações de listener do Load Balancer para garantir que ele está escutando na porta 80 e redirecionando para a porta 8000 do container.

  3. Grupo de Segurança: Confirme que o grupo de segurança associado ao Elastic Beanstalk permite tráfego de entrada na porta 80 (HTTP) e qualquer outra porta necessária, como a 8000, se for o caso.

  4. Verificação de Saúde: A verificação de integridade do Elastic Beanstalk deve apontar para um endpoint válido da sua aplicação. Certifique-se de que a URL de verificação de integridade está correta e acessível.

  5. Logs de Aplicação: Verifique os logs da aplicação no Elastic Beanstalk para ver se há mensagens de erro que possam indicar o que está errado.

  6. Configuração do Docker: Revise seu Dockerfile e qualquer configuração relacionada para garantir que não há problemas que possam estar impedindo a aplicação de iniciar corretamente no ambiente de produção.

Espero ter ajudado e bons estudos!

Oi, boa noite!

Sobre o ponto 1:

No caso minha aplicação no docker está escutando na porta 8000, o docker expoe a porta 8000:

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

O Elastic Beanstalk faz esse redirecionamento através desse arquivo, certo?

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

Sobre o ponto 2:

Engraçado que originalmente, através desse código:

 resource "aws_elastic_beanstalk_application" "aplicacacao_beanstalk" {
  #name        = "tf-test-name"
  name = var.nome
  description = var.descricao

}

resource "aws_elastic_beanstalk_environment" "ambiente-beanstalk" {
  name                = var.ambiente
  application         = aws_elastic_beanstalk_application.aplicacacao_beanstalk.name
  solution_stack_name = "64bit Amazon Linux 2 v4.0.6 running Docker"

  setting {
    namespace = "aws:autoscaling:launchconfiguration"
    name      = "InstanceType"
    value     = var.maquina
  }

  setting {
    namespace = "aws:autoscaling:asg"
    name      = "MaxSize"
    value     = var.max
  }

  setting {
    namespace = "aws:autoscaling:launchconfiguration"
    name      = "IamInstanceProfile"
    value     = aws_iam_instance_profile.beanstalk_ec2_profile.name
  }

}

resource "aws_elastic_beanstalk_application_version" "default" {
depends_on = [aws_elastic_beanstalk_environment.ambiente-beanstalk,
aws_elastic_beanstalk_application.aplicacacao_beanstalk,
aws_s3_bucket_object.docker]

  name        = var.ambiente
  application = var.nome
  description = var.descricao
  bucket      = aws_s3_bucket.beanstalk_deploys.id
  key         = aws_s3_bucket_object.docker.id
}

É criado uma listener na aws mas fica 80:80, até aí aparece aquela página padrão do docker, quando eu mudo de 80:8000, eu não consigo acessar:

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

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

Sobre o ponto 3:

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

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

Sobre o ponto 4:

Eu coloquei essa configuração no meu terraform:

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

Como você pode ver, ele é um endpoint válido, pois localmente eu consigo acessar:

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

mas mesmo assim o status de integridade no console da aws não muda:

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

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

Embora se eu for na aba de Monitoramento é mostrado atividade do ambiente:

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

Sobre o ponto 5:

Aparentemente os logs estão todos normais, nenhum indicativo de algo anômalo, resumindo:

Essa seção está vazia:

----------------------------------------
/var/log/nginx/error.log
----------------------------------------

Essa seção contem várias requests, todas com resposta 200 OK:

var/log/eb-docker/containers/eb-current-app/eb-fe1d02670390-stdouterr.log
----------------------------------------
172.17.0.1 - - [29/Jan/2025 02:06:21] "GET /clientes HTTP/1.1" 200 3431
172.17.0.1 - - [29/Jan/2025 02:06:21] "GET /clientes HTTP/1.1" 200 3431
172.17.0.1 - - [29/Jan/2025 02:06:31] "GET /clientes HTTP/1.1" 200 3431
172.17.0.1 - - [29/Jan/2025 02:06:31] "GET /clientes HTTP/1.1" 200 3431
172.17.0.1 - - [29/Jan/2025 02:06:41] "GET /clientes HTTP/1.1" 200 3431
172.17.0.1 - - [29/Jan/2025 02:06:41] "GET /clientes HTTP/1.1" 200 3431

Várias linha dessa também:


/var/log/nginx/access.log

172.31.8.215 - - [29/Jan/2025:02:06:21 +0000] "GET /clientes HTTP/1.1" 200 3431 "-" "ELB-HealthChecker/1.0" "-"
172.31.26.42 - - [29/Jan/2025:02:06:21 +0000] "GET /clientes HTTP/1.1" 200 3431 "-" "ELB-HealthChecker/1.0" "-"
172.31.8.215 - - [29/Jan/2025:02:06:31 +0000] "GET /clientes HTTP/1.1" 200 3431 "-" "ELB-HealthChecker/1.0" "-"
172.31.26.42 - - [29/Jan/2025:02:06:31 +0000] "GET /clientes HTTP/1.1" 200 3431 "-" "ELB-HealthChecker/1.0" "-"
172.31.8.215 - - [29/Jan/2025:02:06:41 +0000] "GET /clientes HTTP/1.1" 200 3431 "-" "ELB-HealthChecker/1.0" "-"

Sobre o ponto 6:

Como eu mostrei, acho que não é nenhum problema no meu Dockerfile já que consigo iniciar minha aplicação localmente e acessar seus endpoints e também, pela aba monitoramento, você percebe claramente que a aplicação está up, pos está havendo trafego de dados, atividade de cpu etc

Eu inseri essa permissão na minha role:

elasticbeanstalk:PutInstanceStatistics

e aí a integridade da instância ficou ok, mas ainda sim não consigo acessar a aplicação pela URL do load balancer.

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