[広告]

AWSで3層Webシステム基盤をプロビジョニング

Webシステム等で使用するデータベースはインターネットから直接アクセスできないようにしておき、Webサーバーを経由してアクセスすることが一般的ですよね。 ここでは Amazon Web Services(AWS)を用いて同様の構成を作る場合の例について説明します。

(ご注意) この記事は開発、評価用環境での動作を想定したものであり、サービス提供を行う実運用環境での動作を説明したものではありませんのでご注意ください。

初出:2021年5月18日

概要

オンプレミスでは3層Webシステムと呼ばれる構成をAWSで作ります。全体の流れは下記の全体概要となります。 今回は、初めてのプロビジョニングだったためネットワーク(VPC、サブネット等)の全体構成のイメージを作るのに手間取りましたが、その後のプロビジョニング作業は比較的順調に進みました。
仮想サーバー(Webサーバー)からデータベースへの接続確認はpgAdminを利用して行います。
WebサーバーにはHTTPサーバーやアプリのインストールは行っていませんが、アプリ等からのデータベースへの接続設定はpgAdmin接続設定を参考にしてください。

pgAdmin公式サイト

pgAdminは、世界で最も先進的なオープンソースデータベースであるPostgreSQL向けの最も人気があり機能豊富なオープンソース管理および開発プラットフォームです。
pgAdmin is the most popular and feature rich Open Source administration and development platform for PostgreSQL, the most advanced Open Source database in the world.

データベースへの疎通確認用ツール(pgAdmin)はWindowsサーバーのほうがインストールも簡単だったため、今回はWindows版を選びました。 私もエンジニアとしてはコマンドライン好きのため、Linux版のpsqlでも接続しましたが、今回は見やすさを優先しGUIツールのpgAdminで説明します。

図中で使用している、略語の詳細は以下の通りです。

VPC: Amazon Virtual Private Cloud
EC2: Amazon Elastic Compute Cloud
RDS: Amazon Relational Database Service
EIP: Amazon Elastic IP address
AMI: Amazon Machine Image

プライベートサブネットDB設定概要

ネットワーク全体構成

Webサーバー用の仮想サーバーはインターネットからアクセスできるよう、インターネットゲートウェイをアタッチして、 ルートテーブル経路設定します。
データベースはRDSを使用しエンドポイントはインターネットゲートウェイをアタッチしていないサブネットへ配置します。
Webサーバー用のIPv4アドレスはEIPで割当・関連付けしています。EIPは単体では無料ですが、仮想サーバーを停止すると課金されますので 評価目的の場合に使用しない場合(インスタンス停止・終了中)は、関連付け解除と解放をしておきます。

ネットワーク全体構成
[広告]

ネットワーク設定

VPC、サブネットの設定情報を説明します。デフォルト設定については省略しています。

VPC設定

IPアドレスは任意設定が可能ですが、ここではプライベートIPアドレス帯を使用しています。

名称 設定値
IPv4 CIDRブロック 172.32.0.0/16
IPv6 CIDRブロック IPv6 CIDRブロックなし
テナンシー デフォルト(専有テナンシーを使用しない)

サブネット設定

パブリックサブネットとプライベートサブネットの設定概要です。
ネットワーク接続の制限にはネットワークACLは使用せず、後述するセキュリティグループを使用しています。

名称 パブリックサブネット プライベートサブネット
IPv4 CIDR 172.32.22.0/24 172.32.20.0/24
IPv6 CIDR (設定無し)
ネットワークACL インバウンド/アウトバウンドともに全プロトコル、全ポート通過
ルートテーブル 送信先/ターゲット① 172.32.0.0/16 / local
送信先/ターゲット② 0.0.0.0 / IGW(internetGateWay) (設定無し)(*1)

(*1)パブリック/プライベートサブネットとの違い

・・・サブネットに関連付けられているルートテーブルにインターネットゲートウェイへのルートがある場合、そのサブネットは「パブリックサブネット」と呼ばれます。 インターネットゲートウェイへのルートを持たないルートテーブルに関連付けられているサブネットは、「プライベートサブネット」と呼ばれます。

