DjangoアプリをAWSにデプロイしようとしていますが、nginx/uwsgiを実行している1つのEC2インスタンスと、MySQL5.5がインストールされている2つ目のEC2インスタンスがあります。どちらもデフォルトのグループ(SSH、HTTP、HTTPS、MYSQLが有効)。最終的には、DBとアプリ/ウェブサーバーのグループを分割しますが、今のところアプリを動作させたいと思います。
私のDjangoデータベース設定は次のようになります:
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',
}
}
Syncdbを実行しようとするたびに、次のエラーが発生します。
_mysql_exceptions.OperationalError:(1130、 "ホスト 'ip-xx-xx-xx-xxx.ec2.internal'はこのMySQLサーバーへの接続を許可されていません")
アプリが動作するWeb /アプリサーバーと同じEC2インスタンスでMySQLをセットアップする場合は注意してください。その場合、私の設定ファイルのデータベース設定は次のようになりました。
DATABASES = {
'default': {
'ENGINE': 'Django.db.backends.mysql',
'NAME': 'db',
'USER': 'db_user',
'PASSWORD': 'db_pwd',
'Host': '',
'PORT': '',
}
}
ある投稿が示唆しているように、/ etc/mysql/my.cnfファイルのバインド127.0.0.1をコメントアウトし、0.0.0.0(変更後にMySQLを再起動)に設定しましたが、それは役に立ちませんでした。
助言がありますか?
ありがとう
バイナリ迷路
[コメントストリームからこの回答をまとめます。]
セキュリティグループを設定するときは、一般的なインターネット(0.0.0.0/0)のMySQLポート(3306)を有効にしないでください。これは危険です。代わりに、アカウントのセキュリティグループに対してのみポート3306を有効にして、インスタンスのみが接続できるようにします。
別のインスタンスのクライアントから接続する場合は、パブリックIPアドレスではなく、データベースサーバーの内部IPアドレスを使用する必要があります。
「bind-address = 0.0.0.0」を使用すると、MySQLは他のホストからの接続を受け入れることができます(セキュリティグループとiptablesのルールに従います)。
'someuser' @ '%'に権限を付与すると、セキュリティグループの制限に従って、そのユーザーは任意のホストから接続できます。