【AWS】RDSにPostgreSQLを導入する方法

はじめに

記事をご覧いただき、ありがとうございます。皆さんはAWS(Amazon Web Service)のサービスの1つであるRDS(Amazon Relational Database)をご存知でしょうか?このサービスはクラウド上にフルマネージドなリレーショナル型データベースサーバーを構築できるサービスのことです。また、対応するRDBMS(Relational Database Management System)は、「MySQL」、「SQL Server」、「Oracle」、「MariaDB」、「Amazon Aurora」、「PostgreSQL」の6つになりますが、本記事ではこの内の1つである「PostgreSQL」とRDSの特徴について、解説していきます。

フルマネージドサービスとは

このフルマネージドなサービスとは、データベースを利用する際に必要となる環境構築や運用管理を全てAWS側が行ってくれるサービスのことです。従来のオンプレミスの場合、社内に物理的なサーバーを購入・設置し、環境構築までの作業を自分たちで行う必要がありましたが、このクラウドサービスによりその必要がなくなり、利用者はサーバーを使用することだけに注力すれば良いので非常に楽です。/p>

RDSによるデータベース環境構築

オンプレミスでデータベースサーバーの環境構築をする場合、サーバーやストレージなどの機器を購入、OSのインストールやソフトウェアインストール、各種設定を行った後、データベースが使える状態になります。しかし、このAWSのRDSの場合は、「RDSインスタンス」というものを作成するだけでデータベースが使用可能な状態になります。そのため、オンプレミスのように機器を購入するための初期費用の削減だけでなく、環境構築による時間も短縮可能なため利用する側の負担を大きく減らすことができるようになります。これが、オンプレミスとRDSの大きな違いの1つです。

RDSによるデータベース運用

オンプレミスの場合、可用性やバックアップの仕組みなどを構築しなければなりませんが、RDSの場合、「マルチAZ」という仕組みを構築できます。そのためマスタで障害が発生した場合は、自動でスレーブに切り替わるようになっています。また、「自動スナップショット」という機能があるため毎日のバックアップも自動で行われます。それに加え、アップデートファイルの適用なども自動で行われるので便利です。このように、全ての運用を自動で行ってくれるため、作業時間の短縮や作業ミスを減らすことができるようになっています。

RDS PostgreSQLの特徴

ここからは、RDS PostgreSQLについて解説していきます。

■メリット

・DBインスタンスのスペック変更が容易

DBインスタンスのCPU性能やメモリ容量、ディスク性能などをAWSのマネジメントコンソールから簡単に行なえるので柔軟性があります。また利用目的に応じてDBインスタンスのスペックを上下させることができるようになっているため汎用性が高いです。しかし、ディスク容量だけは増やすことはできても、減らすことはできないので注意が必要です。

・高速ストレージ

AWS RDSではPostgreSQL向けに2種類のSSDストレージが用意されていて、1つ目は「汎用SSD」、2つ目は「プロビジョンド IOPS」の2種類です。前者は小規模または中規模向けのワークロードで使用できるSSD、後者は高いパフォーマンスが必要とされる本稼働アプリケーションでの使用が推奨されるSSDです。

・自動バックアップ

AWS RDSの自動バックアップ機能をオンにしている場合、データベースとトランザクションログを最大35日間保存でき、これを使用しPostgreSQLのDBインスタンスを復旧することができます。また、DBスナップショット機能により完全なデータベースバックアップを自動で作成し、このDBスナップショットからでもPostgreSQLを復旧させることができるようになっています。

・高可用性

AWS RDSには「マルチAZ」という機能があり、異なるアベイラビリティゾーン(各リージョンに存在するデータセンター)に予備のレプリカ(サーバーをレプリケーションしたもの)を配置し、障害発生時に切り替えて運用を継続する仕組みなので高い可用性があります。また、「リードレプリカ」という機能があり、データの書き込みをマスタが行い、読み込みを複製した複数のレプリカが行うためマスタサーバーに掛かる負荷を分散させることができます。

■デメリット

PostgreSQLの拡張制限

オンプレミスでは使えていた、PostgreSQLの拡張機能の一部がAWS RDSでは使えないようになっています。他には、PostgreSQLの同期レプリケーションが使えなかったり、DBスナップショットを使用して復旧する際には直前ではなく、5分前までの復旧しかできない点がデメリットとして挙げられます。

RDS PostgreSQLデータベース作成・接続手順

ここからは、実際にPostgreSQL DBインスタンスを作成手順を解説していきます。

①RDSコンソール起動

AWS マネジメントコンソールのサービスから「RDS」をクリックし、RDSのページを表示します。

②PostgreSQL DBインスタンス作成

RDSのページで「データベースの作成」をクリックします。
RDMSのエンジンを選択画面になるので、ここでPostgreSQLを選択し、「RDS 無料利用枠の対象オプションのみを有効化」にチェックを入れ、「次へ」をクリックします。

③DBインスタンス設定

「DBインスタンス識別子」、「マスターユーザー名」、「マスターパスワード」を入力し、「次へ」をクリックします。

④DBインスタンス詳細設定

