Aurora(PostgreSQL)を利用してみた


この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

みなさん、こんにちは。株式会社協栄情報クラウド事業本部のショウジです。

今回は、自分の業務で必要になるAWSのAurora(PostgreSQL)をポチポチ触ってみたので、その学習内容を記事にします。

Aurora(PostgreSQL)とは

サクッと概要

 AWSで提供されているマネージド型リレーショナルデータベースサービスの一つです。AWSによると、処理能力は、MySQLとの互換性版、PostgreSQLとの互換性版でそれぞれMySQLの最大5倍、PostgreSQLの最大3倍の処理能力を有します。またストレージとして、3AZに6つのデータコピーを行うことでデータの高耐久性を実現し(クラスターボリュームと解釈しました)、Quorumシステムというデータ保存の処理システムを採用することで高い処理性能を実現しています。

Amazon RDS(Relational Database Service)では、以下7つのエンジンからRelational Databaseを選ぶことができます。

 ①②Amazon Aurora(MySQL互換タイプ と PostgreSQL互換タイプ)
 ③MySQL
 ④MariaDB
 ⑤PostgreSQL
 ⑥Oracle
 ⑦SQL Server

Amazon Auroraの料金

また、Amazon Auroraを利用する前に注意しておきたいことですが、Amazon Auroraには無料利用枠がありません。Amazon Aurora の料金
file
大阪リージョンのAurora PostgreSQLの料金を調べたところ、執筆時点では、db.t3.mediumとdb.t3.largeの2つのみ提供されていたので、安いdb.t3.mediumの方を利用します。

また、データベースを削除するときもスナップショットを残すと、月に0.023UDS/GBかかるようなので、RDS利用後は、必要でない限り削除するようにします。
file

話の流れが少し変わりますが、AWSで提供されている標準のPostgreSQLとの料金比較もしてみました。
file
単純比較ですが同じdb.t3.mediumの場合、時間当たりの料金の差が0.013USDなので、無料枠分を除いて考えるとそれほど大きくないのかなと思ったりします。寧ろその差で、最大3倍の処理能力のものを利用できると考えると、性能を求められる業務の場合、人件費等他の諸費用・長期的な利用を考えると実はもの凄くお得なのかもしれないとちょっと想像しました。

Auroraについての他の細かな特徴については、他の方の記事の方が参考になると思いますので、早速、自分のやったハンズオン内容を紹介していきます。

構成図・実施環境

構成図

file

今回は、自分のPCからTeraTermでAWSに作成したVPC内のEC2へSSH接続し、そこからプライベートサブネットに作成したAurora PostgreSQLへログインします。

実施環境

・自身の利用端末のOSエディション:Windows10
・SSH接続に利用するエミュレータ:TeraTerm
・AWS上で使うEC2インスタンス:無料枠のAmazon Linux2
・設定するAurora PostgreSQLのバージョン:PostgreSQL13.7

環境構築

まず、以下の設定でVPCを構築します。下の通りAWSコンソール画面から今回は大阪リージョンで作成していきます。
(AWSコンソールより VPC>お使いのVPC>VPCを作成)
file

設定項目 設定値 備考
IPv4 CIDR ブロック 10.0.0.0/16 利用していないプライベートアドレスを手動で設定(RFC1918)
名前タグ Test-vpc-sh 任意で設定

※記載していない項目は、デフォルト値のままとします。

file
作成できました。

サブネット作成

作ったVPC内にそれぞれEC2を入れるパブリック用サブネットを1つ、RDS用のプライベート用サブネットを2つ作ります。
(VPC>サブネットサブネットを作成)
file
↑のように作成しました。CIDRブロックを24としたので、第3オクテット(IPv4 10.0.X.0のXのところ)でネットワークを区分する番号を振りました。

※補足 AWSでは各サブネット毎に予約されているIPアドレスがあり、例えば、/24の場合、下IPアドレスは利用することができません。(/24の場合、各サブネット毎で利用できるネットワーク数は、下の5つを除く251となります)

  • 10.0.0.0: ネットワークアドレス
  • 10.0.0.1: AWS が VPC ルータ用に予約
  • 10.0.0.2: AWS がDNSサーバ用に予約
  • 10.0.0.3: 将来の利用のため(?)
  • 10.0.0.255: ネットワークブロードキャストアドレス

インターネットゲートウェイ作成

パブリックサブネットにあるEC2インスタンスとVPC外部からSSH接続でアクセスするための接続点が必要なので、インターネットゲートウェイ(以下IGW)を作成し、VPCへアタッチしていきます。IGWは名前と他のタグを任意で設定します。
(VPC>インターネットゲートウェイ>インターネットゲートウェイの作成)
file

