話題の記事

AWS再入門 Amazon RDS編

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

はじめに

当エントリはDevelopers.IOで弊社AWSチームによる2015年アドベントカレンダー 『AWS サービス別 再入門アドベントカレンダー 2015』の7日目のエントリです。 昨日6日目のエントリは梶の『AWS WAF』でした。 このアドベントカレンダーの企画は、普段AWSサービスについて最新のネタ・深い/細かいテーマを主に書き連ねてきたメンバーの手によって、今一度初心に返って、基本的な部分を見つめ直してみよう、解説してみようというコンセプトが含まれています。

本日7日目のテーマは『Amazon RDS』です。

2015/12/09 19:00 Auroraで暗号化がサポートされましたので一部修正しました。Auroraの暗号化の詳細については、『[新機能] RDS for Auroraで暗号化がサポートされました』を参照ください。

目次

Amazon RDSとは?

Amazon RDSとは、"Amazon Relational Database Service"という名の通り、リレーショナルデータベースを提供するサービスです。どんな特徴があるのは、ご紹介していきましょう。

完全マネージド型のリレーショナル・データベースサービス

AWS Black Belt Tech Webinar 2015の資料によると Amazon RDSは『完全マネージド型で、セットアップ、運用、拡張が容易なリレーショナル・データベースサービス』と書かれています。完全マネージドであり運用が容易ということです。

代表的なDBの作業として、データベースの作成、冗長化、バックアップ、パッチ適用等があると思いますが、RDSの場合は以下の通り簡単な作業になります。

データベース作成

数クリックでDBを作成できます。DBエンジン、インスタンスクラス、ディスクの種類やサイズ等を選択するだけです。

冗長化

ワンクリックでマルチAZと呼ばれるデータセンタ間で冗長化された冗長構成を構築できます。常時同期レプリケーションされており、障害発生時には自動でフェイルオーバーされます。手動による強制フェイルオーバーも可能です。

バックアップ

スナップショットを日次で自動取得して、5分ごとにトランザクションログを保存しています。リストアはスナップショットからDBインスタンスを作成したり、Point-In-Time-Recovery(PITR)により指定した時刻の状態でDBインスタンスを作成したりできます。手動による任意のタイミングでバックアップすることも可能です。

パッチ適用

データベースの脆弱性などでパッチ適用が必要な場合は、自動で適用を行います。メンテナンスウィンドウを設定しておくことで、パッチの適用タイミングを指定できます。マルチAZ構成にしてあるとローリングアップデートを行うので、サービス停止時間が短くなります。

オンプレミス、データベース on EC2(EC2にデータベースを独自にインストール)、RDSで必要な作業を比較すると、以下の表となります。RDSでは、データベースの作業のほとんどがマネージドとなっています。

実施作業 オンプレミス データベース on EC2 RDS
アプリ最適化 ユーザ ユーザ ユーザ
スケーリング ユーザ ユーザ AWS
高可用性 ユーザ ユーザ AWS
DBバックアップ ユーザ ユーザ AWS
DBパッチ適用 ユーザ ユーザ AWS
DBインストール ユーザ ユーザ AWS
OSパッチ適用 ユーザ ユーザ AWS
OSインストール ユーザ AWS AWS
サーバーメンテナンス ユーザ AWS AWS
ラック管理 ユーザ AWS AWS
電源、空調、ネットワーク ユーザ AWS AWS

様々なDBエンジンを使用可能

DB-Enginesでは毎月人気のあるデータベースについてランキングを作成していますが、2015年12月時点で人気のあるデータベースの上位5位は、以下となっています。

順位 DBMS データベースモデル スコア
1 Oracle RDBMS 1497.55
2 MySQL RDBMS 1298.54
3 Microsoft SQL Server RDBMS 1123.16
4 MongoDB ドキュメント指向DB 301.39
5 PostgreSQL RDBMS 280.09

上記の中のRDBMS全てに加えて、クラウド時代に合わせて再設計したAurora、MySQLのフォークであるMariaDBが使用できます。

  • MySQL:最もシェアがあるOSSのRDBMS。
  • Oracle:高いシェアがある商用RDBMS。
  • SQL Server:高いシェアがある商用RDBMS。Windowsとの親和性が高い。
  • PostgreSQL:機能が豊富なOSSのRDBMS。
  • Aurora:AWSがクラウド時代に再設計したRDBMS。MySQL 5.6互換でMySQLの5倍高速と言われています。
  • MariaDB:MySQLからフォークしたRDBMS。MySQL互換。

