今回の記事はAWSのRDSへ接続していく方法についてです
- RDSのMySQLへmysqlクライアントを使って接続する方法
- RDSのMySQLへプログラム(python)から接続する方法
事前準備としてRDS(データベースエンジンはMySQL)を作成していること前提として話を進めていきます。
RDSを作成していない方は作成をお願いします。
RDSのMySQLへmysqlクライアントを使って接続
RDSのMySQLへコンソールコマンド(mysqlクライアント)で接続してみます。
mysqlクライアントからRDSへ接続
mysql -h <RDSのエンドポイント> -P <RDSのDBポート> -u <RDSで設定したユーザ> -p
上記コマンドでmysql-clientからRDS(MySQL)で接続が行えます。
入力後、RDS作成時に設定したパスワードの入力を行います。
EC2→RDS(MysSQL)へ接続を行う場合はEC2でsudo apt-get install mysql-client-core-8.0
を実行してmysqlクライアントのインストールを行っておきます。
ちなみに<RDSのエンドポイント>
、<RDSのDBポート>
は以下のAWSのRDS管理画面で確認できます。
また、ユーザー名の確認は上記画面から【設定】タブを選択し、マスターユーザー名
で確認することができます。
mysqlクライアントで接続できない場合
AWSの初期設定状態ではmysqlクライアントを用いて接続ができない場合があります。
以下のように怒られる場合があります。
ERROR 2003 (HY000): Can't connect to MySQL server on 'database-1.ckggcklvpinh.ap-northeast-1.rds.amazonaws.com:3306' (110)
このような場合DBへのセキュリティ設定を行う必要があります。
RDSのDB管理画面からVPCセキュリティグループのリンクを選択し、セキュリティグループの設定画面へ遷移します。
インバウンドルールを追加します。
下記のような設定を追加することでmysqlクライアントで外部からRDSへ接続の許可ができます。
MySQLへの3306ポートのTCPを許可します。
RDSのMySQLへプログラムから接続
今回はRDSのMySQLへプログラムから接続します。
Pythonで接続を行っていきます。
その前に接続するDBを作成しておきます。
上記のmysql-clientでRDSへ接続を行います。その後DBを作成するSQLを打っておきましょう。
今回DB名はtestDB
としました。
mysql> mysql -h <RDSのエンドポイント> -P <RDSのDBポート> -u <RDSで設定したユーザ> -p
>Enter password: pasを入力
mysql> create database testDB;
>Query OK, 1 row affected
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| testDB |
+--------------------+
さぁ上記のmysql-clientで作成したDBへpythonプログラムで接続をしていきます。
例として、コードを貼っておきます
(<RDSで設定したユーザー>
、<RDSで設定したパスワード>
、<RDSのエンドポイント>
、<DB名>
は各々の環境に合わせて適宜設定をしてください。)
import mysql.connector
import datetime
class MySqlConnectClass():
def __init__(self):
self.__User = "<RDSで設定したユーザ>"
self.__Pas = "<RDSで設定したパスワード>"
self.__Host = "<RDSのエンドポイント>"
self.__DB = "<DB名>"
self.__TableName = "test_table"
self.connect = mysql.connector.connect(
user=self.__User,
password=self.__Pas,
host=self.__Host,
database=self.__DB,
charset='utf8')
self.cursor = self.connect.cursor(buffered=True)
def CreatTable(self):
sql = """CREATE TABLE IF NOT EXISTS {0} (
ID INTEGER(10) AUTO_INCREMENT NOT NULL PRIMARY KEY,
Year INTEGER(4),
Month INTEGER(2),
Day INTEGER(2),
Hour INTEGER(2),
Minute INTEGER(2),
Name VARCHAR(20),
Email VARCHAR(256)
)"""
sql = sql.format(self.__TableName)
self.cursor.execute(sql)
def MySqlInsert(self, Year, Month, Day, Hour, Minute, Name, Email):
Insert = "INSERT INTO "
self.__Table = self.__TableName
self.__TableKey = " (`ID`, `Year`, `Month`, `Day`, `Hour`, `Minute`, `Name`, `Email`)"
TableData = " VALUES (NULL, {0}, {1}, {2}, {3}, {4}, '{5}', '{6}')".format(Year,Month,Day,Hour,Minute,Name,Email)
sql = Insert + self.__Table + self.__TableKey + TableData
self.cursor.execute(sql)
def __del__(self):
self.cursor.close()
self.connect.commit()
self.connect.close()
if __name__ == "__main__":
now = datetime.datetime.now()
name = "User1"
email = "test1234@xyz.ne.jp"
ClassMySql = MySqlConnectClass()
ClassMySql.CreatTable() #初回1発だけでOK
ClassMySql.MySqlInsert(now.year, now.month, now.day, now.hour, now.minute, name, email)
del ClassMySql
上記のコードでtest_table
というテーブルができているはずです。
MySQLクライアントで確認してみましょう。
これで、プログラム内からAWSのRDSが簡単に操作できますね。
コメント