AL2で全RDSに接続する方法まとめ

Amazon Linux 2でRDSに接続する方法 - 全エンジンまとめ

Amazon Linux 2からRDSの全DBエンジンに接続する方法

2022年現在、RDSは以下の7種類のDBエンジンを提供しています。

  1. Aurora(PostgreSQL)
  2. Aurora(MySQL)
  3. PostgreSQL
  4. MySQL
  5. MariaDB
  6. Oracle
  7. Microsoft SQL Server

今回はAmazon Linux 2から、上記の7種類のDBインスタンスに接続する方法を確認します。

構築する環境

Diagram of how to connect to all types of RDS engine - Amazon Linux 2

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リポジトリを構築する方法に関しては、以下のページで取り上げています。

あわせて読みたい
S3にyumリポジトリを作成してプライベートサブネットから参照する 【プライベートサブネット内のAmazon Linux  2から、S3上の自作yumリポジトリにアクセスする】 Amazon Linux  (2)の場合、プライベートサブネットからでも、S...

本項目では、各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 IDEngineEngine VersionInstance ClassPortLicense ModelRemarks
dbinstance1PostgreSQL13.5db.t4g.micro5432postgresql-license
dbinstance3MySQL8.0.27db.t4g.micro3306general-public-license
dbinstance5MariaDB10.5.13db.t4g.micro3306general-public-license
dbinstance6Oracle(SE)19.0.0.0.ru-2021-10.rur-2021-10.r1db.t3.small1521license-included
dbinstance7Microsoft SQL Server(EX)15.00.4153.1.v1db.t3.small1433license-includedDBNameは設定不可。

基本的に、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 IDInstance IDEngineEngine VersionInstance ClassPort
dbcluter1dbinstance2PostgreSQL13.4db.t4g.medium5432
dbcluter2dbinstance4MySQL8.0.mysql_aurora.3.01.0db.t4g.medium3306

2022年3月の最新バージョン、そしてデフォルトのポート番号を設定しています。

環境構築

CloudFormationを使用して、本環境を構築し、実際の挙動を確認します。

CloudFormationスタックを作成し、スタック内のリソースを確認する

CloudFormationスタックを作成します。
スタックの作成および各スタックの確認方法については、以下のページをご確認ください。

あわせて読みたい
CloudFormationのネストされたスタックで環境を構築する 【CloudFormationのネストされたスタックで環境を構築する方法】 CloudFormationにおけるネストされたスタックを検証します。 CloudFormationでは、スタックをネストす...

各スタックのリソースを確認した結果、今回作成されたDBインスタンスのエンドポイントは「fa-033-[インスタンスID].cl50iikpthxs.ap-northeast-1.rds.amazonaws.com」でした。

AWS Management Consoleからも、RDSの作成状況を確認します。

All types of RDS have been created.

5つのDBインスタンスと、2つのAuroraクラスターが作成されていることがわかります。

PostgreSQLインスタンスに接続

準備が整いましたので、DBインスタンスへの接続検証を行います。
検証は対応するEC2インスタンスにアクセスして行います。
EC2インスタンスへのアクセスは、SSM Session Managerを使用します。詳細は以下のページをご確認ください。

あわせて読みたい
LinuxインスタンスにSSM Session Manager経由でアクセスする 【LinuxインスタンスにSSM Session Manager経由でアクセスする】 EC2インスタンスにSSM Session Manager経由でアクセスする構成を確認します。 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をインストールします。
自作リポジトリに関しては、以下のページをご確認ください。

あわせて読みたい
S3にyumリポジトリを作成してプライベートサブネットから参照する 【プライベートサブネット内のAmazon Linux  2から、S3上の自作yumリポジトリにアクセスする】 Amazon Linux  (2)の場合、プライベートサブネットからでも、S...

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 EngineClientAmazon Linux Repository
(2022/3)
PostgreSQLpsqlpostgresql.x86_64(9.2.24-6.amzn2)
Aurora(PostgreSQL)psqlpostgresql.x86_64(9.2.24-6.amzn2)
MySQLmysqlmariadb.x86_64(1:5.5.68-1.amzn2)
Aurora(MySQL)mysqlmariadb.x86_64(1:5.5.68-1.amzn2)
MariaDBmysqlmariadb.x86_64(1:5.5.68-1.amzn2)
Oraclesqlplus
Microsoft SQL Serversqlcmd