質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.44%
Amazon RDS

Amazon RDSは、米アマゾン社が提供しているRDBMSサービス。クラウド上でのリレーショナルデータベースの構築および運用が可能です。MySQL/PostgreSQL/Oracle/SQL Serverのインストールを容易にすることができます。

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

Q&A

解決済

2回答

635閲覧

AWS EC2インスタンス内でDjangoのDBテーブル作成を成功させたい

shota_-.091321

総合スコア9

Amazon RDS

Amazon RDSは、米アマゾン社が提供しているRDBMSサービス。クラウド上でのリレーショナルデータベースの構築および運用が可能です。MySQL/PostgreSQL/Oracle/SQL Serverのインストールを容易にすることができます。

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

0グッド

0クリップ

投稿2023/05/11 11:49

実現したいこと

・Djangoで作成したアプリケーションをEC2でデプロイ作業中
・その過程で、python manage.py migrateによるテーブル作成に失敗。このエラーを解消したいです。
・エラーとなっている可能性程度の回答でも構いません、どなたかアドバイスを頂けますと幸いです。。

前提

下記コマンドで、EC2インスタンス→RDSインスタンス(MySQL)への接続は成功。

mysql -u admin -p -h (RDSのエンドポイント)

発生している問題・エラーメッセージ

その上で、python manage.py migrateを実施した際に、下記エラーが発生

