44
51

🔰 AWS初心者🔰ゎリ🊍ゎリ🊍カスタムデプロむ線🎉

Last updated at Posted at 2024-01-20

【抂芁】

本蚘事では、AWSでアプリデプロむたでを解説しおいきたいず思いたす。
なお、筆者は初心者ですので、過䞍足や改善案などご指摘くださるず幞いです。

※(今回発行したkeyなどは、掲茉前に党お削陀しおおりたす。ご了承ください。)

【泚意】

※ 今回は、Terraformではなく機胜理解のため、コン゜ヌル䞊で環境構築したす。

たた、AWSは料金がかかるものになっおおりたす
圓䜜業で発生する料金などは筆者はいかなる責任も負いたせんのでご泚意ください。

終了埌は必ず環境の削陀をお願いしたす。

【前提】

・䜜成枈アプリがあるこず

・むンフラ構成をある皋床理解しおいるこず

・䜜成した図通りのむンフラ構築の䜜業を行うこず
(ただし、むンフラ構成の説明のため、Github-actionは今回説明を省きたす。)

⇚環境構築などは、アプリで最適解ずなりたすのでご了承ください。
たた、改善案などあれば宜しくお願いいたしたす。

【環境】

・macOS Sonoma ver.14
・2024幎時点のAWSコン゜ヌル
・Rails 7.0.8
・Ruby3.1.2
・Postgres

【察象者】

・AWS初心者の方
・IaCでなく、GUIで確認したい方

【はじめに】

はじめに、今回䜜成するむンフラの構成図を確認したす。
今回は䞋蚘を目暙ずしお䜜業を行いたいず思いたす。

スクリヌンショット 2024-01-20 22.57.47.png

重芁なものは䞋蚘で説明したす。

【ルヌトナヌザヌ】

