Rails + React アプリを ECS Fargate にデプロイする【8. CloudFront編】
これは何?
React と Rails で実装したWebアプリを AWS 環境にデプロイするまでの備忘録の CloudFront 編です
総集編を読んでいない方は コチラ
本記事でやること
以下のインフラ構成図のように CloudFront を作成します
作成手順
フロントエンドのビルド結果を S3 にアップロードし、CloudFront で配信します
ビルド前にソースコードを書き換えます
ビルドして S3 にアップロードします
> yarn run build > cd build > aws s3 cp ./ s3://8tako8tako8-hoge-web/ --recursive
次に、AWSサービス: CloudFront から「ディストリビューションを作成」をクリックします
以下のように設定し「ディストリビューションを作成」をクリックします
次に、AWSサービス: Route 53 から「ホストゾーン」をクリックします
「ホストゾーン名」をクリックします
「レコードを作成」をクリックします
以下のように設定し「レコードの作成」をクリックします
これで、CloudFront の作成・設定完了です
最後に、CORSを設定しておきます
# config/initializers/cors.rb Rails.application.config.middleware.insert_before 0, Rack::Cors do allow do origins 'http://localhost:3000', "https://web.example.com" # 省略 end
動作確認
登録したドメインでWebアプリが動いていれば構築完了です!
最後に
今回は、 CloudFront の作成・設定しました
これで全て構築完了です! お疲れさまでした!
Rails + React アプリを ECS Fargate にデプロイする【7. ECR・ECS編】
これは何?
React と Rails で実装したWebアプリを AWS 環境にデプロイするまでの備忘録の ECR・ECS 編です
総集編を読んでいない方は コチラ
本記事でやること
以下のインフラ構成図のように ECR・ECS を作成・設定します
作成手順
ECR
AWSサービス: Elastic Container Registry から「リポジトリを作成」をクリックします
プライベート、リポジトリ名: hoge-api-ecs として作成します
リポジトリの詳細から「プッシュコマンドの表示」をクリックします
表示されたコマンドを順に実行します
M1, M2 Mac の場合、2 の build コマンドに --platform linux/amd64
を追加します(ビルドするとECSで起動できないことがあるから)
ECS
AWSサービス: Elastic Container Service から「新しいタスク定義の作成」をクリックします
起動タイプ: AWS Fargate、タスクロール: ecsTaskExecutionRole を選択します
ECRに登録したイメージを選択します
パラメータストアで登録したパラメータを ValueFrom で取得し環境変数に設定します
その他の設定はデフォルトとして「作成」をクリックします
次に、「クラスターの作成」をクリックします
その他の設定はデフォルトとして「作成」をクリックします
最後に、「サービスの作成」をクリックします
以下のように設定し、「作成」をクリックします
タスクが 実行中 になればコンテナ起動完了です
これで、ECR・ECS を作成・設定完了です
最後に
今回は、ECR・ECS を作成・設定しました
次は、CloudFront 編 に進みましょう!
Rails + React アプリを ECS Fargate にデプロイする【6. S3・SES・Systems Manager 編】
これは何?
React と Rails で実装したWebアプリを AWS 環境にデプロイするまでの備忘録の S3・SES・Systems Manager 編です
総集編を読んでいない方は コチラ
本記事でやること
以下のインフラ構成図のように S3・SES・Systems Manager を作成・設定します
作成手順
S3
AWSサービス: S3 からS3バケットを作成します 今回は、バックエンド用とフロントエンド用の2つのバケットを作成します
まずは、バックエンド用のバケット名からです
バケット名 8tako8tako8-hoge-api を入力します
ACL無効、パブリックアクセスをすべてブロックします
バージョニングは無効、デフォルトの暗号化のバケットキーを無効にします
以上の設定で「バケットを作成」をクリックします
次に、フロントエンド用のバケット名も同様に作成します バケット名は 8tako8tako8-hoge-web としました
最後に、Railsアプリを以下のように修正します
# config/environments/production.rb Rails.application.configure do config.active_storage.service = :amazon end
# config/storage.yml # 省略 amazon: service: S3 region: 'ap-north-east' bucket: '8tako8tako8-hoge-api'
SES
AWSサービス: Simple Email Service から「使用を開始」をクリックします
検証用のメールアドレスを入力します
確認画面で「Get Started」をクリックします
以下のようなステータスになり、登録したメールアドレスにメールが届いているので検証します
SMTP設定をクリックし、「SMTP認証情報の作成」をクリックします
ユーザーの詳細はデフォルトのまま「ユーザーの作成」をクリックします
認証情報をメモしておきます
今回は、サンドボックスで使用するので本稼働アクセスのリクエストを行いません
これでSESの設定完了です
最後に、config/environments/production.rb を以下のようにします(環境変数は後ほど設定することを想定しています)
Rails.application.configure do # 省略 config.action_mailer.default_url_options = { host: 'api.example.com', protocl: 'https' } config.action_mailer.raise_delivery_errors = true config.action_mailer.delivery_method = :smtp config.action_mailer.perform_deliveries = true config.action_mailer.default charset: 'utf-8' config.action_mailer.smtp_settings = { address: 'email-smtp.' + ENV.fetch("AWS_REGION") + '.amazonaws.com', port: 587, domain: ENV.fetch("FRONTEND_DOMAIN"), authentication: :login, user_name: ENV.fetch("SES_USERNAME"), password: ENV.fetch("SES_PASSWORD"), } end
Systems Manager Parameter Store
パラメータストアで以下のパラメータを管理します
- DBエンドポイント(db-host)
- DBユーザー名(db-username)
- DBパスワード(db-password)
- SESユーザー名(ses-username)
- SESパスワード(ses-password)
パラメータの登録手順の一例として、DBエンドポイント(db-host) の登録をします
AWSサービス: Systems Manager から「使用を開始」をクリックします
パラメータストアで「パラメータの作成」をクリックします
名前: /ecs-param/db-host、タイプ: 安全な文字列、値: 登録したDBエンドポイント を入力して作成します
他のパラメータについても同様に作成してください
これで S3・SES・Systems Manager を作成・設定完了です
最後に
今回は、S3・SES・Systems Manager を作成・設定しました
次は、ECR・ECS 編に進みましょう!
Rails + React アプリを ECS Fargate にデプロイする【5. RDS編】
これは何?
React と Rails で実装したWebアプリを AWS 環境にデプロイするまでの備忘録の RDS 編です
総集編を読んでいない方は コチラ
本記事でやること
以下のインフラ構成図のように RDS を作成します
作成手順
AWSサービス: RDS からデータベースを作成します
今回は、PostgreSQL 14.6を使います
無料利用枠を選択します
DB名、認証情報を入力します
インスタンスの設定で、db.t3.micro を選択します ストレージはデフォルトのままです
ネットワーク情報を以下のようにします
データベース認証は「パスワードとIAMデータベース認証」を選択します 今回は、Performance Insights のチェックを外してください
以上の設定でデータベースの作成をクリックします
マルチAZ配置にしたい場合、「アクション: マルチAZ配置への変換」をクリックします
これで RDS の作成が完了です
最後に、Railsアプリを以下のように修正します(環境変数は後ほど設定することを想定しています)
# config/database.yml production: <<: *default database: myapp_production username: <%= ENV.fetch('DB_USERNAME', 'username') %> password: <%= ENV.fetch('DB_PASSWORD', 'password') %> host: <%= ENV.fetch('DB_HOST', nil) %>
最後に
今回は、RDS を作成しました
次は、S3・SES・Systems Manager 編に進みましょう!
Rails + React アプリを ECS Fargate にデプロイする【4. ALB編】
これは何?
React と Rails で実装したWebアプリを AWS 環境にデプロイするまでの備忘録の ALB 編です
総集編を読んでいない方は コチラ
本記事でやること
以下のインフラ構成図のように Application Load Balancer(ALB) を作成します
作成手順
AWSサービス: EC2 からターゲットグループとALBを作成します
「ターゲットグループの作成」をクリックします
以下のように設定し「次へ」をクリックします
ターゲットの登録はここでは行なわず、コンテナの作成時に設定します
「ターゲットグループの作成」をクリックします
次に、「ロードバランサー」をクリックします
「ロードバランサーの作成」をクリックします
Application Load Balancer を選択します
以下のように設定し「ロードバランサーの作成」をクリックします
次に、AWSサービス: Route 53 から「ホストゾーン」をクリックします
「ホストゾーン名」をクリックします
「レコードを作成」をクリックします
以下のように設定し「レコードの作成」をクリックします
最後に、Railsアプリにヘルスチェック用のAPIを追加します
# app/controllers/api/v1/health_check_controller.rb module Api module V1 class HealthCheckController < ApplicationController def index head 200 end end end end
# config/routes.rb Rails.application.routes.draw do namespace :api do namespace :v1 do # 省略 get :health_check, to: 'health_check#index' end end end
これで ALB の作成が完了です
最後に
今回は、ALB を作成しました
次は、RDS 編に進みましょう!
Rails + React アプリを ECS Fargate にデプロイする【3. Route 53・ACM編】
これは何?
React と Rails で実装したWebアプリを AWS 環境にデプロイするまでの備忘録の Route 53・ACM 編です
総集編を読んでいない方は コチラ
本記事でやること
以下のインフラ構成図のように Route 53・ACM を設定します
作成手順
AWSサービス: Route 53 から「ホストゾーン」をクリックします
「ホストゾーンの作成」をクリックします
取得したドメイン名(記事内では example.com)を入力し「ホストゾーンの作成」をクリックします
ホストゾーンの詳細を開くと以下のように登録されているので、赤枠の4つをメモします
私は、ムームードメインでドメインを取得したのでネームサーバ設定に先ほどメモした4つを登録します(末尾の . は除きます)
バックエンド用のサブドメイン(api.example.com)とフロントエンド用のサブドメイン(web.example.com)の証明書を発行します
まずは、バックエンド用のサブドメインからです
AWSサービス: Certificate Manager から「リクエスト」をクリックします
パブリック証明書を選択します
ドメイン名: api.example.com を入力します 検証方法は「DNS検証」を選択します
以上の設定で「リクエスト」をクリックします
保留中の検証となりますが、数時間ほどで発行済みに更新されます
リクエストした証明書の「証明書ID」をクリックします
「Route 53でレコードを作成」をクリックしてレコードを作成します
次に、リージョンをバージニア北部(us-east-1)に変更して(※)、フロントエンド用のサブドメインも同様に証明書を発行してください
※ CloudFrontに証明書を紐付ける場合はバージニア北部(us-east-1)で発行する必要があります
なお、本記事ではフロントエンド用のサブドメイン名を web.example.com としています
これで Route 53 と ACM の設定が完了です
最後に
今回は、Route 53・ACM を設定しました
次は、ALB 編に進みましょう!
Rails + React アプリを ECS Fargate にデプロイする【2. ネットワーク編】
これは何?
React と Rails で実装したWebアプリを AWS 環境にデプロイするまでの備忘録のネットワーク編です
総集編を読んでいない方は コチラ
本記事でやること
以下のインフラ構成図のように VPC や サブネット等のネットワーク環境を作成します
作成手順
VPC・サブネット・IGW・ルートテーブル・VPCエンドポイント
AWSサービス: VPC から「VPCを作成」をクリックします
作成するリソース: VPCなど を選択して、デフォルト設定のまま「VPCを作成」をクリックします
これにより、以下が作成されます
セキュリティグループ
AWSサービス: VPC から「セキュリティグループ」をクリックします
「セキュリティグループを作成」をクリックします
以下のように設定し「セキュリティグループを作成」をクリックします
同様に、以下のインバウンドルールとなるように、セキュリティグループを作成してください
セキュリティグループ名 | タイプ | ソース |
---|---|---|
hoge-alb-sg | HTTPS | 0.0.0.0/0 |
hoge-ecs-sg | HTTP | hoge-alb-sg |
hoge-rds-sg | PostgreSQL | hoge-ecs-sg |
hoge-s3-endpoint-sg | HTTPS | 0.0.0.0/0 |
これでネットワーク環境の作成が完了です
最後に
今回は、ネットワーク環境を作成しました
次は、Route 53・ACM編に進みましょう!