作成後、[VPCへアタッチ]
file

アタッチできました。
file

ルートテーブル作成

作成したIGWとパブリック用サブネットをつなげるルートテーブルを作ります。
file

作成したルートテーブルにIGWのルート設定、パブリック用サブネットとの関連付けをしていきます。
file

file

サブネットの関連付けの方も設定します。
file
パブリックサブネットができました。

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

セキュリティグループ(以下SG)を①EC2用、②RDS用でそれぞれ設定をしていきます。

No セキュリティグループ名 タイプ プロトコル ポート範囲 ソース種類 ソース 備考
SG-EC2-sh SSH TCP 22 マイIP 自身のIPアドレス IPアドレスはAWSより自動割り当て
SG-RDS-sh PostgreSQL TCP 5432 カスタム SG-EC2-sh 作成したEC2用のSGを選択

①EC2用SGの作成

EC2へはSSHアクセスをするのみのため、その設定をします。
file
作成したSGを送信先として設定しておくと、インスタンスの終了・再起動でIPアドレスが変わってもそのままアクセスすることができます。

②RDS用SGの作成

RDS用のSGはAurora PostgreSQLへのポートのみ開く設定をします。
file

EC2インスタンス作成

EC2インスタンスを作成していきます。
(EC2>インスタンス>インスタンスを起動)

設定項目 設定値 備考
名前 EC2-test-sh 任意で設定
アプリケーションおよび OS イメージ AmazonLinux2 AMI 無料枠のものを使用
インスタンスタイプ t2.micro 無料枠のものを使用
Key pair "Key-test-sh"を選択 作成したものを選択
VPC "Test-vpc-sh" 作成したものを選択
サブネット "Pub-Subnet-1a-sh" 作成したものを選択
パブリック IP の自動割り当て 有効化 VPCの外からSSHで接続するため
セキュリティグループ "SG-EC2-sh" 作成したものを選択
ボリュームタイプ gp3 同じ無料枠のgp2より安価なため

上記で記載のない部分はデフォルト値で設定していきます。
Key Pair作成のところは、"Create new key pair"より作成します。
作成したものはSSHアクセス時に必要になるので、保管しておきます。
file

キーペアは以下の設定で作成しました。

項目 設定値 備考
キーペア名 "Key-test-sh" 任意の値を入力
キーペアのタイプ RSA デフォルト値
プライベートキーファイル形式 .pem デフォルト値 

ネットワーク設定のところは、以下のように設定します。
file

EC2インスタンスへSSH接続確認

インスタンスの作成ができたら、RDSを作成する前にTeraTermでSSH接続確認をしていきます。
TeraTermを立ち上げると、↓のような画面になるので、ホストに起動したEC2インスタンスのパブリックIPアドレスを入力します。
file

パブリックIPアドレスは以下のところで確認ができます。
file

正しいIPを入力し[OK]を押すと、セキュリティ警告の画面が表示されます。そのまま[続行]をクリックし、接続できると以下の画面となります。
file

問題なく接続できたので、以下の接続画面が表示されました。
file

RDS

DBサブネットグループ作成

さて、RDSからAurora PostgreSQLを作成していきます。先にDBのサブネットグループを以下の設定で作成していきます。
(RDS>サブネットグループ>DBサブネットグループを作成)
DBサブネットグループの設定

設定項目 設定値 理由
名前 "DB-Subnet-GRP-test-sh" 任意で設定
説明 "Subnet GRP for DB" 分かる内容で記載
VPC "Test-vpc-sh" 任意で設定
アベイラビリティーゾーン "ap-northeast-3a"と"ap-northeast-3b" サブネットを作成したゾーンを選択
サブネット "10.0.2.0/24"と"10.0.3.0/24" 作成したプライベートサブネットを選択

RDSを利用してわかったのですが、RDSインスタンスを利用する場合は、シングルAZ構成で環境構築をする場合でも、サブネットグループの利用(2つ以上のサブネットの用意)が必要となります。
1つのサブネットだけで作成しようとすると、↓のように注意されます。
file

RDSユーザガイドのVPC 内のDB インスタンスの使用でしっかりと記載されていました。

VPC では、少なくとも 2 つのサブネットを指定する必要があります。これらのサブネットは、DB インスタンスをデプロイする AWS リージョン 内の 2 つの異なるアベイラビリティーゾーンに存在している必要があります。

今回はプライベートサブネットを2つ作成していたので、DBサブネットグループを作成することができました。
file

RDS(Aurora PostgreSQL)作成

DBサブネットグループが作成できたので、データベースを作成していきます。
(RDS>データベースの作成)
file
Amazon Auroraの設定

