【AWS】RDS(MySQL)へ外部(mysql-client/python)から接続する手順

今回の記事はAWSのRDSへ接続していく方法についてです

  1. RDSのMySQLへmysqlクライアントを使って接続する方法
  2. 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管理画面で確認できます。

RDSのDB管理画面

また、ユーザー名の確認は上記画面から【設定】タブを選択し、マスターユーザー名で確認することができます。

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セキュリティグループのリンクを選択し、セキュリティグループの設定画面へ遷移します。

RDSのDB管理画面

インバウンドルールを追加します。
下記のような設定を追加することでmysqlクライアントで外部からRDSへ接続の許可ができます。

VPCセキュリティグループルール追加画面

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が簡単に操作できますね。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!

コメント

コメントする

目次
閉じる