LoginSignup
20
20

More than 3 years have passed since last update.

RailsをAWS ECS(Fargate)でホストする環境構築のすべて【1. 前談、N/W+α】

Last updated at Posted at 2020-08-11

本記事シリーズの構成

  1. 前談、N/W+α(これ)
  2. Docker定義、ECRの設定
  3. ECSへのデプロイ、SSMでの接続

構築環境全体像

こんな感じを目指します。
スクリーンショット 2020-08-11 17.39.58.png

実現したいポイント
* Docker環境で開発を行っているRailsプロジェクトを、Fargate起動のECSでホストします。
* ECSタスクは複数設け、負荷分散します。
* AWS System Manager セッションマネージャを使用してECSに「接続し、CUIで操作可能にします。

ネットワーク+ALB+RDSの環境構築

VPC

サンプルなのでシンプルに作ります。
スクリーンショット 2020-08-11 18.03.43.png

作成した後、VPC一覧右上のアクション>DNSホスト名の編集から有効化をしておきます。
スクリーンショット 2020-08-11 18.18.48.png

サブネット

下記の通り、わかりやすくサブネットを切っておきます。

subnet CIDR
public-subnet-a 10.0.10.0/24
public-subnet-c 10.0.20.0/24
public-subnet-d 10.0.30.0/24

スクリーンショット 2020-08-11 18.04.13.png

インターネットゲートウェイ

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3433303630332f62343233356531372d633765372d353266352d616636622d3963356164396331336638622e706e67.png

作成したら、右上のアクション>VPCにアタッチから、
sample-vpcにアタッチするのを忘れずに。

スクリーンショット 2020-08-11 18.07.34.png

エンドポイント

この後設定していくサービスを利用するために、4つのエンドポイントを設けます。

  • com.amazonaws.ap-northeast-1.ecr.api
  • com.amazonaws.ap-northeast-1.ecr.dkr
  • com.amazonaws.ap-northeast-1.s3
  • com.amazonaws.ap-northeast-1.ssm

エンドポイントを選択して、
アタッチしたいサブネットはpublic-subnet-a,public-subnet-cの2つのみ指定。
スクリーンショット 2020-08-11 18.08.57.png

Interfaceタイプのエンドポイントには、セキュリティグループを適用する。
スクリーンショット 2020-08-11 18.18.06.png

エンドポイント用のセキュリティグループとして、443ポートを開けたセキュリティグループを作っておきましょう。
スクリーンショット 2020-08-11 18.17.09.png

S3はGatewayタイプなのでセキュリティグループではなく、ルートテーブルに従います。
スクリーンショット 2020-08-11 18.20.17.png

ルートテーブル

VPC作成時に自動作成されているものを編集します。

ルート一覧に、先ほど追加したエンドポイントの設定が加わっています。
ルートの編集ボタンを押下します。
スクリーンショット 2020-08-11 19.37.07.png

ここにインターネットゲートウェイへのルーティングを加えます。
スクリーンショット 2020-08-11 19.37.37.png

編集したルートテーブルにサブネットを関連づけます。
インターネットゲートウェイのルーティングを設定したルートテーブルに、サブネットを関連づけることで、
いわゆるpublic subnetになります。
スクリーンショット 2020-08-11 18.06.37.png

public-subnet-a,cはSSMを利用した接続時にパブリックでないとうまくできなかったため、セキュリティグループでIP、ポート制限をかけつつパブリック化する判断にしました。

public-subnet-dはデータベース用に取っていますが、データベースに外部からクライアント接続したいのでパブリックにしています。ここをパブリックにするかどうかは任意です。


ALB

アプリケーションロードバランサーを選択して作成していきます。
スクリーンショット 2020-08-11 18.12.59.png

実用するときには、SSL証明書を適用して443ポート開けることになると思いますが、
今回は検証なので、80ポート開けておきます。
スクリーンショット 2020-08-11 18.13.22.png

ルーティング先はECSをおくサブネットに絞って設定しています。
スクリーンショット 2020-08-11 18.13.27.png

セキュリティグループはここでついでに新規作成しています。
80ポートのインバウンドを設定しています。検証なのでマイIPのみにしたほうがよかったかも。
スクリーンショット 2020-08-11 18.14.02.png

ターゲットグループをここで一緒に新規作成します。
ターゲットの種類はIPにします。
ヘルスチェックはアプリケーションに用意したヘルスチェック用のパスを指定してください。
スクリーンショット 2020-08-11 18.14.34.png

ここはそのままでOK。
スクリーンショット 2020-08-11 18.14.54.png


RDS

作成内容は完全に任意です。
MySQL 8.0.19でインスタンスをパブリックアクセスありで作成しました。
スクリーンショット 2020-08-11 19.58.23.png

このときに適用したセキュリティグループは以下の通りです。
3306ポートをマイIPからのみアクセス可能にしています。
スクリーンショット 2020-08-11 20.01.22.png

<追記>
訂正です。ECSから当然接続するので、ECSに適用するセキュリティグループも作成して、そこからの3306ポートアクセスを許容するようにしてください!
スクリーンショット 2020-08-18 19.41.49.png

ECSに適用するセキュリティグループはこんな感じです。
ALBからの80ポートと、VPC endpointからのSSM用に443ポートを開けています。
スクリーンショット 2020-08-18 21.00.58.png

まとめ

ここまででこんな感じの大枠まで作りました。
次の記事で、Dockerの定義と、コンテナイメージをECRにプッシュするまでを記載したいと思います。
スクリーンショット 2020-08-11 20.10.14.png

次の記事
https://qiita.com/polar_bear_tech/items/87f5795346d246a1e07c

20
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
20