お世話になっております、クラウド事業部の稲村です。
社内プロジェクトの一環で、マルチAZのアーキテクチャを構築する機会がございました。
非常に勉強になりましたので、その構築の流れと学びを備忘録としてまとめたいと思います。
構成図
使用技術
AWSサービス
- VPC
- EC2
- ALB
- RDS
- S3
- EFS
- Route53
- ACM
- CloudWatch
- SMSS
OS
- Amazon Linux 2023
DB
- MySQL 8.0.41
Webサーバ
- Apache 2.4.62
VPCとサブネットの作成
パラメータ
VPC_CIDRブロック |
---|
10.0.0.0/16 |
AZ | 種類 | CIDR |
---|---|---|
ap-northeast-3a | public subnet | 10.0.0.0/20 |
ap-northeast-3a | private subnet | 10.0.48.0/20 |
ap-northeast-3a | protect subnet | 10.0.96.0/20 |
ap-northeast-3b | public subnet | 10.0.16.0/20 |
ap-northeast-3b | private subnet | 10.0.64.0/20 |
ap-northeast-3b | protect subnet | 10.0.112.0/20 |
構築手順
作成画面 → VPC > VPCを作成
※以降の構築手順で明記していない設定項目についてはデフォルトの状態で設定しています。
設定項目
- 名前タグの自動生成
任意のVPC名(以降便宜上、inamuray-vpcと記載します) - IPv4 CIDRブロック
10.0.0.0/16 - アベイラビリティゾーン (AZ) の数
2 - パブリックサブネットの数
2 - プライベートサブネットの数
4 - サブネットCIDRブロックをカスタマイズ
任意のCIDRブロックを設定 - NAT ゲートウェイ
AZごとに1
セキュリティグループの作成
パラメータ
- EC2用SG
ルール | タイプ | プロトコル | ポート範囲 | 送信先 |
---|---|---|---|---|
Inbound | HTTP | TCP | 80 | 0.0.0.0/0 |
Outbound | すべてのトラフィック | すべて | すべて | 0.0.0.0/0 |
- ALB用SG
ルール | タイプ | プロトコル | ポート範囲 | 送信先 |
---|---|---|---|---|
Inbound | HTTPS | TCP | 443 | 0.0.0.0/0 |
Inbound | HTTP | TCP | 80 | 0.0.0.0/0 |
Outbound | すべてのトラフィック | すべて | すべて | 0.0.0.0/0 |
- RDS用SG
ルール | タイプ | プロトコル | ポート範囲 | 送信先 |
---|---|---|---|---|
Inbound | MySQL | TCP | 3306 | EC2用SG |
Outbound | すべてのトラフィック | すべて | すべて | 0.0.0.0/0 |
- EFS用SG
ルール | タイプ | プロトコル | ポート範囲 | 送信先 |
---|---|---|---|---|
Inbound | NFS | TCP | 2049 | EC2用SG |
Outbound | すべてのトラフィック | すべて | すべて | 0.0.0.0/0 |
- SSM用SG
ルール | タイプ | プロトコル | ポート範囲 | 送信先 |
---|---|---|---|---|
Inbound | HTTPS | TCP | 443 | EC2用SG |
Outbound | すべてのトラフィック | すべて | すべて | 0.0.0.0/0 |
構築手順
作成画面 → VPC > セキュリティグループ > セキュリティグループを作成
設定項目
手順に沿ってそれぞれのセキュリティグループを作成。
- セキュリティグループ名
任意のセキュリティグループ名を設定 - 説明
任意の説明文を記載 - インバウンドルール
上記のパラメータに沿ってルールを追加 - アウトバウンドルール
上記のパラメータに沿ってルールを追加
IAMロール作成
構築手順
作成画面 IAM > ロール > ロールを作成
- ユースケース
EC2 - 許可ポリシー
- AmazonSSMManagedInstanceCore
- CloudWatchAgentServerPolicy
- ロール名
任意のロール名を設定
EC2構築
構築手順
作成画面 :EC2 > インスタンス > インスタンスを起動
設定項目
- 名前
インスタンスに付与する任意の名前を設定 - Amazonマシンイメージ(AMI)
Amazon Linux 2023 kernel-6.1 AMI - インスタンスタイプ
t3.micro - キーペア
新しいキーペアを作成し、選択 - ネットワーク
inamuray-vpcを選択 - ファイアウォール(セキュリティグループ)
EC2用SGを選択 - IAM インスタンスプロフィール
作成したIAMロールをアタッチ
RDS構築
構築手順
サブネットグループの作成
作成画面 :RDS > サブネットグループ > DBサブネットグループを作成
設定項目
- 名前
任意のサブネットグループ名 - 説明
任意の説明文を記載 - VPC
inamuray-vpc - アベイラビリティゾーン
サブネットが所属しているAZを選択 - サブネット
protect subnetを2つ選択
RDSの作成
設定項目
作成画面 :データベース > データベースの作成
- エンジンのオプション
MySQL - 説明
任意の説明文を記載 - VPC
inamuray-vpc - アベイラビリティゾーン
サブネットが所属しているAZを選択 - サブネット
protect subnetを2つ選択
SSM接続設定
パラメータ
- 下記サービスのエンドポイントを作成
- com.amazonaws.ap-northeast-3.ssm
- com.amazonaws.ap-northeast-3.ssmmessages
- com.amazonaws.ap-northeast-3.ec2messages
構築手順
作成画面 :VPC > エンドポイント > エンドポイントの作成
※まとめてサービスを選択できないので、一つずつエンドポイントを作成
設定項目
- 名前タグ
任意の名前を指定 - サービス
上記のサービスを選択 - VPC
inamuray-vpc - サブネット
EC2が配置されているサブネット(private subnet)を選択 - セキュリティグループ
SSM用SGを選択
ALB構築
ターゲットグループの作成
作成画面 :EC2 > ターゲットグループ > ターゲットグループの作成
設定項目
- ターゲットグループ名
ターゲットグループの名前を設定 - VPC
inamuray-vpc - 使用可能なインスタンス
作成したインスタンスを選択し、ターゲットグループに登録
ALBの作成
作成画面 :EC2 > ロードバランサー > ロードバランサーの作成
設定項目
- ロードバランサー名
任意の名前を設定 - アベイラビリティーゾーンとサブネット
public subnetを選択 - セキュリティグループ
ALB用SGを選択
Route53(DNSレコードの作成)
構築手順
※今回は既存のホストゾーンを使用
作成画面 :Route53 > ホストゾーン > ホストゾーンを選択 > レコードを作成
設定項目
- レコード名
任意のレコード名を設定 - エイリアス
有効 - エンドポイント
Application Load BalancerとClasic Load Balancerへのエイリアス - リージョン
VPCが所属するリージョンを選択 - ロードバランサーを選択
対象のロードバランサーを選択
証明書の取得(ACM)
構築手順
作成画面 :Certificate Manager > リクエスト
設定項目
- 完全修飾ドメイン名
Route53で作成したレコードを記載
リクエスト後「Route53でレコードを作成」を押下し、Route53へレコードを作成
ALBリスナー、HTTP→HTTPSへのリダイレクト設定
HTTPSリスナーの作成
構築手順
作成画面 :EC2 > ロードバランサー > albを選択 > リスナーとルール > リスナーの追加
設定項目
- プロトコル
HTTPS - ポート
443 - アクションのルーティング
ターゲットグループへ転送 - ターゲットグループ
作成したターゲットグループを選択 - 証明書 (ACM から)
作成した証明書を選択
HTTP→HTTPSへのリダイレクト設定
構築手順
作成画面 :EC2 > ロードバランサー > albを選択 > リスナーとルール > リスナーの追加
設定項目
- プロトコル
HTTP - ポート
80 - アクションのルーティング
URLにリダイレクト - プロトコル
HTTPS - ポート
443
S3構築、ALBアクセスログの取得
S3構築
構築手順
作成画面 :S3 > 汎用バケット > バケットを作成
設定項目
- バケット名
任意のバケット名を設定 - 暗号化タイプ
Amazon S3 マネージドキーを使用したサーバー側の暗号化 (SSE-S3) - このバケットのブロックパブリックアクセス設定
下記にチェック
・新しいアクセスコントロールリスト (ACL) を介して付与されたバケットとオブジェクトへのパブリックアクセスをブロックする
・任意のアクセスコントロールリスト (ACL) を介して付与されたバケットとオブジェクトへのパブリックアクセスをブロックする - ターゲットグループ
作成したターゲットグループを選択 - 証明書 (ACM から)
作成した証明書を選択
ALBのアクセスログ取得
構築手順
作成画面 :EC2 > ロードバランサー > albを選択 > アクション > ロードバランサー属性を編集
設定項目
- モニタリング
アクセスログを有効にする
SNSトピック作成
トピックの作成
構築手順
作成画面 :Simple Notification Service > トピック > トピックの作成
設定項目
- タイプ
スタンダード - 名前
任意の名前 - 表示名
任意の表示名(今回は名前と同様に設定)
サブスクリプションの作成
設定項目
- プロトコル
Eメール - エンドポイント
送信先メールアドレス
送信先メールアドレス宛に送られたメールで認証を行う
CloudWatch監視設定
CWAgentインストール、設定
構築手順
- CWAgentを各EC2にインストール
- Wizardを起動し、設定ファイルを編集
- CWAgentを起動
HealthyHostCount(ALB)
構築手順
作成画面 :CloudWatch > すべてのアラーム > アラームの作成 > ApplicationELB > HealthyHostCountを選択
設定項目
- TargetGroup
監視対象のTargetGroupのサフィックス - LoadBalancer
監視対象ALBのサフィックス - 条件
以下 - 閾値
0
CPUUtilization(EC2)
構築手順
作成画面 :CloudWatch > すべてのアラーム > アラームの作成 > EC2 > CPUUtilizationを選択
※閾値が80%と90%の場合で監視を設定
設定項目
- InstanceId
監視するEC2インスタンスのInstanceID - 条件
以上 - 閾値
80
mem_used_percent(EC2)
構築手順
CWAgentのインストール・起動が完了後に実施
作成画面 :CloudWatch > すべてのアラーム > アラームの作成 > CWAgent > mem_used_percentを選択
※閾値が80%と90%の場合で監視を設定
設定項目
- InstanceId
監視するEC2インスタンスのInstanceID - 条件
以上 - 閾値
80
感想
AWSの仕組みやインフラの可用性、耐久性の実現方法等、今回のプロジェクトでは非常に学びが多かったです。
本格的なインフラ環境を構築できた経験はとても大きなものだと感じており、今後も様々なアーキテクチャの構築に取り組んでいきたいと思いました。現在は、同様のアーキテクチャをAWS CLIを用いて構築しております。不慣れなためエラーが何度も発生し時折大変ですが、コンソールで作成した時と比べミスが減り、再現性や作業効率も格段に向上してとても感動しました。
今回のプロジェクトでAWSの様々な技術に興味が湧き、AWSエンジニアとして良い一歩を踏み出せたと思います。
今後は、毎日技術力を磨き続け一日でも早く、お客様に貢献できるエンジニアに成長したいです。
今後ともぜひ、よろしくお願いいたします。