Amazon Linux 2からRDSの全DBエンジンに接続する方法
2022年現在、RDSは以下の7種類のDBエンジンを提供しています。
- Aurora(PostgreSQL)
- Aurora(MySQL)
- PostgreSQL
- MySQL
- MariaDB
- Oracle
- Microsoft SQL Server
今回はAmazon Linux 2から、上記の7種類のDBインスタンスに接続する方法を確認します。
構築する環境
2つのVPCを作成します。
一方のVPCはyumリポジトリ作成用です。最新のAmazon Linux 2インスタンスを配置し、OracleおよびMicrosoft SQL Server接続用のクライアントパッケージを格納したリポジトリを作成し、S3バケットにアップロードします。
もう一方のVPCに、各DBインスタンスと、接続検証用のAmazon Linux 2インスタンスを配置します。こちらのVPCにはインターネットゲートウェイやNATゲートウェイを配置せず、S3用VPCエンドポイントを経由して、S3バケットにアクセスします。
なお各DBインスタンスには、共通して以下の設定を行います。
- DB名:testdb
- マスターユーザー名:testuser
- パスワーユーザーパスワード:Passw0rd
CloudFormationテンプレートファイル
上記の構成をCloudFormationで構築します。
以下のURLにCloudFormationテンプレートを配置してます。
https://github.com/awstut-an-r/awstut-fa/tree/main/033
テンプレートファイルのポイント解説
VPC1、つまりS3バケットにyumリポジトリを構築する方法に関しては、以下のページで取り上げています。
本項目では、各DBインスタンス構築用のパラメータを確認します。
作成するRDSのパラメータ1
Aurora以外の5つのDBインスタンスのパラメータを確認します。
Resources:
DBInstance:
Type: AWS::RDS::DBInstance
Properties:
AllocatedStorage: !Ref DBAllocatedStorage
AvailabilityZone: !Sub "${AWS::Region}${AvailabilityZone}"
DBInstanceClass: !Ref DBInstanceClass
DBInstanceIdentifier: !Ref DBInstanceIdentifier
DBName: !Ref DBName
DBSubnetGroupName: !Ref DBSubnetGroup
Engine: !Ref DBEngine
EngineVersion: !Ref DBEngineVersion
LicenseModel: !Ref LicenseModel
MasterUsername: !Ref DBMasterUsername
MasterUserPassword: !Ref DBMasterUserPassword
VPCSecurityGroups:
- !Ref DBSecurityGroup
Code language: YAML (yaml)
検証ということで、特別な設定は行いません。共通して、上記のテンプレートにパラメータを設定します。
5つのDBインスタンスの主要なパラメータは以下の通ります。
Instance ID | Engine | Engine Version | Instance Class | Port | License Model | Remarks |
dbinstance1 | PostgreSQL | 13.5 | db.t4g.micro | 5432 | postgresql-license | |
dbinstance3 | MySQL | 8.0.27 | db.t4g.micro | 3306 | general-public-license | |
dbinstance5 | MariaDB | 10.5.13 | db.t4g.micro | 3306 | general-public-license | |
dbinstance6 | Oracle(SE) | 19.0.0.0.ru-2021-10.rur-2021-10.r1 | db.t3.small | 1521 | license-included | |
dbinstance7 | Microsoft SQL Server(EX) | 15.00.4153.1.v1 | db.t3.small | 1433 | license-included | DBNameは設定不可。 |
基本的に、2022年3月の最新バージョン、そしてデフォルトのポート番号を設定しています。
作成するRDSのパラメータ2
Auroraの2つのDBインスタンスのパラメータを確認します。
Resources:
DBCluster:
Type: AWS::RDS::DBCluster
Properties:
DatabaseName: !Ref DBName
DBClusterIdentifier: !Ref DBClusterIdentifier
DBSubnetGroupName: !Ref DBSubnetGroup
Engine: !Ref DBEngine
EngineVersion: !Ref DBEngineVersion
MasterUsername: !Ref DBMasterUsername
MasterUserPassword: !Ref DBMasterUserPassword
StorageEncrypted: true
VpcSecurityGroupIds:
- !Ref DBSecurityGroup
DBInstance:
Type: AWS::RDS::DBInstance
Properties:
DBClusterIdentifier: !Ref DBCluster
DBSubnetGroupName: !Ref DBSubnetGroup
DBInstanceIdentifier: !Ref DBInstanceIdentifier
DBInstanceClass: !Ref DBInstanceClass
Engine: !Ref DBEngine
AvailabilityZone: !Sub "${AWS::Region}${AvailabilityZone}"
PubliclyAccessible: false
Code language: YAML (yaml)
こちらも検証ということで、特別な設定は行いません。
2つのDBインスタンスの主要なパラメータは以下の通ります。
Cluster ID | Instance ID | Engine | Engine Version | Instance Class | Port |
dbcluter1 | dbinstance2 | PostgreSQL | 13.4 | db.t4g.medium | 5432 |
dbcluter2 | dbinstance4 | MySQL | 8.0.mysql_aurora.3.01.0 | db.t4g.medium | 3306 |
2022年3月の最新バージョン、そしてデフォルトのポート番号を設定しています。
環境構築
CloudFormationを使用して、本環境を構築し、実際の挙動を確認します。
CloudFormationスタックを作成し、スタック内のリソースを確認する
CloudFormationスタックを作成します。
スタックの作成および各スタックの確認方法については、以下のページをご確認ください。
各スタックのリソースを確認した結果、今回作成されたDBインスタンスのエンドポイントは「fa-033-[インスタンスID].cl50iikpthxs.ap-northeast-1.rds.amazonaws.com」でした。
AWS Management Consoleからも、RDSの作成状況を確認します。
5つのDBインスタンスと、2つのAuroraクラスターが作成されていることがわかります。
PostgreSQLインスタンスに接続
準備が整いましたので、DBインスタンスへの接続検証を行います。
検証は対応するEC2インスタンスにアクセスして行います。
EC2インスタンスへのアクセスは、SSM Session Managerを使用します。詳細は以下のページをご確認ください。
PostgreSQLインスタンスに接続する方法を確認します。
PostgreSQLインスタンスに接続するためには、専用のクライアント(psql)が必要です。psqlはS3上に構築されたAmazon Linuxリポジトリから取得することができます。今回の構成では、EC2インスタンスはプライベートサブネットに設置されていますので、S3用VPCエンドポイント経由で、リポジトリにアクセスします。
まずインストール可能なパッケージを確認します。
sh-4.2$ yum list all | grep postgres
...
postgresql.x86_64 9.2.24-6.amzn2 amzn2-core
...
Code language: Bash (bash)
「postgresql.x86_64」にpsqlが含まれていますので、これをインストールします。
sh-4.2$ sudo yum install -y postgresql
...
Installed:
postgresql.x86_64 0:9.2.24-6.amzn2
Dependency Installed:
postgresql-libs.x86_64 0:9.2.24-6.amzn2
Complete!
Code language: Bash (bash)
インストールされたパッケージを確認します。
sh-4.2$ yum list installed | grep postgres
postgresql.x86_64 9.2.24-6.amzn2 @amzn2-core
postgresql-libs.x86_64 9.2.24-6.amzn2 @amzn2-core
Code language: Bash (bash)
確かにインストールされています。
psqlのバージョンを確認します。
sh-4.2$ psql -V
psql (PostgreSQL) 9.2.24
Code language: Bash (bash)
クライアントがインストールできましたので、PostgreSQLインスタンスにアクセスします。
sh-4.2$ psql --host=fa-033-dbinstance1.cl50iikpthxs.ap-northeast-1.rds.amazonaws.com --port=5432 --username=testuser --password --dbname=testdb
Password for user testuser:
psql (9.2.24, server 13.5)
WARNING: psql version 9.2, server version 13.0.
Some psql features might not work.
SSL connection (cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256)
Type "help" for help.
testdb=>
Code language: Bash (bash)
正常にアクセスすることができました。
このようにプライベートサブネットに設置されているインスタンスでも、VPCエンドポイント経由で、Amazon Linuxリポジトリにアクセスし、psqlをインストールことによって、PostgreSQLインスタンスにアクセスすることができます。
Aurora PostgreSQLクラスターに接続
PostgreSQLタイプのAuroraにアクセスする方法を確認します。
上記と同様の方法でpsqlをインストールすることで、接続することができます。
sh-4.2$ psql --host=fa-033-dbcluster1.cluster-cl50iikpthxs.ap-northeast-1.rds.amazonaws.com --port=5432 --username=testuser --password --dbname=testdb
Password for user testuser:
psql (9.2.24, server 13.4)
WARNING: psql version 9.2, server version 13.0.
Some psql features might not work.
SSL connection (cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256)
Type "help" for help.
testdb=>
Code language: Bash (bash)
正常にアクセスすることができました。
このようにpsqlを使用することによって、PostgreSQLタイプのAuroraも接続できることができます。
MySQLインスタンスに接続
MySQLインスタンスに接続する方法を確認します。
MySQLインスタンスに接続するためには、専用のクライアント(mysql)が必要です。mysqlも、Amazon Linuxリポジトリから取得することができます。S3用VPCエンドポイント経由で、リポジトリにアクセスします。
まずインストール可能なパッケージを確認します。
sh-4.2$ yum list all | grep mariadb
...
mariadb.x86_64 1:5.5.68-1.amzn2 amzn2-core
...
Code language: Bash (bash)
「mariadb.x86_64」にmysqlが含まれていますので、これをインストールします。
sh-4.2$ sudo yum install -y mariadb
...
Installed:
mariadb.x86_64 1:5.5.68-1.amzn2
Complete!
Code language: Bash (bash)
インストールされたパッケージを確認します。
sh-4.2$ yum list installed | grep mariadb
mariadb.x86_64 1:5.5.68-1.amzn2 @amzn2-core
mariadb-libs.x86_64 1:5.5.68-1.amzn2 installed
Code language: Bash (bash)
確かにインストールされています。
mysqlのバージョンを確認します。
sh-4.2$ mysql -V
mysql Ver 15.1 Distrib 5.5.68-MariaDB, for Linux (x86_64) using readline 5.1
Code language: Bash (bash)
クライアントがインストールできましたので、MySQLインスタンスにアクセスします。
sh-4.2$ mysql -h fa-033-dbinstance3.cl50iikpthxs.ap-northeast-1.rds.amazonaws.com -P 3306 -u testuser -p testdb
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 19
Server version: 8.0.27 Source distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [testdb]>
Code language: Bash (bash)
正常にアクセスすることができました。
このようにプライベートサブネットに設置されているインスタンスでも、VPCエンドポイント経由で、Amazon Linuxリポジトリにアクセスし、mysqlをインストールことによって、MySQLインスタンスにアクセスすることができます。
Aurora MySQLクラスターに接続
MySQLタイプのAuroraにアクセスする方法を確認します。
上記と同様の方法でmysqlをインストールすることで、接続することができます。
sh-4.2$ mysql -h fa-033-dbcluster2.cluster-cl50iikpthxs.ap-northeast-1.rds.amazonaws.com -P 3306 -u testuser -p testdb
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 22
Server version: 8.0.23 Source distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [testdb]>
Code language: Bash (bash)
正常にアクセスすることができました。
このようにmysqlを使用することによって、MySQLタイプのAuroraも接続できることができます。
MariaDBインスタンスに接続
MariaDBインスタンスに接続する方法を確認します。
MariaDBインスタンスに接続するためには、専用のクライアント(mysql)が必要です。先ほど確認した通り、mysqlはAmazon Linuxリポジトリから取得することができます。
mysqlクライアントを使って、MariaDBインスタンスにアクセスします。
sh-4.2$ mysql -h fa-033-dbinstance5.cl50iikpthxs.ap-northeast-1.rds.amazonaws.com -P 3306 -u testuser -p testdb
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 27
Server version: 10.5.13-MariaDB-log managed by https://aws.amazon.com/rds/
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [testdb]>
Code language: Bash (bash)
正常にアクセスすることができました。
このようにプライベートサブネットに設置されているインスタンスでも、VPCエンドポイント経由で、Amazon Linuxリポジトリにアクセスし、mysqlをインストールことによって、MySQLインスタンスにアクセスすることができます。
Oracleインスタンスに接続
Oracleインスタンスに接続する方法を確認します。
Oracleインスタンスに接続するためには、専用のクライアント(sqlplus)が必要です。sqlplusはAmazon Linuxリポジトリからは取得できません。そこで今回は、S3用VPCエンドポイント経由で自作のリポジトリにアクセスし、sqlplusをインストールします。
自作リポジトリに関しては、以下のページをご確認ください。
EC2インスタンスに登録されているリポジトリを確認します。
sh-4.2$ yum repolist
...
repo id repo name status
amzn2-core/2/x86_64 Amazon Linux 2 core repository 27418
amzn2extra-docker/2/x86_64 Amazon Extras repo for docker 56
myrepo myrepo 4+2
Code language: Bash (bash)
myrepoにsqlplusをインストールするために必要なパッケージが含まれています。
以下の手順で、必要パッケージをインストールします。
sh-4.2$ sudo yum install -y oracle-instantclient19.14-basic
...
Installed:
oracle-instantclient19.14-basic.x86_64 0:19.14.0.0.0-1
Complete!
sh-4.2$ sudo yum install -y oracle-instantclient19.14-sqlplus
...
Installed:
oracle-instantclient19.14-sqlplus.x86_64 0:19.14.0.0.0-1
Complete!
Code language: Bash (bash)
インストールされたパッケージを確認します。
sh-4.2$ yum list installed | grep oracle
oracle-instantclient19.14-basic.x86_64
oracle-instantclient19.14-sqlplus.x86_64
Code language: Bash (bash)
確かにインストールされています。
sqlplusのバージョンを確認します。
sh-4.2$ sqlplus -V
SQL*Plus: Release 19.0.0.0.0 - Production
Version 19.14.0.0.0
Code language: Bash (bash)
クライアントがインストールできましたので、Oracleインスタンスにアクセスします。
sh-4.2$ sqlplus 'testuser@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=fa-033-dbinstance6.cl50iikpthxs.ap-northeast-1.rds.amazonaws.com)(PORT=1521))(CONNECT_DATA=(SID=testdb)))'
SQL*Plus: Release 19.0.0.0.0 - Production on Mon Mar 21 02:19:19 2022
Version 19.14.0.0.0
Copyright (c) 1982, 2021, Oracle. All rights reserved.
Enter password:
Connected to:
Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.13.0.0.0
SQL>
Code language: Bash (bash)
正常にアクセスすることができました。
このようにプライベートサブネットに設置されているインスタンスでも、VPCエンドポイント経由で、自作リポジトリにアクセスし、sqlplusをインストールことによって、Oracleインスタンスにアクセスすることができます。
今回は自作リポジトリを作成することで、EC2インスタンスにsqlplusをインストールしました。仮に、VPCにNATゲートウェイ等が設置され、インターネットにアクセス可能な場合は、以下のコマンドを実行することによって、直接、sqlplusをインストールすることができます。
curl -OL https://download.oracle.com/otn_software/linux/instantclient/1914000/oracle-instantclient19.14-basic-19.14.0.0.0-1.x86_64.rpm
curl -OL https://download.oracle.com/otn_software/linux/instantclient/1914000/oracle-instantclient19.14-sqlplus-19.14.0.0.0-1.x86_64.rpm
sudo yum install -y oracle-instantclient19.14-basic-19.14.0.0.0-1.x86_64.rpm
sudo yum install -y oracle-instantclient19.14-sqlplus-19.14.0.0.0-1.x86_64.rpm
Code language: Bash (bash)
Microsoft SQL Serverインスタンスに接続
SQL Serverインスタンスに接続する方法を確認します。
SQL Serverインスタンスに接続するためには、専用のクライアント(sqlcmd)が必要です。sqlcmdはAmazon Linuxリポジトリからは取得できません。こちらもS3用VPCエンドポイント経由で自作のリポジトリにアクセスし、sqlcmdをインストールします。
sqlcmdは「mssql-tools」というパッケージに含まれています。以下の手順で、このパッケージをインストールします。
4.2$ sudo yum install -y mssql-tools
...
Installed:
mssql-tools.x86_64 0:17.9.1.1-1
Dependency Installed:
libtool-ltdl.x86_64 0:2.4.2-22.2.amzn2.0.2 msodbcsql17.x86_64 0:17.9.1.1-1 unixODBC.x86_64 0:2.3.1-14.amzn2
Complete!
Code language: Bash (bash)
インストールされたパッケージを確認します。
sh-4.2$ yum list installed | grep mssql-tools
mssql-tools.x86_64 17.9.1.1-1 @myrepo
Code language: Bash (bash)
確かにインストールされています。
sqlcmdのバージョンを確認します。
sh-4.2$ /opt/mssql-tools/bin/sqlcmd -?
Microsoft (R) SQL Server Command Line Tool
Version 17.9.0001.1 Linux
Copyright (C) 2017 Microsoft Corporation. All rights reserved.
...
Code language: Bash (bash)
クライアントがインストールできましたので、SQL Serverインスタンスにアクセスします。
sh-4.2$ /opt/mssql-tools/bin/sqlcmd -S fa-033-dbinstance7.cl50iikpthxs.ap-northeast-1.rds.amazonaws.com -U testuser -P Passw0rd
1>
Code language: Bash (bash)
正常にアクセスすることができました。
このようにプライベートサブネットに設置されているインスタンスでも、VPCエンドポイント経由で、自作リポジトリにアクセスし、sqlcmdをインストールことによって、SQL Serverインスタンスにアクセスすることができます。
今回は自作リポジトリを作成することで、EC2インスタンスにsqlcmdをインストールしました。仮に、VPCにNATゲートウェイ等が設置され、インターネットにアクセス可能な場合は、以下のコマンドを実行することによって、直接、sqlcmdをインストールすることができます。
curl https://packages.microsoft.com/config/rhel/8/prod.repo > /etc/yum.repos.d/msprod.repo
sudo yum install -y mssql-tools
Code language: Bash (bash)
まとめ
7種類のRDSインスタンスへの接続方法を確認しました。
以下に、各インスタンスに接続用のクライアントと、Amazon Linuxリポジトリの対応状況を整理します。
DB Engine | Client | Amazon Linux Repository (2022/3) |
PostgreSQL | psql | postgresql.x86_64(9.2.24-6.amzn2) |
Aurora(PostgreSQL) | psql | postgresql.x86_64(9.2.24-6.amzn2) |
MySQL | mysql | mariadb.x86_64(1:5.5.68-1.amzn2) |
Aurora(MySQL) | mysql | mariadb.x86_64(1:5.5.68-1.amzn2) |
MariaDB | mysql | mariadb.x86_64(1:5.5.68-1.amzn2) |
Oracle | sqlplus | – |
Microsoft SQL Server | sqlcmd | – |