Traceback (most recent call last): File "/home/ec2-user/.local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 282, in ensure_connection self.connect() File "/home/ec2-user/.local/lib/python3.9/site-packages/django/utils/asyncio.py", line 26, in inner return func(*args, **kwargs) File "/home/ec2-user/.local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 263, in connect self.connection = self.get_new_connection(conn_params) File "/home/ec2-user/.local/lib/python3.9/site-packages/django/utils/asyncio.py", line 26, in inner return func(*args, **kwargs) File "/home/ec2-user/.local/lib/python3.9/site-packages/django/db/backends/mysql/base.py", line 247, in get_new_connection connection = Database.connect(**conn_params) File "/usr/local/lib64/python3.9/site-packages/MySQLdb/__init__.py", line 123, in Connect return Connection(*args, **kwargs) File "/usr/local/lib64/python3.9/site-packages/MySQLdb/connections.py", line 185, in __init__ super().__init__(*args, **kwargs2) MySQLdb.OperationalError: (1045, "Access denied for user 'ec2-user'@'172.31.13.131' (using password: YES)") The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/home/ec2-user/test_server/server/manage.py", line 21, in <module> main() File "/home/ec2-user/test_server/server/manage.py", line 18, in main execute_from_command_line(sys.argv) File "/home/ec2-user/.local/lib/python3.9/site-packages/django/core/management/__init__.py", line 446, in execute_from_command_line utility.execute() File "/home/ec2-user/.local/lib/python3.9/site-packages/django/core/management/__init__.py", line 440, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/home/ec2-user/.local/lib/python3.9/site-packages/django/core/management/base.py", line 402, in run_from_argv self.execute(*args, **cmd_options) File "/home/ec2-user/.local/lib/python3.9/site-packages/django/core/management/base.py", line 448, in execute output = self.handle(*args, **options) File "/home/ec2-user/.local/lib/python3.9/site-packages/django/core/management/base.py", line 96, in wrapped res = handle_func(*args, **kwargs) File "/home/ec2-user/.local/lib/python3.9/site-packages/django/core/management/commands/migrate.py", line 97, in handle self.check(databases=[database]) File "/home/ec2-user/.local/lib/python3.9/site-packages/django/core/management/base.py", line 475, in check all_issues = checks.run_checks( File "/home/ec2-user/.local/lib/python3.9/site-packages/django/core/checks/registry.py", line 88, in run_checks new_errors = check(app_configs=app_configs, databases=databases) File "/home/ec2-user/.local/lib/python3.9/site-packages/django/core/checks/database.py", line 13, in check_database_backends issues.extend(conn.validation.check(**kwargs)) File "/home/ec2-user/.local/lib/python3.9/site-packages/django/db/backends/mysql/validation.py", line 9, in check issues.extend(self._check_sql_mode(**kwargs)) File "/home/ec2-user/.local/lib/python3.9/site-packages/django/db/backends/mysql/validation.py", line 14, in _check_sql_mode self.connection.sql_mode & {"STRICT_TRANS_TABLES", "STRICT_ALL_TABLES"} File "/home/ec2-user/.local/lib/python3.9/site-packages/django/utils/functional.py", line 57, in __get__ res = instance.__dict__[self.name] = self.func(instance) File "/home/ec2-user/.local/lib/python3.9/site-packages/django/db/backends/mysql/base.py", line 443, in sql_mode sql_mode = self.mysql_server_data["sql_mode"] File "/home/ec2-user/.local/lib/python3.9/site-packages/django/utils/functional.py", line 57, in __get__ res = instance.__dict__[self.name] = self.func(instance) File "/home/ec2-user/.local/lib/python3.9/site-packages/django/db/backends/mysql/base.py", line 399, in mysql_server_data with self.temporary_connection() as cursor: File "/usr/lib64/python3.9/contextlib.py", line 119, in __enter__ return next(self.gen) File "/home/ec2-user/.local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 694, in temporary_connection with self.cursor() as cursor: File "/home/ec2-user/.local/lib/python3.9/site-packages/django/utils/asyncio.py", line 26, in inner return func(*args, **kwargs) File "/home/ec2-user/.local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 323, in cursor return self._cursor() File "/home/ec2-user/.local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 299, in _cursor self.ensure_connection() File "/home/ec2-user/.local/lib/python3.9/site-packages/django/utils/asyncio.py", line 26, in inner return func(*args, **kwargs) File "/home/ec2-user/.local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 282, in ensure_connection self.connect() File "/home/ec2-user/.local/lib/python3.9/site-packages/django/db/utils.py", line 91, in __exit__ raise dj_exc_value.with_traceback(traceback) from exc_value File "/home/ec2-user/.local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 282, in ensure_connection self.connect() File "/home/ec2-user/.local/lib/python3.9/site-packages/django/utils/asyncio.py", line 26, in inner return func(*args, **kwargs) File "/home/ec2-user/.local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 263, in connect self.connection = self.get_new_connection(conn_params) File "/home/ec2-user/.local/lib/python3.9/site-packages/django/utils/asyncio.py", line 26, in inner return func(*args, **kwargs) File "/home/ec2-user/.local/lib/python3.9/site-packages/django/db/backends/mysql/base.py", line 247, in get_new_connection connection = Database.connect(**conn_params) File "/usr/local/lib64/python3.9/site-packages/MySQLdb/__init__.py", line 123, in Connect return Connection(*args, **kwargs) File "/usr/local/lib64/python3.9/site-packages/MySQLdb/connections.py", line 185, in __init__ super().__init__(*args, **kwargs2) django.db.utils.OperationalError: (1045, "Access denied for user '(ec2インスタンスユーザー名)@'(EC2インスタンスのIP)' (using password: YES)")

該当のソースコード(Django/setting.py)

python

1 2 3 4DATABASES = { 5 'default': { 6 'ENGINE': os.getenv('ENGINE'), #django.db.backends.mysql 7 'NAME': os.getenv('NAME'),#RDSのDB名が「-」となっていたので、空白(ブランク)にしています 8 'USER': os.getenv('USER'),#RDSのマスターユーザー名 9 'PASSWORD': os.getenv('PASSWORD'),#RDSのマスターパスワード 10 'HOST': os.getenv('HOST'),#RDSのエンドポイント 11 'PORT': os.getenv('PORT'),#3306 12 'OPTIONS': { 13 'charset': 'utf8mb4', 14 }, 15 } 16} 17

試したこと

・MySQLに接続し、DBを作成して作成したDB名をsetting.pyの「NAME」に記述してみましたが、結果は同様でした。

補足情報(FW/ツールのバージョンなど)

※その他、必要な情報があれば追記します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Access denied for user 'ec2-user'@'172.31.13.131

と出てますよ。少なくとも'ec2-user'の部分が間違いだと思います。os.getenv('USER')は使えないんじゃないですかね? もしくはRDS側に ec2-user のアカウントを作るか。

投稿2023/05/12 01:58

AbeTakashi

総合スコア4681

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

自己解決しました。
私と同じ状況で、詰まっている方もいるかと思われますので、原因などを記述しておきます。
(DjangoのアプリケーションをAWS EC2インスタンスでデプロイ、DBはRDSでMySQLを使用する場合)

この状況では、EC2からRDSにアクセスできていないのか、Djangoのsetting.pyのDB設定が間違っているのか、2つのうちどちらかの状況に陥っているかと思われます。EC2インスタンス内でmySQLがinstall出来ている前提で、下記のコマンドを叩き、EC2からRDSにアクセスすることに成功しているかまず確認をして下さい。

mysql -u admin -p -h RDSインスタンスのエンドポイント

このコマンドでmysqlに入れなかった場合は、EC2→RDSが成功していないため、AWSのインバウンドルールなどを見直してください。
このコマンドで問題なく接続できた場合は、Djangoのsetting.pyの記述が間違っています。

今回、私の場合はRDSインスタンスを作成した際に「DBの名前」を設定し忘れたため、DB自体が作成されておらず、不具合の原因となっていました。

RDSインスタンスの設定画面でDBの名前が「-」になっている場合はインスタンスを作成し直したほうが良いです。
その際は慎重に作業し、DB名の設定を忘れないようにしてください。空白だとDBが作成されません。

回答いただいた方、ありがとうございました。

投稿2023/05/14 13:43

shota_-.091321

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.44%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問