性能向上が簡単に実施可能

Amazon RDSでは、様々なスペックのインスタンスを使用できます。最大40個のvCPUのインスタンスや244GBのメモリのインスタンスがあります。性能が不足してきたら、インスタンスのサイズを変更することも可能です。 ストレージも変更することで性能向上を図ることも可能です。磁気HDDの「Magnetic ストレージ」、SSDを採用した「汎用(SSD)ストレージ」、SSDを採用し高速なI/Oを指定できる「プロビジョンド IOPS(SSD)ストレージ」の3種類1を利用することが可能です。 さらには、読み取り専用のインスタンスであるリードレプリカを追加2することで、読み取りのスケールアウトも可能です。

Amazon RDSの基本構成

Amazon RDSの基本機能を紹介します。通常のDBエンジンとAuroraでは考え方が異なるため別々に解説します。

通常のDBエンジン(Aurora以外)

DBインスタンス

DBサーバ1台ごとをDBインスタンスを言います。後述のマルチAZデプロイメントをしている場合は、アクティブ機、スタンバイ機を合せて1つDBインスタンスと捉えます。

マスタ

DBの基本となる部分です。読み書きを行える通常のインスタンスです。マスタに対してリードレプリカやマルチAZ構成を設定することができます。

マルチAZデプロイメント

AZをまたがったアクティブ-スタンバイ構成を指します。常に同期レプリケーションされていて、障害が発生した時にはスタンバイ機へフェイルオーバーします。 フェイルオーバーはDNSの名前の付け替えにより行われます。そのため、接続先のIPアドレスをキャッシュし続けるとアプリケーション側でフェイルオーバー先に接続できない自体が発生するので、注意が必要です。

リードレプリカ

一部のDBエンジン(MySQL、PostgreSQL、MariaDB)では、読み取り専用データベースのリードレプリカを構成できます。リードレプリカにより読み取り処理をスケールアウトできるようになります。MySQL、MariaDBの場合が、リージョンを超えてレプリカを構成することもできます。 Oracleの場合はGoldenGateを使用するとレプリカを構成することができます。

Aurora

AuroraはAWSのプラットフォームを前提とした、クラウド時代にRDBMSを再設計したDBエンジンでエンタープライズレベルの可用性とOSSレベルのコストを両立しています。 大きな特徴として、以下の内容があります。

  • MySQL 5.6互換であるため、既存アプリケーションを簡単に移行できます。
  • ストレージが10GBから64TBまでシームレスに、ダウンタイム無しで自動拡張します。
  • データは、3AZに2つずつ、合計6重化されて保存されます。
  • 99.99%の可用性3を実現するように設計されています。

aurora

DBクラスタ

他のDBエンジンと異なり、AuroraにはDBクラスタという概念があります。マスタ(Writer)、リードレプリカ(Reader)、ストレージ等のまとまった単位としてDBクラスタを捉えればいいでしょう。個人的には1つのAuroraのストレージを共有するまとまりと考えています。

ストレージレイヤー

AuroraのストレージはDBクラスタの全DBインスタンスで共有しており、3AZにまたがり6重化されて保存されています。

DBインスタンス

通常のRDSと同様に、DBサーバ1台ごとをDBインスタンスを言います。

マスタ(Writer)

DBクラスタ内のインスタンスの中で書き込みを行えるインスタンスをマスタ(Writer)と呼びます。マスタにはDBインスタンス個別のエンドポイントと、クラスタ全体での書き込み用エンドポイント(クラスタエンドポイント)の両方が設定されます。

マルチAZデプロイメント

AuroraにはマルチAZデプロイメントという構成はありません。ストレージレイヤーで3AZにまたがって保存されます。

リードレプリカ(Reader)

DBクラスタ内のインスタンスの中で読み取り用のインスタンスをリードレプリカ(Reader)と呼びます。

障害時のフェイルオーバー