IGW(Internet Gate Way)
インターネットゲートウェイは、VPC とインターネットとの間の通信を可能にする VPC コンポーネントであり、冗長性と高い可用性を備えており、水平スケーリングが可能です。 (中略)アカウントでインターネットゲートウェイを設定しても、追加料金は発生しません。

出典:AWSドキュメント インターネットゲートウェイ

セキュリティグループ構成

サブネットに適用する通信制限を設定します。今回はクライアントのIPアドレスのみからの接続を許可し、その他は通信に最低限必要なポートとプロトコルのみを通過設定にしています。

セキュリティグループ構成
[広告]

仮想サーバー設定

Webサーバーの役割を行う仮想サーバーと、データベース設定について主な項目について説明します。その他の項目はデフォルト設定を使用しました。

仮想サーバー概要

Webサーバーの役割を担当するサーバーはWindowsServerを使用しました。

当初はLinuxでの設定にもトライしたのですが、pgAdminへクライアントPCから接続し、ブラウザで表示することができなかったため断念しました・・・機会があれば再チャレンジしてみたいと思います。

項目 説明/設定値
OS(AMI) WindowsServer2019Base
ストレージ(EBSボリューム) 汎用SSD(gp2)/30GB
IPアドレス EIPでIPv4アドレスを割り当てます

仮想サーバーインスタンス詳細

項目 説明/設定値
インスタンス数 1
スポットインスタンスのリクエスト リクエストしない(デフォルト)
ネットワーク 「評価用VPC」を選択
サブネット 「パブリックサブネット」を選択
自動割り当てパブリック IP サブネット設定を使用(無効)(デフォルト)
※インスタンス作成後にEIPでパブリックアクセスIPアドレスを割り当てます
インスタンスのプレイスメントグループへ追加 追加しない
キャパシティーの予約 開く(デフォルト)
ドメイン結合ディレクトリ ディレクトリなし(デフォルト)
IAM ロール なし(デフォルト)
シャットダウン動作 停止動作に休止動作を追加しない(デフォルト)
終了保護の有効化 誤った終了を防止しない(デフォルト)
モニタリング CloudWatch 詳細モニタリングを有効化しない(デフォルト)
テナンシー 共有- 共有ハードウェアインスタンスの実行(デフォルト)
Elastic Graphics グラフィックスアクセラレーションを追加しない(デフォルト)
クレジット仕様 無制限にしない(デフォルト)
Enclave 無効(デフォルト)
アクセス可能なメタデータ 有効(デフォルト)
メタデータのバージョン V1およびV2(トークンはオプション)
メタデータトークンレスポンスのホップ制限 1(デフォルト)
ユーザーデータ 省略(デフォルト)
※インスタンス起動後のコマンドは省略

パブリックIPv4アドレス割当

仮想サーバーのインスタンスを作成後はインターネット経由で接続できるようにパブリックIPv4アドレス(*2)を割り当てます。その手順と設定について説明します。

仮想サーバーのインスタンスを停止、終了した場合はEIPサービスの課金($0.005/h、無料使用枠外、2021年3月時点)が発生するため、関連付け解除、割当解放する手順としています。

パブリックIPv4割当手順

Elastic IPアドレスの割当て 設定値

名称 設定値
ネットワークボーダーグループ ap-northeast-1(デフォルト)
パブリックIPv4アドレスプール Amazon のIPv4アドレスプール

Elastic IPアドレスの関連付け 設定値

名称 設定値
リソースタイプ インスタンス
インスタンス (仮想サーバーーのインスタンスID)
プライベートIPアドレス (省略)
再関連付け 許可しない(デフォルト)

(*2)パブリックIPv4アドレス

Elastic IP アドレスは、インターネットからアクセス可能なパブリック IPv4 アドレスです。インスタンスにパブリック IPv4 アドレスがない場合は、Elastic IP アドレスをインスタンスに関連付けて、インターネットとの通信を有効にできます。たとえば、これにより、ローカルコンピュータからインスタンスに接続できます。現在、IPv6 に対する Elastic IP アドレスはサポートされていません。(2021年4月現在)

出典:AWSドキュメント Elastic IPアドレス

[広告]

データベース設定

データベースにはRDSを使用します。データベースの作成テンプレートは無料使用枠を選択しました。 その他のテンプレートを使用した場合は項目名が異なるので注意してください。

