パブリックプレビューなPostgreSQL互換Amazon Auroraにアクセスしてみた
本記事はプレビュー版を評価したものです。正式サービス時には仕様が変更される可能性がある点にはご注意ください。
AWSにはAmazon Auroraというリレーショナルデータベースサービスがあります。 商業用データベースのセキュリティ、可用性、および信頼性を 10 分の 1 のコストで提供します。
リリース当初はMySQL互換のみでしたが、2016年のre:inventでPostgreSQL互換なAurora(以下「Aurora(PostgreSQL)」)が発表されました。
Announcing PostgreSQL compatibility for Amazon Aurora
2017年4月19日からパブリックプレビューの募集が始まり、利用申請が通ったため、軽く触ってみました。
Announcing Open Preview of Amazon Aurora with PostgreSQL Compatibility
本記事の執筆にあたり、次のブログに大いにインスパイアされています
Azure Database for PostgreSQLにアクセスしてみた
PostgreSQL互換Auroraのプレビュー申請方法について
次のURLからお申込み下さい。
https://pages.awscloud.com/amazon-aurora-with-postgresql-compatibility-preview-form.html
申請時にはAWSアカウントIDが必要です。お持ち出ない場合、まずはAWSアカウントをお作り下さい。
私の場合、次の件名で申請通過のメールが届きました。
Welcome to the Preview of Amazon Aurora with PostgreSQL compatibility!
プレビュー版Aurora(PostgreSQL)について
- プレビューとGAでは仕様が異なる可能性があります
- プレビュー版Aurora(PostgreSQL)の起動はサンドボックスリージョンで提供されます
- インスタンスの起動・ストレージに関する費用は発生しません
- PostgreSQL 9.6.2互換です
- 以下のインスタンスクラスが提供されています
- db.r3.8xlarge
- db.r4.2xlarge (NEW@2017/05/27)
- db.r4.4xlarge
- db.r4.8xlarge
- db.r4.16xlarge
- AWSアカウントあたり3インスタンスまで作成可能です
- リードノードに対応しています
- 2相コミットには対応していません
- RDS PostgreSQL 9.6.2で対応しているすべてのエクステンションに対応しています
- EC2/EBS上に構築したPostgreSQLに比べて、1−2倍のパフォーマンスを発揮します
また、GAでは対応予定の以下の機能は現時点のプレビューでは対応していません
- "Survivable" キャッシュウォーミング(インスタンスをリスタートしてもキャッシュが生き続ける)
- Amazon RDS PostgreSQLのスナップショットからのAuroraインスタンス作成
それでは試してみましょう
Aurora(PostgreSQL)のリソースを作成する
プレビュー申請通過メールにサンドボックスリージョンへのリンクが含まれています。
クリックしてサンドボックスリージョンにアクセスします。
Instances からAurora(PostgreSQL)の作成画面に遷移します。
Step 1 : Select Engine(エンジンを選択)
サンドボックスリージョンのため、選択可能なDBエンジンは「Aurora(PostgreSQL)」のみでした。
Up to 3 times the throughput of PostgreSQL" としらっと書いてあります。
Step 2 : Specify DB Details(DBの詳細を指定)
- インスタンスクラス
- インスタンスID
- ユーザー名
- パスワード
などを設定します。
Step 3 : Configure Advanced Settings(発展的な設定を指定)
RDS インスタンス作成時におなじみの
- Network & Security
- Database Options
- Failover
- Backup
- Monitoring
- Maintenance
などを設定します。
"Publicly Accessible"を"Yes"にしておくと、インスタンスにアクセスしやすくなります。
"Launch DB Instance" ボタンをクリックすると、インスタンスが作成されます。
Aurora(PostgreSQL)に接続する
PostgreSQL互換AuroraにはMySQL互換Auroraと同じく2種類のエンドポイントが存在します。
- Cluster Endpoint : 書き込み用のエンドポイント
- Reader Endpoint : 読み取り専用のエンドポイント
エンドポイントはインスタンス詳細ページで確認できます
今回は psql でAuroraに接続します
クラスターエンドポイントにアクセス
$ CLUSTER_HOST=XXX.YYY.***.rds.amazonaws.com $ psql -h $CLUSTER_HOST -U username dbname Password for user username: psql (9.5.4, server 9.6.2) WARNING: psql major version 9.5, server major version 9.6. Some psql features might not work. SSL connection (protocol: TLSv1.2, cipher: DHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off) Type "help" for help. test=> select version(); version ------------------------------------------------------------------------------ PostgreSQL 9.6.2 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.9.3, 64-bit (1 row)
バージョン情報を信じると、接続先のPostgreSQLのバージョンは9.6.2となっています。 "Aurora"の文字は見当たりません。
ウィザードにしたがってセキュリティグループを新規作成すると、デフォルトではAMCにアクセスしているIPアドレスのみがアクセス元として許可されていました。 他の環境からAuroraにアクセスする場合は、セキュリティグループを修正してください。
リーダーエンドポイント
$ READER_HOST=XXX.YYY.***.rds.amazonaws.com $ psql -h $READER_ENDPOINT -U username dbname Password for user username: psql (9.5.4, server 9.6.2) WARNING: psql major version 9.5, server major version 9.6. Some psql features might not work. SSL connection (protocol: TLSv1.2, cipher: DHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off) Type "help" for help. test=>
リーダーノードに対して更新処理を流してみましょう
test=> create table foo(bar integer); ERROR: cannot execute CREATE TABLE in a read-only transaction
read-only のため、成功しませんでした。
PostgreSQLユーザー
RDSメンテ用のPostgreSQLスーパーユーザー(rdsadmin)とは別に「Step 2 : Specify DB Details」で作成したユーザー(username)も確認できます。
test=> select * from pg_user; usename | usesysid | usecreatedb | usesuper | userepl | usebypassrls | passwd | valuntil | useconfig ----------+----------+-------------+----------+---------+--------------+----------+----------+--------------------------------------------------------------------------------------- ----------------- username | 16393 | t | f | f | f | ******** | infinity | rdsadmin | 10 | t | t | t | t | ******** | infinity | {log_statement=all,log_min_error_statement=debug5,log_min_messages=panic,exit_on_error =0,TimeZone=utc} (2 rows)
collation
インスパイアされたブログに合わせて collation も確認します。
test=> \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------- postgres | username | UTF8 | en_US.UTF-8 | en_US.UTF-8 | rdsadmin | rdsadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | rdsadmin=CTc/rdsadmin template0 | rdsadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/rdsadmin + | | | | | rdsadmin=CTc/rdsadmin template1 | username | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/username + | | | | | username=CTc/username test | username | UTF8 | en_US.UTF-8 | en_US.UTF-8 | (5 rows)
EXTENSIONを見てみる
さて、PostgreSQL と言えば EXTENSION です。 というわけで、最初からセットアップされている EXTENSION と、追加で使える EXTENSION を確認してみました。 以下は最初からインストールされている EXTENSION です。
test=> select * from pg_extension; extname | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition ---------+----------+--------------+----------------+------------+-----------+-------------- plpgsql | 10 | 11 | f | 1.0 | | (1 row)
PostgreSQL向けSQL手続き言語である PL/pgSQLだけが有効化されていました。
以下は CREATE EXTENSION
を実行すれば使える EXTENSION です。
合計52個とてんこ盛りです。
test=> select * from pg_available_extensions; name | default_version | installed_version | comment ------------------------------+-----------------+-------------------+---------------------------------------------------------------------------------------------------------------- ----- intagg | 1.1 | | integer aggregator and enumerator (obsolete) plperl | 1.0 | | PL/Perl procedural language plcoffee | 1.5.3 | | PL/CoffeeScript (v8) trusted procedural language unaccent | 1.1 | | text search dictionary that removes accents pg_stat_statements | 1.4 | | track execution statistics of all SQL statements executed plls | 1.5.3 | | PL/LiveScript (v8) trusted procedural language aurora_stat | 1.0 | | Extension for viewing aurora statistics and object information chkpass | 1.0 | | data type for auto-encrypted passwords ip4r | 2.0 | | intarray | 1.2 | | functions, operators, and index support for 1-D arrays of integers dict_xsyn | 1.0 | | text search dictionary template for extended synonym processing pg_visibility | 1.1 | | examine the visibility map (VM) and page-level visibility info citext | 1.3 | | data type for case-insensitive character strings tsm_system_rows | 1.0 | | TABLESAMPLE method which accepts number of rows as a limit hstore_plperl | 1.0 | | transform between hstore and plperl postgres_fdw | 1.0 | | foreign-data wrapper for remote PostgreSQL servers uuid-ossp | 1.1 | | generate universally unique identifiers (UUIDs) sslinfo | 1.2 | | information about SSL certificates pgstattuple | 1.4 | | show tuple-level statistics pg_trgm | 1.3 | | text similarity measurement and index searching based on trigrams ltree | 1.1 | | data type for hierarchical tree-like structures tablefunc | 1.0 | | functions that manipulate whole tables, including crosstab plv8 | 1.5.3 | | PL/JavaScript (v8) trusted procedural language btree_gin | 1.0 | | support for indexing common datatypes in GIN dict_int | 1.0 | | text search dictionary template for integers postgis | 2.3.0 | | PostGIS geometry, geography, and raster spatial types and functions pgcrypto | 1.3 | | cryptographic functions dblink | 1.2 | | connect to other PostgreSQL databases from within a database pg_buffercache | 1.2 | | examine the shared buffer cache plpgsql | 1.0 | 1.0 | PL/pgSQL procedural language postgis_topology | 2.3.0 | | PostGIS topology spatial types and functions xml2 | 1.1 | | XPath querying and XSLT fuzzystrmatch | 1.1 | | determine similarities and distance between strings test_parser | 1.0 | | example of a custom parser for full-text search pltcl | 1.0 | | PL/Tcl procedural language address_standardizer | 2.2.2 | | Used to parse an address into constituent elements. Generally used to support geocoding address normalization step. isn | 1.1 | | data types for international product numbering standards earthdistance | 1.1 | | calculate great-circle distances on the surface of the Earth postgis_tiger_geocoder | 2.3.0 | | PostGIS tiger geocoder and reverse geocoder tsearch2 | 1.0 | | compatibility package for pre-8.3 text search functions hstore | 1.4 | | data type for storing sets of (key, value) pairs cube | 1.2 | | data type for multidimensional cubes pageinspect | 1.5 | | inspect the contents of database pages at a low level pgrowlocks | 1.2 | | show row-level locking information bloom | 1.0 | | bloom access method - signature file based index pg_prewarm | 1.1 | | prewarm relation data tsm_system_time | 1.0 | | TABLESAMPLE method which accepts time in milliseconds as a limit address_standardizer_data_us | 2.2.2 | | Address Standardizer US dataset example btree_gist | 1.2 | | support for indexing common datatypes in GiST apgdbcc | 1.0 | | Extension for testing and ops log_fdw | 1.0 | | foreign-data wrapper for Postgres log file access pg_freespacemap | 1.1 | | examine the free space map (FSM) (52 rows)
"aurora_stat(Extension for viewing aurora statistics and object information)" が気になりますね。
PL/Pythonはいろいろゴニョゴニョ出来る untrusted なエクステンションなためか available ではありませんでした。
有効化されていないExtensionはCREATE EXTENSION
できます。
test=> create extension postgis; CREATE EXTENSION
Aurora(PostgreSQL)リソースの設定項目
サーバパラメータ
MySQL互換Auroraと同じく、以下の2種類が存在します。
- DBパラメータグループ:クラスター内の単一のDBインスタンスに適用される
- DBクラスターパラメータグループ:DBクラスター内のすべてのDBインスタンスに適用される
監視できるメトリックス
標準のメトリクスとは別に、インスタンス作成時の Step 3 で
- Enhanced Monitoring:DBインスタンスが起動しているOSのメトリクス
- Performance Insights:SQLパフォーマンス分析ツール。PostgreSQL互換Auroraで初導入
もオプションで有効にできます。
標準モニタリング
拡張モニタリング
Performance Insights
まとめ
というわけで、ざっとPostgreSQL互換Amazon Auroraを見てみました。
インターフェースはPostgreSQLでありながら、DBクラスターとしてはAuroraを踏襲しています。
RDS/オンプレPostgreSQLからAurora(PostgreSQL)への移行機能はまだこなれていない印象があります。 GAで予定されているスナップショットからのAurora(PostgreSQL)起動など、マイグレート機能の強化が待ち遠しいですね。