AWS RDS PostgreSQL を利用したデータベース構築とPython接続

プログラミング

最近AWS上でデータベースを構築する機会があったので、そのときに使用したAmazon RDSという機能の簡単な説明と実際の作業を備忘録的に残しておきます。

Amazon RDSとは

AmazonRDSとは Amazon Relational Database Serviceの略で、クラウドでリレーショナルデータベースを取り扱えるようにしたものです。

データベースはクエリそのものよりもスケール性の確保、セキュリティ設定、バックアップ、モニタリング、冗長性などが面倒な検討事項になりがちですが、Amazonの提供しているクラウドサービスとだけあって、そのあたりを左程気にすることなく簡単にデータベースを作成・運用することが出来ます。

Amazonの提供するデータベースサービスとしては他にもDynamoDB(NoSQL)やNeptune (グラフDB)といったもありますが、主キーや外部キーといったものを使用してカッチリとデータを管理したい、既存のリレーショナルデータベースをクラウド上に移行したい、というのであればAmazon RDSは有力候補になります。

Amazon RDSでの利用無料枠

クラウドでデータベース構築・運用するにあたり、まずは色々とテストして実際の動きや運用方法を体験したいという人は多いでしょう。そのような時は無料枠を使ってスモールスタートするのがお薦めです。公式HPからの抜粋ですが、無料サービスは以下の通りです。

  • MySQL、MariaDB、PostgreSQL データベースを実行する Amazon RDS の Single-AZ db.t2.micro、db.t3.micro、db.t4g.micro インスタンスのための、750 時間/月という使用時間複数のインスタンスを実行している場合、使用量はインスタンスクラス間で集計されます。
  • SQL Server (SQL Server Express Edition を実行) を使う Amazon RDS の Single-AZ db.t2.micro インスタンスのための、750 時間/月という使用時間
  • 20 GB の汎用 (SSD) DB ストレージ*
  • 自動データベースバックアップとユーザーによる任意の DB スナップショットに使用できる 20 GB のバックアップストレージ

テストするには上の無料枠で十分でしょう。なお、無料枠の条件は変わることがあるので必ず公式ホームページから最新の情報を確認しましょう。

それでは実際にデータベースの作成に移っていきます。

データベースの作成

データベースの作成自体はとても簡単です。以下の手順通りにやれば、15分程度で作成出来ます。

↑ まずはサービス > データベース > RDS とクリック

↑ Amazon RDSの専用画面。左のカラムでダッシュボードもしくはデータベースを選択しましょう。”Create Database”という色付きのボタンがあるのでそれをクリック。

↑ データベースの作成画面に切り替わりました。

データベース作成方法として、アマゾンお薦めの設定で簡単に作成できる”Easy Create”という選択肢もありますが、”Standard create”でも十分簡単に設定できます。

その下に、どのデータベースエンジンを使うのか選択する項目があります。どれを選んでも基本的に出来ないものは無いと思いますので、それぞれ微妙に異なるメリット・デメリット・特徴を考慮した上で好きなものを選べば良いでしょう。

私はPostgreSQLの操作に親しみがあったのと、周りのエンジニアも大体PostgreSQLを使っているという単純な理由でPostgreSQLにしました。

以下、Standard create/PostgreSQLを選択したものとして進めます。

↑ テンプレート画面

Production、Dev/Test、Free tierとあります。この記事を見に来た人は、とりあえずデータベースに触れてみたいという人がメインだと思いますので、そういう場合は無料で使えるFree tierを選択しましょう。

無料枠でも20Gまでは使えますし、それ以上のデータ量を使用する場合であっても後から幾らでも対応出来ます。

↑ 設定画面

DB Instance Identifierには好きなデータベースの名前を入れましょう。次にマスターユーザーネーム、マスターパスワードを設定します。特段理由が無い限りマスターユーザーネームはデフォルト設定のpostgresで大丈夫です。

↑ 作成したデータベースインスタンスの設定

テンプレートで無料枠を選択した場合はBurstable classesが適用されます。DBインスタントしてdb.t3.microとdb.t4g.microの二つを選べますが、どちらも見る限り性能は一緒・無料枠対象なのでどちらでも大丈夫です。

↑ ストレージの設定画面

20GBまで汎用ストレージ(SSD)が無料なので、たとえ数GBしか使う予定が無いとしても、とりあえず20GBで設定しておきましょう。容量が不足した際に自動的に容量を追加してくれる設定:オートスケール設定 は必要であればオンにしておきましょう。

接続設定は基本的にデフォルトで大丈夫ですが、構築したデータベースを自身の仮想環境以外でもアクセス可能にしたい場合はPublic accessをYesにしましょう。私の場合は作成したデータベースを自身だけではなく複数箇所から複数人がアクセス出来る必要があったので、Yesに設定しています。

他にもDatabase Authentificationやモニタリングといった設定項目はありますが、基本デフォルトのままで大丈夫です。

以上で設定は完了です。Create databaseという色付きのボタンを押しましょう。

データベースが実際に出来るまでに多少の時間がかかります。私の場合は10分程度かかりました。

次にPythonからこのデータベースを操作していきますが、ここで大事な事前作業があります。それはセキュリティの設定です。現状のままではPythonやpgAdmin4等から接続することが出来ません。

私自身データベースはいつもセキュリティで躓いている気がするので、それもあって今回の作業を残しています。

セキュリティ設定

RDS > Databasesから作成したデータベースを選択。その中にSecurity group rulesという項目があるので、ここを操作していきます。Typeにinboundを含むもの(上の場合だとEC2 Security Group – Inbound)をクリック。

Security Groups画面の下の方にInbound rulesの詳細設定の欄があるので、ルールを選択した上でEdit inbound rulesのボタンを押す

Add rule > All traffic > My IPとすることで、自身のIPアドレスでのアクセスが許容されるようになります。

なお、Anywhere-IPv4とすると、誰でもアクセス可能に出来ますが、その際は不正なアクセスも許容してしまう可能性もあるので注意が必要です。

これでPythonでクラウドデータベースを操作する準備が整いました。お疲れ様です。

Pythonでデータベースにアクセス

ここまで出来れば以降は簡単です。Pythonのpsycopg2を利用したPostgreSQLへのアクセス方法についての説明記事はネット上に沢山あるので、ここでは概略のみを記載します。

↑ この画面のEndpointとPortの値を使用するので控えておきましょう。

↑ psycopg2でアクセスする一例

最後に

Amazon RDSの設定は非常に簡単です。サーバーレスで安く抑えたいならAmazon Aurora サーバーレスというような選択肢もあると思いますが、AWS lambdaとの相性が良くなかったり自身の仮想環境以外からのアクセスに難点があったりします。

従って、まずはデータベースの基本であるリレーショナルデータベースをクラウドで扱ってみたいとなれば、とりあえずAmazon RDSから始めてみるのは良いでしょう。

コメント

タイトルとURLをコピーしました