マスタ(Writer)に障害が発生してフェイルオーバーする時には、他のリードレプリカ(Reader)がマスタ(Writer)に昇格します。昇格に伴い、クラスタエンドポイントが切り替わり、innodb_read_only変数とmysql.ro_replica_statusテーブルの内容が更新されます。 MariaDB Connector/Jを使用するとクラスタエンドポイントのTTLを気にせず、innodb_read_only変数とmysql.ro_replica_statusテーブルの内容のみでマスタ(Writer)を判断して更新クエリを発行するので、高速にフェイルオーバーすることができます。詳しくは、以下の記事を参照して下さい。

MariaDB Connector/JによるAmazon RDS for Auroraの高速フェイルオーバー

Auroraの詳細については、以下の資料を参照すると理解が進みます。

サービス利用のユースケース

Amazon RDSのユースケースは『RDBMSを使用する場合のほとんど』となります。しかし、いくつかのパターンではRDSを利用しづらい場合があります。

  1. 高度なスケーラブルが求められる場合
  2. 管理者権限でDBにログインする必要がある場合
  3. OSにログインする必要がある場合
  4. RDBMSの特定の機能を使用する場合

高度なスケーラブルが求められる場合

RDSでは性能向上の手段として、インスタンスのスケープアップやリードレプリカの追加によるスケールアップがありますが、それでも対応できない高度なスケーラブルな性能を求められる場合があります。その場合は、RDBMS以外の選択肢としてNoSQLの採用を検討する必要があります。 ただし、むやみにNoSQLを採用してはいけません。必ず『本当にNoSQLを使う必要があるのか?』を考えてからNoSQLを採用して下さい。以下の資料を参考に、本当に必要なのか判断してください。

判断した結果NoSQLを使用するべきであれば、完全マネージド型のNoSQL『DynamoDB』をお勧めします。詳細については、以下のシリーズの記事を参照下さい。

コンセプトから学ぶAmazon DynamoDB – シリーズ –

管理者権限でDBにログインする必要がある場合

Amazon RDSでは、DBに対して管理者権限ではログインできません。そのため管理者権限を使用した操作が必須である場合は、その操作を回避するかRDSの採用をやめる必要があります。 ただし、本来は管理者権限でしか実行できない操作をストアドプロシージャやAWSCLIで使用できる場合があります。MySQLの場合、CHANGE MASTER、KILL等がSUPER権限でしか実行できません。しかし、CHANGE MASTERであればmysql.rds_set_external_masterプロシージャ、KILLであればmysql.rds_killプロシージャやmysql.rds_kill_queryプロシージャで同等の操作が可能です。 管理者権限が必要な場合は、代替コマンドが用意されているか確認しましょう。以下のリンクを参考にして下さい。

OSにログインする必要がある場合

Amazon RDSは、DBインスタンスのOSにログインすることができません。そのため、DBのローカル環境でコマンドを実行する必要がある場合や、RDBMSとアプリが同一サーバであることを前提としたプログラムでは、RDSの使用をやめてデータベース on EC2を検討する必要があります。

RDBMSの特定の機能を使用する場合

Amazon RDSは完全マネージドとするために、一部の機能を制限しています。そのため制限されている機能を使用するためには、データベース on EC2を検討する必要があります。 サポートされていないものとして、以下のような機能の制限があります。

MySQL

特定のストレージエンジンしかサポートされていません。PITRやスナップショットからの復元はInnoDBのみサポートされています。MyISAMの場合はデータが紛失または破損する可能性があります。また、Federated ストレージエンジンはサポートされていません。

MySQLでサポートされていない機能として、以下のものがあります。詳細はドキュメントを参照してください。

  • グローバルトランザクション ID
  • トランスポータブルテーブルスペース
  • 認証用プラグイン
  • パスワード強度用プラグイン
  • 準同期レプリケーション

Oracle

Oracle 12cでサポートされていない機能として、以下のものがあります。

  • Real Application Clusters(RAC)
  • Data Guard/Active Data Guard
  • Cloud Control(Oracle の以前のバージョンでは Oracle Enterprise Manager Grid Control)
  • Automated Storage Management
  • Database Vault
  • Java のサポート
  • Locator
  • Spatial

Oracle 11gでサポートされていない機能として、以下のものがあります。

  • Real Application Clusters (RAC)
  • Real Application Testing
  • Data Guard/Active Data Guard
  • Oracle Enterprise Manager Grid Control
  • Automated Storage Management
  • Database Vault
  • Streams
  • Java のサポート
  • Locator
  • Spatial
  • Oracle XML DB Protocol Server
  • utl_http、utl_tcp、utl_smtp、utl_mail などのネットワークアクセスユーティリティは、現時点ではサポートされていません。