パブリックアクセスビリティの「YES」を選択します。
データベースの名前を入力します。
バックアップの保存期間を「1日」を選択します。
パフォーマンス監視「無効」を選択します。
削除保護を「無効」にします。

これらの設定が完了したら、「データベースの作成」をクリックすると、DBインスタンスが作成されます。また、DBインスタンスの状態が「作成中」から「利用可能」になると接続することができるようになります。

⑤PostgreSQL接続

SQLクライアントを使用してRDS DBインスタンスに接続していくので、今回は「SQL Workbench」を使用して接続します。
SQL Workbenchを起動したら、Driverで「PostgreSQL」を選択します。
URLの箇所に、PostgreSQL DBインスタンスのエンドポイントとポート番号を入力します。
ユーザー名・パスワードはPostgreSQL DBインスタンス作成時に入力した内容を入力し、OKをクリックすると接続されるので、接続状態はAWSのRDS画面から確認できます。

利用料金について

Amazon RDS 自体は無料です。実際に使用した分のみ、料金が発生します。最低料金設定はありません。
Amazon RDS への支払いには、オンデマンドインスタンスかリザーブドインスタンスのどちらかです。AWS 料金計算ツールを使って、月間の請求額を見積りすることが出来ます。Amazon RDS では、リレーショナルデータベースのさまざまなユースケースに合わせて、最適化されたインスタンスタイプを選択できます。

オンデマンド DB インスタンス

オンデマンド DB インスタンスでは、長期間の契約なしに、時間単位で、計算処理能力に対して料金が発生します。これにより、ハードウェアのプランニング、購入、維持に伴うコストや手間が省け、高額な固定費となりがちな運用コストも、より安価な変動費に抑えることができます。
シングル AZ 配置およびマルチ AZ 配置の料金は共に、DB インスタンスの作成から終了あるいは削除までの DB インスタンス時間単位で計算されます。 DB インスタンスクラスの作成、起動、変更などの請求対象となるステータス変更に続いて、1 時間未満の DB インスタンス時間は 10 分を最小料金として、秒単位で請求されます。
Amazon RDS の T3 DB インスタンスの場合は Unlimited モードで実行されるので、連続する 24 時間での平均 CPU 使用率がインスタンスのベースラインを超えた場合に追加料金が発生します。CPU クレジットは vCPU 時間あたり 0.075 USD で課金されます。CPU クレジット料金は、すべての T3 インスタンスサイズおよびすべてのリージョンで同じです。リザーブドインスタンスでは対象外です。

リザーブドインスタンス

Amazon RDS リザーブドインスタンスでは、1 年契約または 3 年契約で DB インスタンスを予約でき、DB インスタンスのオンデマンドインスタンス料金に比べて、大幅な割引を受けられます。Amazon RDS の RI 料金のお支払い方法には「前払いなし」、「一部前払い」、「全額前払い」の 3 種類があり、前払いする金額と実効時間単価とのバランスを取ることができます。
Amazon RDS リザーブドインスタンスでは、PostgreSQL データベースエンジンのサイズを柔軟に変更できます。サイズを柔軟に変更できるため、同一インスタンスファミリー (M5、T3、R5 など) 内では、どのようなサイズを使用しても、ご利用の RI の割引料金が自動的に適用されます。
リザーブドインスタンスの料金には、ストレージや I/O の料金は含まれていないことにご留意ください。Purchasing API を呼び出すか、AWS コンソールでリザーブドインスタンスオプションを選択することで、データベースインスタンスをリザーブドインスタンスとして指定できます。
データベースインスタンスをリザーブドインスタンスとして指定する場合、該当するリザーブドインスタンスのリージョン、インスタンスタイプ、および数量を指定する必要があります。リザーブドインスタンスは指定したリージョンでのみ使用できます。リザーブドインスタンスの料金プログラムは、いつでも終了できます。
リザーブドインスタンスの料金の対象であることに加えて、AWSのサービスの使用について規定する AWS カスタマー契約やその他の契約に基づき、データ転送やその他の料金もリザーブドインスタンスの対象となります。

データベースストレージ

汎用 (SSD) ストレージ

Amazon RDS では、プライマリデータセットに関連付ける汎用 (SSD) ストレージ容量を 20 GiB~64 TiB の範囲で選択できます。汎用 (SSD) では、プロビジョニングするストレージに対して課金されます。ただし、使用する I/O に対しては課金されません。

プロビジョンド IOPS (SSD) ストレージ

Amazon RDS では、各 DB インスタンスクラスについて、お客様のデータベースに必要な I/O 能力を指定またはプロビジョニングできます。PostgreSQL DB エンジンでは、1,000 IOPS~80,000 IOPS、および 100 GiB~64 TiB のストレージをプロビジョニングおよびスケールできます。実際の最大 IOPS はデータベースワークロードによって異なりますの。プロビジョンド IOPS (SSD) ストレージの場合は、プロビジョニングしたスループットとストレージに対して課金されます。ただし、使用する I/O に対しては課金されません。

マグネティックストレージ

