皆様、お世話になっております。鈴木と申します。
現在、研修としてAWSの3層アーキテクチャの設計・構築に取り組んでいます。これまで自身で作成した設計書に基づいて手動での構築を進めてきましたが、今回はCloudFormationを活用して環境を構築していきたいと思います。
今回は概要の説明となります。
要件
- RPO(目標復旧時点)→最長24時間前
- RTO(目標復旧時間)→最長1日
導入
AWS3層アーキテクチャについて
まず簡単にAWSの3層アーキテクチャとは何か簡単に説明致します。
3層アーキテクチャの各層(Web層、アプリケーション層、データベース層)に分けられるケースがほとんどだと思います。一般的にはWeb層=パブリックサブネット、アプリケーション層=プライベートサブネット、データベース層=プロテクトサブネットやプライベートサブネットに該当すると思います。
なぜ各層に分けるかといえば主に3つの点があげられると思います。
①スケーラビリティと可用性
②セキュリティ
③管理と保守の容易さ
細かい説明は今回は省略しますが、各層に分けることで柔軟性が高く、安全性の確保されたアプリケーション環境を構築することができます。
AWS CloudFormationについて
今回手動ではなくIaCツールであるAWS CloudFormationを使用して環境構築を行います。
簡単にCloudFormationについてご説明致します。
AWS CloudFormationは、インフラストラクチャをコード(IaC: Infrastructure as Code)として管理するサービスです。テンプレートファイルを使用して、AWSリソースの作成、更新、削除を自動化します。
コードによる環境構築のメリットとしては
①再現性
②自動化
③管理の簡素化
の3つが挙げられます。
同じテンプレートを使用することで一貫性のあるインフラを複数の環境にデプロイでき、自動化することでヒューマンエラーも減少させることが出来ます。
また、コード管理となるためバージョン管理も容易になります。
これらは基本的にJSONまたはYAML形式で記述され、環境構築を行います。
構成図
構成図は下記のようになります。
構成の最終目標
【高可用性】
- マルチAZのアーキテクチャ構築(NAT・EC2・RDS)
- EC2とRDSの日次バックアップの取得
- ALBによるWebサーバーの負荷分散
- EFSを利用したEC2インスタンスの拡張
【セキュリティ】
- 転送時の暗号化の実施(HTTPS化)
※KMSを使用した内部通信の暗号化は今回は割愛(EC2↔RDS) - RDSはプライベートサブネットからのログインのみを許可
- VPCフローログとALBのアクセスログをS3への保管
【運用・保守性】
- CloudWatchよりでEC2のCPU使用率,メモリ使用率,ディスク使用率,ApacheのエラーログをCloudWatch logsより収集して監視し、閾値を超えた際にSNSでメール通知
- HealthイベントをEventBridge経由でSNSでメール通知
使用サービス
No. | サービス | サービス概要 | 構築概要 |
---|---|---|---|
1 | Amazon VPC | ネットワーク空間 | ネットワークCIDRを定義する。 |
2 | Amazon ALB | ロードバランサー | HTTPS通信を負荷分散する。 |
3 | Amazon EC2 | 仮想サーバー | Webサーバ―としてプロビジョニングする。OS: Amazon Linux 2023 |
4 | Amazon RDS DBサーバ―(Multi AZ) | 仮想サーバー | DBサーバ―としてプロビジョニングする。MySQL 8.0.35 |
5 | Amazon CloudWatch | リソース監視 | EC2のリソース使用状況を監視する。 |
6 | Amazon SNS | メール送信 | EventBridge・CloudWatchアラート検知時にメール送信を行う。 |
7 | Amazon S3 | ログ保管ストレージ | VPCフローログ、ALBアクセスログを保管する。 |
8 | AWS Session Manager | セッションマネージャー | EC2へのセキュアなアクセスを実施する。 |
9 | AWS Backup | バックアップ管理 | EC2とRDSを定期的にバックアップを実施する。 |
10 | AWS EventBridge | ルール設定 | AWS Healthの通知トリガーを指定する。 |
11 | AWS Health | AWSイベント通知 | パフォーマンスや障害情報などをEventBridge経由で通知する。 |
12 | AWS Route53 | ドメイン | ALBのアクセスポイントをRoute 53で定義する。 |
13 | AWS Health | AWSイベント通知 | パフォーマンスや障害情報などをEventBridge経由で通知する。 |
14 | AWS Secrets Manager | シークレットキー | RDSのアクセスキーを取得する。 |
15 | AWS Private Certificate Authority | 証明書の発行 | ALBの通信をHTTPS化するために使用する。 |
16 | AWS CloudFormation | IaCシステム | コード(JSON,YAML)にてAWS環境を構築する。 |
17 | Amazon Elastic File System | EC2用共有ファイル | EC2拡張時の共有ファイルを保存する。 |
構築手順
1.概要
【CloudFormation】AWSマルチAZ3層アーキテクチャの構築_概要←今回
2.VPCなど基盤構築
【CloudFormation】AWSマルチAZ3層アーキテクチャの構築_VPC
【CloudFormation】AWSマルチAZ3層アーキテクチャの構築_セキュリティグループ
【CloudFormation】AWSマルチAZ3層アーキテクチャの構築_IAMロール
【CloudFormation】AWSマルチAZ3層アーキテクチャの構築_キーペア
3.データベース・インスタンス構築
【CloudFormation】AWSマルチAZ3層アーキテクチャの構築_RDS
【CloudFormation】AWSマルチAZ3層アーキテクチャの構築_EFS
【CloudFormation】AWSマルチAZ3層アーキテクチャの構築_SSM
【CloudFormation】AWSマルチAZ3層アーキテクチャの構築_EC2
4.ネットワーク構築
【CloudFormation】AWSマルチAZ3層アーキテクチャの構築_Route53
【CloudFormation】AWSマルチAZ3層アーキテクチャの構築_ACM
【CloudFormation】AWSマルチAZ3層アーキテクチャの構築_ALB
5.ログ収集システム構築
【CloudFormation】AWSマルチAZ3層アーキテクチャの構築_S3・VPC Flow Logs・ALB access log
6.バックアップ設定
【CloudFormation】AWSマルチAZ3層アーキテクチャの構築_Backup
7.監視システムの構築
【CloudFormation】AWSマルチAZ3層アーキテクチャの構築_CloudWatch・SNS
【CloudFormation】AWSマルチAZ3層アーキテクチャの構築_Health・EventBridge
以上の手順にて構築致します。
どうぞ宜しくお願い致します。