詳細は、ドキュメントを参照してください。

SQL Server

SQL Serverでサポートされていない機能として、以下のものがあります。詳細は、ドキュメントを参照してください。

  • メンテナンスプラン
  • データベースメール
  • 分散クエリ(あるいは、リンクサーバー)
  • Service Broker
  • データベースのログ配布
  • Windows 認証
  • 変更データキャプチャ(CDC)- CDC の代わりに変更の追跡を使用することを検討してください。
  • レプリケーション
  • DB インスタンスと同じサーバーでレポート、分析、統合、またはマスターデータサービスを実行する機能。これを行う必要がある場合は、EC2 インスタンスに SQL Server をインストールするか、レポート、統合、分析、またはマスターデータサービスを実行するサーバーとしてオンプレミスの SQL Server インスタンスを使用することをお勧めします。
  • パフォーマンスデータコレクター
  • 追加の T-SQL エンドポイント
  • 分散トランザクションコーディネーター(MSDTC)
  • WCF Data Services
  • FILESTREAM のサポート
  • ポリシーベースの管理
  • SQL Server Audit
  • BULK INSERT および OPENROWSET(BULK...) 機能。
  • Data Quality Services
  • ファイルの瞬時の初期化
  • Always On(2012 エンタープライズエディション)
  • ファイルテーブル
  • サーバーレベルのトリガー

PostgreSQL

PostgreSQLは、他のDBエンジンと比べて制限が少ない様です。PostgreSQLで使用できる拡張機能は、DBパラメータグループの"rds.extensions"の内容となります。2015年12月6日現在では、以下の39個がサポートされています。

拡張機能 PostgreSQL 9.3 PostgreSQL 9.4
btree_gin
btree_gist
chkpass
citext
cube
dblink
dict_int
dict_xsyn
earthdistance
fuzzystrmatch
hstore
intagg
intarray
ip4r ×
isn
ltree
pgcrypto
pgrowlocks
pgstattuple ×
pg_buffercache ×
pg_prewarm ×
pg_stat_statements
pg_trgm
plcoffee
plls
plperl
plpgsql
pltcl
plv8
postgis
postgis_tiger_geocoder
postgis_topology
postgres_fdw
sslinfo
tablefunc
test_parser
tsearch2
unaccent
uuid-ossp

Aurora

Auroraは、RDS for MySQLと比較して、以下のような制限があります。ドキュメントで明示的に記載されていない項目もあるため、他にも制限があるかもしれません。

  • ストレージエンジンはInnoDBしかサポートしていない
  • memcachedプロトコルが使用できない
  • 適応型ハッシュインデックス(Adaptive Hash Index)が使用できない

MariaDB

特定のストレージエンジンしかサポートされていません。PITRやスナップショットからの復元はXtraDBのみサポートされています。Ariaの場合はデータが紛失または破損する可能性があります。他のストレージエンジンはサポートされていません。

MySQLでサポートされていない機能として、以下のものがあります。詳細はドキュメントを参照してください。

  • MariaDB Galera クラスター
  • HandlerSocket
  • マルチソースレプリケーション
  • Engine-defined New Table/Field/Index Attributes」で説明されている、ストレージのエンジン固有のオブジェクト属性。

Let's Try

RDSを構築する手順を確認してみましょう。 RDSを構築する場合は、以下の手順が必要です。

  1. DBサブネットグループの作成
  2. パラメータグループの作成
  3. インスタンスの起動
  4. DBへ接続
  5. 追加のオプション

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

RDSを構築する前に、VPCごとにDB サブネットグループというものが必要4になります。デフォルトVPCの場合は、標準で用意されています。 DBサブネットグループはRDSインスタンスを起動するサブネットをグループ化するものです。マルチAZ構成でフェイルオーバーする場合は、DBサブネットグループで指定した他のAZに移ります5

東京リージョンに下図のようなVPCとサブネットがあることを前提とします。その中でPrivate-subnet-AとPrivate-subnet-CをDBサブネットグループとして設定します。

rds-vpc

マネージメントコンソールで、RDSの[サブネットグループ]を表示します。そこで[DB サブネットグループの作成]をクリックします。

