🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Amazon RDS

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

MySQL

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

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Amazon EC2

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

Q&A

解決済

3回答

4627閲覧

ECSとRDSを用いたデプロイの際に起きたMysql2::Error::ConnectionError Unknown MySQL server host 'db' (-2)

TKAilf

総合スコア3

Amazon RDS

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

MySQL

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

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Amazon EC2

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

0グッド

1クリップ

投稿2020/12/25 03:10

前提・実現したいこと

プログラミング初学者ですので、初歩的な質問をしてしまうかもしれませんがご容赦ください。
dockerを用いたローカル上でのポートフォリオ制作が一段落したので、AWSのECSとRDSを使用してデプロイを行おうとしているのですがMysqlのエラーが表示されてしまいデプロイすることができません。
エラーについて調べたり、ECSのログを確認したりしていましたがなかなか解決に至らないため質問させていただいております。

知りたいこと

  • Errorの解決方法または、参考となるようなものがないか

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

ECSをたてた後のEC2,タスクの各コンテナは全てRUNNINGとなっているため、正しく構築できているとは考えています。
全てRUNNIGになっていることを確認し、EC2のエンドポイントにアクセスした際にMysqlのエラーが表示されます。

Mysqlのエラーは下記に示します。

Mysql Error

このように、
Mysql2::Error::ConnectionError
Unknown MySQL server host 'db' (-2)
と表示されてしまいます。

該当のソースコード

今回のエラーがどのソースコードに該当するのか検討がつかず載せるべきソースコードがわからないので、追加で何か情報が必要な場合は補足させていただきます。
一応、調べた時にエラーが起きる原因になっていそうな部分を拾って下記に示します。

config/database.yml

default: &default adapter: mysql2 encoding: utf8 username: yourtuber_user password: password pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> development: <<: *default host: db database: yourtuber test: <<: *default host: db database: myapp_test production: <<: *default host: <%= ENV['RDS_HOST'] %> database: <%= ENV['RDS_DB_NAME'] %> username: <%= ENV['RDS_USER_NAME'] %> password: <%= ENV['RDS_PASSWORD'] %>

docker-compose.yml

version: '3' services: yourtuber: # localでの使用 build: . # aws ecrでの使用 # image: 244231949897.dkr.ecr.ap-northeast-1.amazonaws.com/yourtuber_ecr command: bash -c "rm -f tmp/pids/server.pid && bundle exec puma -C config/puma.rb" volumes: - application-data:/myapp - public-data:/myapp/public - tmp-data:/myapp/tmp - log-data:/myapp/log depends_on: - db - selenium_chrome environment: SELENIUM_DRIVER_URL: http://selenium_chrome:4444/wd/hub selenium_chrome: image: selenium/standalone-chrome-debug db: image: mysql:5.7 volumes: - mysql-data:/var/lib/mysql ports: - "3406:3406" environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: yourtuber MYSQL_USER: yourtuber_user MYSQL_PASSWORD: password web: # localでの使用 # build: ./nginx # aws ecrでの使用 image: 244231949897.dkr.ecr.ap-northeast-1.amazonaws.com/nginx_ecr:latest volumes: - public-data:/myapp/public - tmp-data:/myapp/tmp ports: - "8080:8080" depends_on: - yourtuber volumes: application-data: public-data: tmp-data: log-data: mysql-data:

Gemfile

source 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" } ruby '2.5.8' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '~> 5.2.4', '>= 5.2.4.3' # Use Puma as the app server gem 'puma', '~> 3.11' # Use SCSS for stylesheets gem 'sass-rails', '~> 5.0' # Use Uglifier as compressor for JavaScript assets gem 'uglifier', '>= 1.3.0' # See https://github.com/rails/execjs#readme for more supported runtimes # gem 'mini_racer', platforms: :ruby # Use CoffeeScript for .coffee assets and views gem 'coffee-rails', '~> 4.2' # Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks gem 'turbolinks', '~> 5' # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder gem 'jbuilder', '~> 2.5' # Use Redis adapter to run Action Cable in production # gem 'redis', '~> 4.0' # Use ActiveModel has_secure_password # gem 'bcrypt', '~> 3.1.7' # Use ActiveStorage variant # gem 'mini_magick', '~> 4.8' # Use Capistrano for deployment # gem 'capistrano-rails', group: :development # Reduces boot times through caching; required in config/boot.rb gem 'bootsnap', '>= 1.1.0', require: false gem 'google-api-client', '~> 0.34' gem 'optimist' gem 'dotenv-rails' gem 'font-awesome-sass', '~> 5.13.0' gem 'jquery-rails' gem 'rails_same_site_cookie' gem 'mysql2' group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] gem 'rspec-rails' gem 'factory_bot_rails' gem 'pry-byebug' end group :development do # Access an interactive console on exception pages or by calling 'console' anywhere in the code. gem 'web-console', '>= 3.3.0' gem 'listen', '>= 3.0.5', '< 3.2' # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring gem 'spring' gem 'spring-watcher-listen', '~> 2.0.0' gem 'rubocop', require: false gem 'rubocop-airbnb' gem 'rubocop-rspec', require: false gem 'spring-commands-rspec' gem 'spring-commands-rubocop' end group :test do # Adds support for Capybara system testing and selenium driver gem 'capybara' gem 'webdrivers' gem 'vcr', require: false gem 'webmock' end # Windows does not include zoneinfo files, so bundle the tzinfo-data gem gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

