1
resposta

[Projeto] Problema ao implantar uma aplicação em JAVA com DB no ECS

Olá Pessoal Boa noite.

Nunca usei este fórum mas fiquei intricado com uma coisa. Estou fazendo um deploy de três serviços. Uma aplicação em Java chamada opencms (gestor de conteúdo como wp ) um banco de dados mariadb e um phpmyadmin para gestão da interface do banco de dados. Eu peguei o docker compose oficial no repositório da opencms e rodei um docker compose com essas configurações:

version: '3.7'
services:
    mariadb:
        image: mariadb:latest
        container_name: mariadb
        init: true
        restart: always
        volumes:
            - ~/dockermount/opencms-docker-mysql:/var/lib/mysql
        environment:
            - "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}"
        networks:
            - opencms-net


    opencms:
        image: rcventura/opencms-mariadb-phpadmin:v1.0.0
        container_name: opencms
        init: true
        restart: always
        depends_on: [ "mariadb" ]
        links:
            - "mariadb:mysql"
        ports:
            - "80:8080"
        volumes:
            - ~/dockermount/opencms-docker-webapps:/usr/local/tomcat/webapps
        #command: ["/root/wait-for.sh", "mysql:3306", "-t", "30", "--", "/root/opencms-run.sh"]
        environment:
             - "DB_PASSWD=${DB_PASSWD}"
        networks:
            - opencms-net

    phpmyadmin:
        image: phpmyadmin/phpmyadmin
        container_name: phpmyadmin
        ports:
            - 8080:80
        depends_on:
            - mariadb
        links:
            - "mariadb:mysql"
        environment:
            - "MYSQL_ROOT_PASSWORD= ${MYSQL_ROOT_PASSWORD}"
            -  PMA_HOST=${PMA_HOST}

            
        networks:
            - opencms-net

volumes:
    mysql-data:
    webapps:

networks:
    opencms-net: 
        driver: bridge

Tudo perfeito. Então resolvi subir o mesmos serviços na AWS ECS para simular um ambiente de produção . Segui os passos do professor e o que aconteceu é que minhas configurações de containers, todos rodam. Acesso o phpadmin mas quando tento acessar a aplicação opencms ele renderiza uma página sem conteúdo. Quando eu analiso os logs percebo que houve um erro de conexão com o banco de dados mariadb diz assim :

    Exception: java.sql.SQLNonTransientConnectionException: Could not connect to address=(host=mysql)(port=3306)(type=master) : Socket fail to connect to host:mysql, port:3306. mysql
    

ou seja a aplicação opencms não conseguiu acessar o banco de dados para buscar os plugins e recursos para o uso correto da aplicação. Também quando eu tento fazer uma conexão ao mariadb via phpmyadmin consigo acessar o serviço mas percebo que o banco de dados da aplicação não foi criado. Apenas existem tabelas do mysql.

Estou achando que é algo de rede, DNS e resolução CNAME..

1 resposta

Olá, Rafael!

Pelo que você descreveu, parece que o problema está na comunicação entre os serviços, especificamente na conexão entre o serviço opencms e o mariadb. No ambiente do Docker Compose, o serviço opencms consegue resolver o nome mariadb para o endereço IP do contêiner do banco de dados. No entanto, no ambiente do ECS, isso pode não estar acontecendo.

Uma possível solução seria usar o nome do serviço do ECS para o banco de dados em vez de mariadb. Quando você cria um serviço no ECS, ele registra o nome do serviço no DNS privado associado ao serviço dentro da VPC. Portanto, você deve ser capaz de resolver o nome do serviço para o endereço IP do contêiner do banco de dados.

Por exemplo, se você criou um serviço chamado meu-mariadb no ECS, você deve ser capaz de alterar a configuração do opencms para se conectar a meu-mariadb em vez de mariadb.

Além disso, é importante garantir que as políticas de segurança (Security Groups) das instâncias EC2 onde os contêineres estão rodando permitem a comunicação entre os serviços na porta do banco de dados (3306, no caso do MariaDB).

Bons estudos!