【初心者向け】Amazon Aurora MySQLの始め方と基本
データベースの世界は奥深く、アプリケーション開発やデータ分析において中心的な役割を果たします。数あるデータベースの中でも、リレーショナルデータベース(RDB)は長年多くのシステムで利用されてきました。その中でも特に人気が高いのがMySQLです。
AWS(Amazon Web Services)は、このMySQLと互換性を持ちつつ、さらに高性能、高可用性、高耐久性、そして高いスケーラビリティを実現したフルマネージドなリレーショナルデータベースサービスを提供しています。それが「Amazon Aurora」です。そして、Auroraの中でも最も人気のあるエンジンの一つが、MySQLと互換性を持つ「Amazon Aurora MySQL互換エディション」です。
「なんとなく名前は聞いたことがあるけれど、従来のMySQLと何が違うの?」「どうやって使い始めるの?」「初心者でも扱えるの?」と思っている方も多いでしょう。
この記事は、そんなデータベースやAWSの初心者の方に向けて、Amazon Aurora MySQLがどのようなサービスなのか、なぜ選ばれるのか、そして具体的にどのようにAWS上で起動し、接続し、基本的な操作を行うのかを、約5000語のボリュームで徹底的に解説します。この記事を読めば、Aurora MySQLを使い始めるための知識と自信を得られるはずです。
1. はじめに
ウェブサイト、モバイルアプリ、業務システム、IoTデバイスからのデータ収集など、現代の多くのデジタルサービスはデータの保存と管理にデータベースを利用しています。その中でも特にリレーショナルデータベースは、構造化されたデータを扱うのに適しており、長年の実績と信頼があります。
MySQLは、オープンソースのリレーショナルデータベースとして非常に広く普及しています。その使いやすさ、柔軟性、そしてコミュニティの活発さから、多くの開発者や企業に愛用されています。
しかし、ビジネスが成長し、扱うデータ量が増え、アクセス数が爆発的に増加すると、従来の単一のMySQLサーバーではパフォーマンスや可用性の面で限界を迎えることがあります。データベースサーバーの運用(パッチ適用、バックアップ、レプリケーション設定、障害対応など)自体も大きな負担となります。
そこで登場するのが、AWSが提供する「Amazon Aurora」です。AuroraはAWSがゼロから設計・開発した新しいデータベースエンジンですが、主要なRDBエンジン(MySQLやPostgreSQL)と高い互換性を持っています。これにより、既存のデータベース(特にMySQLやPostgreSQL)からの移行が比較的容易でありながら、従来のRDBをはるかに凌駕するパフォーマンス、可用性、耐久性、スケーラビリティ、そして運用管理の容易さを実現しています。
本記事では、Amazon AuroraのMySQL互換エディションに焦点を当て、その特徴、従来のMySQLとの違い、そして実際にAWS上でクラスターを作成し、接続し、基本的な操作を行う手順を、初心者向けに丁寧に解説していきます。約5000語の詳細な説明を通して、Aurora MySQLの全体像と、ご自身で使い始めるための具体的なステップを理解できることを目指します。
2. Amazon Aurora MySQL とは?
Amazon Aurora MySQL互換エディション(以下、Aurora MySQL)は、Amazon Relational Database Service (RDS) の一部として提供される、フルマネージドなリレーショナルデータベースサービスです。これは、標準的なMySQLデータベースの最大5倍のパフォーマンスと、商用データベースに匹敵する可用性・耐久性を備えつつ、MySQLとの高い互換性を維持しています。
2.1 Aurora の基本的なアーキテクチャ
Auroraの最も革新的な点は、ストレージとコンピューティング(データベースインスタンス)が分離されたアーキテクチャです。
- 分散型共有ストレージシステム: Auroraは、データを単一のサーバーではなく、複数のアベイラビリティーゾーン(AZ)にまたがる、SSDベースの分散型ストレージシステムに保存します。データは6箇所にレプリケートされ、そのうち4箇所の書き込みを確認できればトランザクションがコミットされます(クォーラム方式)。これにより、高い耐久性(99.999999999% – イレブンナイン)と、1つのAZで障害が発生してもデータが失われるリスクを最小限に抑えています。このストレージは、最大128TBまで自動的に拡張します。
- データベースインスタンス (DBインスタンス): クライアントからの接続を受け付け、クエリを処理するコンピューティングリソースです。Auroraクラスターは1つのプライマリインスタンス(書き込み可能)と、最大15個のAuroraレプリカ(読み込み専用)を持つことができます。これらのインスタンスはすべて、同じ分散ストレージボリュームを共有します。
従来のRDBでは、各レプリカがプライマリからデータをコピーして自身のストレージに保持するため、レプリケーションの遅延が発生したり、ストレージ容量が各レプリカで必要になったりといった課題がありました。Auroraの共有ストレージアーキテクチャは、これらの課題を解決し、高速なフェイルオーバーやリードレプリカの低遅延を実現しています。
2.2 MySQL互換性について
Aurora MySQLは、MySQL 5.6, 5.7, 8.0 の主要なバージョンと高い互換性を持っています。これは、既存のMySQLアプリケーション、ドライバー、ツールを変更することなく、または最小限の変更でAuroraに移行できることを意味します。
ただし、100%の互換性があるわけではありません。MySQLの一部の機能やストレージエンジン(例: MyISAM – ただしInnoDBは完全にサポート)、特定のシステムテーブル、レプリケーション形式などがサポートされていない場合があります。初心者の方が通常利用する範囲であれば問題になることは少ないですが、詳細についてはAWSの公式ドキュメントで互換性情報を確認することが重要です。
2.3 従来のMySQLとの違い
Aurora MySQLが従来のMySQL(セルフマネージドまたはRDS for MySQL)と比べて優れている点、あるいは異なる点は多岐にわたります。
- パフォーマンス: AWSのテストでは、同じハードウェア上で実行した場合、標準的なMySQLに比べてスループットが最大5倍向上するとされています。これは、Aurora独自のストレージエンジンの最適化、書き込み処理の効率化、リードレプリカの低遅延などが要因です。
- スケーラビリティ:
- 読み込み処理: 最大15個の低遅延なAuroraレプリカを作成し、読み込みトラフィックを分散できます。レプリカは同じストレージボリュームを共有するため、追加のストレージ容量は不要です。
- 書き込み処理: プライマリインスタンスのインスタンスタイプを変更することで、より高性能なインスタンスに垂直にスケールアップできます。
- ストレージ: ストレージは最大128TBまで自動的に拡張します。容量不足を心配する必要がありません。
- 可用性と耐久性:
- 高可用性: プライマリインスタンスに障害が発生した場合、Auroraは自動的にAuroraレプリカの1つを新しいプライマリに昇格させます。これは通常30秒以内に行われます。Auroraレプリカがない場合でも、新しいインスタンスを自動的に作成します。
- 高耐久性: データは複数AZにまたがって6箇所に複製され、クォーラムベースの書き込み方式によりデータの損失リスクを極めて低く抑えます。また、継続的なバックアップが自動的に行われ、特定時点への復旧(Point-in-Time Recovery)が可能です。
- 運用管理:
- フルマネージド: ハードウェアプロビジョニング、データベースセットアップ、パッチ適用、バックアップ、リカバリ、障害検出、修復といった時間のかかる管理タスクをAWSが自動的に行います。これにより、運用負荷が大幅に軽減され、開発者はアプリケーション開発に集中できます。
- 自動スケーリング: ストレージは自動的にスケールします。Aurora Serverlessというオプションを使えば、コンピューティングリソースもトラフィックに応じて自動的にスケーリングさせることができます(初心者向けにはまずプロビジョンドインスタンスから始めるのが一般的です)。
- コスト: 従来のMySQLよりもインスタンス単価は高い傾向がありますが、高性能と運用負荷軽減を考慮すると、トータルコストで有利になるケースが多いです。特に、I/O課金がある点が従来のRDS for MySQLとは異なります(ストレージIOPSではなく、処理されるデータ量ベースのIOPS課金)。
2.4 なぜAurora MySQLを選ぶのか?
- 高いパフォーマンスが必要なアプリケーション: 大量のトランザクションを処理する必要があるウェブサービス、ゲームのバックエンド、SaaSアプリケーションなどに適しています。
- 高い可用性と耐久性が求められる基幹システム: 障害によるサービス停止が許されない、データの損失が重大な影響を及ぼすようなシステムに最適です。
- 運用管理コストを削減したい: データベースの運用管理に多くのリソースを割けない場合に、フルマネージドのAuroraは強力な味方になります。
- 既存のMySQLからの移行: MySQLとの高い互換性により、比較的容易に高性能なデータベース環境へ移行できます。
- データ量の増加が予測される: ストレージの自動拡張機能により、将来のデータ増加に対応しやすいです。
初心者にとっては、高性能・高可用性といったメリットに加え、「運用管理がAWSに任せられる」という点が非常に魅力的です。複雑なバックアップ設定やレプリケーション構築、障害時の復旧作業などを自分でやる必要がないため、データベース運用に関する専門知識が少なくても安心して利用を開始できます。
3. Aurora MySQL を始める前の準備
Aurora MySQLを実際にAWSクラウド上で動かす前に、いくつかの準備が必要です。これらはAWSを利用する上での基本的なステップでもあります。
3.1 AWSアカウントの作成
AWSのサービスを利用するには、まずAWSアカウントが必要です。まだお持ちでない場合は、AWS公式ウェブサイトから作成してください。クレジットカード情報の登録が必要ですが、多くのサービスには無料利用枠が用意されており、Auroraにも特定の条件下での無料利用枠があります(ただし、高負荷な利用や長期間の利用では費用が発生するので注意が必要です)。
アカウント作成手順の概要:
1. AWS公式サイト(aws.amazon.com)にアクセス。
2. 「AWSアカウントを作成する」をクリック。
3. メールアドレス、パスワード、AWSアカウント名を入力。
4. 連絡先情報を入力(個人か法人か、氏名、電話番号、住所など)。
5. クレジットカード情報を入力。
6. 電話番号による本人確認を行う。
7. サポートプランを選択(最初はベーシックサポートで十分です)。
8. 登録完了。
アカウント作成後、ルートユーザーとしてログインできるようになります。
3.2 IAMユーザー/ロールの設定
ルートユーザーはAWSアカウントの全ての権限を持つため、日常的な操作や設定には利用しないのがセキュリティ上のベストプラクティスです。代わりに、AWS Identity and Access Management (IAM) を使用して、特定の権限を持つ新しいユーザー(IAMユーザー)やロールを作成し、それらを利用します。
初心者の方はまず、ご自身の操作用にIAMユーザーを作成し、管理者権限(AdministratorAccessなど)またはデータベース関連の操作に必要な最小限の権限(例: AmazonRDSFullAccess
, AmazonVPCFullAccess
, AmazonEC2FullAccess
など)を付与することをお勧めします。
IAMユーザー作成手順の概要:
1. AWSマネジメントコンソールにルートユーザーでログイン。
2. サービス検索バーで「IAM」と入力し、IAMコンソールに移動。
3. 左のナビゲーションペインで「ユーザー」を選択。
4. 「ユーザーを追加」をクリック。
5. ユーザー名を入力し、「AWSマネジメントコンソールへのアクセスを提供する」にチェックを入れる。
6. パスワードを設定。
7. 「権限を設定」画面で「ユーザーをグループに追加」を選択し、管理者権限を持つグループを作成・選択するか、既存のポリシーを直接アタッチ(例: AdministratorAccess
)。
8. 「ユーザーを作成」をクリック。
作成したIAMユーザーの情報(コンソールログインURL、ユーザー名、パスワード)を安全に保管し、今後はこのIAMユーザーでログインして作業を行います。
3.3 VPCの基礎知識
Amazon Virtual Private Cloud (VPC) は、AWSクラウド内に論理的に分離された仮想ネットワークを構築するサービスです。Aurora MySQLクラスターはこのVPC内に配置する必要があります。VPCはインターネットや他のネットワークから隔離された、安全なプライベートネットワーク空間を提供します。
- なぜVPCが必要か?: データベースは機密情報を含むことが多いため、インターネットから直接アクセスできないプライベートネットワーク内に配置するのが一般的です。VPCを利用することで、データベースへのアクセスを許可するネットワークやIPアドレスを厳密に制御できます。
- デフォルトVPC: AWSアカウントを作成すると、各リージョンに「デフォルトVPC」が自動的に作成されます。初心者の方はまずこのデフォルトVPCを利用してAuroraを起動することも可能ですが、本番環境では独自のVPCを設計・構築するのが推奨されます。
- サブネット: VPCは「サブネット」と呼ばれる小さなネットワーク区画に分割されます。サブネットは特定のアベイラビリティーゾーン(AZ)に関連付けられます。データベースのような高可用性が求められるリソースは、複数のAZにまたがるサブネットグループに配置することが重要です。
3.4 サブネットグループの設定
Auroraクラスターを作成する際、クラスター内のインスタンス(プライマリとレプリカ)をどのサブネットに配置するかを指定する必要があります。RDS(Auroraも含む)は、これらのサブネットをまとめた「DBサブネットグループ」を使用します。
高可用性を実現するためには、異なるアベイラビリティーゾーンに存在する複数のサブネットをDBサブネットグループに含める必要があります。これにより、プライマリインスタンスがあるAZに障害が発生した場合でも、別のAZで待機している(またはすぐに起動できる)レプリカが処理を引き継ぐことができます。
DBサブネットグループ作成手順の概要:
1. RDSマネジメントコンソールに移動。
2. 左のナビゲーションペインで「サブネットグループ」を選択。
3. 「DBサブネットグループを作成」をクリック。
4. 名前、説明を入力。
5. 対象のVPCを選択。
6. 「アベイラビリティーゾーン」と「サブネット」を選択して追加します。ここでは、異なるAZに属する複数のサブネットを選択することが必須です。 初心者の方はデフォルトVPCに含まれる複数のパブリックまたはプライベートサブネットを選択してください(パブリックサブネットでも、セキュリティグループでアクセス元を制限すれば安全に利用開始できます)。
7. 「作成」をクリック。
3.5 セキュリティグループの設定
セキュリティグループは、仮想ファイアウォールとして機能し、DBインスタンスへのトラフィックを制御します。どのIPアドレスや他のセキュリティグループからの、どのポートへのアクセスを許可するかを定義します。
Aurora MySQLインスタンスに接続するためには、クライアント(アプリケーションサーバー、開発用PCなど)からのアクセスを許可するルールをセキュリティグループに追加する必要があります。
セキュリティグループ作成/設定手順の概要:
1. VPCマネジメントコンソールに移動(またはRDSコンソールの作成ウィザード内で設定)。
2. 左のナビゲーションペインで「セキュリティグループ」を選択。
3. 「セキュリティグループを作成」をクリックするか、既存のセキュリティグループを選択。
4. インバウンドルールを設定します。
* タイプ: MySQL/Aurora (3306)
を選択(デフォルトのMySQLポート)。
* ソース: アクセス元を指定します。
* マイIP
: 自分の開発用PCから接続する場合(IPアドレスが変わる可能性がある点に注意)。
* 特定のIPアドレスブロック (CIDR): x.x.x.x/32
(単一IP), y.y.y.y/z
(ネットワーク範囲)。
* 別のセキュリティグループ: アプリケーションサーバーが属するセキュリティグループを指定すると、そのサーバーからのアクセスのみを許可できます(推奨)。
5. アウトバウンドルール(DBインスタンスから外部への通信)は、デフォルトで全て許可でも問題ありませんが、必要に応じて制限することも可能です。
6. 設定を保存。
重要: セキュリティグループの設定は、データベースのセキュリティにおいて最も基本的な、かつ最も重要な設定の一つです。意図しないアクセスを許さないよう、最小限の必要な通信だけを許可するように設定してください。特に本番環境では、安易に「すべてのIPアドレス (0.0.0.0/0)」からのアクセスを許可しないように注意しましょう。
4. Aurora MySQL クラスターを作成する
いよいよAurora MySQLクラスターを作成する手順です。AWSマネジメントコンソールを使って、ステップバイステップで進めます。
-
RDSマネジメントコンソールへのアクセス:
- AWSマネジメントコンソールにIAMユーザーでログインします。
- サービス検索バーで「RDS」と入力し、RDSコンソールに移動します。
- 初めて利用する場合は、画面中央に「データベースの作成」ボタンが表示されます。「標準作成」を選択します。既に他のデータベースがある場合は、右上の「データベースを作成」ボタンをクリックします。
-
エンジンの選択:
- 「エンジンのタイプ」で「Amazon Aurora」を選択します。
- その下で「エディション」を選択します。「Amazon Aurora MySQL互換エディション」を選択します。
-
バージョンの選択:
- 利用したいMySQL互換のバージョンを選択します。最新の安定版を選択するのが一般的です。特定のアプリケーションに依存性がある場合は、それに合わせたバージョンを選択してください。
-
テンプレートの選択:
- 利用目的に合わせたテンプレートを選択します。
- 本稼働: 高可用性、耐久性、スケーラビリティを最大限に考慮した設定。複数AZにレプリカを作成します。
- 開発/テスト: シングルAZでの構成など、コストを抑えた設定。
- 無料利用枠: 無料利用枠の範囲内で利用できる設定。無料利用枠の対象となるインスタンスタイプなどが自動的に選択されます。
- 初心者の方は、まず「開発/テスト」や「無料利用枠」から始めるのが良いでしょう。
- 利用目的に合わせたテンプレートを選択します。
-
データベース詳細:
- DBクラスター識別子: クラスターを一意に識別するための名前を指定します。例:
my-aurora-cluster-dev
- マスターユーザー名: データベースの管理者ユーザー名を指定します。デフォルトの
admin
でも良いですし、任意の名前を設定しても構いません。 - マスターパスワード: マスターユーザーのパスワードを設定します。強力なパスワードを設定し、安全に保管してください。確認用にもう一度入力します。
- DBクラスター識別子: クラスターを一意に識別するための名前を指定します。例:
-
インスタンス設定:
- DBインスタンスクラス: 使用するコンピューティングリソースのタイプ(CPU、メモリ)を選択します。
db.t3.medium
やdb.r6g.large
など、様々なインスタンスタイプがあります。テンプレートで「無料利用枠」を選択した場合、自動的に対応するインスタンスクラスが選択されます。「開発/テスト」の場合は、目的に応じたインスタンスクラスを選択します。 - 可用性 & 耐久性:
- 「本稼働」テンプレートでは、通常「複数AZ DBインスタンスを作成」が選択され、推奨されます。これは、プライマリインスタンスとは別のAZにAuroraレプリカを自動的に作成し、高可用性を確保する設定です。
- 「開発/テスト」や「無料利用枠」では、「スタンバイインスタンスを作成しない」が選択されることがあります。これはコストを抑えるための設定ですが、この場合、プライマリインスタンスに障害が発生すると復旧に時間がかかります。初心者の方は、まずこの設定で開始しても構いませんが、本番利用では複数AZ構成を強く推奨します。
- DBインスタンスクラス: 使用するコンピューティングリソースのタイプ(CPU、メモリ)を選択します。
-
接続:
- 仮想プライベートクラウド (VPC): クラスターを配置するVPCを選択します。事前に作成したVPCやデフォルトVPCを選択します。
- サブネットグループ: 事前に作成したDBサブネットグループを選択します。
- VPCセキュリティグループ: アクセスを許可するセキュリティグループを選択します。ここで、前述の「セキュリティグループの設定」で準備したセキュリティグループを選択するか、新しく作成することも可能です。
- アベイラビリティーゾーン: プライマリインスタンスを起動するAZを選択できます。通常は「設定なし」でAWSに任せても構いません。
- データベースポート: MySQLの標準ポートである
3306
がデフォルトで設定されています。特別な理由がなければ変更する必要はありません。
-
データベース認証:
- データベース認証オプション:
- パスワード認証: マスターユーザー名とパスワードで認証します(最も一般的)。
- IAMデータベース認証: IAMユーザー/ロールを使用して認証します。セキュリティが高まりますが、設定がやや複雑になります。初心者の方はまずパスワード認証で十分です。
- データベース認証オプション:
-
追加設定:
- データベース名: 初回作成時に自動的に作成されるデータベース名を指定できます(オプション)。指定しない場合、後で手動で作成できます。
- パラメータグループ: データベースエンジンの設定パラメータを管理します。デフォルトのパラメータグループを選択しても問題ありません。必要に応じてカスタムパラメータグループを作成し、設定を変更することも可能です(例:
max_connections
など)。初心者の方はまずデフォルトを使用します。 - オプショングループ: データベースエンジンに追加機能を有効化します(例: S3連携、Lambda連携など)。通常はデフォルトで問題ありません。
- バックアップ:
- バックアップ保持期間: 自動スナップショットを保持する期間(日数)を指定します。デフォルトは7日です。本番環境では、ビジネス要件に応じた期間(例: 30日)を設定します。
- バックアップウィンドウ: 自動バックアップが実行される時間帯を指定します。データベースへの負荷が比較的低い時間帯を指定するのが一般的です。
- モニタリング:
- CloudWatch Logsへのエクスポート: 必要に応じて、エラーログ、スロークエリログなどをCloudWatch Logsにエクスポートするように設定できます。デバッグやパフォーマンス分析に役立ちます。
- Performance Insights を有効化: データベースの負荷状況を詳細に分析できるツールです。開発/テストでも有効にしておくと便利です。保持期間などを設定できます。
- メンテナンス:
- 自動マイナーバージョンアップグレード: データベースエンジンのマイナーバージョンアップグレードを自動で適用するかどうかを指定します。セキュリティパッチなどが含まれるため、有効化しておくのが推奨されます。
- メンテナンスウィンドウ: アップグレードなどのメンテナンスが実行される時間帯を指定します。
- 削除保護:
- 削除保護を有効にする: 有効にすると、クラスターを簡単に削除できなくなります。本番環境では必ず有効化しておくべき設定です。誤操作によるデータ損失を防ぎます。開発/テスト環境では無効にしておいても構いません。
-
データベースの作成:
- 設定内容を確認し、「データベースを作成」ボタンをクリックします。
-
作成中の確認:
- クラスターの作成が開始されます。ステータスが「作成中 (Creating)」と表示されます。完了するまでには数分から数十分かかる場合があります。
- ステータスが「利用可能 (Available)」になれば、クラスターの作成は完了です。
5. Aurora MySQL クラスターに接続する
クラスターが「利用可能 (Available)」になったら、いよいよ接続してみましょう。
5.1 接続情報の確認
接続に必要な情報は、RDSコンソールの「データベース」画面で作成したAuroraクラスターを選択し、「接続とセキュリティ」タブを確認します。
- クラスターエンドポイント: これが、クラスター全体(プライマリインスタンスとレプリカを含む)へのエントリポイントです。通常、書き込みと読み込みの両方にこのエンドポイントを使用できますが、読み込み処理をレプリカに分散したい場合は、別途「リーダーエンドポイント」も確認できます。
- ポート: デフォルトの
3306
が設定されているはずです。 - マスターユーザー名: クラスター作成時に設定したユーザー名です。
5.2 接続するためのツール/方法
様々な方法でAurora MySQLクラスターに接続できます。
- MySQL Client (CLI): コマンドラインから操作するための公式クライアントツールです。シンプルですが強力です。
- GUIツール:
- MySQL Workbench: Oracleが提供するMySQLの公式GUIツールです。モデル設計、SQL開発、管理ツールなどが統合されています。
- DBeaver: 複数のデータベースに対応した汎用的なGUIツールです。
- A5:SQL Mk-2 (Windows): 日本語対応のフリーソフトで人気があります。
- アプリケーションコード: Java (JDBC), Python, PHPなど、様々な言語のMySQLドライバーを使ってアプリケーションから接続します。
- AWS Systems Manager Session Manager (ポートフォワーディング): EC2インスタンスを経由して、セキュアにプライベートサブネット内のDBに接続する方法です。ローカル環境から直接接続できない場合に便利です。
初心者の方は、まずGUIツールやCLIツールを使って手動で接続確認を行うのがおすすめです。
5.3 接続元環境とセキュリティグループの再確認
接続を試みる前に、以下の点を確認してください。
- 接続元環境: Auroraクラスターが配置されているVPC内のEC2インスタンスから接続するのか、またはローカル環境からインターネット経由(パブリックアクセスが有効なサブネットかつセキュリティグループで許可されている場合)で接続するのか。
- セキュリティグループ: 接続元のIPアドレスやセキュリティグループからのインバウンドトラフィック(デフォルトポート3306)が、DBクラスターに関連付けられているセキュリティグループで許可されているか、再度確認してください。許可されていない場合、接続は拒否されます。
5.4 接続手順の具体例(MySQL Client CLIの場合)
ローカル環境にMySQL Clientがインストールされており、Auroraクラスターがパブリックアクセス可能なサブネットにあり、かつセキュリティグループでローカルIPアドレスからのアクセスが許可されている場合の手順です。
- ターミナルまたはコマンドプロンプトを開きます。
- 以下のコマンドを実行します。
bash
mysql -h YOUR_AURORA_CLUSTER_ENDPOINT -P 3306 -u YOUR_MASTER_USERNAME -pYOUR_AURORA_CLUSTER_ENDPOINT
: RDSコンソールで確認したクラスターエンドポイントに置き換えます。YOUR_MASTER_USERNAME
: クラスター作成時に設定したマスターユーザー名に置き換えます。
- パスワードの入力を求められますので、マスターパスワードを入力します。
- パスワードが正しければ、MySQLのプロンプト(
mysql>
)が表示され、接続成功です。
もし接続できない場合は、以下の点を確認してください。
* エンドポイント、ポート、ユーザー名、パスワードが正しいか。
* 接続元IPアドレスが、DBクラスターに関連付けられているセキュリティグループのインバウンドルールで許可されているか。
* Auroraクラスターが配置されているサブネットがパブリックサブネットで、インターネットゲートウェイ経由でアクセス可能か(ローカル環境からの接続の場合)。
* ファイアウォールなど、ローカル環境のネットワーク設定がMySQLポートへの接続をブロックしていないか。
6. Aurora MySQL の基本的な操作
接続に成功したら、データベースの基本的な操作を行ってみましょう。ここではSQLクエリを使った基本的な操作例を示します。GUIツールを利用する場合も、内部的には同じようなSQLクエリが実行されます。
6.1 データベースの作成
sql
CREATE DATABASE mydatabase;
これでmydatabase
という名前の新しいデータベースが作成されます。
作成したデータベースを使用するように切り替えます。
sql
USE mydatabase;
6.2 テーブルの作成
データを格納するためのテーブルを作成します。例として、シンプルなユーザー情報を保持するテーブルを作成します。
sql
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
* id
: ユーザーを一意に識別する整数型のID。AUTO_INCREMENT
で自動採番、PRIMARY KEY
で主キーとして設定。
* username
: ユーザー名。文字列型(最大50文字)。NOT NULL
でNULLを許可せず、UNIQUE
で重複を許可しない。
* email
: メールアドレス。文字列型(最大100文字)。
* created_at
: レコード作成日時。タイムスタンプ型。DEFAULT CURRENT_TIMESTAMP
で、挿入時に指定がなければ現在の時刻を自動的に設定。
6.3 データの挿入 (INSERT)
テーブルに新しいレコードを追加します。
sql
INSERT INTO users (username, email) VALUES ('alice', '[email protected]');
INSERT INTO users (username, email) VALUES ('bob', '[email protected]');
6.4 データの参照 (SELECT)
テーブルからデータを取得します。
“`sql
SELECT * FROM users; — テーブルの全カラム、全レコードを取得
SELECT username, email FROM users WHERE username = ‘alice’; — 特定の条件に合うレコードから特定のカラムを取得
“`
6.5 データの更新 (UPDATE)
既存のレコードのデータを変更します。
sql
UPDATE users SET email = '[email protected]' WHERE username = 'alice';
注意: WHERE
句を指定しないと、テーブル内の全てのレコードが更新されてしまいます。更新の際はWHERE句を慎重に確認してください。
6.6 データの削除 (DELETE)
既存のレコードを削除します。
sql
DELETE FROM users WHERE username = 'bob';
注意: WHERE
句を指定しないと、テーブル内の全てのレコードが削除されてしまいます。削除の際はWHERE句を慎重に確認してください。
これらのSQLコマンドはMySQLの標準的な構文であり、Aurora MySQLでもそのまま利用できます。
6.7 ユーザーと権限管理
デフォルトのマスターユーザー(admin
など)は全ての権限を持ちますが、アプリケーションごとに異なるユーザーを作成し、必要な最小限の権限のみを付与するのがセキュリティ上のベストプラクティスです。
新しいユーザーを作成します。
sql
CREATE USER 'app_user'@'%' IDENTIFIED BY 'your_secure_password';
* 'app_user'@'%'
: app_user
というユーザー名で、%
は任意のホストからの接続を許可します。特定のホストからの接続のみを許可する場合は、'app_user'@'192.168.1.%'
のように指定します。
* IDENTIFIED BY 'your_secure_password'
: パスワードを設定します。
作成したユーザーに必要な権限を付与します。例えば、mydatabase
内の全てのテーブルに対する参照(SELECT)、挿入(INSERT)、更新(UPDATE)、削除(DELETE)権限を付与する場合。
sql
GRANT SELECT, INSERT, UPDATE, DELETE ON mydatabase.* TO 'app_user'@'%';
* mydatabase.*
: mydatabase
データベース内の全てのテーブルを意味します。特定のテーブルのみに権限を付与する場合はmydatabase.tablename
のように指定します。
権限の変更を有効にするには、必要に応じて権限をフラッシュします。
sql
FLUSH PRIVILEGES;
ユーザーの削除
sql
DROP USER 'app_user'@'%';
7. Aurora MySQL の運用と管理
Aurora MySQLはフルマネージドサービスですが、運用状況の確認、必要に応じた設定変更、スケーリング、バックアップからの復旧といった管理タスクは利用者側で行います。RDSコンソールからこれらの操作を行うことができます。
7.1 スケーリング
トラフィック量の変化に応じて、データベースのスケーリングが必要になる場合があります。
- リードレプリカ(読み込み処理のスケールアウト): 読み込み処理の負荷が高い場合、Auroraレプリカを追加することで読み込みトラフィックを分散できます。Auroraレプリカはプライマリインスタンスと同じストレージボリュームを共有するため、作成が非常に高速で、レプリケーション遅延も低いです。
- RDSコンソールでクラスターを選択し、「アクション」ドロップダウンから「レプリカを追加」を選択します。インスタンスタイプや可用性ゾーンなどを選択して作成します。最大15個まで追加可能です。
- アプリケーション側では、書き込み処理はクラスターエンドポイントに、読み込み処理はリーダーエンドポイント(レプリカ全体に対するロードバランサーのようなエンドポイント)に接続するように設定を分けることで、レプリカへの負荷分散を実現できます。
- インスタンスタイプの変更(垂直スケーリング): プライマリインスタンスやレプリカのコンピューティングリソース(CPU、メモリ)が不足している場合、より高性能なインスタンスタイプに変更(スケールアップ)することで対応できます。
- RDSコンソールでインスタンス(プライマリまたはレプリカ)を選択し、「アクション」から「変更」を選択します。
- 「DBインスタンスクラス」を変更し、他の設定(適用時間など)を確認して「続行」→「変更を適用」をクリックします。
- インスタンスタイプの変更には、一時的にデータベースが利用できなくなるダウンタイムが発生します(通常数分)。メンテナンスウィンドウでの適用を設定できます。
- Aurora Serverless: トラフィック量が大きく変動するワークロード向けに、コンピューティングリソースを自動的にスケーリングするモードです。コスト効率が高い場合がありますが、プロビジョンドインスタンスとは動作が異なるため、初心者の方はまずプロビジョンドインスタンスから始めるのが一般的です。
7.2 バックアップと復元
Auroraは自動的にバックアップ(スナップショット)を取得するため、データ損失のリスクを低く抑えられます。
- 自動バックアップ(スナップショット): クラスター作成時に設定した保持期間(デフォルト7日)に従って、継続的にストレージボリュームのスナップショットが作成されます。これにより、保持期間内の任意の時点にデータベースを復元できます。
- 手動スナップショットの作成: 特定の時点の状態を永続的に保持したい場合などに、手動でスナップショットを作成できます。
- RDSコンソールでクラスターを選択し、「アクション」から「スナップショットを取得」を選択します。識別子を指定して取得します。手動スナップショットは、明示的に削除しない限り保持され、バックアップ保持期間の影響を受けません。
- 特定時点への復元 (Point-in-Time Recovery): 自動バックアップから、指定した保持期間内の任意の時点(通常、過去5分以内まで指定可能)の状態にデータベースを復元し、新しいクラスターとして起動できます。
- RDSコンソールでクラスターを選択し、「アクション」から「特定時点に復元」を選択します。復元したい日時を指定し、新しいクラスター名などを指定して復元します。
- スナップショットからの新しいデータベース作成: 自動または手動のスナップショットから、新しいAuroraクラスターを作成できます。これは、過去のある時点のデータを参照したい場合や、開発/テスト環境を構築したい場合などに便利です。
- RDSコンソールの「スナップショット」画面で対象のスナップショットを選択し、「アクション」から「スナップショットの復元」を選択します。新しいクラスターの設定(エンジン、インスタンスタイプなど)を指定して復元します。
7.3 モニタリング
データベースのパフォーマンスや稼働状況を把握することは、安定運用に不可欠です。
- Amazon CloudWatch: RDSコンソールやCloudWatchコンソールから、様々なメトリクス(CPU使用率、データベース接続数、ストレージI/O、レプリケーション遅延、空きメモリなど)をグラフで確認できます。これらのメトリクスに基づいてアラームを設定し、閾値を超えた場合に通知を受けるようにすることも可能です。
- 主要なメトリクス:
CPUUtilization
: インスタンスのCPU使用率。高い状態が続く場合はインスタンスタイプの見直しやクエリ最適化が必要かもしれません。DatabaseConnections
: データベースへのアクティブな接続数。max_connections
パラメータを超えないか確認が必要です。VolumeBytesUsed
: ストレージの使用量。VolumeReadIOPs
,VolumeWriteIOPs
: ストレージに対する読み書きI/Oの回数。FreeableMemory
: インスタンスで利用可能なメモリ容量。AuroraReplicaLag
: Auroraレプリカのプライマリに対する遅延(読み込み処理をレプリカに振り分ける場合に重要)。
- 主要なメトリクス:
- RDS Performance Insights: データベースの負荷を詳細に分析できるツールです。待機イベント(何が原因でクエリの処理が遅れているか)などを可視化し、パフォーマンス問題の原因特定に役立ちます。
- RDSコンソールでクラスターを選択し、「モニタリング」タブ内の「Performance Insights」グラフを確認します。
- ログ: エラーログやスロークエリログ(実行に時間がかかったクエリのログ)は、データベースの問題やパフォーマンスボトルネックを特定するのに役立ちます。
- クラスター作成時にCloudWatch Logsへのエクスポートを設定しておくと、CloudWatchコンソールからログを確認できます。または、RDSコンソールの「ログとイベント」からダウンロードすることも可能です。
7.4 メンテナンス
AWSはセキュリティや機能改善のために、データベースエンジンのバージョンアップグレードなどを定期的に行います。
- メンテナンスウィンドウ: クラスター作成時に、これらのメンテナンス作業が実行される時間帯(例: 毎週火曜日の午前3時~午前4時 (UTC))を指定します。メンテナンスウィンドウ外に作業が実行されることは原則ありません。
- バージョンのアップグレード:
- マイナーバージョンアップグレード: セキュリティパッチなど、互換性を維持しつつ修正が行われるアップグレードです。通常、自動マイナーバージョンアップグレードを有効にしておけば、指定したメンテナンスウィンドウ内に自動的に適用されます。適用時には、短時間(通常数分)のダウンタイムが発生する場合があります。
- メジャーバージョンアップグレード: 機能追加など、互換性に影響が出る可能性のあるアップグレードです(例: MySQL 5.7互換版から8.0互換版へのアップグレード)。これは自動では行われず、手動で実行する必要があります。メジャーバージョンアップグレードは、事前の検証が非常に重要です。RDSコンソールから「変更」操作で実行できます。
8. Aurora MySQL の高度な機能 (初心者向けに触れる程度)
Aurora MySQLには、さらに高度な要件に対応するための様々な機能がありますが、これらは初心者にとっては少し複雑な場合があるため、ここでは簡単な紹介にとどめます。必要になった際に、公式ドキュメントなどを参照して学習を進めてください。
- Aurora Global Database: 複数のAWSリージョンにまたがるデータベースクラスターを構築し、ディザスターリカバリ(災害対策)やリージョン間の高速な読み込みアクセス(グローバルリードレプリカ)を実現します。
- Parallel Query: データ分析クエリの実行を高速化するために、ストレージ層でのデータスキャンを並列化する機能です。分析系のワークロードに有効です。
- Backtrack: データベースを特定時点の状態に「巻き戻す」ことができる機能です。リカバリポイントまで素早く戻りたい場合に、従来のリストアよりも高速な選択肢となります。
- Machine Learning Integration: Auroraから直接SageMakerなどのAWS機械学習サービスにアクセスし、データベース内のデータに対して機械学習モデルを実行できる機能です。
これらの機能は、特定の高度なユースケースで非常に強力なメリットをもたらしますが、まずは基本的なAuroraクラスターの運用に慣れることから始めるのが良いでしょう。
9. セキュリティ
データベースは機密情報を含むことが多いため、セキュリティは非常に重要です。Aurora MySQLを利用する上で考慮すべき主なセキュリティ対策を説明します。
- VPCとセキュリティグループ: 前述の通り、VPC内でデータベースを隔離し、セキュリティグループでアクセス元IPアドレスやポートを厳密に制御することが、外部からの不正アクセスを防ぐ最も基本的な対策です。
- IAMロールとポリシー: IAMユーザー/ロールを利用してAWSリソース(Auroraクラスターの作成、変更、削除など)へのアクセス権限を管理します。必要最小限の権限のみを付与することで、誤操作や不正操作のリスクを減らせます。また、IAMデータベース認証を利用すれば、データベースへの接続そのものをIAMで管理できます。
- SSL/TLSによる接続暗号化: クライアントとデータベース間の通信を暗号化することで、通信途中のデータ盗聴を防ぎます。AuroraはSSL/TLS接続をサポートしており、クライアント側でSSLを有効にして接続できます。
- 保存時の暗号化 (Encryption at Rest): ストレージに保存されているデータを暗号化します。クラスター作成時に設定できます。有効化すると、ストレージボリューム、スナップショット、レプリカ、Backtrackログなど、すべてのデータが透過的に暗号化されます。非常に簡単に設定できるため、機密データを扱う場合は有効化しておくのが推奨されます。AWS Key Management Service (KMS) と連携して暗号化キーを管理します。
- マスターユーザーとパスワード管理: マスターユーザーはDBに対する強力な権限を持つため、強固なパスワードを設定し、適切に管理する必要があります。AWS Secrets Managerなどのサービスを利用して、パスワードを安全に保管・管理することも検討しましょう。
- 定期的なセキュリティパッチ適用: RDS(Auroraも含む)は、OSやデータベースエンジンのセキュリティパッチ適用をAWSが自動的に行います(メンテナンスウィンドウ内)。これにより、常に最新のセキュリティ対策が適用された状態で利用できます。
10. コストについて
Amazon Auroraは従来のRDS for MySQLと比較して、より高性能な代わりに料金体系が少し異なります。コストを理解し、最適化を検討することは重要です。
主な課金要素は以下の通りです。
- DBインスタンス料金: 稼働しているDBインスタンス(プライマリおよびレプリカ)の時間あたりの料金です。インスタンスタイプ(CPUやメモリのスペック)によって料金が異なります。
- ストレージ料金: ストレージの使用量に応じた料金です。データ量が増えるにつれて料金も増加します。
- I/O料金: Aurora MySQLの大きな特徴の一つで、ストレージに対するI/O操作の回数ではなく、処理されるデータ量に基づいて課金されます(GBあたりの料金)。これは、Auroraの分散ストレージアーキテクチャによるものです。ワークロードのI/Oパターンによって、この料金が無視できない額になることがあります。
- バックアップストレージ料金: バックアップ保持期間を超えて保持されるスナップショットや、手動で作成したスナップショットの容量に応じた料金です。
- データ転送料金: AWSリージョン外へのデータ転送などに料金が発生します。VPC内のAWSサービス間(同一AZまたは異なるAZ)のデータ転送は無料または低額です。
コスト最適化のヒント:
- 適切なインスタンスタイプの選択: ワークロードに対して過剰または不足しているインスタンスタイプを選んでいないか定期的に見直します。CloudWatchメトリクス(CPU使用率、空きメモリなど)が判断材料になります。
- 未使用リソースの削除: 不要になったDBクラスターやスナップショットは削除しましょう。
- Aurora Serverlessの検討: トラフィックの変動が大きいワークロードであれば、Serverlessの方がコスト効率が良い場合があります。
- I/Oコストの考慮: アプリケーションのクエリが大量のI/Oを発生させていないか確認し、インデックスの最適化などでI/Oを削減できないか検討します。
- 予約インスタンスの活用: 長期間(1年または3年)利用することが確定している場合は、予約インスタンスを購入することで大幅な割引を受けられます。
AWSの料金ページ(https://aws.amazon.com/jp/rds/aurora/pricing/)で最新かつ詳細な料金情報を確認してください。無料利用枠の対象となる条件も確認しておきましょう。
11. トラブルシューティング
Aurora MySQLを利用する上で、遭遇する可能性のある一般的な問題とその対処法をいくつか紹介します。
- データベースに接続できない:
- 原因: セキュリティグループ設定、エンドポイントの誤り、認証情報の誤り、VPC設定、ネットワーク経路の問題などが考えられます。
- 対処法:
- RDSコンソールでクラスターの状態が「利用可能 (Available)」になっているか確認。
- 接続に使用しているエンドポイント、ポート、ユーザー名、パスワードが正しいか再確認。
- DBクラスターに関連付けられているセキュリティグループのインバウンドルールで、接続元IPアドレスまたはセキュリティグループからのMySQLポート(3306)へのアクセスが許可されているか確認。
- 接続元環境(EC2やローカルPC)からDBクラスターへのネットワーク経路が正常か確認(例: EC2から接続する場合は同じVPC内か、ローカルから接続する場合はパブリックアクセスが有効でインターネットゲートウェイ経由で到達可能か)。
- ローカル環境のファイアウォール設定を確認。
- データベースのパフォーマンスが遅い:
- 原因: CPUやメモリのリソース不足、I/Oボトルネック、非効率なクエリ、接続数の増加などが考えられます。
- 対処法:
- CloudWatchメトリクス(CPU使用率、FreeableMemory、VolumeReadIOPs/WriteIOPs、DatabaseConnectionsなど)を確認し、リソースが飽和していないか確認。
- Performance Insights を利用して、負荷の高いクエリや待機イベントを特定。
- スロークエリログを確認し、実行に時間のかかっているクエリを特定。
- 特定された問題に基づいて、クエリの最適化(インデックス追加/修正など)、インスタンスタイプのスケールアップ、リードレプリカの追加などを検討。
- インスタンスのステータスが異常(Stopped, Failedなど):
- 原因: 設定ミス、基盤の問題、ストレージの問題などが考えられます。
- 対処法:
- RDSコンソールのイベントログを確認し、エラーや警告の詳細情報を得る。
- CloudWatch Logsにエクスポートされたデータベースログ(エラーログ)を確認する。
- AWSサポートに問い合わせが必要な場合もあります。
12. まとめ
Amazon Aurora MySQLは、従来のMySQLの高い互換性を維持しつつ、AWSが提供する強力な分散ストレージアーキテクチャによって、商用データベースに匹敵あるいはそれ以上のパフォーマンス、高可用性、高耐久性、そして運用管理の容易さを実現した革新的なデータベースサービスです。
この記事では、Aurora MySQLがどのようなサービスなのか、従来のMySQLとの違い、そして初心者の方が実際に使い始めるための準備から、クラスター作成、接続、基本的な操作、そして運用・管理の概要までを詳細に解説しました。
- Auroraはストレージとコンピューティングが分離されたアーキテクチャで、MySQL互換エンジンを提供します。
- 高いパフォーマンス、スケーラビリティ、可用性、耐久性、そしてフルマネージドによる運用負担軽減が大きなメリットです。
- 始めるにはAWSアカウント、VPC、サブネットグループ、セキュリティグループの準備が必要です。
- RDSコンソールから、エンジン、バージョン、インスタンスタイプ、ネットワーク、セキュリティなどの設定を選択してクラスターを作成します。
- 作成されたクラスターのエンドポイント情報を使って、MySQLクライアントやGUIツール、アプリケーションから接続できます。
- 接続後は標準的なSQL構文でデータベース操作が可能です。
- 運用・管理では、リードレプリカやインスタンスタイプの変更によるスケーリング、自動/手動バックアップからの復旧、CloudWatchやPerformance Insightsによるモニタリングが重要です。
- セキュリティ対策として、VPC/セキュリティグループ、IAM、SSL/TLS、保存時の暗号化などを適切に設定することが不可欠です。
- コストはインスタンス、ストレージ、I/Oなどで構成され、ワークロードに応じた最適化が可能です。
Aurora MySQLは非常に多機能かつ高性能なサービスであり、本記事で解説した内容はまだその一部に過ぎません。しかし、これらの基本を理解すれば、ご自身のプロジェクトでAurora MySQLを使い始めるための第一歩を踏み出すことができるはずです。
次のステップ
- 実際にAWSアカウントの無料利用枠などを活用してAurora MySQLクラスターを作成し、接続、基本的な操作を試してみましょう。
- アプリケーションから接続し、簡単なCRUD(作成、参照、更新、削除)処理を実装してみましょう。
- CloudWatchやPerformance Insightsのメトリクスを確認し、データベースの稼働状況をモニタリングする習慣をつけましょう。
- AWSの公式ドキュメント(Amazon RDSユーザーガイド)を参照し、さらに詳細な設定や高度な機能について学習を進めてください。
- AWSコミュニティやフォーラムで情報収集したり、質問したりしてみましょう。
Aurora MySQLは、これからクラウド上でデータベースを構築・運用していく上で、非常に強力な選択肢となります。ぜひこの記事を参考に、Aurora MySQLの世界に飛び込んでみてください。
免責事項: 本記事は2023年11月時点の情報に基づいて執筆されています。AWSのサービス内容やコンソールのUIは常にアップデートされる可能性があるため、最新の情報はAWS公式ドキュメントをご確認ください。また、コストに関しては利用状況やリージョンによって大きく変動するため、必ずAWS料金ページで最新かつご自身の利用状況に合わせたシミュレーションを行ってください。