本記事シリーズの構成
- 前談、N/W+α(これ)
- Docker定義、ECRの設定
- ECSへのデプロイ、SSMでの接続
構築環境全体像
実現したいポイント
- Docker環境で開発を行っているRailsプロジェクトを、Fargate起動のECSでホストします。
- ECSタスクは複数設け、負荷分散します。
- AWS System Manager セッションマネージャを使用してECSに「接続し、CUIで操作可能にします。
ネットワーク+ALB+RDSの環境構築
VPC
作成した後、VPC一覧右上のアクション>DNSホスト名の編集から有効化をしておきます。
サブネット
下記の通り、わかりやすくサブネットを切っておきます。
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 |
インターネットゲートウェイ
作成したら、右上のアクション>VPCにアタッチから、
sample-vpcにアタッチするのを忘れずに。
エンドポイント
この後設定していくサービスを利用するために、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つのみ指定。
Interfaceタイプのエンドポイントには、セキュリティグループを適用する。
エンドポイント用のセキュリティグループとして、443ポートを開けたセキュリティグループを作っておきましょう。
S3はGatewayタイプなのでセキュリティグループではなく、ルートテーブルに従います。
ルートテーブル
VPC作成時に自動作成されているものを編集します。
ルート一覧に、先ほど追加したエンドポイントの設定が加わっています。
ルートの編集ボタンを押下します。
ここにインターネットゲートウェイへのルーティングを加えます。
編集したルートテーブルにサブネットを関連づけます。
インターネットゲートウェイのルーティングを設定したルートテーブルに、サブネットを関連づけることで、
いわゆるpublic subnetになります。
public-subnet-a,cはSSMを利用した接続時にパブリックでないとうまくできなかったため、セキュリティグループでIP、ポート制限をかけつつパブリック化する判断にしました。
public-subnet-dはデータベース用に取っていますが、データベースに外部からクライアント接続したいのでパブリックにしています。ここをパブリックにするかどうかは任意です。
ALB
アプリケーションロードバランサーを選択して作成していきます。
実用するときには、SSL証明書を適用して443ポート開けることになると思いますが、
今回は検証なので、80ポート開けておきます。
ルーティング先はECSをおくサブネットに絞って設定しています。
セキュリティグループはここでついでに新規作成しています。
80ポートのインバウンドを設定しています。検証なのでマイIPのみにしたほうがよかったかも。
ターゲットグループをここで一緒に新規作成します。
ターゲットの種類はIPにします。
ヘルスチェックはアプリケーションに用意したヘルスチェック用のパスを指定してください。
RDS
作成内容は完全に任意です。
MySQL 8.0.19でインスタンスをパブリックアクセスありで作成しました。
このときに適用したセキュリティグループは以下の通りです。
3306ポートをマイIPからのみアクセス可能にしています。
<追記>
訂正です。ECSから当然接続するので、ECSに適用するセキュリティグループも作成して、そこからの3306ポートアクセスを許容するようにしてください!
ECSに適用するセキュリティグループはこんな感じです。
ALBからの80ポートと、VPC endpointからのSSM用に443ポートを開けています。
まとめ
ここまででこんな感じの大枠まで作りました。
次の記事で、Dockerの定義と、コンテナイメージをECRにプッシュするまでを記載したいと思います。
次の記事
https://qiita.com/polar_bear_tech/items/87f5795346d246a1e07c