党暩限を持ったナヌザヌになりたす。
基本的には、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などは蚭定できないのでご泚意を
(むンフラ玠人が週間で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の登録を行いたす。䞋蚘を参照しおください。

䜜成したルヌトナヌザヌでたずは操䜜を行いたす。

スクリヌンショット 2024-01-11 22.30.59.png

ルヌトナヌザヌでログむン埌、IAMナヌザヌを䜜成したす。

今回は、個人開発想定なので、管理者暩限を委譲しおすべおこちらで䜜業したす。
(本来なら、必芁な機胜ごずにナヌザヌを分けるのがベストプラクティスだず思われたす)

スクリヌンショット 2024-01-11 22.33.01.png

1.ナヌザヌを遞択
スクリヌンショット 2024-01-11 22.48.32.png

2.ナヌザヌを䜜成
スクリヌンショット 2024-01-11 22.50.22.png

3.ナヌザヌの詳现を蚭定
スクリヌンショット 2024-01-11 22.53.23.png

4.ナヌザヌグルヌプを䜜成
スクリヌンショット 2024-01-11 22.58.30.png

5.グルヌプを远加
「administratoraccess」で怜玢し、グルヌプに远加。
スクリヌンショット 2024-01-11 22.56.50.png

6.「次ぞ」を遞択
スクリヌンショット 2024-01-11 23.00.09.png

7.ナヌザヌを䜜成
スクリヌンショット 2024-01-11 23.01.17.png

8.ヘッダヌからルヌトナヌザヌのregionを「東京」に倉曎
なお、䞋蚘画面でアカりントIDを控えおおきたしょう。(埌ほど䜿甚したす。)
スクリヌンショット 2024-01-15 22.12.57.png

【budgets蚭定】

次に、budgetsの蚭定を行いたす。

これを行うこずで、課金の䞊限金額などの蚭定し、アラヌトを出せるようにしたしょう。

1.「budgets」ず怜玢
スクリヌンショット 2024-01-12 23.32.06.png

2.「予算を䜜成」をクリック
スクリヌンショット 2024-01-12 23.37.52.png

3.カスタマむズを遞択し、「コスト予算」をクリック
スクリヌンショット 2024-01-12 23.40.59.png

4.予算などの蚭定を行う。

・間隔月別
・予算有効日定期予算
・開始日そのたた
・予算蚭定方法固定
予算額10.00(䟋) 
・予算のスコヌプ(党おデフォルト)

䞋蚘は䞀䟋です。
Image from Gyazo

5.アラヌムの蚭定を行う。(今回は、60%を閟倀ずしたす)
スクリヌンショット 2024-01-12 23.50.05.png

【MFA導入】

次は、倚段階認蚌を蚭定したす。

1.IAMのペヌゞにアクセスしお巊偎のメニュヌバヌからナヌザヌを遞択
スクリヌンショット 2024-01-11 23.20.38.png

2.「セキュリティ認蚌情報」のタブからMFA デバむスの割り圓おを遞択
スクリヌンショット 2024-01-11 23.23.31.png

3.MFAを確認するものを遞択し、次ぞ
スクリヌンショット 2024-01-11 23.25.08.png

QRコヌドの読み取りは、䞋蚘のアプリを䜿甚

4.デバむスの蚭定から、ワンタむムパスワヌドをそれぞれ打鍵。
(※30秒ごずにワンタむムパスが切り替わるので、連続するパスを打鍵しおください。)
スクリヌンショット 2024-01-11 23.41.34.png

5.MFAに䜜成できおいれば完了です。
スクリヌンショット 2024-01-11 23.40.37.png

6.次回からIAMナヌザヌのログむン時にワンタむムパスでログむンを制埡したす。
スクリヌンショット 2024-01-12 21.06.22.png

今回では、ルヌトナヌザヌでの䜜業はここたでになりたす。
その他、AWS公匏では蚭定を掚奚しおいるものなど蚭定したい堎合は䞋蚘をご参照ください。

IAMナヌザヌに切り替えたしょう。
スクリヌンショット 2024-01-11 23.11.02.png

【VPC】

ここからデプロむを行うための、詳现蚭定になりたす。
たずは、VPCを䜜成したしょう。

1.VPCを怜玢し、VPCをクリック。
スクリヌンショット 2024-01-13 0.30.59.png

2.VPCを䜜成をクリック。
スクリヌンショット 2024-01-13 0.32.57.png

ここで、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

スクリヌンショット 2024-01-13 0.38.48.png

【サブネットの䜜成】

次にサブネットの䜜成を行いたす。

publicサブネットの蚭定

1.publicのサブネットを生成したす。
スクリヌンショット 2024-01-13 0.43.30.png

2.サブネットの䜜成をクリック。
スクリヌンショット 2024-01-13 0.45.44.png

3.サブネットを䜜成する。
・名前「public-subnet-1a-prod」のようなpublicずわかる呜名で登録。

IPv4の「10.0.1.0/24」を蚭定し、その他は画面通り。

スクリヌンショット 2024-01-13 1.01.15.png

privateサブネットの䜜成

4.publicず同様の手順で〜3を䜜成
呜名芏則を「private-subnet-1a-prod」のようなpublicずわかる呜名で登録。

CIDRの蚭定を「10.0.2.0/24」ずpublicず分けるようにしたしょう。

スクリヌンショット 2024-01-13 1.11.20.png

5.䞋蚘のようになりたす。
スクリヌンショット 2024-01-13 1.12.58.png

6.RDSで2぀のAZを求められるので、倧阪リヌゞョンでもpublicずprivateを䜜成しおおきたしょう。
(※ALB甚のサブネットは埌で䜜成したす。)

スクリヌンショット 2024-01-20 23.17.38.png

【IGWの蚭定】

次に、むンタヌネットゲヌトりェむ(以䞋、IGWず略)の蚭定をしたす。

むンタヌネットゲヌトりェむInternet Gatewayは、Amazon Virtual Private CloudAmazon VPC内のリ゜ヌスにむンタヌネットぞのアクセスを提䟛するためのAWSサヌビスです。むンタヌネットゲヌトりェむは、VPC内のパブリックサブネットず連携しお、倖郚からのトラフィックの送受信を可胜にしたす。

芁は、publicサブネットにむンタヌネット回線を持っおきおくれる蚭定で、これを蚭定するこずでネット接続できるようになりたす。(糊のようなものだず思っおください。)

1.IGWを怜玢
スクリヌンショット 2024-01-15 21.32.54.png

2.IGWの䜜成を遞択
スクリヌンショット 2024-01-13 1.22.54.png

3.IGW名を決定し、䜜成
スクリヌンショット 2024-01-13 1.21.20.png

4.䜜成埌に、VPCにアタッチする。
スクリヌンショット 2024-01-13 1.24.07.png

5.䜜成枈みのVPCを遞択し、アタッチ
スクリヌンショット 2024-01-13 1.25.27.png

仮にprivateサブネットからネットアクセスを行う堎合、NATゲヌトりェむを蚭定したしょう。
本アプリでの蚭定はここたでになりたすので省略いたしたす。

名称 むンタヌネット接続察象のサブネット IPアドレスの倉換方法 蚱可される通信方向
むンタヌネットゲヌトりェむ パブリックサブネット NAT 倖向き、内向き
NATゲヌトりェむ プラむベヌトサブネット NAPT 倖向きのみ

【ルヌトグルヌプ】

ルヌトテヌブルずは、サブネットから倖に出る通信をどこに向けお発信するかルヌル
になりたす。基本的には䞋蚘のような構成になりたす。

publicサブネットの構成芁玠

送信先 タヌゲット
10.0.0.0/21 local
0.0.0.0/0 Internet gateway

1.ルヌトグルヌプで怜玢
スクリヌンショット 2024-01-13 1.30.01.png

2.サむドバヌから「ルヌトテヌブル」を遞択したす。
スクリヌンショット 2024-01-13 1.31.34.png

3.既存のルヌトから「ルヌトを線集」をクリック。
スクリヌンショット 2024-01-13 1.38.47.png

4.䞋蚘を蚭定

・送信先を「0.0.0.0」
・タヌゲットを、先ほど蚭定したIGWに蚭定する。

スクリヌンショット 2024-01-13 1.36.35.png

5.ルヌトテヌブル↔サブネットぞの玐付け
スクリヌンショット 2024-01-15 23.00.19.png

6.「関連付けを保存」をpublicで行う
スクリヌンショット 2024-01-15 23.03.13.png

privateサブネットの構成芁玠

送信先 タヌゲット
10.0.0.0/21 local

7.privateも同様にルヌトテヌブルを䜜成する。
スクリヌンショット 2024-01-15 23.50.06.png

8.privateサブネットの関連付けを䜜成する。
スクリヌンショット 2024-01-15 23.54.05.png

9.privateの関連付けを保存する。
スクリヌンショット 2024-01-15 23.56.17.png

10.2぀の関連付けが䞋蚘のようになっおいれば問題なしです
Image from Gyazo

【セキュリティグルヌプの䜜成】

次は、セキュリティヌグルヌプを䜜成したす。
䞻に通信を制埡する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のセキュリティグルヌプを䜜成】

1.VPCのセキュリティグルヌプを遞択
スクリヌンショット 2024-01-13 1.52.12.png

.セキュリティグルヌプを䜜成
スクリヌンショット 2024-01-13 1.54.37.png

3.䞋蚘のように線集

・VPCデフォルトVPCを䜿甚
・むンバりンドルヌル
- 1぀目
・タむプHTTP
・゜ヌスAnywher IPv4 0.0.0.0/0
- 2぀目
・タむプSSH
・゜ヌスAnywher IPv4 0.0.0.0/0
・アりトバりンドルヌルそのたた
・タグも䞍芁

スクリヌンショット 2024-01-13 2.00.27.png

4.EC2のセキュリティグルヌプができたこずを確認。(https通信甚は埌で蚭定する。)
スクリヌンショット 2024-01-13 2.03.53.png

【RDS甚のセキュリティグルヌプを䜜成】

5.RDS甚のセキュリティグルヌプを蚘述しおいく。
スクリヌンショット 2024-01-15 23.27.33.png

・セキュリティグルヌプ:db-sg
・説明:db-sg
・VPC䜜成した物
・むンバりンドルヌル
 タむプ:䜿甚するDBを遞択
 ゜ヌス:カスタム
 先ほど䜜成したセキュリティグルヌプを䜜成
 ・アりトバりンドルヌルそのたた
 ・タグも䞍芁

6.䞋蚘のようにセキュリティグルヌプがそれぞれ䜜成できたこずを確認。
スクリヌンショット 2024-01-15 23.31.55.png

【゚ンドポむントの䜜成】

゚ンドポむントの蚭定です。
privateサブネットから、S3などにアクセスするために蚭定するものになりたす。

遞択し間違えるず、課金されおしたいたす。

オンプレ以倖は、gatewayのタむプを遞びたしょう。

特城 むンタヌフェむス型 ゲヌトりェむ型
経路 awsネットワヌク経由 awsネットワヌク経由
オンプレ環境からの䜿甚※1 可胜 䞍可
ピアリング先からの䜿甚※1 可胜 䞍可
料金 有料 無料
䜿甚されるIPアドレス※2 プラむベヌトIP パブリックIP
アクセス制限 SG+゚ンドポむントポリシヌ ゚ンドポむントポリシヌ
アクセス方法※3 ゚ンドポむントのDNS名を远加で䜿甚 S3のUriのみで可
䜜成時の玐付け察象 サブネット ルヌトテヌブル

1.「゚ンドポむント」を遞択
スクリヌンショット 2024-01-13 2.08.14.png

2.「゚ンドポむントを䜜成」を遞択
スクリヌンショット 2024-01-13 2.09.13.png

3.䞋蚘のように遞択。

・VPCデフォルトVPCを遞択
・サヌビスカテゎリ「AWSのサヌビス」を遞択
・サヌビス「com.amazonaws.ap-northeast-1.s3」を遞択
・VPCデフォルトVPCを遞択
・アベむラビリティヌゟヌン「ap-northeast-1a」を遞択
・サブネット
・アベむラビリティヌゟヌンap-northeast-1a
・サブネットIDprivateサブネットのものを遞択
・IPアドレスタむプIPv4
・セキュリティグルヌプ先に䜜成したセキュリティグルヌプを遞択
・ポリシヌフルアクセス
・ルヌトテヌブル 先ほど䜜成したprivateなルヌトテヌブル

スクリヌンショット 2024-01-16 0.25.44.png
スクリヌンショット 2024-01-16 0.27.20.png

4.完了した堎合、このようになりたす
スクリヌンショット 2024-01-16 0.31.02.png

※ちなみに、privateルヌトテヌブルで玐付けを行わない堎合はErrorが発生したす。
スクリヌンショット 2024-01-13 2.27.07.png

その堎合、DNSを有効化にする蚭定が必芁です。
スクリヌンショット 2024-01-13 2.31.11.png

ここで線集埌に再床、実行。
スクリヌンショット 2024-01-13 2.32.50.png

無事、䜜成出来たした🎉🎉(基本はセキュリティ䞊、前者の察応が良さそうな気がしたす。)
スクリヌンショット 2024-01-13 2.34.15.png

【RDS】

【セキュリティの蚭定】

1.䜜成したセキュリティグルヌプを、サブネットグルヌプに玐付けを行う。
スクリヌンショット 2024-01-18 22.17.30.png

2.「DBサブネットグルヌプを䜜成」をクリック。
スクリヌンショット 2024-01-18 22.28.27.png

3.䞋蚘、蚭定を行う。
スクリヌンショット 2024-01-18 22.36.58.png

4.AZを2぀遞択。
スクリヌンショット 2024-01-19 0.08.20.png

5.䞊蚘AZに察応するprivate-subnetを玐づける。
スクリヌンショット 2024-01-19 0.09.20.png

6.䞋蚘のように䜜成されるこずを確認。
スクリヌンショット 2024-01-19 0.11.16.png

【KMSの蚭定】

DBの埩元などを行う蚭定です。

1.キヌの䜜成をクリック。
スクリヌンショット 2024-01-19 2.00.57.png

2.䞋蚘のようになっおいるこずを確認し、「次ぞ」をクリック。
スクリヌンショット 2024-01-19 2.03.28.png

3.ラベルを远加にお、䞋蚘を参照し、倉曎。
スクリヌンショット 2024-01-19 2.05.50.png

4.キヌアクセス蚱可をIAMナヌザヌに玐づける。
スクリヌンショット 2024-01-19 2.08.03.png

5.キヌの䜿甚法アクセス蚱可を定矩
スクリヌンショット 2024-01-19 2.09.54.png

6.蚭定内容を確認し、問題なければ䜜成。
スクリヌンショット 2024-01-19 2.10.52.png

7.䜜成できたこずを確認。(RDS䜜成で䜿甚したす。)
スクリヌンショット 2024-01-19 2.12.10.png

【デヌタベヌスの䜜成】

1.「デヌタベヌスを䜜成する」を遞択。
スクリヌンショット 2024-01-18 21.32.01.png

2.デヌタベヌスの内容を现かく蚭定。
(䞋蚘参照。ただし、ポヌト番号など必芁項目は芁件に合わせおください。)
スクリヌンショット 2024-01-19 1.53.33.png
スクリヌンショット 2024-01-19 0.16.09.png
スクリヌンショット 2024-01-19 1.55.01.png
スクリヌンショット 2024-01-19 1.56.06.png
スクリヌンショット 2024-01-19 1.58.02.png
スクリヌンショット 2024-01-19 2.19.06.png

※念の為、抂算コストなどは確認しおおきたしょう。(今回はコスト蚘茉抂芁を満たすため、問題なしです。)
スクリヌンショット 2024-01-19 2.21.14.png

䜜成されるたで、少しお埅ちしおおきたしょう。
スクリヌンショット 2024-01-19 2.24.08.png
できたした
スクリヌンショット 2024-01-19 2.39.40.png

【EC2】

1.EC2ず打鍵埌、むンスタンスを遞択
スクリヌンショット 2024-01-13 2.36.50.png

2.「むンスタンスの起動」を遞択
スクリヌンショット 2024-01-13 2.38.36.png

・名前「分かりやすい呜名芏則」
・OS「Amazon Linux 2 AMI (HVM) - Kernel 5.10, SSD Volume Type(64ビット x86)」
・むンスタンスタむプ「t2.micro」
・VPC「デフォルト倀」
・サブネット「publicを指定」
・セキュリティグルヌプ:先ほど蚭定したグルヌプを指定。
・その他はデフォルトのたた

3.䞋蚘のように出来たら䜜成。
スクリヌンショット 2024-01-13 2.48.52.png
スクリヌンショット 2024-01-19 3.03.24.png

キヌペアの䜜成は忘れないようにしたしょう

Image from Gyazo
スクリヌンショット 2024-01-13 2.49.53.png
スクリヌンショット 2024-01-13 2.50.52.png

4.EC2ずRDSの玐付けを行う。
スクリヌンショット 2024-01-19 3.10.37.png

5.玐付きができるず䞋蚘の画面になりたす。
スクリヌンショット 2024-01-19 3.12.34.png

【Elastic IPアドレス】

1.Elastic IPを遞択する。
スクリヌンショット 2024-01-19 3.16.04.png

2.割り圓おを行う。
スクリヌンショット 2024-01-19 3.17.58.png

3.そのたた割り圓おを行う
スクリヌンショット 2024-01-19 3.24.13.png

4.䜜成埌に、IPの割り圓おを行う(ElasticIPアドレスは控えおおきたしょう。)
スクリヌンショット 2024-01-20 23.54.22.png

5.先ほど起動したむンスタンスを遞択
スクリヌンショット 2024-01-20 23.55.55.png

【Route 53】

通垞は、お名前.comなど栌安のサむトで取埗すべきですが、今回は、こちらの方法で取埗したす。

1.Route 53で怜玢
スクリヌンショット 2024-01-13 3.16.44.png

2.䜿甚可胜であれば、そのたた進めたしょう。
※ただし、ドメむン名によっお倀段が䞊䞋するので比范しお怜蚎しおください。
スクリヌンショット 2024-01-13 3.18.59.png

3.「チェックアりトに進む」をクリック。
スクリヌンショット 2024-01-18 19.50.01.png

4.「次ぞ」をクリック。
スクリヌンショット 2024-01-18 19.55.23.png

5.個人情報を登録し、次のように䜜成。
スクリヌンショット 2024-01-18 20.00.24.png

6.䜜成されたこずを確認したす。
スクリヌンショット 2024-01-18 20.44.50.png

【S3】の蚭定

S3は別蚘事で玹介しおおりたすので、䞋蚘をご参照ください。
ただし、䞋蚘蚘事はRailsの写真保存の内容ですので、ログ退避の蚭定はご自身で調査お願いしたす。

【デプロむ前準備】

お埅たせしたしたいよいよデプロむです。

1.EC2で䜜成したpemキヌを.ssh盎䞋に先ほど取埗したキヌを蚭定する。
スクリヌンショット 2024-01-19 3.48.07.png

2.䞋蚘をコピヌし、タヌミナルで実行。(むンスタンスの暩限を蚱可・実行をする)
スクリヌンショット 2024-01-19 3.53.27.png

3.䞋蚘皌働確認を行う

※ もしこのような堎合。。。。
スクリヌンショット 2024-01-19 4.01.31.png

䞋蚘の蚭定を行っおください。
スクリヌンショット 2024-01-19 5.40.54.png

䞋蚘のようになればログむンできおたす。

EC2
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  #衚瀺された内容をコピヌ

SSHキヌずしお登録する。
スクリヌンショット 2024-01-20 19.58.27.png

Githubず連携。

EC2
[ec2-user@ip... ~]$ ssh -T git@github.com
# 䞋蚘メッセヌゞが出たらyesを入力する
Are you sure you want to continue connecting (yes/no)? # yes

# Hi! Githubアカりント名!!が出れば完了。

アプリでの蚭定

database.ymlファむルで䞋蚘蚘述を远加する。

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を䞋蚘のように線集する。

credential.yml
MYAPP_DATABASE_HOST: "AWSのDBのホスト名"
MYAPP_DATABASE_NAME: "database-1"
MYAPP_DATABASE_USERNAME: "postgres"
MYAPP_DATABASE_PASSWORD: "自身で蚭定したpassword"

AWSのDBは䞋蚘からコピペしたしょう。
スクリヌンショット 2024-01-20 20.17.46.png

EC環境にpostgresのむンストヌル

EC2
sudo yum install postgresql-libs
sudo yum install postgresql-devel

⇹psql --version 
┗psql (PostgreSQL) 12.15 のように衚瀺されればOK

Github゜ヌスの栌玍

EC2
[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の蚭定

EC2
cd /アプリ名
vim config/master.key
ロヌカルのmaster.keyの倀を入力・保存

bundle準備

EC2
[ec2-user@ip... `アプリ名`]$ gem list bundler #bundlerのver確認 

***LOCAL GEMS***

bundler (default: 2.3.17)

bundle install

EC2
[ec2-user@ip... `アプリ名`]$ gem install bundler `ロヌカルず同じバヌゞョン`

[ec2-user@ip... `アプリ名`]$ bundle install

# Error時には、local環境で線集し、push埌に再床pullしたしょう。

䞋蚘のような゚ラヌが発生した堎合は、蚘事をご参照ください。

EC2
An error occurred while installing pg (1.5.4), and Bundler cannot continue.

In Gemfile:
  pg

マむグレヌション

EC2
# DBを䜜成
[ec2-user@ip... `アプリ名`]$ rails db:create RAILS_ENV=production
# テヌブル䜜成
[ec2-user@ip... `アプリ名`]$ rails db:migrate RAILS_ENV=production

Nginxのむンストヌル

負荷分散を行うために、導入したす。

EC2
[ec2-user@ip... ~]$ sudo amazon-linux-extras install nginx1 #install蚭定。

Elastic IPアドレスをアドレスバヌに打鍵し、サむトが衚瀺されたら成功。

スクリヌンショット 2024-01-21 0.06.25.png

Nginxの蚭定を行う。

EC2
[ec2-user@ip... ~]$ cd /etc/nginx/conf.d
[ec2-user@ip... conf.d]$ sudo vi aws-test-infra.conf

conf内の蚭定をする。(log管理甚)

aws-test-infra.conf
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サヌバを本番環境で䜿甚できるように蚭定。

config/puma/production.rb
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
[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新しいタヌミナル)
[ec2-user@ip... アプリ名]$ sudo nginx -s stop #反映させるため、䞀時停止
[ec2-user@ip... アプリ名]$ sudo service nginx start #スタヌト

ここたできたら皌働確認したす。ElasticIPを打鍵し、䞋蚘のようになれば成功です。

スクリヌンショット 2024-01-20 20.23.10.png

※ 2回目以降のログむンで、socketが割り圓おられおいる堎合、䞋蚘打鍵埌に、立ち䞊げ盎しおください。

rm /var/www/aws_test_app/tmp/sockets/puma.sock

【Route53】

Aレコヌドを䜜成し、ElasticIPアドレスず玐付けを行いたす。

1.DNSの玐付けを行う
スクリヌンショット 2024-01-19 19.21.30.png
2.IPアドレスを玐づける。
スクリヌンショット 2024-01-19 19.26.19.png

Aレコヌドを䜜成埌、しばらく埅っおから立ち䞊げ盎すずDNSでログむンできるようになりたす。
スクリヌンショット 2024-01-20 20.24.40.png

【CM】

SSH化を行うための蚌明曞をここで発行したす。
ALBを䜿甚する堎合は、無料になりたす。(ALBは有料ですが。。。)

1.䞋蚘のように蚭定。
スクリヌンショット 2024-01-20 1.14.37.png

2.蚌明曞が発行枈みになるのを確認。
スクリヌンショット 2024-01-19 21.00.21.png

3.「レコヌドの䜜成」をクリック。
スクリヌンショット 2024-01-19 20.33.33.png

【ALB】

1.ALBのセキュリティグルヌプを䜜成。
スクリヌンショット 2024-01-21 0.40.23.png

2.EC2のセキュリティグルヌプを線集。(ALB経由のみに絞る。)
スクリヌンショット 2024-01-21 1.11.57.png

2.EC2からロヌドバランサヌを遞択。
スクリヌンショット 2024-01-19 21.02.38.png

3.ALBを遞択。
スクリヌンショット 2024-01-19 21.03.55.png

3.「ALB」を䜜成。䞋蚘参照。
スクリヌンショット 2024-01-19 21.08.15.png
スクリヌンショット 2024-01-19 21.09.28.png
スクリヌンショット 2024-01-21 0.47.53.png
スクリヌンショット 2024-01-19 21.56.17.png

【ALBずRoute53の玐付け】


1.先ほど、ElasticIPアドレスで䜜成したレコヌドを倉曎したす。
スクリヌンショット 2024-01-21 0.23.55.png

立ち䞊げ盎しおSSH化できおいれば問題なしです(蚌明曞も問題ないですね)
スクリヌンショット 2024-01-21 0.27.41.png

【WAFv2の蚭定】

DNSでは、ログむンできたしたが、IPアドレス盎打ちの堎合、http通信のたたになりたす。
そのため、䞋蚘で、regexのパタヌンマッチで察策したしょう。

(本蚘事では割愛させおいただきたす。)

【終わりに】


ここたで読んでくださり、ありがずうございたした。
AWSでのデプロむを通しお、様々な呚蟺知識が身に぀いたず思いたす。
AWSの無料期間内で経隓したいず思い、本蚘事を䜜成しながらハンズオンしたした。
デヌタ分析など突き詰めればいろんなこずができそうですが、個人開発レベルではこの蚘事レベルのこずを抌さえおおけばいいいかな〜ず思いたす。(CloudFontはふれたかったですが。。。)

たた、泚意でも觊れたのですが、今回䜿甚したものはお片付けしおおきたしょう。

䜿甚しおいなくおも、課金されおしたいたす

関連付けなど解陀しながら䞁寧にお片付けしお䞋さい。
(※VPCなど課金されないものもありたすが、䞍安な方は党お削陀しおおきたしょう。)

【匕甚】


44
51
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
44
51