設定項目 設定値 理由
エディション Amazon Aurora PostgreSQL 互換エディション デフォルト値(MySQL互換エディション)から変更
テンプレート 開発/テスト デフォルト値(本番稼働用)から変更
DBクラスター識別子 "db-test-sh" 任意で設定
マスターユーザー名 "postgresSH" 任意で設定
マスターパスワード "postgresSH" 任意で設定
DBインスタンスクラス バースト可能クラス(db.t3.mediumを選択) ハンズオンのため(安いものを選択)
マルチAZ配置 Auroraレプリカを作成しない ハンズオンのため
VPC "Test-vpc-sh" 作成したVPCを利用
データベース名 DBTestSh 任意で設定

↑の部分でマスターユーザ名やパスワードは、作成後は表示されず、PostgreSQLログインや操作の際に必要になるので、忘れないようにします。データベース名もログイン時に必要なので追加設定の項目から設定します。その他、記載していない設定値については、今回はAurora PostgreSQLへのログインと簡単な操作が目的のため、デフォルト値で作成しました。

Aurora(postgreSQL)へ接続

DBを作成したので、TeraTermからEC2へログインし接続していきます。

psqlのインストール

まず、psql(PostgreSQLクライアント)のコマンドインストールが必要なので、amazon-Linux-extrasのパッケージからインストールします。
"amazon-linux-extras"と入力すると下のようにパッケージ一覧が表示されるので、その中にあるpostgreSQLパッケージをインストールします(今回はDB作成時に選んだバージョンと同じ"postgresql13"をインストール)
file

sudo amazon-linux-extras install -y postgresql13
と入力すると、インストールが始まり完了後にパッケージがハイライトされました。
file

postgreSQLサーバへログイン

構築したpostgreSQLサーバへは、

sudo psql -h ホスト -U ユーザ名 -d データベース名
(その後)
パスワード入力

でログインします。ホストは、AWSコンソールから作成したDBの[接続とセキュリティ]タブで確認できるエンドポイントを入れます。

ログインできると以下のような画面になります。
file

ログインが出来たら以下、サっと試せそうなコマンドになります。

操作 コマンド
PostgreSQLから切断・ログアウト "\q"
DBの一覧を表示 "\l"
テーブル一覧を表示 "\dt"

データベースはtemplateがあるようですが、テーブルまだ何もないので、以下のコマンドでテーブルを作成してみます。

テーブル作成

CREATE TABLE [テーブル名]([カラム名1 データ型1], [カラム名2 データ型2])
例)CREATE TABLE Fruits(id INT, name VARCHAR(20));

例は、(整数型)INT型のカラムidと、(最大20字までの文字が挿入できる可変長型)VARCHAR型のカラムnameでFruitsという名前のテーブルを作成します。

file
"CREATE TABLE"となり、その後\dtでテーブルが作成されていることが確認できます。
file

データ挿入

データを複数入力してみます。
INSERT INTO [Table name]([Column1], [Column2],...) VALUES([Data1], [Data2],...),([Data1],[Data2],...);
例)INSERT INTO fruits(id, name) VALUES(001,’Apple’),(002,’Banana’),(003,’Melon’);

file
挿入できたので、↑のような表示となりました。

データ表示

以下のようにテーブル名と確認したいカラム名を指定して、挿入されたデータを確認します。
SELECT カラム名のリスト FROM テーブル名;
例)SELECT id, name FROM fruits;
file
↑のように入力されたデータが確認できました。

レコードの削除

特定のレコード(Row)を削除したい時は、↓のように書きます。
DELETE FROM テーブル名 WHERE 条件;
例)DELETE FROM fruits WHERE id = ‘002’;
file
↑DELETE 1と表示され、SELECTでテーブルデータを表示すると、id=2のBananaが削除されていました。
file
WHEREで条件を付けない場合は、全レコードの削除となります。
file
↑の通り、条件を綱内DELETEコマンドで全てのレコードが削除されました。

ログアウト

postgreSQLからログアウトします。
file

終わりに

SAAの試験勉強をしていた時は、「Auroraは、標準のMySQLと比べて5倍、標準のPostgreSQLと比べて3倍性能がいい」って何となく暗記していたのですが、Auroraのバージョンとして「MySQL互換版」と「PostgreSQL互換版」があることや、DBのサブネットグループの作成条件、お金の話など、実際に触ってみることで学べることが多く理解も深めることができました。PostgreSQLについてはまだまだ勉強時間が足りないので、OJTと併せて、学習を進めていきます。

参考文献・URL

・『PostgreSQL全機能バイブル
Amazon Aurora with PostgreSQL Compatibility における運用設計のファーストステップ | AWS Summit Tokyo 2019
AWS公式ホームページ

Last modified: 2023-01-24

Author