AWSを活用したホームページ構成図の公開

この度、かねてより検討していたホームページの公開に向け、WEBサーバとしてアマゾンウェブ サービス(AWS)を利用することにしました。

AWSは、通信販売で有名なAmazon.com, Inc.を親組織とする、包括的なクラウドプラットフォームです。コンピューティングリソースやストレージ、データベースといった基本的なインフラに加え、機械学習、AI、データレイクと分析、IoTといった最先端のテクノロジーも提供されており、クラウド上で多様なアプリケーションを容易に構築できる点が魅力です。

個人利用においてAWSは、高性能なレンタルサーバとしての用途が多い一方で、その豊富なサービスの中から、自身の目的に必要なものを選択し、適切に組み合わせる必要があります。

幸いなことに、私は2023-11-27にAWS認定ソリューションアーキテクト – アソシエイト(SAA)の資格を取得しており、AWSの主要なサービスについては一通りの知識を有しています。しかしながら、資格取得が第一目標であったため、実際にAWSの環境を操作する時間は限られており、資格取得後も業務でAWSを利用する機会はありませんでした。

そこで今回、資格取得の際に受講したUdemy講座のハンズオン講義を参考に、AWS上にWEBサーバを構築する試みに挑戦しました。本稿では、その具体的な手順と、実際に手を動かして得られた学びについて共有したいと思います。

この記事を理解するための必要条件

  • 基本的なパソコン操作ができる
  • AWSにログインするところまで、AWS環境のセットアップができている
  • 主要なAWSサービスについて理解できるだけのWEB知識、PC知識を持っている

参照ページ

①これだけでOK! AWS 認定ソリューション アーキテクト – アソシエイト試験突破講座
https://www.udemy.com/course/aws-associate/learn/lecture/29964442?start=45#questions
②とりあえずWordPressをAWS EC2で動かす
https://zenn.dev/yuya_morimoto/articles/529442a2bd9ab7
➂VPC+EC2+Apache+MariaDBでWordPressを構築し、独自ドメイン+https化 – Qiita
https://qiita.com/JUN_WEB_FREE/items/f8465f71059a051743b2
④ドメインとは?メリット・種類・決め方をかんたんに解説
https://www.onamae.com/clever/about/domain.html

構成図概要

ドメイン:mkurauchi99.com
サイトURL:https://mkurauchi99.com

Region:東京リージョン

VPC:udemy
IPv4 CIDR:10.0.0.0/16

ELB(ALB):udemy-elb

Available Zone A:ap-northeast-1a

Public subnet A:パブリックサブネットA
IPv4 CIDR:10.0.0.0/24
EC2 – WebServer1:Public-1a
Public IP Address:XX.XX.XX.XX

Private subnet A:プライベートサブネットA
IPv4 CIDR:10.0.1.0/24
EC2 – MarioDB:Private-1a
Private IP Address:10.0.1.93

Available Zone B:ap-northeast-1c

Public subnet B:パブリックサブネットC
IPv4 CIDR:10.0.2.0/24
EC2 – WebServer2:Public-1c
Public IP Address:XX.XX.XX.XX

構成図詳細

1. Region

Region:東京リージョン

・AWS では、北米、南米、欧州、中国、アジアパシフィック、南アフリカ、中東などのリージョンを含む、複数の地理的なリージョンを整備している。
・リージョンに応じて価格と利用可能なサービスが少し異なる。
・各AWS リージョンは、1 つの地理的エリアにある、隔離され物理的にも分離された複数のAZ によって構成される。
・1つのリージョンにはユーザーが利用可能なAZが2つ以上構成されている。その中でユーザーが選択できないAZもあり、3つ以上のAZが存在する。
・日本には東京と大阪の2つのリージョンが設置されている。
・正式なリージョン名はアジアパシフィック(東京)だが、東京リージョンと呼ばれる。

2. アベイラビリティゾーン(AZ)

ap-northeast-1a
ap-northeast-1c

