O Django syncdb não pode se conectar ao MySQL em uma instância separada do EC2

2

Estou tentando implantar um aplicativo django na AWS com uma configuração onde eu tenho uma instância do EC2 que está executando o nginx / uwsgi e uma segunda instância do EC2 onde eu tenho o MySQL 5.5 instalado. Ambos pertencem ao grupo padrão (SSH, HTTP, HTTPS e MYSQL habilitados). Eventualmente, vou dividir os grupos para o banco de dados e o aplicativo / servidor da Web, mas por enquanto quero que o aplicativo funcione.

As configurações do meu django db parecem:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db',         
        'USER': 'db_user',      
        'PASSWORD': 'db_pwd',
        'HOST': '<public dns of MySQL EC2 instance(tried also private ip)>',
        'PORT': '3306', 
    }
}

Sempre que tento executar o syncdb, recebo o seguinte erro:

_mysql_exceptions.OperationalError: (1130, "Host 'ip-xx-xx-xx-xxx.ec2.internal' is not allowed to connect to this MySQL server")

Por favor, note que quando eu configuro o MySQL na mesma instância do EC2 que o servidor web / app, o aplicativo funciona. Nesse caso, minhas configurações do banco de dados do arquivo de configurações se pareciam com:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db',         
        'USER': 'db_user',      
        'PASSWORD': 'db_pwd',
        'HOST': '',
        'PORT': '', 
    }
}

Eu comentei a ligação 127.0.0.1 no arquivo /etc/mysql/my.cnf como um post sugerido e até mesmo a configurei em 0.0.0.0 (reiniciei o MySQL depois das mudanças) mas isso não ajudou.

Alguma sugestão?

Obrigado

Labirinto binário

    
por Binary Maze 08.08.2012 / 05:37

1 resposta

2

[Reunindo esta resposta do fluxo de comentários.]

Ao configurar o grupo de segurança, não ative a porta do MySQL (3306) para a Internet geral (0.0.0.0/0), pois isso é perigoso. Em vez disso, ative a porta 3306 somente para um grupo de segurança em sua conta, para que apenas suas instâncias possam se conectar a ela.

Você precisará usar o endereço IP interno do servidor de banco de dados, não o endereço IP público ao se conectar de um cliente em outra instância.

"bind-address = 0.0.0.0" permite que o MySQL aceite conexões de outros hosts (sujeito às regras do grupo de segurança e do iptables).

A concessão de permissões para 'someuser' @ '%' permite que o usuário se conecte de qualquer host, sujeito às restrições do grupo de segurança.

    
por 11.08.2012 / 20:11