🔰

【初学者向け】【備忘録】静的、動的コンテンツ配信を使用したWebアプリケーションサーバ設計

2024/07/27に公開

はじめに

一般的な静的、動的コンテンツ配信を使用したWebアプリケーションサーバ設計の構成図を作成しました。
構成図の各AWSサービスの役割を簡潔(なるべく専門用語を使用しない)に記載したので、わかりやすくサービスの概要を把握できると思います。
※学習の備忘録として残します。
※使用したAWSサービスの詳細についてはAWS公式ドキュメントをご確認ください。

構成図上のAWSサービス説明

WAF

ユーザがアプリケーションにアクセスするリクエストを監視し、アクセスを制御するために使用できるWebアプリケーションファイアウォールです。
SQLインジェクションやクロスサイトスクリプティングなどの一般的な攻撃から保護します。
構成図
CloudFrontと連携することで、WAF機能を強化することができます。

CloudFront,OAI

CloudFront:
ユーザへの静的および動的なWebコンテンツ (画像,HTML,動画など) の配信を高速化するWebサービスです。
OAI:
CloudFrontの機能で、特定のCloudFrontの配信を通じてのみ、S3バケット内のコンテンツにアクセスを許可するためのIDです。これにより、ユーザはCloudFrontを経由しないとS3バケットに直接アクセスできなくなり、コンテンツのセキュリティを高めることができます。
構成図
S3バケットに保存された静的コンテンツ(HTML,画像など)をグローバルなユーザに対して、迅速に低遅延で提供できるようになります。
OAIがあることで、S3バケットのコンテンツが不正に公開されるリスクを軽減し、データのセキュリティを強化できます。

※2024.7月時点ではOAI→OAC機能が使用されることが多いです。

S3

静的なWebコンテンツをバケット(ストレージの容器)に保存し、そのバケットをインターネットに公開する設定を行うことで、Webサイトとしてアクセス可能になります。
構成図
静的コンテンツ(HTML,画像など)のみから成るWebサイトをインターネットに公開できるようになります。

Route53

DNSサービスで、ユーザがアクセスしたドメイン名をIPアドレスに変換し、適切な場所に案内しています。ドメイン登録、DNSルーティング、ヘルスチェックの 3 つの主要な機能を任意の組み合わせで実行できます。
構成図
インターネット上でWebサイトやアプリケーションへのアクセス経路の状態を監視し、問題が発生しているサーバを避けて、ユーザからのアクセスを最も健全で効率的なサーバへと導いています。

ALB

アプリケーション層で動作する負荷分散は、インターネットからのWebサイトへのアクセス(HTTP/HTTPS通信)を複数のサーバーに振り分けることができます。
構成図
ユーザからの通信をEC2インスタンスに分散します。
EC2インスタンスの健康を常にチェックし、問題があるインスタンスには通信を送らず、正常に動作しているEC2インスタンスにリクエストを送ることで、アプリケーション全体のパフォーマンスと可用性を保ちます。

EC2 Auto Scaling

仮想サーバを提供するサービスであり、Auto Scalingと連携して使用することで、アクセスの増減に応じて、EC2インスタンスの数を自動的に増やしたり減らしたりできます。
※Auto Scalingと連携しなくてもEC2インスタンスは使用できます。
構成図
動的コンテンツを配信するために、プライベートサブネット内に配置し、2つの異なるアベイラビリティゾーン(AZ)にまたがるサブネットに分散配置します。これにより、一方のEC2インスタンスが障害によりアクセス不可になっても、もう一方のEC2インスタンスが引き続きサービスを提供できるため、常にユーザからのアクセスに対応できる体制が整っています。

セキュリティグループ(SG)

特定のAWSサービスに紐付けられるファイアウォールで、ネットワーク上で安全に通信できるように、どの通信を許可し、どの通信を拒否するかを管理する機能です。デフォルトで、インバウンド通信(外部からの全ての接続)をブロックし、アウトバウンド通信(内部からの全ての接続)を許可します。これにより、不要なアクセスを防ぎつつ、必要な通信は行えるようになっています。また、ステートフル(一度許可した接続に対する返信は自動的に許可される)であるため、スムーズに通信が続けられます。
構成図
各EC2インスタンスのインバウンド通信はALBからのHTTP(80)と内部ネットワークからのSSH(22)のみ許可しています。
ALBのインバウンド通信はインターネットからのHTTPS(443)のみ許可しています。

IAMロール

IAMロールの1つの機能としてサービスロールがあります。
これは、特定のAWSサービスがユーザの代わりに特定のアクションを実行できるようにするものです。
AWSサービスが他のAWSリソースと連携する際に使用され、特定の権限をそのサービスに委任するために使用されます。
構成図
EC2インスタンスがS3,CloudWatch,VPC Endpointサービス等と連携するための特定の権限を付与しています。

VPC Endpoint

サービス利用側のVPC内に作成され、VPC内のAWSサービスがインターネットを介さずに外部のAWSサービスと連携できるようになります。
構成図
プライベートネットワーク内に配置しているEC2インスタンスがインターネットを介さずに外部のS3,CloudWatchと連携するための接続点となっています。

CloudWatch

AWSサービスとクラウド上で動作するアプリケーションの広範囲にわたるモニタリングツールで、リアルタイムでのシステムのパフォーマンス追跡機能を提供します。例えばEC2インスタンスのCPU使用率の監視や障害時の自動復旧が実行されるなど、重要なメトリクス(数値ベースの指標)を収集してシステムの健康状態のすべてを一つの場所で見ることができます。パフォーマンスの問題が発生した際にアラートを送信し、さらには必要に応じて自動的に問題対応し、運用をより効率的かつ効果的に行うことが可能になります。
構成図
リクエスト数、エラー率、低遅延など、S3バケットからのデータの配信効率を監視します。
EC2インスタンスのCPU使用率の監視、障害時に自動復旧が実行されるようになります。

終わりに

今回も自ら設計を考え構成図を作成したことで、ユーザからアクセスされる通信が各AWS機能を連携してどのように仕組化されているのか良く理解できました。単発サービス使用時と複数サービス使用時でサービスの役割が変わってくることが良くわかります。
今後も自ら設計し、構成図を作成して、AWSサービスの知識を深めていきます。
最後まで読んでくださり、ありがとうございました。

Discussion