・1 つのAWS リージョン内でそれぞれ切り離され、冗長的な電力源、ネットワーク、そして接続機能を備えている1 つ以上のデータセンターであり、論理的データセンターのグループとなっている。
・AZは1つ以上のデータセンターで構成されており、AWSリソースを提供するサーバーが設置されている。
・AZによって、単一のデータセンターでは実現できない高い可用性、耐障害性、および拡張性を備えた本番用システムの運用が可能になる。
・各AZには個別の電力源、冷却システム、物理的セキュリティが備わっており、AZ間は冗長で低レイテンシーなネットワークを介し接続されている。
・アプリケーションが複数AZを利用している場合は停電、落雷、竜巻などの問題から保護することができる。
・同じリージョンにある各AZはそれぞれ他のAZから物理的に意味のある距離(数キロメートル)があるものの、互いは100 km (60 マイル) 以内に配置されている。

東京リージョン(ap-northeast-1)には、4つのAZが存在します(2025年4月時点)。
ap-northeast-1a
ap-northeast-1b(※)
ap-northeast-1c
ap-northeast-1d
(※)ap-northeast-1bは、キャパシティー(設備容量)の事情により利用制限があります。その場合、他の3つのAZから選択してサービスを利用します。

3. Virtual Private Cloud (VPC)

VPC:udemy
IPv4 CIDR:10.0.0.0/16

VPCは、AWSクラウド内に論理的に分離されたセクションを作り、ユーザーが定義した仮想ネットワークを構築するサービスである。
・リージョン内に5つまでVPCを設定可能(上限緩和申請可能)
・VPCはリージョンを超えることはできない。
・ 任意の IP アドレス範囲(CIDR)を選択して仮想ネットワークを構築
  ・ 最小サイズは/28 ⇒ 利用可能なIPアドレス数 16
  ・ 最大サイズは/16 ⇒ 利用可能なIPアドレス数 65536
・VPCはプライベートIPアドレスによってネットワークレンジを設定

4. サブネット

Public subnet A:パブリックサブネットA
IPv4 CIDR:10.0.0.0/24

Private subnet A:プライベートサブネットA
IPv4 CIDR:10.0.1.0/24

Public subnet B:パブリックサブネットC
IPv4 CIDR:10.0.2.0/24

・サブネットマスクでアドレス範囲をグループ化することで、見つけやすくする。このサブネットマスクによるグループ化されたアドレス範囲内をサブネットと呼ぶ。

・VPCがネットワークの範囲を規定し、さらにサブネットに範囲を分割して利用する。VPCとサブネットにはCIDR (IPアドレス範囲)が付与され、ネットワークレンジが決まる。

・サブネットは1つのAZに配置される。インターネットゲートウェイへのルーティングの有無でサブネットのタイプが決まり、インターネットゲートウェイへのルートが設定されると「パブリックサブネット」、されないと「プライベートサブネット」になる。

5. EC2 仮想サーバー

EC2 – WebServer1:Public-1a
Public IP Address:XX.XX.XX.XX

EC2 – MarioDB:Private-1a
Private IP Address:10.0.1.93

EC2 – WebServer2:Public-1c
Public IP Address:XX.XX.XX.XX

Amazon EC2は、Amazon Elastic Compute Cloud(以下、Amazon EC2)の略で、AWSが提供する「仮想サーバサービス」である。Amazon EC2を利用することで、従来のような物理サーバの構築や環境構築作業をすることなく、手軽に仮想サーバを用意することができる。

EC2ではOSからCPU、メモリ、ストレージなどの構成を選択して、仮想サーバーを起動することができる。EC2の利用する単位を「インスタンス」と呼び、任意のAZに「インスタンス」を立ち上げてサーバーとして利用する。

1) WebServer1:Public-1a

①EC2仮想サーバーの作成
・インスタンス名「Public-1a」
・Amazon Linux 2 AMIを選択
・インスタンスタイプ「t2.micro」を選択
・キーペアの作成(PEMファイルをダウンロード)
・VPC「udemy」
・サブネット「パブリックサブネットA」
・パブリックIPの自動割り当てを有効にする