Amazon RDS では、プライマリデータセットのためのマグネティックストレージ容量を、20 GiB~3 TiB の範囲内で選択できます。マグネティックストレージは、下位互換性のためにサポートされています。新しいストレージのニーズには、汎用 SSD またはプロビジョンド IOPS SSD を使用することをお勧めします。

バックアップストレージ

バックアップストレージは、自動化されたデータベースバックアップや、リージョン内で作成した DB スナップショットに関連付けられたストレージです。バックアップ保持期間を延長したり、DB スナップショットを作成したりすると、アカウントによって使用されるバックアップストレージは増加します。
バックアップストレージはリージョンごとに割り当てられます。バックアップストレージの合計容量は、そのリージョンのバックアップすべてに対するストレージの合計と等しくなります。
DB スナップショットを別のリージョンに移動すると、移動先リージョンのバックアップストレージが増加します。
該当するリージョンのデータベースストレージ容量が 100% を超えるまで、バックアップストレージに対する追加料金は発生しません。
例えば、毎月、500 GiB のデータベースストレージがプロビジョンされる PostgreSQL インスタンスと、毎月、200 GiB のデータベースストレージがプロビジョンされる MySQL DB インスタンスがある場合、毎月、最大 700 GiB のバックアップストレージが無料で提供されます。
マルチ AZ とシングル AZ の設定は、バックアップストレージでは同様に扱われます。
DB インスタンス終了後のバックアップストレージの料金は毎月 0.095USD/GiB です。
追加のバックアップストレージの料金は毎月 0.095USD/GiB です。

Snapshot Export

Amazon Relational Database Service (RDS) の Snapshot Export は、RDS または Aurora スナップショット内のデータを Amazon S3 に Parquet 形式で自動エクスポートする機能です。Parquet 形式はテキスト形式と比較すると、アンロードが最大 2 倍速く、さらにストレージ使用量が Amazon S3 で最大 6 倍少なくすみます。
エクスポートされたデータは、Amazon Athena、Amazon EMR、Amazon SageMaker などの AWS のサービスを使用して分析できます。
たとえば、100 GB のスナップショットをお持ちで、このスナップショットから 10 GB のテーブルをフィルタリングで選択して、Amazon S3 にエクスポートするとします。このデータをエクスポートするには、100 GB * スナップショットサイズ 1 GB あたり 0.010USD の料金が発生します。それ以降、同じスナップショットからデータをエクスポートしても料金が毎回加算されることはありません。
AWS Key Management Service によるデータの暗号化または復号には別途料金がかかります。
エクスポートされたデータを Amazon S3 に保存したり、お使いの S3 バケットに対して PUT リクエストを実行したりする際にも、別途料金がかかります。

データ転送

Amazon RDS と Amazon EC2 のインスタンス間のデータ転送は、同一アベイラビリティーゾーン内であれば無料です。
マルチ AZ 配置のレプリケーションを目的とするアベイラビリティーゾーン間のデータ転送は無料です。
Amazon RDS DB インスタンスが VPC の外部にある場合: Amazon EC2 インスタンスと Amazon RDS DB インスタンスの間でデータ転送を行うときに、これらのインスタンスが同一リージョン内のそれぞれ異なるアベイラビリティーゾーン内にある場合は、Amazon RDS DB インスタンスが送受信するトラフィックについてはデータ転送料金は発生しません。
データ転送料金が発生するのは Amazon EC2 インスタンスが送受信するトラフィックに対してのみであり、標準の Amazon EC2 リージョンデータ転送料金 (送受信ともに 0.01 USD/GB) が適用されます。
Amazon RDS DB インスタンスが VPC の内部にある場合 : Amazon EC2 インスタンスと Amazon RDS DB インスタンスの間でデータ転送を行うときに、これらのインスタンスが同一リージョン内のそれぞれ異なるアベイラビリティーゾーン内にある場合は、Amazon EC2 リージョンデータ転送料金が送信と受信の両方で発生します。
DB スナップショットコピーでは、スナップショットデータをコピーするためにリージョン間で転送されたデータに対して料金が発生します。スナップショットがコピーされた後は、コピー先のリージョンで保存するため、標準のデータベーススナップショット料金が発生します。
AWS 新規の場合は、AWS 無料利用枠の一環として、AWS のサービス全体で、毎月 15 GB のデータ送信を 1 年間無料で利用できます。
料金の基準となるデータ量は、Amazon EC2、Amazon EBS、Amazon S3、Amazon Glacier、Amazon RDS、Amazon SimpleDB、Amazon SQS、Amazon SNS、AWS Storage Gateway、Amazon DynamoDB、Amazon VPC でのデータ送信の利用合計量で決まります。

まとめ

AWS RDSでPostgreSQLを使用した場合のメリット・デメリットやPostgreSQL DBインスタンスの作成から接続方法、利用料金まで解説してきましたが、いかがだったでしょうか?クラウドサービスのRDSは長期間利用した場合、やや費用が高いです。しかし、初期費用が掛からず、運用も楽になる上に、災害にも強い点を考慮すると導入するメリットの方が大きいのではないでしょうか。興味のある方は、AWSの無料枠を利用して是非一度触れてみてください!最後までご覧いただき、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です