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
Webサーバー用の仮想サーバーはインターネットからアクセスできるよう、インターネットゲートウェイをアタッチして、
ルートテーブル経路設定します。
データベースはRDSを使用しエンドポイントはインターネットゲートウェイをアタッチしていないサブネットへ配置します。
Webサーバー用のIPv4アドレスはEIPで割当・関連付けしています。EIPは単体では無料ですが、仮想サーバーを停止すると課金されますので
評価目的の場合に使用しない場合(インスタンス停止・終了中)は、関連付け解除と解放をしておきます。
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 コンポーネントであり、冗長性と高い可用性を備えており、水平スケーリングが可能です。 (中略)アカウントでインターネットゲートウェイを設定しても、追加料金は発生しません。
サブネットに適用する通信制限を設定します。今回はクライアントの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アドレス(*2)を割り当てます。その手順と設定について説明します。
仮想サーバーのインスタンスを停止、終了した場合はEIPサービスの課金($0.005/h、無料使用枠外、2021年3月時点)が発生するため、関連付け解除、割当解放する手順としています。
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月現在)
データベースにはRDSを使用します。データベースの作成テンプレートは無料使用枠を選択しました。 その他のテンプレートを使用した場合は項目名が異なるので注意してください。
データベースを作成する前にサブネットグループをあらかじめ作っておく必要(*3)があります。今回の構成は以下のようになります。
(*3)データベースに複数サブネットが必要な理由
Amazon RDS は、その DB サブネットグループと優先アベイラビリティーゾーンを使用し、サブネットとそのサブネット内の IP アドレスを選択して DB インスタンスに関連付けます。マルチ AZ 配置のプライマリ DB インスタンスが失敗した場合、Amazon RDS は対応するスタンバイを昇格させ、その後他のアベイラビリティーゾーンのサブネットの IP アドレスを使用して、新しいスタンバイを作成できます。
項目 | 説明/設定値 |
---|---|
データベースの作成方法を選択 | 標準作成 |
エンジンのオプション | 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公式サイト」からダウンロードしてインストールを行います。インストールはすべてデフォルト設定でインストールしました。 ここではインストールの詳細は省略しています。
ダウンロード(インストール)ファイル名:pgadmin4.5.2-x64.exe
pgAdmin4(Windows版)、2021年4月時点
インストールが完了したらpgAdminを起動します。初回のみマスターパスワードの入力を求められるので、任意のパスワードを登録してください。
マスターパスワード入力後にpgAdminが利用可能になります。初期表示は英語表記ですが日本語化が可能です。
pgAdminを日本語化するにあたり下記記事を参考にさせていただきました。
(参考サイト)pgAdmin4を日本語化する、Qiita
pgAdminのサーバーペインから「作成」を選択して設定画面を開きます。
設定画面から接続情報を入力して「保存」ボタンをクリックすると接続されます。
名称 | 設定値 |
---|---|
ホスト名/アドレス | データベースの 接続パスワード取得で取得した「エンドポイント」を入力 ※IPアドレスでは無いことに注意 |
ポート番号 | 5432 ※postgreSQLサービスのデフォルトポート番号 |
管理用データベース | postgres(デフォルト) |
ユーザ名 | postgres |
パスワード | データベースの 接続パスワード取得で表示した「マスターパスワード」を入力 |
データベースに接続されるとサーバペインに各オブジェクトが表示されてデータベースを操作可能となります。
記事原稿の調査途上で気づいた点についても補足として追記しておきます。
AWSのWindowsServerはAMIからプロビジョニングしましたが英語版だったため日本語化しました。
今までは日本語媒体からのインストール経験しかなかっため(当たり前ですが)日本語化したことはありませんでした。世界中で使用するAMIのためデフォルトが英語となるのは当然ですよね・・・
日本語化するには設定画面より「言語」に「日本語」を追加して、サーバを再起動します。 再度サインアウトしてサインインしても変更できたかもしれませんが、サーバ利用するものなので今回は念のため再起動しています。
「スタートメニュー」から「Settings」を開き「Time&Language」>「Language」を選択します。
「Language」画面から「言語」に「日本語」を追加してインストールします。
「Language」画面の「日本語」を参照して追加が完了していれば終了です。WindowsServerへログインした後の日本語化画面は省略しますが、再起動後は日本語化されていることを確認しました。
Windows Server 2019日本語化手順、DELL文書番号: 000111205、ここでは、Windows Server 2019の言語を日本語に変更する方法をご紹介します。