RDS_·_AWS_Console

以下の項目を設定し[作成]をクリックします。

項目 内容
名前 DBサブネットグループの名前です。
説明 説明を記載できます。
VPC ID 作成するVPC IDを入力します。
サブネット ID アベイラビリティーゾーンを指定して対象のサブネット IDを[追加]します。

RDS_·_AWS_Console

パラメータグループの作成

次にパラメータグループを作成します。パラメータグループは各DBのバージョンごとに作成します。 パラメータグループは、DBの設定内容をまとめたものです。MySQLにとってのmy.cnfのようなものです。my.cnfとは設定できる項目が一部異なります。

パラメータグループを作成するには、RDSの[パラメータグループ]で[パラメータグループの作成]をクリックします。

RDS_·_AWS_Console

パラメータグループファミリー、グループ名、説明を記述して[作成]をクリックします。パラメータグループファミリーに[aurora5.6]を選択すると[タイプ]として[DB Parameter Group]と[DB Cluster Parameter Group]を選択する必要があります。 パラメータグループファミリーはDBエンジン(ライセンス別)とバージョンごとに別の物を指定します。2015年12月6日現在で指定できるファミリーは以下の表の通りです。

DBエンジン パラメータグループファミリー
MySQL mysql5.1, mysql5.5, mysql5.6
Oracle oracle-ee-11.2, oracle-ee-12.1, oracle-se-11.2, oracle-se-12.1, oracle-se1-11.2, oracle-se1-12.1
SQL Server sqlserver-ee-10.5, sqlserver-ee-11.0, sqlserver-ex-10.5, sqlserver-ex-11.0, sqlserver-ex-12.0, sqlserver-se-10.5, sqlserver-se-11.0, sqlserver-se-12.0, sqlserver-web-10.5, sqlserver-web-11.0, sqlserver-web-12.0
PostgreSQL postgres9.3, postgres9.4
Aurora aurora5.6
MariaDB mariadb10.0

RDS_·_AWS_Console

インスタンスの起動

RDSインスタンスを作成するには、RDSの[インスタンス]で[DB インスタンスの起動]をクリックします。

RDS_·_AWS_Console

ステップ 1:エンジンの選択

作成するRDSのDBエンジンを選択します。作成するDBエンジンを選び[選択]をクリックします。 DBエンジンごとに選択できるエディションが以下のように分かれています。

DBエンジン 選択できるエディション
Aurora Aurora
MariaDB MariaDB
MySQL MySQL
PostgreSQL PostgreSQL
Oracle Oracle EE, Oracle SE, Oracle SE One
SQL Server SQL Server Express, SQL Server Web, SQL Server SE,SQL Server EE

RDS_·_AWS_Console

ステップ 2:本番稼働用?

一部のDBエンジンでは、本番稼働用か質問があります。次のステップでのデフォルト値が変化するだけなので、どちらを選択しても構いません。 [はい]を選択すると、大きめのインスタンスクラス、マルチAZ、プロビジョンドIOPS ストレージがデフォルトになります。

RDS_·_AWS_Console

ステップ 3:DB 詳細の指定

DBの詳細を指定します。

項目 内容
ライセンスモデル DBのライセンスを選択します。DBエンジンごとに選択できる内容が異なります。選択肢としては「General Public License」、「自分のライセンスを使用」、「ライセンス込み」、「postgresql-license」があります。
DB エンジンのバージョン 起動したいDBのバージョンを指定します。
DB インスタンスのクラス 起動するDBインスタンスのスペックを指定します。DBエンジン、ライセンスモデルによってせんたくできるクラスが異なります。各クラスの詳細は、こちらを参照してください。
マルチ AZ 配置 高可用性な構成であるマルチAZにするか選択できます。マルチAZが指定できないリージョン、DBエンジンによっては表示されません。
ストレージタイプ ストレージを「汎用(SSD)」、「プロビジョンド IOPS(SSD)」、「マグネティック」から選択できます。通常は「汎用(SSD)」を選択することをお勧めします。
ストレージ割り当て 必要なストレージのサイズを指定します。SQL Server以外は後でサイズを増やせるため、大きな余裕は必要ありません。
DB インスタンス識別子 DBインスタンスのIDを指定します
マスターユーザの名前 初期のログインユーザの名前を指定します。
マスターパスワード ログインユーザのパスワードを指定します。
パスワードの確認 パスワードの確認をします。[マスターパスワード]と同じ内容を入力して下さい。