②SSHで仮想サーバーへ接続
・EC2インスタンス作成時にダウンロードしたキーペアファイルを”~/.ssh/{KEYPARE}”に保存

➂Web Serverソフトをインストール
・SSH接続をした状態でApacheをインストールする
・Apacheを起動する
・インスタンスの起動時にApacheも自動で起動されるよう設定

④外部からアクセスできるようにセキュリティグループの設定変更

➄WordPressのインストール
・WordPressはyumではインストールできないので、wgetを用いてWordPressの圧縮ファイルを取得
・wp-config.phpを作成

2) MarioDB:Private-1a

①EC2仮想サーバーの作成
・インスタンス名「Private-1a」
・Amazon Linux 2 AMIを選択
・インスタンスタイプ「t2.micro」を選択
・WebServer1で作成したキーペアを使用
・VPC「udemy」
・サブネット「プライベートサブネットA」
・パブリックIPの自動割り当てを有効にする

②NATゲートウェイの設置
・戻りトラフィックにはNATゲートウェイが必要

➂SSHで仮想サーバーへ接続
・WebServer1で作成したキーペアのファイルを使用して、WebServer1からMarioDBへログイン
・ssh ec2-user@10.0.1.93 -i {KEYPARE}

④MariaDBをインストール
・SSH接続をした状態でMariaDBをインストールする
・MariaDBを起動する
・インスタンスの起動時にMariaDBも自動で起動されるよう設定

➄MariaDBの初期設定
・rootユーザーのパスワード設定
・rootユーザーでMariaDBへ接続
・DataBaseの作成
・ユーザーの作成

3) WebServer2:Public-1c

①WebServer1インスタンスのAMIイメージを複製

②AMIからインスタンスを起動
・インスタンス名「Public-1c」
・WebServer1で作成したキーペアを使用
・VPC「udemy」
・サブネット「パブリックサブネットC」
・パブリックIPの自動割り当てを有効にする

➂SSHで仮想サーバーへ接続確認
・パブリックIPでログインできることの確認

④Web Serverソフトをインストール確認
・Apacheがインストールされていることを確認
・Apacheを起動する
・インスタンスの起動時にApacheも自動で起動されるよう設定

➄WordPressのインストール確認
・WordPressがインストールされていることを確認
・wp-config.phpの内容確認

6. ドメイン

ドメイン名:mkurauchi99.com

ドメインの概要については、次のページを参照
https://www.onamae.com/clever/about/domain.html

①「お名前ドットコム」からドメインを購入(0円)

②Route53コンソールから「ホストゾーン」作成
・ドメイン名登録
・パブリックホストゾーン
・DNSレコード作成

➂「お名前ドットコム」のネームサーバー設定
・Route53の「ホストゾーン」のDNSレコードを反映

7. ELB (Elastic Load Balancing)

ELB(ALB)名:udemy-elb

ELBは複数のEC2インスタンスで処理を可能にするロードバランサ―を提供するサービスである

ELBの主要機能
・ヘルスチェック
・クロスゾーン負荷分散
・リスナー設定
・通信暗号化
・ステッキーセッション
・Connection Draining

通信暗号化(HTTPS)
・ELBにACMが管理するSSL/TLS証明書を設定して、HTTPSリスナーを設定することで、クライアント型との通信暗号化(HTTPS)を行う

ALB(Application Load Balancer )
・レイヤー7の対応が強化された単一ロードバランサーで、異なるアプリケーションへリクエストをルーティングが可能になる

1) セットアップ手順

①AWS Certificate Manager(以下ACM)で証明書を取得する

②ELBを作成する
・ALB(Application Load Balancer )選択
・ELB(ALB)名:udemy-elb
・スキーム「インターネット向け」選択
・リスナー「HTTPS」選択
・VPC「udemy」選択
・サブネット「パブリックサブネットA」と「パブリックサブネットC」選択
・新たにセキュリティグループ「LoadBarancerSecurityGroup」を作成
・新たにターゲットグループ「udemy-elb-target」を作成

➂ドメインとロードバランサーの紐付け

④http通信をhttps通信へリダイレクト

タイトルとURLをコピーしました