はじめに
未経験からエンジニアに転職し、2ヶ月が経ちました。
先日、初めて実務で「AWS上に環境を構築してほしい」という依頼を受けました。
これまで学習の中でAWSを触ったことはありましたが、実務で1人で環境構築を任されたのは今回が初めてでした。
実際に作成すると、本などでは気付けなかった学びや発見が多くありました。
この記事では、その経験を振り返りながら、どのように環境を構築し、どんな点でつまずき、どんな学びがあったのかをまとめています。
これからAWSの勉強を始めたい方や、インフラは苦手かもと感じている方の参考になれば幸いです。
要件定義
まずどのような環境を構築するのか明確にするため、要件を整理しました。
今回依頼内容は以下の通りでした。
- CPU: 4vCPU
- メモリ: 8GB以上
- ネットワーク: ネットワーク帯域が確保されている
- オプション: 高ネットワークパフォーマンスを有効化
- リージョン: us-east-1
- 構成: 高可用性
依頼時点で、アプリケーションが高負荷な状態でも安定して動作する開発環境が必要でした。
また、障害が発生してもすぐに復旧できるようにしてほしいという要望もあり、可用性と復旧性を重視した設計が求められました。
VPC設計の流れ
実際に環境を構築する前に、要件をもとに完成形のイメージと最小構成での再現を考えました。
実務では、動く環境だけでなく保守のしやすさ、拡張性、予算といった要素も考慮する必要もあります。
また、構成を図にして考えると全体像が掴みやすくなります。
1つずつサービスを積み上げていくよりも、最初に完成形をイメージしてから構築を進める方が効率的です。
今回は開発環境なのでEC2を1つだけ配置
ただし、将来的な拡張性を考慮しPublicSubnetを2つ用意しています。
PrivateSubnetにはRDS(MySQL)を配置し、マルチAZ構成によって冗長化させています。
また、自動でフェイルオーバーするよう設定しています。
構築順序
今回は、以下の順序でAWSの構築をしました。
VPCとCIDR設定
VPC(Vartual Private Cloud)とは
AWS上に自分用のネットワーク空間を作る仕組みです。
CIDRとは
VPC内で使う IPアドレスの範囲(ネットワークの広さ) を決めるルールです。
家庭や会社で使うLAN(ローカルネットワーク)と考え方は同じです。
| CIDR | IPアドレス範囲 | 利用できるIP数 |
|---|---|---|
| 10.0.0.0/16 | 10.0.0.0 ~ 10.0.255.255 | 約65000 |
| 10.0.0.0/24 | 10.0.0.0 ~ 10.0.0.255 | 約 250 |
今回は開発用の環境で大量にアドレスを必要としないので、以下としました。
| サブネット | 範囲 |
|---|---|
| PublicSubnet1 | 10.0.10.0/24 |
| PublicSubnet2 | 10.0.20.0/24 |
| PrivateSubnet1 | 10.0.30.0/24 |
| PrivateSubnet2 | 10.0.40.0/24 |
この範囲であれば、1つのサブネット内に約250台のインスタンスを配置でき、十分な広さを確保できるからです。
IGW、ルートテーブル作成
1. IGW(Internet Gateway)
IGWは、VPCをインターネットの接続するための入り口です。
これを先ほど作成したVPCにアタッチするとインスタンスがインターネットと通信できるようになります
もしIGWを設定していなければ、VPC内のインスタンスは外部との通信ができません。
2.ルートテーブル
IGWをVPCにアタッチしたら、通信経路を定義するためルートテーブルを設定します。
例えば、0.0.0.0(すべての外部通信)をIGWへルーティングすることで、そのサブネットのインスタンスがネットワークに接続できるようになります。
SG設定(EC2 RDS)
SG(Secrity Group) はAWSでのファイアウォールのような役割を持ち、どの通信を許可するかを定義します。
ここでは、アプリケーション層のEC2とデータベース層のRDSに別々のSGを設定します。
EC2
EC2とは、サブネット上に仮想サーバーを立てることができるサービスで、インスタンスという単位で扱います。
このインスタンスに必要なアプリケーションをインストールして作業をします。
開発用のため、外部接続はSSH(ポート22)のみ許可しました。
また、今回の開発環境ではElastic IPを割り当てていません。
停止して再起動を行わない限り、PublicIPは変わらないため固定IPが必要な状況ではないと判断しました。(コストもかかるので)
もし今後Webアプリとして公開する場合は、Elastic IPを割り当てて固定化する必要があります。
RDS
RDSとは、AWSがフルマネージドに管理してくれるデータベースのサービスです。
自分がサーバーを立てて、MySQLをインストールしなくてもRDSを使用すればすぐにDBを使える環境が手に入ります。
RDSはPrivateサブネットに配置し、EC2からの通信(ポート3306)のみ許可しています。
RDS作成
最初はPrivateサブネットにMySQLを配置しようと考えましたが、今回の要件である高可用性と、自身での保守のしやすさの観点からRDSを採用し方針に変更しました。
また、マルチAZ構成としフェイルオーバーを有効にし、障害発生時も自動的に復旧できる仕組みを採用しました。
マルチAZとは
RDSが、データベースを別のAZに複製して運用する仕組みです
メインDBとスタンバイDBを別のAZに配置して、それらが同期されます
フェイルオーバーとは
メインDBに障害が発生したとき、スタンバイDBへ自動で切り替える仕組み。
切り替えはAWSが自動で行い、アプリ側は新しいDBに自動接続されます。
さいごに
初めてAWS上で環境構築を任され、AWSの基礎の重要性を改めて実感しました。
「要件を満たした最小構成で考える」「コストを意識する」など、
学習では気づけなかった実務ならではの課題にも多く触れることができました。
この記事が、これからAWS構築に挑戦する方の参考になれば幸いです。