サブネットグループ設定

データベースを作成する前にサブネットグループをあらかじめ作っておく必要(*3)があります。今回の構成は以下のようになります。

DBサブネットグループ構成 DBサブネットグループ詳細

(*3)データベースに複数サブネットが必要な理由

Amazon RDS は、その DB サブネットグループと優先アベイラビリティーゾーンを使用し、サブネットとそのサブネット内の IP アドレスを選択して DB インスタンスに関連付けます。マルチ AZ 配置のプライマリ DB インスタンスが失敗した場合、Amazon RDS は対応するスタンバイを昇格させ、その後他のアベイラビリティーゾーンのサブネットの IP アドレスを使用して、新しいスタンバイを作成できます。

出典:AWSドキュメント VPC 内の DB インスタンスの使用

データベースインスタンス詳細

項目 説明/設定値
データベースの作成方法を選択 標準作成
エンジンのオプション PostgreSQL
バージョン PostgreSQL 12.5-R1
テンプレート 無料使用枠
※無料使用枠の有効期限が切れた又は、切れている場合は標準の従量料金制での支払が発生します。
DBインスタンス識別子 database-1(デフォルト)
マスターユーザー名 postgres(デフォルト)
パスワードの自動生成 オン(自動生成する)
※データベース作成中のデータベース一覧画面に表示される「認証情報の詳細を表示」で確認してください
DBインスタンスサイズ バースト可能クラス(t2クラスを含む)
db.t2.micro(デフォルト)
ストレージタイプ 汎用(SSD)(デフォルト)
ストレージ割り当て 20(GiB)
ストレージの自動スケーリング ストレージの自動スケーリングを無効にする
マルチAZ配置 未選択:マルチAZ配置しない(デフォルト)
VPC 「評価用VPC」を選択
サブネットグループ 「プライベートサブネット」に作成した「DBサーバー用サブネットグループ」を選択
パブリックアクセス可能 なし
※インターネットからの直接アクセスはできない
VPCセキュリティグループ 「RDS用セキュリティグループ」を選択
アベイラビリティゾーン 指定なし
データベース認証オプション パスワード認証

接続パスワード取得

データベースを作成中にデータベース一覧画面に表示される「認証情報の詳細を表示」ボタンから 接続の詳細画面を表示して、「エンドポイント」、「マスターパスワード」を取得します。この接続情報は のちほどpgAdminから接続する場合に必要となるのでしっかりメモしておいてください。

データベース一覧画面 データベース接続詳細

データベースの「マスターパスワード」と「エンドポイント」は「Copy」をクリックしてクリップボードにコピーすることもできます。

[広告]

仮想サーバー・データベース疎通確認

いよいよデータベースとの接続です。クライアント端末からリモートデスクトップで仮想サーバーへ接続して疎通確認を行います。 自宅からプロバイダー経由で接続する場合は、自宅側IPアドレスがセキュリティグループを作成したときのIPアドレスと異なると接続できません。 その場合は再度セキュリティグループの接続元IPアドレス(マイIP)を変更してください。

仮想サーバー・データベース接続確認

リモートデスクトップでの接続設定

EIPでパブリックIPv4を割り当てた後、EC2インスタンス詳細画面から仮想サーバーの接続情報を取得して接続します。

仮想サーバーの接続情報取得

接続用ファイルとパスワードの取得

「インスタンスに接続」画面から仮想サーバー(WindowsServer)への接続用パスワードを取得します。
デフォルトでは「セッションマネージャー」タブの画面が表示されますが、「RDPクライアント」タブをクリックして、リモートデスクトップファイルをダウンロード後、このファイルを利用して接続します。 IPアドレスのみの指定だけでは接続できませんでした。パスワードは復号化する必要があるため、「パスワードを取得」をクリックして次に進みます。

仮想サーバー接続パスワード取得

接続用パスワードを復号

接続情報画面ではパスワードは表示されていないので「パスワードを取得」から表示した「Windowsパスワードを取得」画面から、 仮想サーバーを作成したときに関連づけたキーペアを入力して、パスワードを復号化します。

接続用パスワードの復号化

