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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Docker

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

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

2回答

3222閲覧

AWS ECSで構築したサイトが、ALB直打ちでは見れるがドメイン経由だとタイムアウトする

qazu

総合スコア18

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Docker

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

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2020/10/31 05:40

前提・実現したいこと

バックエンドにRailsとNginxコンテナが動作するECSの環境を構築をしております。
検証環境の構築は上手くいったのですが、同じように本番環境を作ると上手くいかず
設定を見ても差分がないのでどこに原因があるのか分からない状態です。
ドメインはRoute53で該当のALBに向けており、最終的にはブラウザからドメインでアクセスしたいです。

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

・ブラウザからALBのDNS名でアクセスした場合

Blocked host: alb-xxx.com To allow requests to alb-xxx.com, add the following to your environment configuration: config.hosts << "alb-xxx.com"

・ブラウザからドメインでアクセスした場合

・Cherome ページを開けません。このページにあるサーバが応答しません。 ・Safari このサイトにアクセスできません。応答時間が長すぎます。

試したこと

ALBのエラーはRails6がホストを明示しないとアクセスできないようになったものなので、今回の問題とは関係ないです。
このエラーが出ていることによって、少なくともNginxとRailsは通信できていてRailsがエラーを返している=セキュリティーグループには問題はないということが分かっています。
試しにセキュリティグループでECS、ALB共に全てのトラフィックのインバウンドを 0.0.0.0/0 で許可しましたが挙動は変わらずでした。

ALBをdigすると名前解決はできているのでRoute53の設定も問題はなく、
サービスディスカバリーが設定されているのでそちらも疑ったのですが、ECSにsshで入ってdigしても名前解決はできています。

curlでデバッグすると以下のようになります。

curl domain -v * Trying xxx... * TCP_NODELAY set * Connection failed * connect to xxx port 80 failed: Operation timed out * Trying yyy... * TCP_NODELAY set * Connection failed * connect to yyy port 80 failed: Operation timed out * Trying zzz... * TCP_NODELAY set * Connection failed * connect to zzz port 80 failed: Operation timed out * Failed to connect to domain port 80: Operation timed out * Closing connection 0 curl: (7) Failed to connect to domain port 80: Operation timed out

現象としては、ALBだとアクセスできる、ドメイン名経由だとタイムアウトするということになるのですが
このような場合はやはりRoute53が怪しいでしょうか?
digで名前解決できているので問題なさそうに思うのですが、他に何かあたりがつきそうであればご教示お願いいたします。

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

Nginx
Rails (6.0.3)
ECS Agant (1.46.0)
Docker (19.03.6-ce)

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

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

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

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

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

yu_1985

2020/11/01 11:14

名前解決できているとのことですが、実際にdigの結果はどのようになっていますか?
yu_1985

2020/11/01 11:15

また、Route53の設定もちゃんと具体的にサブドメインを含めて記載してください。 想定しているドメインと設定してあるサブドメインが違っている可能性があります。(ドメイン名そのものはマスクして構わないです。)
qazu

2020/11/01 11:26

digは以下のような形でAWSのIPが返ってきます。 # dig ecs.xxxxxx.com +short xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx 結果はマスクしていますが、ドメインにdigして返ってくるIPアドレスは ALBのDNS名にdigして返ってくるIPアドレスと一致しています。 Route53の詳細設定についてはwinterboum様の回答の返信に記載しましたが、 設定してあるサブドメインも一致しています。 ecs.xxxxxx.com
yu_1985

2020/11/01 11:50

うーん、何とも言えませんね。 ブラウザが参照しているDNSとdigで参照しているDNSが異なっている可能性もあります。 digコマンドはどこで実行したものですか? ブラウザのDNSキャッシュをクリアしたりとか https://www.gowest1.com/misc/flush-browser-dns-cache.html そもそも参照するDNSを変えたりとかしたらどうなりますか?(下記サイトではGoogleのパブリックDNSを使うように書いてあるかと思いますが、それらのパブリックDNSを使うことの是非については一旦置いておきます) https://persol-tech-s.co.jp/hatalabo/it_engineer/462.html#:~:text=%E3%80%8C%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%80%8D%E7%94%BB%E9%9D%A2%E3%81%AE%E8%A9%B3%E7%B4%B0%E3%83%9C%E3%82%BF%E3%83%B3,%E3%81%97%E3%81%9F%E3%82%89%E3%80%81%E8%A8%AD%E5%AE%9A%E3%81%AF%E5%AE%8C%E4%BA%86%E3%81%A7%E3%81%99%E3%80%82 ALBのDNS名でアクセスしたらうまくいくのに、ドメイン名でアクセスしたらリクエストが届いてすらいないというのは名前解決周りに問題があることは間違いはないと思います。
qazu

