PythonでAWS RDSを接続
1.従来のデータベース欠陥
従来のインフラで稼働している企業の場合、自社でコンピュータルームを構築することで、独自のデータベースとアプリケーションのニーズを満たすことができる。しかし、これには直接的な資本コストと運営コストが増加してしまう。
例えば、ある中規模の製造業者が社内のデータセンターを設置するとする。この企業は、年間の売上が急速に増加しており、それに伴ってデータ処理能力も大幅に拡張する必要がある。新しいサーバーやストレージ機器を購入し、これらを収容するための専用コンピュータルームを構築するために、まず数千万円の初期投資が必要となる。これに加えて、サーバーの安定稼働を確保するために、専門知識を持つIT技術者を新たに数名雇用しなければならない。この雇用コストも年間数百万円にのぼる。業務量が増えるたびに、サーバーを追加購入する必要があり、各サーバーには高価なライセンス費用が伴う。Windows Serverを購入する場合、1台あたり数十万円がかかる。また、これらの追加サーバーの設置、管理、そして運用環境の維持には多大な労力と費用が必要、新しいラックを設置し、配線を行い、動作確認をするために数週間の労力が必要。さらに、コンピュータルームの運営には「追加の」機器に必要な電力、スペース、冷却要件も考慮しなければならない。新しいサーバーラックを追加するたびに、電力使用量が増え、電気料金が上昇し、夏場には、これらの機器が発する熱を冷却するためにエアコンを24時間稼働させる必要があり、冷却コストも増加する。
このように、自社でコンピュータルームを構築し運営することは、初期投資だけでなく、継続的な運営コストや管理負担も大きくなるため、多くの企業にとっては大きな挑戦となる。
一部の中小企業にとっては、管理や保守にそのような多大な人的資源や資材費を投資するより、クラウド上でセットアップすることで、実行、拡張できる Amazon RDS リレーショナル データベースを直接使用するほうが安全で信頼性が高く、安心。
2.AWS RDS
これに対して、Amazon RDSを利用することで、ユーザーがクラウドでリレーショナル データベースを簡単にセットアップ、操作、拡張できるようになり、一般的なデータベース管理タスクを実行できる。RDS の主な利点は以下のようになる。
マネージドサービス: データベースのインフラストラクチャの管理をAWSに任せることができ、ユーザーはデータベースのセットアップ、パッチ適用、バックアップ、リストアなどの運用タスクから解放される。
複数のデータベースエンジン:
スケーラビリティ: RDSインスタンスは、必要に応じて簡単にスケールアップまたはスケールダウンできる。ストレージとコンピューティングリソースを分離してスケールさせることも可能。
自動バックアップ: RDSは自動バックアップ機能を提供し、データの復旧を迅速に行えるようなる
セキュリティ: VPC(Virtual Private Cloud)を使用したネットワーク分離、IAM(Identity and Access Management)によるアクセス管理、データ暗号化など、様々なセキュリティ機能が組み込まれている。
3.PythonでAWS RDSを接続
3.1 コンソールログイン
まずAWS マネジメントコンソールにログインする。
3.2 セキュリティーグループ
検索バーに「VPC」と入力し、デフォルトのVPCを作成してから、左側のメニューから「セキュリティグループ」を選択し、「セキュリティグループを作成」ボタンをクリックしする。名前と説明を入力し、(今回「rds-python」と名付けた)必要に応じてVPCを選択する。作成したセキュリティグループを以下ように「インバウンドルール」と「アウトバウンドルール」をすべての流量を許可する。そうしないと、後でPythonで接続したら、拒否される可能性があの。
3.3 RDSインスタンス
同様にRDSと検索し、データベースを作成する。ただし、エンジンのタイプを「MySQL」、テンプレートを「無料利用枠」として設定する。DBインスタンス識別子を必要に応じて名前つける。認証情報をセルフマネージドに設定しないと、マスターパスワードを入力することはできない。「インスタンス識別子」及び「マスターパスワード」は後でRDS接続の際に使うから。
データベースの接続VPC セキュリティグループを先程作成したセキュリティグループを選ぶ。全て設定が終わったら、ページ1番下の「データベースの作成」ボタンをクリックする
3.4 RDS接続
作成したRDSインスタンスをクリックすると、詳細情報が表示される。必要となるものは「エンドポイント」と「ポート」.
次に、以下のコマンドでpymysql をインストールする。pymysqlは、PythonプログラムからMySQLデータベースに接続し、操作するためのライブラリである。
!pip install pymysql
今回、RDSClientというクラスを定義し、RDSへの接続および操作を行うためのメソッドが含まれている。RDSデータベースに接続し、成功した場合は True を、失敗した場合は False を返す。接続に成功すると、データベースのバージョン情報を取得して表示される。
import pymysql
class RDSClient:
def __init__(self, host, user, password, database=None, port=3306):
"""
Initialize the RDS client with the given connection parameters.
Parameters:
host (str): RDS endpoint.
user (str): RDS username.
password (str): RDS password.
database (str): Database name.
port (int): MySQL port, default is 3306.
"""
self.host = host
self.user = user
self.password = password
self.database = database
self.port = port
self.connection = None
def connect(self):
"""
Establish a connection to the RDS database.
Returns:
bool: True if connection is successful, False otherwise.
"""
try:
self.connection = pymysql.connect(
host=self.host,
user=self.user,
password=self.password,
database=self.database,
port=self.port
)
print("Connection to RDS successful")
version = self.query("SELECT VERSION()")
print(f"Verision {version[0][0]}")
return True
except pymysql.MySQLError as e:
print(f"Error connecting to RDS: {e}")
return False
def query(self, sql, params=None):
"""
Execute a query on the RDS database.
Parameters:
sql (str): The SQL query to execute.
Returns:
list: Query results as a list of tuples, or None if an error occurs.
"""
if self.connection is None:
print("Connection is not established")
return None
try:
with self.connection.cursor() as cursor:
# cursor.execute(sql)
cursor.execute(sql, params)
result = cursor.fetchall()
return result
except pymysql.MySQLError as e:
print(f"Error querying database: {e}")
return None
def close(self):
"""
Close the RDS database connection.
"""
if self.connection is not None:
try:
self.connection.close()
print("Connection closed successfully")
except pymysql.MySQLError as e:
print(f"Error closing connection: {e}")
ここで、host はエンドポイント。user はマスターユーザー名、デフォルトはadmin。password は先設定したマスターパスワード。port は MySQL ポート、デフォルトは 3306。
3.5 データベース及びテーブル作成
RDSを接続できたら、バージョン情報が表示され、sql でデータベース及びテーブルを作成する。
if __name__ == "__main__":
rds_client = RDSClient(
host="RDS ENDPOINT",
user="Admin",
password='PASSWORD',
)
rds_client.connect()
sql = """
CREATE DATABASE `singdb`
"""
print(rds_client.query(sql))
sql = """
CREATE TABLE `singdb`.`fingerprint` (
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`song_name` VARCHAR(200) NULL,
`high_points` LONGTEXT NULL,
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_general_ci;
"""
print(rds_client.query(sql))
sql = "SHOW DATABASES"
print(rds_client.query(sql))
3.6 出力結果
接続成功のメッセージ以外、3.5で作成した「singdb」が表示された。
4.まとめ
クラウド データベースはすでに成熟したテクノロジーであり、コンピュータrルームの構築に多額の投資をするよりも、安全で信頼性の高い Amazon RDS を直接使用する方がよいでしょう。以上でクラウド データベースが完全に導入され、従来のデータベースとクラウド データベースの間のギャップが明確になった。役立つウェブサイトを共有する
この記事が気に入ったらサポートをしてみませんか?