dbコンテナのCloudWatch Log
db Cloudwatch Log
yourtuberコンテナのCloudWatch Log

Puma starting in single mode... * Version 3.12.6 (ruby 2.5.8-p224), codename: Llamas in Pajamas * Min threads: 5, max threads: 5 * Environment: development * Listening on unix:///myapp/tmp/sockets/puma.sock Use Ctrl-C to stop

試したこと

  • エラー内容確認

Mysql2::Error::ConnectionError: Unknown MySQL server host 'db' (0)の解決方法について
Mysql2::Error::ConnectionError: Unknown MySQL server host 'mysql' (-2) Dockerで環境構築
docker-composeコマンド実行時の不可解なエラー

  • AWSのログ確認

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

Ruby 2.5.8 Ruby on Rails 5.2.4.3 docker 3.0.3 docker-compose 1.27.4 mysql 5.7 RDS(mysql:version 5.7.24)

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

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

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

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

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

guest

回答3

0

production環境を明示的に指定することでRDSをdbとして利用することができました。

本番環境の構築を行ったことが少なく、正しいデプロイの仕方なのかもわからない状態ではありますがエラーの回避ということで進めようと思います。

根本的な解決に至っていないため、この質問を確認した方々には参考も解決案もご提供できませんが代替案としてRDSの使用を推薦するということで閉めようと思います。

尽力していただいたinductorさんをベストアンサーとさせていただきます。
ありがとうございました。

投稿2020/12/31 00:55

TKAilf

総合スコア3

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

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

0

production環境を明示的に指定することでRDSをdbとして利用することができました。

本番環境の構築を行ったことが少なく、正しいデプロイの仕方なのかもわからない状態ではありますがエラーの回避ということで進めようと思います。

根本的な解決に至っていないため、この質問を確認した方々には参考も解決案もご提供できませんが代替案としてRDSの使用を推薦。

尽力していただいたinductorさんをベストアンサーとさせていただきます。

投稿2020/12/31 00:54

TKAilf

総合スコア3

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

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

0

ベストアンサー

dbっていうのはDocker Composeかなにかで内部的に指定するサービス名なので、手元では内部DNSで解決できてもAWS上では解決できないというだけの話だと思います。

databse.ymlをローカルとクラウドで分けて、ホスト名をRDSのエンドポイントに書き換えたら治るでしょう。

→コードみたら場合分け自体はできてそうですね。ECSで環境変数指定してますか?

投稿2020/12/25 07:48

編集2020/12/25 07:49
inductor

総合スコア428

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

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

TKAilf

2020/12/25 12:31 編集

gem 'dotenv'を使用して、.envファイルの中にRDSの環境変数を指定しているためECSでRDSの環境変数は指定しておりませんでした。 念の為、ご指摘のようにECSでRDSの環境変数を指定したのですがエラー内容に特に変化がありませんでした。 >dbっていうのはDocker Composeかなにかで内部的に指定するサービス名なので、手元では内部DNSで解決できてもAWS上では解決できないというだけの話だと思います。 これはECS上で立ち上がっているEC2のなかで新しくMysqlのデータベースを作成する必要があるということでしょうか?
inductor

2020/12/25 21:03

>これはECS上で立ち上がっているEC2のなかで新しくMysqlのデータベースを作成する必要があるということでしょうか? 違います。ローカル環境でRDSにつなぎに行くのはコストが高いので、Docker Composeなどで手元でMySQLを作成しているためにそういう指定になっているだけでしょう。 ECSで動いてるコンテナはRAILS_ENV=productionになってますか?
TKAilf

2020/12/26 00:39

ECSで動かしているコンテナはproduction環境のつもりだったのですが、logをみる限りdevelopmentで動いているんでしょうか? * Environment: development EC2にssh接続し、コンテナの中で irb から Rails.envと打ち込んでみたのですが nameerrorが起き確認できませんでした。 デプロイを行ったことが少なく、知識不足なのですが production環境というものは明示的に bundle exec puma -C config/puma.rb に -e production を加えることで環境を指定する必要があるのでしょうか? 実験として、明示的に-e productionを指定し稼働させてみました。 結果、ローカル環境は 正常に稼働していましたが、RDSへの接続は行われていないようでした。 host,password等にRDSのエンドポイントを指定したりすれば勝手に接続してくれるはずでは??? なぜ接続できないのでしょうか?
inductor

2020/12/27 08:46

ちなみに環境変数である「RDS_HOST」等はどこで指定されていますでしょうか(ファイルを見る限り該当箇所が見当たらないので)
TKAilf

2020/12/31 00:58

dotenv gemを使用しているため.envファイルの中で指定しています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問