RDS_·_AWS_Console

Auroraの場合は、入力内容が異なり、DB インスタンスのクラス、マルチ AZ 配置、DB インスタンス識別子、マスターユーザの名前、マスターパスワード、パスワードの確認の6項目となります。

RDS_·_AWS_Console

ステップ 4:[詳細設定] の設定

詳細設定はDBエンジンごとに設定する項目が異なります。各DBエンジンでの項目の有無と設定内容についてまとめます。

ネットワーク & セキュリティ

項目 MySQL Oracle SQL Server PostgreSQL Aurora MariaDB 設定内容
VPC RDSを配置するVPCを選択します。
サブネットグループ 事前に作成したDBサブネットグループを選択します。
パブリックアクセス可能 インターネットから直接アクセス可能か選択します。[はい]を選択するとPublic IPとパブリックなDNSが設定されます。
アベイラビリティーゾーン RDSインスタンスを配置するAZを指定します。
VPC セキュリティグループ RDSインスタンスに設定するセキュリティグループを選択します。

RDS_·_AWS_Console

データベースの設定

項目|MySQL|Oracle|SQL Server|PostgreSQL|Aurora|MariaDB|設定内容 ---|:---:|:---:|:---:|:---:|:---:|:---:|--- DB クラスター識別子|×|×|×|×|○|×|AuroraのDBクラスタのIDを指定します。 データベースの名前|○|○|×|○|○|○|初期設定のデータベース(DBによってはスキーマ)の名称を指定します。 データベースのポート|○|○|○|○|○|○|ネットワークで接続するポート番号を指定します。 DB パラメータグループ|○|○|○|○|○|○|事前に作成したパラメータグループを指定します。 DB クラスターのパラメータグループ|×|×|×|×|○|×|Auroraのクラスタ全体に設定するパラメータグループを指定します。 オプショングループ|○|○|○|△ (項目はあるが指定できない)|△ (項目はあるが指定できない)|△ (項目はあるが指定できない)|オプショングループを指定します。一部のDBエンジンでは追加機能が使用できるようになります。 タグをスナップショットへコピー|○|○|○|○|×|○|スナップショット作成時にタグを引き継ぐかを指定します。 キャラクタセット名|×|○|×|×|×|×|Oracleのキャラクタセットを指定します。 暗号を有効化|○|○|○|○|○|○|ストレージの暗号化を設定するか指定します。 マスターキー ([暗号を有効化]で[はい]を指定した時に表示される)|○|○|○|○|○|○|暗号化するときの暗号キーを指定します。

RDS_·_AWS_Console

バックアップ

項目|MySQL|Oracle|SQL Server|PostgreSQL|Aurora|MariaDB|設定内容 ---|:---:|:---:|:---:|:---:|:---:|:---:|--- バックアップの保存期間|○|○|○|○|○|○|バックアップの保存期間を指定します。1〜35日で指定可能です。無効にする場合は0日を指定します6。 バックアップウィンドウ ([ウィンドウの選択]を選択すると、開始時刻、期間を指定できます)|○|○|○|○|×7|○|バックアップを行う時間帯を指定します。

RDS_·_AWS_Console

メンテナンス

項目|MySQL|Oracle|SQL Server|PostgreSQL|Aurora|MariaDB|設定内容 ---|:---:|:---:|:---:|:---:|:---:|:---:|--- マイナーバージョン自動アップグレード|○|○|○|○|○|○|マイナーバージョンへ自動でアップグレードするか指定できます。 メンテナンスウィンドウ ([ウィンドウの選択]を選択すると、開始日、開始時刻、期間を指定できます)|○|○|○|○|○|○|メンテナンスを行う時間帯を指定します。

RDS_·_AWS_Console

DBへ接続

実際にRDSへログインしてみます。 ますは、マネージメントコンソールで、インスタンスのエンドポイントを確認します。

RDS_·_AWS_Console

MySQL

VPC内のAmazon LinuxからMySQLへログインしてみます。

まずmysqlコマンドをインストールします。

