【概要】
本記事では、AWSでアプリデプロイまでを解説していきたいと思います。
なお、筆者は初心者ですので、過不足や改善案などご指摘くださると幸いです。
※(今回発行したkeyなどは、掲載前に全て削除しております。ご了承ください。)
【注意!!】
※ 今回は、Terraformではなく機能理解のため、コンソール上
で環境構築します。
また、AWSは料金がかかるものになっております!
当作業で発生する料金などは筆者はいかなる責任も負いませんのでご注意ください。
終了後は必ず環境の削除をお願いします。
【前提】
・作成済アプリがあること
・インフラ構成をある程度理解していること
・作成した図通りのインフラ構築の作業を行うこと
(ただし、インフラ構成の説明のため、Github-actionは今回説明を省きます。)
⇨環境構築などは、アプリで最適解となりますのでご了承ください。
また、改善案などあれば宜しくお願いいたします。
【環境】
・macOS Sonoma ver.14
・2024年時点のAWSコンソール
・Rails 7.0.8
・Ruby3.1.2
・Postgres
【対象者】
・AWS初心者の方
・IaCでなく、GUIで確認したい方
【はじめに】
はじめに、今回作成するインフラの構成図を確認します。
今回は下記を目標として作業を行いたいと思います。
重要なものは下記で説明します。
【ルートユーザー】
全権限を持ったユーザーになります。
基本的には、IAMユーザーの作成・権限委譲や予算作成など強力な権限の操作を行います。
【IAMユーザー】
ルートユーザーから委譲された権限範囲で操作を行うためのユーザーになります。
【AWS Management Console】
MFA(他要素認証)の設定になります。設定方法については後述します。
【VPC】重要!!
VPC(Virtual Private Cloud)は、クラウドコンピューティング環境において、ユーザーが仮想的なプライベートネットワークを構築できるサービスです。VPCを使用することで、ユーザーはクラウド内でリソースを論理的に分離し、セキュリティを強化することができます。
安全なネットワークのことです。
マンションやアパートのようなものと例えると分かりやすいです。
【サブネットマスク】重要!!
サブネットマスク(Subnet Mask)は、IPアドレスをネットワークとホストの部分に分割するための手段です。IPv4アドレスは32ビットで構成されており、通常は4つの8ビット(バイト)ブロックに分かれて表現されます。サブネットマスクはこれらのビットのグループをネットワーク部分とホスト部分に分ける役割を果たします。
サブネットマスクは、フロアや部屋番号のことです。
サブネットマスクには、public
とprivate
なサブネットに分けられます。
具体的には下記です。FEに触れたことがある方は馴染み深いかもです。
クラス | 範囲 | ネットワーク数 |
---|---|---|
クラスA | 10.0.0.0 ~ 10.255.255.255 (10.0.0.0/8) | 1 |
クラスB | 172.16.0.0 ~ 172.31.255.255 (172.16.0.0/12) | 16 |
クラスC | 192.168.0.0 ~ 192.168.255.255 (192.168.0.0/16) | 256 |
ただし、これらの範囲外になるとグローバルアドレスとなってしまうので、
VPCやサブネットを作成する際のIPv4CIDRブロックは、上記の範囲内で作成しましょう。
また、AWSで設定できるCIDRの最小単位は /28となっており、
例えば、クラスBで設定する場合、172.16.10.0/29などは設定できないのでご注意を!
(インフラ素人が3週間でWebサービスのインフラを0から構築するためにやったことから引用)
IPアドレスを作成する際は下記のCIDR範囲内から抜粋するようにしましょう。
CIDR | サブネットマスク | IPアドレスの数 |
---|---|---|
/28 | 255.255.255.240 | 16 |
/27 | 255.255.255.224 | 32 |
/26 | 255.255.255.192 | 64 |
/25 | 255.255.255.128 | 128 |
/24 | 255.255.255.0 | 256 |
/23 | 255.255.254.0 | 512 |
/22 | 255.255.252.0 | 1,024 |
/21 | 255.255.248.0 | 2,048 |
/20 | 255.255.240.0 | 4,096 |
/19 | 255.255.224.0 | 8,192 |
/18 | 255.255.192.0 | 16,384 |
/17 | 255.255.128.0 | 32,768 |
/16 | 255.255.0.0 | 65,536 |
【EC2】重要!!
Amazon Elastic Compute Cloud(Amazon EC2)は、Amazon Web Services(AWS)が提供するクラウドコンピューティングプラットフォームの一部です。EC2を使用すると、仮想サーバー(インスタンス)をオンデマンドでプロビジョニングし、起動、停止、削除などの操作を行うことができます。
簡単にいうと、webサーバです。
今回はインフラ構成ではpublic
のみに設置する構成ですが、private
配下にも設置する構成でも可能です。
その場合、public
からprivate
に対して通信をします。
public
は踏み台サーバと呼ばれます。
【Route53】 重要!!
下記のような、ドメインを取得するのに使用します。
https://***.com/ ←***.comの部分です。
お名前.comなどでもドメイン取得することができますが、
今回は練習として標記で取得します。
それ以外にも、下記のような恩恵を得られます。
1.ドメイン登録機能
2.DNS ルーティング機能
3.DNS ヘルスチェック機能
他に、ALB
やEC2
に紐付けた設定ができます。
【ALB】 重要!!
Application Load Balancer (アプリケーション ロード バランサー):
AWS (Amazon Web Services) においては、「ALB」は「Application Load Balancer」の略で、コンテンツベースのルーティングを行うためのロードバランサーサービスを指します。これは、トラフィックを複数のAmazon EC2インスタンスやコンテナに均等に分散することで、アプリケーションの冗長性と可用性を向上させるのに使用されます。
EC2インスタンス(webサーバ)の負荷分散に必要なものです。
EC2が複数存在する場合は、自動的に負荷分散できます。
それ以外にも、Route 53と紐づいた設定が行えます。
以上で、重要なAWSの概念の説明になります。
それぞれの役割を確認できたら、早速実装に取りかかりましょう。
【実施手順】
ここから実施手順になります。
【手順】
・【AWSアカウント作成】
・【MFA導入】
・【VPC】
・【サブネットの作成】
・【publicのサブネット】
・【privateのサブネット】
・【インターネットゲートウェイ(IGW)】
・【EC2】
・【RDS】
・【ACL】
・【Route 53】
・【ACM】
【AWSアカウント作成】
まずは、AWSの登録を行います。下記を参照してください。
作成したルートユーザーでまずは操作を行います。
ルートユーザーでログイン後、IAMユーザーを作成します。
今回は、個人開発想定なので、管理者権限を委譲してすべてこちらで作業します。
(本来なら、必要な機能ごとにユーザーを分けるのがベストプラクティスだと思われます)
5.グループを追加
「administratoraccess」
で検索し、グループに追加。
8.ヘッダーからルートユーザーのregionを「東京」に変更
なお、下記画面でアカウントIDを控えておきましょう。(後ほど使用します。)
【budgets設定】
次に、budgetsの設定を行います。
これを行うことで、課金の上限金額などの設定し、アラートを出せるようにしましょう。
4.予算などの設定を行う。
・間隔:月別
・予算有効日:定期予算
・開始日:そのまま
・予算設定方法:固定
予算額:10.00(例)
・予算のスコープ(全てデフォルト)
【MFA導入】
次は、多段階認証を設定します。
1.IAMのページにアクセスして左側のメニューバーからユーザー
を選択
2.「セキュリティ認証情報」のタブからMFA デバイスの割り当て
を選択
QRコードの読み取りは、下記のアプリを使用
4.デバイスの設定から、ワンタイムパスワードをそれぞれ打鍵。
(※30秒ごとにワンタイムパスが切り替わるので、連続するパスを打鍵してください。)
6.次回からIAMユーザーのログイン時にワンタイムパスでログインを制御します。
今回では、ルートユーザーでの作業はここまでになります。
その他、AWS公式では設定を推奨しているものなど設定したい場合は下記をご参照ください。
【VPC】
ここからデプロイを行うための、詳細設定になります。
まずは、VPCを作成しましょう。
ここで、VPCの登録を行います。
今回は、デプロイ用にproductionのみの構成にします。
環境 | IP |
---|---|
production | 10.0.0.0/16 |
staging | 10.1.0.0/16 |
development | 10.2.0.0/16 |
3.VPCの設定
IPv4 CIDR: 10.0.0.0/16
【サブネットの作成】
次にサブネットの作成を行います。
publicサブネットの設定
3.サブネットを作成する。
・名前「public-subnet-1a-prod」のようなpublicとわかる命名で登録。
IPv4の「10.0.1.0/24」を設定し、その他は画面通り。
privateサブネットの作成
4.publicと同様の手順で1〜3を作成
命名規則を「private-subnet-1a-prod」のようなpublicとわかる命名で登録。
CIDRの設定を「10.0.2.0/24」とpublicと分けるようにしましょう。
6.RDSで2つのAZを求められるので、大阪リージョンでもpublic
とprivate
を作成しておきましょう。
(※ALB用のサブネットは後で作成します。)
【IGWの設定】
次に、インターネットゲートウェイ(以下、IGWと略)の設定をします。
インターネットゲートウェイ(Internet Gateway)は、Amazon Virtual Private Cloud(Amazon VPC)内のリソースにインターネットへのアクセスを提供するためのAWSサービスです。インターネットゲートウェイは、VPC内のパブリックサブネットと連携して、外部からのトラフィックの送受信を可能にします。
要は、publicサブネット
にインターネット回線を持ってきてくれる設定で、これを設定することでネット接続できるようになります。(糊のようなものだと思ってください。)
仮にprivate
サブネットからネットアクセスを行う場合、NATゲートウェイ
を設定しましょう。
本アプリでの設定はここまでになりますので省略いたします。
名称 | インターネット接続対象のサブネット | IPアドレスの変換方法 | 許可される通信方向 |
---|---|---|---|
インターネットゲートウェイ | パブリックサブネット | NAT | 外向き、内向き |
NATゲートウェイ | プライベートサブネット | NAPT | 外向きのみ |
【ルートグループ】
ルートテーブルとは、サブネットから外に出る通信をどこに向けて発信するかルール
になります。基本的には下記のような構成になります。
publicサブネットの構成要素
送信先 | ターゲット |
---|---|
10.0.0.0/21 | local |
0.0.0.0/0 | Internet gateway |
4.下記を設定
・送信先を「0.0.0.0」
・ターゲットを、先ほど設定したIGWに設定する。
privateサブネットの構成要素
送信先 | ターゲット |
---|---|
10.0.0.0/21 | local |
10.2つの関連付けが下記のようになっていれば問題なしです!
【セキュリティグループの作成】
次は、セキュリティーグループを作成します。
主に通信を制御するFW機能・インスタンスのアクセス許可や制御などの役割を果たします。
今回は、EC2とRDSのセキュリティグループを作成します。
セキュリティグループの概要
役割 | 名称 | 許可ポート | アクセス元 |
---|---|---|---|
ロードバランサー | web-system-alb-sg | HTTPS(443番ポート) | どこからでも許可 |
踏み台サーバー | web-system-bastion-sg | SSH(22番ポート) | 自分のグローバルIPアドレス |
WEBサーバー | web-system-sg | HTTP(80番ポート) | ロードバランサーからのみ |
WEBサーバー | web-system-sg | SSH(22番ポート) | 踏み台サーバーからのみ |
【EC2のセキュリティグループを作成】
3.下記のように編集
・VPC:デフォルトVPCを使用
・インバウンドルール:
- 1つ目
・タイプ:HTTP
・ソース:Anywher IPv4 0.0.0.0/0
- 2つ目
・タイプ:SSH
・ソース:Anywher IPv4 0.0.0.0/0
・アウトバウンドルール:そのまま
・タグも不要
4.EC2のセキュリティグループができたことを確認。(https通信用は後で設定する。)
【RDS用のセキュリティグループを作成】
・セキュリティグループ:db-sg
・説明:db-sg
・VPC:作成した物
・インバウンドルール
タイプ:使用するDBを選択
ソース:カスタム
先ほど作成したセキュリティグループを作成
・アウトバウンドルール:そのまま
・タグも不要
6.下記のようにセキュリティグループがそれぞれ作成できたことを確認。
【エンドポイントの作成】
エンドポイントの設定です。
privateサブネット
から、S3などにアクセスするために設定するものになります。
選択し間違えると、課金されてしまいます。
オンプレ以外は、gatewayのタイプを選びましょう。
特徴 | インターフェイス型 | ゲートウェイ型 |
---|---|---|
経路 | awsネットワーク経由 | awsネットワーク経由 |
オンプレ環境からの使用※1 | 可能 | 不可 |
ピアリング先からの使用※1 | 可能 | 不可 |
料金 | 有料 | 無料 |
使用されるIPアドレス※2 | プライベートIP | パブリックIP |
アクセス制限 | SG+エンドポイントポリシー | エンドポイントポリシー |
アクセス方法※3 | エンドポイントのDNS名を追加で使用 | S3のUriのみで可 |
作成時の紐付け対象 | サブネット | ルートテーブル |
3.下記のように選択。
・VPC:デフォルトVPCを選択
・サービスカテゴリ:「AWSのサービス」を選択
・サービス:「com.amazonaws.ap-northeast-1.s3」を選択
・VPC:デフォルトVPCを選択
・アベイラビリティーゾーン:「ap-northeast-1a」を選択
・サブネット:
・アベイラビリティーゾーン:ap-northeast-1a
・サブネットID:privateサブネットのものを選択
・IPアドレスタイプ:IPv4
・セキュリティグループ:先に作成したセキュリティグループを選択
・ポリシー:フルアクセス
・ルートテーブル: 先ほど作成したprivateなルートテーブル
※ちなみに、private
ルートテーブルで紐付けを行わない場合はErrorが発生します。
無事、作成出来ました!!🎉🎉(基本はセキュリティ上、前者の対応が良さそうな気がします。)
【RDS】
【セキュリティの設定】
1.作成したセキュリティグループを、サブネットグループに紐付けを行う。
5.上記AZに対応するprivate-subnet
を紐づける。
【KMSの設定】
DBの復元などを行う設定です。
2.下記のようになっていることを確認し、「次へ」をクリック。
【データベースの作成】
2.データベースの内容を細かく設定。
(下記参照。ただし、ポート番号など必要項目は要件に合わせてください。)
※念の為、概算コストなどは確認しておきましょう。(今回はコスト記載概要を満たすため、問題なしです。)
作成されるまで、少しお待ちしておきましょう。
できました!!
【EC2】
・名前「分かりやすい命名規則」
・OS「Amazon Linux 2 AMI (HVM) - Kernel 5.10, SSD Volume Type(64ビット x86)」
・インスタンスタイプ「t2.micro」
・VPC「デフォルト値」
・サブネット「publicを指定」
・セキュリティグループ:先ほど設定したグループを指定。
・その他はデフォルトのまま
キーペアの作成は忘れないようにしましょう!
【Elastic IPアドレス】
4.作成後に、IPの割り当てを行う(ElasticIPアドレスは控えておきましょう。)
【Route 53】
通常は、お名前.comなど格安のサイトで取得すべきですが、今回は、こちらの方法で取得します。
2.使用可能であれば、そのまま進めましょう。
※ただし、ドメイン名によって値段が上下するので比較して検討してください。
【S3】の設定
S3は別記事で紹介しておりますので、下記をご参照ください。
ただし、下記記事はRailsの写真保存の内容ですので、ログ退避の設定はご自身で調査お願いします。
【デプロイ前準備】
お待たせしました!いよいよデプロイです。
1.EC2で作成したpemキーを.ssh
直下に先ほど取得したキーを設定する。
2.下記をコピーし、ターミナルで実行。(インスタンスの権限を許可・実行をする)
3.下記稼働確認を行う
下記のようになればログインできてます。
xxx .ssh % ssh -i "xxxx.pem" xxxxx.xxxx.xxx.xx.xx.amazonaws.com
Last login: xxxxxxxxxxxxx
, #_
~\_ ####_ Amazon Linux 2
~~ \_#####\
~~ \###| AL2 End of Life is 2025-06-30.
~~ \#/ ___
~~ V~' '->
~~~ / A newer version of Amazon Linux is available!
~~._. _/
_/ _/ Amazon Linux 2023, GA and supported until 2028-03-15.
_/m/' https://aws.amazon.com/linux/amazon-linux-2023/
EC2環境の設定
パッケージのアップデートを行う。
$ sudo yum -y update #パッケージのアップデート
yumパッケージのインストールを行う。
(下記は、MySQLのコマンド。別でpostgersを用意します。)
$ sudo yum -y install \
git make gcc-c++ patch curl \
openssl-devel \
libcurl-devel libyaml-devel libffi-devel libicu-devel \
libxml2 libxslt libxml2-devel libxslt-devel \
zlib-devel readline-devel \
mysql mysql-server mysql-devel \
ImageMagick ImageMagick-devel \
epel-release
Node.jsをインストールするためのリポジトリを設定するスクリプトを実行。
$ curl -sL https://rpm.nodesource.com/setup_19.x | sudo bash -
先ほど参照できるよう設定したリポジトリファイルからNode.jsをインストール
$ sudo yum install -y https://rpm.nodesource.com/pub_14.x/el/7/x86_64/nodesource-release-el7-1.noarch.rpm
Nodeの細かい設定など。。。
$ sudo yum install -y gcc-c++ make #開発ツールやコンパイラなどをインストール
$ curl -sL https://rpm.nodesource.com/setup_14.x | sudo -E bash - # Node.jsをインストールするためのリポジトリの設定スクリプトをダウンロード
$ sudo yum install -y nodejs # Node.js本体をインストールするためのコマンド
$ which node # download場所を確認
┗上記で、表示されればインストール完了。
Yarnの場合
$ curl -sL https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo # Yarnをインストールためのリポジトリ
Yarnを環境にインストール
$ sudo yum -y install yarn # Yarnをインストール
Rubyのbuild作業
[ec2-user@ip... ~]$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
[ec2-user@ip... ~]$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
[ec2-user@ip... ~]$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
[ec2-user@ip... ~]$ source ~/.bash_profile
下記を実行。
# ruby-buildインストールしてrubyをインストール
[ec2-user@ip... ~]$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
[ec2-user@ip... ~]$ rbenv install -v 3.1.4 #とんでもなく長いです。ティーブレイクしましょう。。。。
[ec2-user@ip... ~]$ rbenv global 3.1.4
[ec2-user@ip... ~]$ rbenv rehash
[ec2-user@ip... ~]$ ruby -v
ruby 3.1.4p223 (2023-03-30 revision 957bb7cb81) [x86_64-linux]
自身のレポジトリの紐付けを行う
[ec2-user@ip... ~]$ ssh-keygen -t rsa
上記のコマンド実行後、空エンターを押して実行する。
=begin
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ec2-user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ec2-user/.ssh/id_rsa.
Your public key has been saved in /home/ec2-user/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:YL6LzJmOgIQh+Qcyb+1GjjRF8PMPEAjLIM590RVPHQU ec2-user@ip-10-0-1-192.ap-northeast-1.compute.internal
The key's randomart image is:
+---[RSA 2048]----+
以下、略。
+----[SHA256]-----+
=end
発行した公開鍵を取得。
cd .ssh
cat id_rsa.pub #表示された内容をコピー
Githubと連携。
[ec2-user@ip... ~]$ ssh -T git@github.com
# 下記メッセージが出たらyesを入力する
Are you sure you want to continue connecting (yes/no)? # yes
# Hi! Githubアカウント名!!が出れば完了。
アプリでの設定
database.yml
ファイルで下記記述を追加する。
default: &default
# adapter: postgresql
# encoding: unicode
# username: user
# password: pass
# pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
host: <%= Rails.application.credentials.production[:MYAPP_DATABASE_HOST] %>
production:
<<: *default
database: <%= Rails.application.credentials.production[:MYAPP_DATABASE_NAME] %>
username: <%= Rails.application.credentials.production[:MYAPP_DATABASE_USERNAME] %>
password: <%= Rails.application.credentials.production[:MYAPP_DATABASE_PASSWORD] %>
credential.ymlを開く。
EDITOR="vim" rails credentials:edit
credential.ymlを下記のように編集する。
MYAPP_DATABASE_HOST: "AWSのDBのホスト名"
MYAPP_DATABASE_NAME: "database-1"
MYAPP_DATABASE_USERNAME: "postgres"
MYAPP_DATABASE_PASSWORD: "自身で設定したpassword"
EC環境にpostgresのインストール
sudo yum install postgresql-libs
sudo yum install postgresql-devel
⇨psql --version
┗psql (PostgreSQL) 12.15 のように表示されればOK
Githubソースの格納
[ec2-user@ip... ~]$ cd /
[ec2-user@ip... /]$ sudo mkdir /var/www/
[ec2-user@ip... /]$ sudo chown ec2-user /var/www/
[ec2-user@ip... /]$ cd /var/www
[ec2-user@ip... www]$ git clone クローンするレポジトリ名
config/master.keyの設定
cd /アプリ名
vim config/master.key
ローカルのmaster.keyの値を入力・保存
bundle準備
[ec2-user@ip... `アプリ名`]$ gem list bundler #bundlerのver確認
***LOCAL GEMS***
bundler (default: 2.3.17)
bundle install
[ec2-user@ip... `アプリ名`]$ gem install bundler `ローカルと同じバージョン`
[ec2-user@ip... `アプリ名`]$ bundle install
# Error時には、local環境で編集し、push後に再度pullしましょう。
下記のようなエラーが発生した場合は、記事をご参照ください。
An error occurred while installing pg (1.5.4), and Bundler cannot continue.
In Gemfile:
pg
マイグレーション
# DBを作成
[ec2-user@ip... `アプリ名`]$ rails db:create RAILS_ENV=production
# テーブル作成
[ec2-user@ip... `アプリ名`]$ rails db:migrate RAILS_ENV=production
Nginxのインストール
負荷分散を行うために、導入します。
[ec2-user@ip... ~]$ sudo amazon-linux-extras install nginx1 #install設定。
Elastic IPアドレスをアドレスバーに打鍵し、サイトが表示されたら成功。
Nginxの設定を行う。
[ec2-user@ip... ~]$ cd /etc/nginx/conf.d
[ec2-user@ip... conf.d]$ sudo vi aws-test-infra.conf
conf内の設定をする。(log管理用)
error_log /var/www/アプリ名/log/nginx.error.log;
access_log /var/www/アプリ名/log/nginx.access.log;
client_max_body_size 2G;
upstream aws-test-app {
server unix:///var/www/アプリ名/tmp/sockets/puma.sock fail_timeout=0;
}
server {
listen 80;
server_name xxx.xxx.xxx.xxx; # 作成したEC2の ElasticIPアドレス。
keepalive_timeout 5;
root /var/www/アプリ名/public;
try_files $uri/index.html $uri.html $uri @app;
location @app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://aws-test-app;
}
error_page 500 502 503 504 /500.html;
location = /500.html {
root /var/www/アプリ名/public;
}
}
Pumaサーバを本番環境で使用できるように設定。
environment "production"
tmp_path = "#{File.expand_path("../../..", __FILE__)}/tmp"
bind "unix://#{tmp_path}/sockets/puma.sock"
threads 3, 3
workers 2
preload_app!
pidfile "#{tmp_path}/pids/puma.pid"
# stdout_redirect "#{tmp_path}/logs/puma.stdout.log", "#{tmp_path}/logs/puma.stderr.log", true
plugin :tmp_restart
アプリの実行。
[ec2-user@ip... ~]$ cd /var/www/アプリ名/
[ec2-user@ip... アプリ名]$ RAILS_ENV=production rails assets:precompile
[ec2-user@ip... アプリ名]$ bundle exec puma -C config/puma/production.rb -e production
Nginxのスタート
[ec2-user@ip... アプリ名]$ sudo nginx -s stop #反映させるため、一時停止
[ec2-user@ip... アプリ名]$ sudo service nginx start #スタート
ここまできたら稼働確認します。ElasticIP
を打鍵し、下記のようになれば成功です。
※ 2回目以降のログインで、socketが割り当てられている場合、下記打鍵後に、立ち上げ直してください。
rm /var/www/aws_test_app/tmp/sockets/puma.sock
【Route53】
Aレコードを作成し、ElasticIPアドレス
と紐付けを行います。
Aレコードを作成後、しばらく待ってから立ち上げ直すとDNSでログインできるようになります。
【CM】
SSH化を行うための証明書をここで発行します。
ALBを使用する場合は、無料になります。(ALBは有料ですが。。。)
【ALB】
2.EC2のセキュリティグループを編集。(ALB経由のみに絞る。)
【ALBとRoute53の紐付け】
1.先ほど、ElasticIPアドレス
で作成したレコードを変更します。
立ち上げ直してSSH化できていれば問題なしです!!(証明書も問題ないですね!)
【WAFv2の設定】
DNSでは、ログインできましたが、IPアドレス直打ちの場合、http通信のままになります。
そのため、下記で、regexのパターンマッチで対策しましょう。
(本記事では割愛させていただきます。)
【終わりに】
ここまで読んでくださり、ありがとうございました。
AWSでのデプロイを通して、様々な周辺知識が身についたと思います。
AWSの無料期間内で経験したいと思い、本記事を作成しながらハンズオンしました。
データ分析など突き詰めればいろんなことができそうですが、個人開発レベルではこの記事レベルのことを押さえておけばいいいかな〜と思います。(CloudFontはふれたかったですが。。。)
また、注意でも触れたのですが、今回使用したものはお片付けしておきましょう。
使用していなくても、課金されてしまいます!!
関連付けなど解除しながら丁寧にお片付けして下さい。
(※VPCなど課金されないものもありますが、不安な方は全て削除しておきましょう。)
【引用】