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

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

新規登録して質問してみよう
ただいま回答率
87.20%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Amazon EC2

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

AWS(Amazon Web Services)

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

解決済

【AWS・EC2】プライベートサブネット内で構築したAPIをブラウザorコンソールから呼び出せない。

lawsoncoffee
lawsoncoffee

総合スコア46

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Amazon EC2

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

AWS(Amazon Web Services)

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

1回答

0評価

0クリップ

236閲覧

投稿2022/06/13 11:28

以下の構成で、awsの環境構築をしています(aws初心者なので表現がおかしいかもですがご容赦ください)。

①1つのVPC内に、プライベートサブネットとパブリックサブネットを置く。 ②パブリックサブネット内について ・ルートテーブルとインターネットゲートウェイ、ルートテーブルとパブリックサブネットを紐付けて、パブリックサブネットがインターネットと通信できるようにした。 ・セキュリティグループのインバウンドは、SSH、HTTPS、HTTPを全て0.0.0.0/0で設定。 ・パブリックサブネットはフロントエンド用(Next.js)とするため、パブリックサブネット内でEC2をインスタンス起動して、ターミナルからEC2にアクセスして、Nginxを使用して、webサーバーを構築。 ・自作のソースコードを持ってきて、npm startし、ブラウザからhttp:// IPアドレスで、接続&ブラウザ表示を確認済。 ③プライベートサブネット内について ・プライベートサブネットはバックエンド用(nestJSでAPI、DBはPostgreSQL)とするため、EC2とRDSを構築。 ・セキュリティグループのインバウンドは、 SSH、HTTPS、HTTPをそれぞれ、フロントエンド側のセキュリティグループとバックエンド側のセキュリティグループを許可& PostgreSQLをバックエンド側のセキュリティグループのみ許可 ・こちらも、パブリックサブネット内のEC2からプライベートサブネット内のEC2にアクセスして、自作のソースコードを持ってきて、npm startが無事でき&DBにテーブルなどが作成できたことをコンソール上で確認。

と、ここまではできました。
が、フロントエンド・バックエンド共にnpm startで起動させているのですが、ブラウザ上でAPIが呼び出せませんでした。
ただ、ブラウザ上でAPIエラーも発生していなかったので、パブリックサブネット上のEC2からAPIを以下のコマンドで叩いてみたのですが、こちらも以下のエラーが返ってきました。

叩いたコマンド: curl -I "http://【プライベート IPv4 アドレス】/api/post/userId/null エラー: curl: (7) Failed to connect to 【プライベート IPv4 アドレス】 port 80 after 1 ms: Connection refused

上記エラーを検索したところ、awsの以下のサイトに本エラーに関する記述があり、
https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-linux-resolve-ssh-connection-errors/
確認したのですが、「ホストはインスタンスに到達したが、SSH ポートでリッスンしているサービスがなかった。」という原因があるのではという記載からバックエンドのnestJSの方がAPIを叩ける状態になっていないのでは?と思いました。

ここで伺いたいのですが、
A)パブリックサブネット内のEC2からプライベートサブネット内のnestJSのソースコードが動いているか確認する手段があれば教えていただきたいです。(現状、コンソール上でnpm startが成功したというステータスしかわからないため)
B)APIコールできない他の理由があるようであれば、こちらもご教授お願いしたいです。

よろしくお願いします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

lawsoncoffee

2022/06/13 12:48

NATGatewayは、私の理解だと、プライベートサブネットからインターネットに接続するためのものと認識してます。今回は、パブリックサブネットからプライベートサブネットにアクセスすることなので、NATGatewayとは逆方向を実現したいです。
yu_1985

2022/06/13 12:54

それはプライベートサブネットからインターネットへのアクセスに必要なものなので、今回は関係がありません。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Amazon EC2

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

AWS(Amazon Web Services)

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。