概要
今回は前回の続きで、ECS Fargateへとデプロイを行う本番環境編となっています。
前回の記事:
DockerでRails環境(Nginx+Unicorn+MySQL)を構築してFargateへデプロイするまで〜開発環境編〜
設定手順
1. VPC周りの構築
2. RDSの構築
3. ECRリポジトリの構築
4. ECSの構築
5. アプリのデプロイ
1. VPC周りの構築
VPC
key | value |
---|---|
名前 | three-mouth-vpc |
IPv4 CIDR | 10.0.0.0/16 |
サブネット
サブネットはECS用のパブリックサブネットと、RDS用のプライベートサブネットをそれぞれ二つずつ作成します。
画像は一つのみの作成ですが、「新しいサブネットを追加」から追加で作成することができます。
key | value |
---|---|
パブリックサブネット① | three-mouth-PublicSubnet-1a |
アベイラビリティーゾーン | ap-northeast-1a |
IPv4 CIDR | 10.0.10.0/24 |
key | value |
---|---|
パブリックサブネット② | three-mouth-PublicSubnet-1c |
アベイラビリティーゾーン | ap-northeast-1c |
IPv4 CIDR | 10.0.11.0/24 |
key | value |
---|---|
プライベートサブネット① | three-mouth-PrivateSubnet-1a |
アベイラビリティーゾーン | ap-northeast-1a |
IPv4 CIDR | 10.0.20.0/24 |
key | value |
---|---|
プライベートサブネット② | three-mouth-PrivateSubnet-1c |
アベイラビリティーゾーン | ap-northeast-1c |
IPv4 CIDR | 10.0.21.0/24 |
ルートテーブル
まずはルートテーブルの作成をします。
key | value |
---|---|
VPC ID | three-mouth-vpc |
名前 | three-mouth-route-table |
ルートテーブルの作成が完了したら、次にルートの編集を行います。
key | value |
---|---|
送信先 | 0.0.0.0/0 |
ターゲット | インターネットゲートウェイ |
ルートの編集が完了したら、最後にサブネットの関連づけを行います。
先ほど作成したサブネットのうち、パブリックサブネットを選択し、関連づけを保存します。
セキュリティグループ
■ ECSのセキュリティグループ
key | value |
---|---|
セキュリティグループ名 | three-mouth-SG-ECS |
説明 | Define of SG for ECS |
VPC | three-mouth-vpc |
インバウンドルール① | タイプ:HTTP ソース:0.0.0.0/0 |
インバウンドルール② | タイプ:HTTPS ソース:0.0.0.0/0 |
■ RDSのセキュリティグループ
key | value |
---|---|
セキュリティグループ名 | three-mouth-SG-RDS |
説明 | Define of SG for RDS |
VPC | three-mouth-vpc |
インバウンドルール | タイプ:MYSQL/Aurora ソース:three-mouth-SG-ECS |
2. RDSの構築
DBサブネットグループの作成
key | value |
---|---|
名前 | three-mouth-subnet-group |
説明 | subnet-group(適当) |
vpc | three-mouth-vpc |
アベイラビリティーゾーン | ap-northeast-1a ap-northeast-1c |
サブネット | 10.0.20.0/24 10.0.21.0/24 |
RDSの作成
key | value |
---|---|
データベース作成方法 | 標準作成 |
エンジン | MySQL8.0.28 |
key | value |
---|---|
テンプレート | 無料利用枠 |
項目 | 値 |
---|---|
DBインスタンス識別子 | three-mouth-mysql |
マスターユーザー名 | admin |
マスターパスワード | password |
key | value |
---|---|
インスタンスクラス | db.t3micro |
ストレージタイプ | 汎用SSD(gp2) |
ストレージ割り当て | 20 |
最大ストレージしきい値 | 1000 |
こちらは無料利用枠を指定するとデフォルトで入力されるため、特に修正する必要はありません。
key | value |
---|---|
VPC | three-mouth-vpc |
DB サブネットグループ | three-mouth-subnet-group |
セキュリティグループ | three-mouth-SG-RDS |
他の項目については、デフォルトでOKです。入力が完了したら、データベースを作成します。RDSが作成できたらエンドポイントを確認し、メモしておきます(ECS構築時に使用)。
3. ECRリポジトリの構築
key | value |
---|---|
リポジトリ名(rails用) | myapp-miguchi-rails |
リポジトリ名(nginx用) | myapp-miguchi-nginx |
作成ができたらそれぞれのURIをコピーし、メモしておきます。
こちらもECS構築時に用います。
4. ECSの構築
タスク定義
タスク定義ではコンテナの数やリソース、コンテナ同士のリンク方法などを定義します。
それでは作成していきましょう。
まずは起動タイプを選択します。
今回はFargateを使用するので、以下の画面で選択し、次のステップへ進みます。
次にタスクの定義を行なっていきます。
key | value |
---|---|
タスク定義名 | myapp-miguchi |
タスクロール | ecsTaskEcecutionRole |
ネットワークモード | awsvpc |
オペレーティングシステムファミリー | Linux |
key | value |
---|---|
タスク実行ロール | ecsTaskEcecutionRole |
タスクメモリ | 0.5GB |
タスクCPU | 0.25vCPU |
タスクの定義が完了したら、次はコンテナの定義です。
Rails用のコンテナとnginx用のコンテナの定義をしていきます。
同じ設定画面の「コンテナの定義」から「コンテナの追加」をクリックします。
key | value |
---|---|
コンテナ名 | rails |
イメージ | ECR作成時にメモしたURI:latest |
ポートマッピング | 3000 |
key | value |
---|---|
DB_DATABASE | three-mouth-mysql |
DB_HOST | RDSのエンドポイント |
DB_PASSWORD | password |
DB_USERNAME | admin |
RAILS_ENV | production |
key | value |
---|---|
コンテナ名 | nginx |
イメージ | ECR作成時にメモしたURI:latest |
ポートマッピング | 80 |
クラスターの作成
5. アプリのデプロイ
Docker Imageのプッシュ
いよいよ、アプリのデプロイです。AWSコンソールにてECRを開きます。Nginx用のリポジトリを選択し、プッシュコマンドの表示を選択します。
terminalで以下の4つのコマンドを実行し、DockerのイメージをECRにプッシュします。
コマンド実行が完了したら、イメージがプッシュされているか、コンソール上で確認します。
確認が完了したら、rails用のリポジトリでも同様の操作を行います。
正直作成をしなくてもよいのですが、私は以下のような本番用docker-composeを作成しました。少しだけデプロイが楽になります(プッシュコマンドの2を実行)。
cd ~/Desktop
touch docker-compose.prd.yml
version: '3'
services:
web:
build:
context: .
image: myapp-miguchi-rails
nginx:
build:
context: ./nginx
image: myapp-miguchi-nginx
docker-compose -f docker-compose.prd.yml build
ECSデプロイ
Docker Imageのプッシュが完了したら、次はECSのサービスを作成していきます。
AWSコンソールにてECSを開きます。先ほど作成したクラスターを選択し、[サービス]にて[作成]をクリックします。
サービスの設定画面ステップ1が表示されるので、以下の項目を入力します。
以下の項目以外の入力欄はデフォルトでOKです。入力が完了したら、次のステップ2に進みます。
key | value |
---|---|
起動タイプ | FARGATE |
サービス名 | myapp-miguchi(適当) |
タスクの数 | 1 |
続いて、以下の項目を入力します。入力が完了したら、次のステップ3に進みます。
key | value |
---|---|
クラスター VPC | three-mouth-vpc |
サブネット | three-mouth-PublicSubnet-1a three-mouth-PublicSubnet-1c |
セキュリティグループ | three-mouth-SG-ECS |
ステップ3、4では情報の入力はないため、設定の確認ができたら作成します。
作成後は、サービスで確認できます。
サービスと同時にタスクも作成されます。
タスクをクリックし、パブリックIPを確認できたら、アクセスしてみます。
しっかり表示されることが確認できました。
CRUD処理もしっかりできていますね。
今回はこれで以上です。
終わりに
CICDを作成するかも?!