2020/11/01 12:09

digコマンドはローカル(Mac)のターミナル上で実行しています。 Chrome、Safariのキャッシュを削除してそれぞれのブラウザから挙動を確認しましたが結果は変わらず、GoogleのパブリックDNS(8.8.4.4、8.8.8.8)から参照してもタイムアウトしました。
yu_1985

2020/11/01 16:16

http/httpsの指定は想定通りになってますか?
qazu

2020/11/02 05:01

想定通りとなっています。
yu_1985

2020/11/02 06:22

うーん、困りましたね。 前述の通り、ALBよりも外側が原因でアクセスが届いていないというのは間違いないと思うのでどこかの設定に問題があると思われますが…。 もう一度個々の設定に問題がないか見返してみて確認する、くらいでしょうか。 ・間違えて別のALBを指定していないか ・Route53にALBをエイリアスとして登録したサブドメインにアクセスしているか (書いてあるものだとecs.xxxxxx.comに対してエイリアスレコードを登録してあり、そこにアクセスしているか) ・参照しているDNSに問題はないか あと考えられるものはなんでしょうかね…。
qazu

2020/11/02 13:56

こちら解決しました!大変助かりました。 yu_1985様 にベストアンサーを差し上げたいですが、こちらですと質問への修正依頼のようなので回答の方に適当に何か書いていただけますでしょうか? 原因としましては、ALBに割り当てているAZのサブネットが異なることが原因でした。 web用、alb用にサブネットを分割していたのにも関わらずalbにweb用のAZを割り当ててしまっていたのが原因です。 web用にはNATゲートウェイを設定していたのですが、ipv4はNATされipv6はNATされていなかったため中途半端にアクセスできるような状態だったと思われます。 ALBのipアドレスタイプをdualstackからipv4にすると、ALBでもドメインで接続した時と同様にタイムアウトするというのが負に落ちなかったのと、ALBよりも外側が怪しいというヒントで解決に至りました。
yu_1985

2020/11/02 14:10

いえ、こちらはさすがに想定外な解決だったので「解決した方法」としてまとめて書いておいてくれればそれでいいと思います。
qazu

2020/11/02 14:30

承知しました。 ご協力いただきありがとうございました。
guest

回答2

0

自己解決

解決しました。

原因としましては、ALBに割り当てているAZのサブネットが異なることが原因でした。
web用、alb用にサブネットを分割していたのにも関わらずalbにweb用のAZを割り当ててしまっていたのが原因です。
web用にはNATゲートウェイを設定していたのですが、ipv4はNATされipv6はNATされていなかったため中途半端にアクセスできるような状態だったと思われます。

ALBのipアドレスタイプをdualstackからipv4にすると、ALBでもドメインで接続した時と同様にタイムアウトするというのが負に落ちなかったのと、ALBよりも外側が怪しいというヒントで解決に至りました。

投稿2020/11/02 14:31

qazu

総合スコア18

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

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

0

Route53 が怪しいですね。
どういう設定にしたか書いていただかないとなんとも。。。

投稿2020/10/31 07:30

winterboum

総合スコア23284

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

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

qazu

2020/10/31 09:31

私もRoute53が怪しいと思ったのですが、先ほどデバッグしていたところ少し進展がありましたので共有します。 また、念のためRoute53の設定も記載しておきます。 ``` ・値/トラフィックのルーティング先 Application Load Balancer と Classic Load Balancerへのエイリアス アジアパシフィック (東京) [ap-northeast-1] ・レコードタイプ Aレコード ・ルーティングポリシー シンプルルーティング ・ターゲットのヘルスチェック を評価 いいえ ``` 現在この設定でして、正常に動作している環境と設定の差分はなくリージョンも一致しています。 同じ設定でドメイン名を変える等も試しましたが改善せず、digでIPは返ってくるのにタイムアウトとなる状態です。 Route53でALBを指定する際のdualstackあり/なしも試しましたが、挙動は変わりませんでした。 進展のあった部分として、ALBのipアドレスタイプをdualstackに設定しているのですが、 これをipv4にしたところALBでもドメインで接続した時と同様にタイムアウトするようになりました。 またALBのCloudwatchメトリクスを見ると、ドメインを叩いた時(タイムアウトする場合)には「リクエスト数」が0となり、 ALBのDNS名を直で叩いた場合(railsのエラー画面が表示される場合)は「リクエスト数」が増えるという状態です。 ALBのDNS名を直で叩いた場合、アクセスしているIPアドレスは毎回ipv6になっているので、 ドメイン経由でアクセスするとipv4になってしまい、なぜかipv4ではアクセスできないからタイムアウトするのではないか?という推測をしているのですが、 依然セキュリティグループでは全てのトラフィックを許可しても変わらず、解決には至っておりません。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問