$ sudo yum install -y mysql
読み込んだプラグイン:priorities, update-motd, upgrade-helper
依存性の解決をしています
・
・
・
依存性関連をインストールしました:
  mysql-config.x86_64 0:5.5.46-1.10.amzn1           mysql55.x86_64 0:5.5.46-1.10.amzn1           mysql55-libs.x86_64 0:5.5.46-1.10.amzn1          

完了しました!

実際にログインします。

$ mysql -u awsuser -pmypassword -h mysqlinstance.abcdefghijkl.ap-northeast-1.rds.amazonaws.com mydb
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 55
Server version: 5.6.23-log MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

普通のMySQLを同様にログインできました。

PostgreSQL

VPC内のAmazon LinuxからPostgreSQLへログインしてみます。

まずpsqlコマンドをインストールします。

$ sudo yum install postgresql
読み込んだプラグイン:priorities, update-motd, upgrade-helper
依存性の解決をしています
・
・
・
依存性関連をインストールしました:
  postgresql92-libs.x86_64 0:9.2.14-1.56.amzn1                                                                                                     

完了しました!

実際にログインします。

$ psql -U awsuser -h postgresql01.abcdefghijkl.ap-northeast-1.rds.amazonaws.com -d mydb
ユーザ awsuser のパスワード: 
psql (9.2.14, サーバー 9.4.4)
注意: psql バージョン 9.2, サーバーバージョン 9.4.
         psql の機能の中で、動作しないものがあるかもしれません。
SSL 接続 (暗号化方式: ECDHE-RSA-AES256-GCM-SHA384, ビット長: 256)
"help" でヘルプを表示します.

mydb=>

普通のPostgreSQLを同様にログインできました。

Oracle

VPC内のAmazon LinuxからOracleへログインしてみます。

まずsqlplusコマンドをインストールします。Oracle本家のサイト Instant Client Downloads for Linux x86-64 から、"oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm"と"oracle-instantclient12.1-sqlplus-12.1.0.2.0-1.x86_64.rpm"をダウンロードします。ダウンロード時にログインする必要があるので、Oracleプロファイルを持っていない場合はプロファイルを作成して下さい。 ダウンロードしたファイルをAmazon Linuxにアップロードして、以下のようにインストールします。

$ sudo rpm -ivh oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:oracle-instantclient12.1-basic-12################################# [100%]
$ sudo rpm -ivh oracle-instantclient12.1-sqlplus-12.1.0.2.0-1.x86_64.rpm 
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:oracle-instantclient12.1-sqlplus-################################# [100%]

実際にログインします。

$ export LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client64/lib:$LD_LIBRARY_PATH
$ sqlplus64 awsuser/mypassword@oracleinstance.abcdefghijkl.ap-northeast-1.rds.amazonaws.com:1521/ORCL

SQL*Plus: Release 12.1.0.2.0 Production on Sun Dec 6 18:08:39 2015

Copyright (c) 1982, 2014, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Release 12.1.0.1.0 - 64bit Production

SQL>

普通のOracleを同様にログインできました。

SQL Server

VPC内のWindows ServerからSQL Serverへログインしてみます。

Microsoftのダウンロード センター Microsoft® SQL Server® 2014 Expressから"MgmtStudio 64BIT\SQLManagementStudio_x64_JPN.exe"をダウンロードして インストールします。 [SQL Server の新規スタンドアロン インストールを実行するか、既存のインストールに機能を追加します]をクリックします。

rds-client

チェックボックスにチェックをして[次へ]をクリックします。

rds-client

[Microsoft Uodateを 使用して更新プログラムを確認する]にチェックをして、[次へ]をクリックします。

rds-client

ここでは、デフォルト状態ですべての機能が選択されており、Cドライブにインストールされます。問題ない場合は、[次へ]をクリックします。

rds-client

機能ルールの画面で1件失敗してしまいました。 サーバー マネージャーの[役割と機能の追加]から「.NET Framework 3.5 Features」をインストールします。「.NET Framework 3.5 Features」をインストールした後に、[再実行]をクリックしてインストールを勧めます。

rds-client

SQL Server 2014 Management Studioのインストールが完了しました。

rds-client

SQL Server 2014 Management Studioを起動します。 サーバー名にエンドポイント、認証は「SQL Server 認証」を設定します。ログインとパスワードを入力して[接続]をクリックします。

rds-client

通常のSQL Serverと同様にログインできました。