「インスタンスに接続」画面に戻ると、復号化されたパスワードが表示されます。この画面を閉じると、また非表示となるため、再度復号化する必要があります。

復号化パスワードの表示

リモートデスクトップファイルでの接続

ダウンロードしたリモートデスクトップファイルを起動して仮想サーバーへ接続します。前述の復号化パスワードを利用する点に注意すれば、通常のリモートデスクトップ接続と同様です。
ダウンロードしたファイルは「ダウンロード」フォルダに「Windows Server 2019 Base.rdp」等の名前で格納されています。
リモートデスクトップ画面が表示されたら「接続」ボタンをクリックします

復号化パスワードの表示

「資格情報を入力してください」と表示されたら「パスワード」テキストボックスに復号化したパスワードを入力します。

復号化パスワードの表示

セキュリティ証明書の警告画面が表示されますが「はい」をクリックすると仮想サーバー(WindowsServer)へログインできます。

復号化パスワードの表示

pgAdmin接続設定

pgAdminを「pgAdmin公式サイト」からダウンロードしてインストールを行います。インストールはすべてデフォルト設定でインストールしました。 ここではインストールの詳細は省略しています。

ダウンロード(インストール)ファイル名:pgadmin4.5.2-x64.exe

pgAdmin4(Windows版)、2021年4月時点

インストールが完了したらpgAdminを起動します。初回のみマスターパスワードの入力を求められるので、任意のパスワードを登録してください。

pgAdminマスターパスワードの入力

マスターパスワード入力後にpgAdminが利用可能になります。初期表示は英語表記ですが日本語化が可能です。

pgAdmin初期画面

pgAdminを日本語化するにあたり下記記事を参考にさせていただきました。

(参考サイト)pgAdmin4を日本語化する、Qiita

pgAdminのサーバーペインから「作成」を選択して設定画面を開きます。

DBサーバの作成

設定画面から接続情報を入力して「保存」ボタンをクリックすると接続されます。

DBサーバ接続設定
名称 設定値
ホスト名/アドレス データベースの 接続パスワード取得で取得した「エンドポイント」を入力
※IPアドレスでは無いことに注意
ポート番号 5432
※postgreSQLサービスのデフォルトポート番号
管理用データベース postgres(デフォルト)
ユーザ名 postgres
パスワード データベースの 接続パスワード取得で表示した「マスターパスワード」を入力

疎通確認完了

データベースに接続されるとサーバペインに各オブジェクトが表示されてデータベースを操作可能となります。

DBサーバ接続設定
[広告]

補足

記事原稿の調査途上で気づいた点についても補足として追記しておきます。
AWSのWindowsServerはAMIからプロビジョニングしましたが英語版だったため日本語化しました。 今までは日本語媒体からのインストール経験しかなかっため(当たり前ですが)日本語化したことはありませんでした。世界中で使用するAMIのためデフォルトが英語となるのは当然ですよね・・・

WindowsServer2019Baseの日本語化

日本語化するには設定画面より「言語」に「日本語」を追加して、サーバを再起動します。 再度サインアウトしてサインインしても変更できたかもしれませんが、サーバ利用するものなので今回は念のため再起動しています。

設定変更

「スタートメニュー」から「Settings」を開き「Time&Language」>「Language」を選択します。

Windows設定画面 Windows Time&Language

「言語」に「日本語」を追加

「Language」画面から「言語」に「日本語」を追加してインストールします。

日本語を追加 日本語インストール中

「日本語」追加完了

「Language」画面の「日本語」を参照して追加が完了していれば終了です。WindowsServerへログインした後の日本語化画面は省略しますが、再起動後は日本語化されていることを確認しました。

日本語追加完了
Windows Server 2019日本語化手順、DELL

文書番号: 000111205、ここでは、Windows Server 2019の言語を日本語に変更する方法をご紹介します。

[広告]

編集後記

私は初めて仮想サーバーとしてEC2インスタンスを使用しましたが、思いのほか高速に動作していたのが印象的でした。あくまで個人の感想ですが SSD、Core-i7、Mem32GB程度搭載したサーバかな・・・といった感触です。今後は他のパブリッククラウドサービスでも同様設定にチャレンジしたいと思います。

前の記事 次の記事