Webサービスを運営するにあたって
絶対に避けて通れないのがデプロイ。
Webサービスって言ってるのに
Web上に公開されてないじゃ話になりませんからね。
その際に使われるので有名なのがAWS。
クラウドでサーバーを建てることができ、
デプロイをする際にもよく使われるものです。
ただ、このAWSとにかく機能が多い。
ほんとにクラウドでなんでもできるように
みたいな感じになってるのでどれ使えば良いか迷う・・・
というわけで今回は自分が個人開発をする上で
最低限これがあれば成立するなっていうものが
わかったのでそれを書いていこうと思います。
個人開発でのAWS何触ればいいかわからん!
っていう人はぜひ最後まで見ていってください!
では初めて行きましょう。
EC2
EC2(Elastic Compute Cloud)は、
Webサービスを動かすための仮想サーバーです。
これがなければ何も始まりません。
RailsやReactなどで作ったアプリを動かす土台です。
最低限必要なもの
インスタンス: これがサーバー本体です。
最初はt2.microやt3.microといった
無料利用枠の対象になるサイズで十分です。
セキュリティグループ: EC2インスタンスのファイアウォール(門番)です。
「この種類の通信(例: HTTPS)は許可する」
「それ以外は全部拒否」といったルールを設定します。
最初は「SSH(自分用)」と「HTTPS(ユーザー用)」の
入り口だけ開けておけばOKです。
ロードバランサー (ALB): ユーザーからのアクセスを最初に受け取る交通整理役です。
これを使うことで、
将来サーバーを増やした時にアクセスをうまく振り分けたり、
後述するHTTPS化(SSL証明書の設定)を簡単に実現できます。
個人開発でも最初から導入するのがおすすめです。
VPC
VPC (Virtual Private Cloud)は、
AWS上に作る自分専用のプライベートなネットワーク空間です。
この安全な空間の中に、EC2やデータベースなどを配置していきます。
最低限必要なもの:
パブリックサブネット: インターネットと直接通信できるエリアです。
ユーザーからのアクセスを受け付けるロードバランサーや、
Webサーバー(EC2)はここに置きます。
プライベートサブネット: インターネットから直接アクセスできない、より安全なエリアです。
個人情報などを扱うデータベースは、必ずこちらに配置します。
Webサーバー(EC2)からのみアクセスできるように設定するのが鉄則です。
インターネットゲートウェイ & NATゲートウェイ: パブリックサブネットが
インターネットと通信するための「玄関」がインターネットゲートウェイ。
プライベートサブネットが外部にアップデートなどを取りに行くための
「裏口」がNATゲートウェイです。
Aurora and RDS (Relational Database Service)
Webサービスには欠かせないデータベースです。
RDSを使えば、MySQLやPostgreSQLといった
データベースの面倒なインストールやバックアップ、
アップデートをAWSが全て自動でやってくれます。
最低限必要なもの:
DBインスタンス: データベースサーバー本体です。
こちらも最初は一番小さいサイズで十分。
配置場所: 必ずプライベートサブネットに配置しましょう。
セキュリティグループ: RDS専用のセキュリティグループを作成し、
「パブリックサブネットにあるEC2からの通信(ポート3306など)」
だけを許可するように設定します。
これで、データベースはインターネットの脅威から完全に隔離されます。
Route 53
Route 53は、DNS(ドメインネームシステム)サービスです。
example.comのような人間がわかるドメイン名を、
Webサーバーの住所(IPアドレスやロードバランサー)に変換する「住所録」の役割を担います。
最低限必要なもの:
ホストゾーン: あなたが管理するドメイン(例: example.com)の設定をまとめたものです。
Aレコード (エイリアス): 「example.comへのアクセスが来たら、
あのロードバランサーに送ってください」と設定するレコードです。
IPアドレスが変わりやすいクラウド環境では、
特定のAWSリソース(ALBなど)に直接紐づけられるエイリアスレコードを使うのが基本です。
Elastic Container Registry (ECR)
もしあなたが開発にDockerを使っているなら、ECRは必須です。
ECRビルドしたアプリケーションのDockerイメージを
安全に保存しておくためのプライベートな倉庫みたいなものです。
なぜ必要か?
EC2インスタンス上で直接docker buildするのは、非効率でリスクが高いです。
開発はローカルやCI/CDツールで行い、完成した(Dockerイメージ)をECRに保管。
EC2は、その完成品をダウンロードして起動するだけ、
という役割分担する方がデプロイが高速になって、サーバーの増設も容易になります。
IAM
IAM(Identity and Access Management)は、
AWSの各サービスへのアクセス権限を管理する、非常に重要なサービスです。
誰が、どのサービスに対して、何をできるのかを細かく設定します。
最低限必要なもの:
IAMユーザー: AWSを操作する「人」のアカウントです。
ルートアカウント(契約者本人)を普段使いするのは危険なので、
必ず管理者権限を持つIAMユーザーを作成して、そちらでログインするようにしましょう。
IAMロール: EC2CI/CDパイプラインのような
「サービス」に権限を与えるための仕組みです。
「このEC2インスタンスは、S3にファイルをアップロードする権限を持ちます」のように、
サービスに役割(ロール)を割り当てます。
アクセスキーを直接サーバーに置くよりもはるかに安全です。
まとめ
というわけでいかがでしたでしょうか?
本当に最低限必要だなって思ったものだけ紹介してるので
もちろん使いこなせるならいろんな便利ツールを使った方がいいとは思います。
ただ、いきなり膨大なサービスから最適なものだけ使用する。
というのは不可能に近いので、
慣れていない方は今回紹介したものだけ触ってみるでもいいと思います!
難しく感じるかもしれませんが、これまで紹介したものを使用した
インフラ構築のざっくりとした流れは以下の感じになります。
- VPCで安全なネットワークを作り、
- その中にEC2(Webサーバー)とRDS(データベース)を配置。
- Route 53で取得したドメインを、EC2の前に置いたロードバランサーに向け、
- Dockerを使っているならECRにイメージを保管。
- そして、これら全ての権限管理をIAMで行う。
最初は覚えることが多くて大変に感じるかもしれませんが
一度この構成を作ってしまえば、あとはアプリケーションの開発に集中できます。
何から始めれば!!!
って迷ってる方はぜひ試してみてください!