rds-client

Aurora

Auroraにはクラスタエンドポイントと普通のDBインスタンスのエンドポイントがあります。

RDS_·_AWS_Console

MySQLの場合と同様に、mysqlコマンドをインストールします。

クラスタエンドポイントでログインします。クラスタエンドポイントは、『[クラスタ名].cluster-[アカウント固有値].[リージョン].rds.amazonaws.com』の形式になっています。

$ mysql -u awsuser -pmypassword -h mycluster.cluster-abcdefghijkl.ap-northeast-1.rds.amazonaws.com mydb
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.6.10 MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

DBインスタンスのエンドポイントでもログインしてみましょう

$ mysql -u awsuser -pmypassword -h aurorainstance.abcdefghijkl.ap-northeast-1.rds.amazonaws.com mydb
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.6.10 MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

普通のMySQLの様にログインできました。

MariaDB

MySQLの場合と同様に、mysqlコマンドをインストールします。

実際にログインします。

$ mysql -u awsuser -pmypassword -h mariadbinstance.abcdefghijkl.ap-northeast-1.rds.amazonaws.com mydb
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 62
Server version: 5.5.5-10.0.17-MariaDB-log MariaDB Server

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

普通のMariaDBを同様にログインできました。

追加のオプション

一部のDBエンジンでは、オプショングループを設定することで追加機能を使用することができます。

MySQL

オプショングループの設定により、memcachedプロトコルでの接続が可能になります。MySQL 5.6以降で使用可能です。

Oracle

エディションにより、設定できるオプションが異なります。

オプション Oracle EE Oracle SE Oracle SE1 備考
APEX Oracle Application Expressを使用できます。
APEX-DEV Oracle Application Expressを使用できます。
NATIVE_NETWORK_ENCRYPTION × × Oracle Native Network Encryptionを使用できます。これはOracle Advanced Securityオプションの機能です。
OEM Oracle Enterprise Managerを使用できます。
STATSPACK Oracle Statspackのパフォーマンス統計が使用できるようになります。
TDE × × Oracle Transparent Data Encryptionによる透過的な暗号化ができるようになります。このオプションはKMSを使用します。
TDE_HSM × × Oracle Transparent Data Encryptionによる透過的な暗号化ができるようになります。このオプションはCloudHSMを使用します。
Timezone システムのタイムゾーンを変更できます。
XMLDB
(11.2のみ)
(11.2のみ)
(11.2のみ) Oracle XML DBをサポートします。

SQL Server

リージョンにより使用可否が変わりますが、Mirroringの設定が可能です。Enterprise Editionの場合、TDE(SQL Serverの透過的な暗号化)を設定できます。

あわせて読みたい

これまででRDSについての機能をご紹介してきましたが、まだまだ説明しきれていません。上記以外でぜひ読んで頂きたい情報を紹介したいと思います。

RDS全般

MySQL

Oracle

SQL Server

PostgreSQL

Aurora

MariaDB

さいごに

以上、『AWS サービス別 再入門アドベントカレンダー 2015』の7日目のエントリ『Amazon RDS編』でした。つい大作のエントリを書いてしまいました。RDBのサービスなので触れる機会が多いサービスだと思います。基本を抑えてマネージドなデータベースを活用していくと良いと思います。

明日12/08(火)は能登のAmazon EMR(Elastic MapReduce)です。お楽しみに!


  1. Auroraでは、特殊なSSDベースの仮想化ストレージレイヤーを採用しています。 
  2. リードレプリカを作成できるDBエンジンは、MySQL、PostgreSQL、Aurora、MariaDBの4種類です。Oracleの場合はGoldenGateを使用することで、同様の読み取り専用のインスタンスを構築可能です。 
  3. SLAとしては、他のDBエンジンと同様に99.95%の可用性となっています。 
  4. EC2-Classic環境ではDBサブネットグループは不要です。しかしEC2-Classic環境は非推奨であり、最近作成したAWSアカウントでは使用できないため、割愛します。 
  5. Auroraでリードレプリカが同じAZと異なるAZの両方にある場合は、同じAZのリードレプリカへ優先してフェイルオーバーします。 
  6. Auroraの場合は無効にできません。 
  7. Auroraの場合は起動時にバックアップウィンドウを指定できないため、起動後に[変更]で設定します。