サイトアイコン 協栄情報ブログ

AWS CDKによるマルチAZ3層アーキテクチャ構築

皆様こんにちは。kitayaと申します。
今回は研修にて学習した内容について投稿させていただきます。

目的

AWS CDKを用いて下記の非機能要件に基づいてマルチAZ3層アーキテクチャを構築する。

要件

IaCツールの比較

インフラストラクチャ・アズ・コード(IaC)のツールは様々な形式が存在します。それぞれのツールには固有のメリットとデメリットがあり、使用する状況に応じて選択されます。
今回は学習のため、AWS CDKを使用しますが各形式の比較をしました。
※下記以外にもIaCツールは多く存在します

比較

ツール名 シェア 対応プラットフォーム 使用言語 柔軟性 学習コスト テンプレートの可読性
AWS CDK AWS Python、TypeScript、JavaScript、Java、C#、Go 中~高 高(コードベース)
CloudFormation AWS JSON、YAML 低(冗長)
Terraform 最も高い マルチクラウド対応(AWS、Azure、GCPなど) HCL
Pulumi マルチクラウド対応(AWS、Azure、GCPなど) JavaScript、TypeScript、Python、Go、.NET 中~高 高(コードベース)

メリット、デメリットまとめ

ツール名 メリット デメリット
AWS CDK ・プログラム言語でのインフラ定義が可能
・高い抽象化と再利用性
・AWSサービスとの強力な統合
・CloudFormationに依存しており、その制限やバグの影響を受ける
・プログラム言語の知識が必要で、初期の学習コストが高い
・AWS以外には対応していない
CloudFormation ・JSON、YAML形式でインフラを定義できる
・自動ロールバック機能
・AWSサービスとの強力な統合
・複雑なテンプレートは冗長になりがちで、可読性が低下する
・カスタマイズ性が低く、他に比べて柔軟性が低い
・AWS以外には対応していない
Terraform ・宣言型のシンプルで直感的な設定が可能
・強力なコミュニティと豊富なモジュールライブラリ
・マルチクラウド対応
・複雑なロジックを扱う際、HCLの制限で冗長な記述が必要になることがある
・初めて使用する際の設定が少し複雑に感じることがある
Pulumi ・プログラム言語でのインフラ定義が可能
・高い抽象化と再利用性
・マルチクラウド対応
・新しいツールのためドキュメントやサポートが少ない
・プログラム言語の知識が必要で、初期の学習コストが高い

AWS CDKの概要

AWS Cloud Development Kit (AWS CDK)は、プログラミング言語を使用してAWSリソースを定義およびプロビジョニングするためのオープンソースソフトウェア開発フレームワークです。AWS CDKを使用すると、インフラストラクチャをコードとして定義し、CloudFormationスタックとしてデプロイできます。

主な特徴

基本的な構成要素

環境

以下の環境を使用しました。

cloud9での環境構築については下記の記事を参考にさせていただきましたのでご確認ください。

【AWS CDK (Python)】 AWS CDKの始め方

cloud9の新規利用終了に伴い、EC2上でも環境構築をしてみました。
下記ご確認ください。

AWS CDKの環境構築(EC2)

ソースコードの解説について

次回以降の投稿ではソースコードの解説をしていきます。
スタックの分割と各投稿で分割したサービスが一致していないこともあり、モジュールのインポートなどは省いています。

構成図

構成の最終目標

【高可用性】

【セキュリティ】

【運用・保守性】

利用するAWSサービス

サービス名 利用目的
EC2 (Elastic Compute Cloud) Webサーバーとして使用するため
RDS (Relational Database Service) DBサーバーとして使用するため
EFS(Elastic File System) EC2間でファイル共有を行うため
S3 (Simple Storage Service) VPCフローログ、ALBアクセスログの保管に使用するため
IAM (Identity and Access Management) EC2にcloudwatch Agent、session manager用の権限を与えるため
ALB (Application Load Balancer) 2つのWebサーバーの負荷分散のため
Route53 名前解決のため
ACM(AWS Certificate Manager) 証明書作成/利用のため
CloudWatchAgent ・CPU、メモリ、ディスク使用率の監視メトリクスを発行するため
CloudWatchAlarm ・EC2のリソース使用率の監視を行うため
・閾値を超えた場合、メール通知するため
SNS (Simple Notification Service) アラーム発生時のメール送信先トピックを作成するため
Eventbridge AWS Healthのイベントをメール通報できるようにするため。
AWS Backup EC2の定期的なバックアップを実施するため
AWS Health パフォーマンスに影響を与える可能性のある問題をAWS Eventbridgeに連携するため

構築手順

1.はじめに

2.VPCなど基盤構築

3.データベース・インスタンス構築

4.ネットワーク構築

6.ログ収集システム構築

7.バックアップ設定

8.監視システムの構築

モバイルバージョンを終了