AWS

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

スポンサーリンク
Amazon Linux 2でRDSに接続する方法 - 全エンジンまとめ AWS
スポンサーリンク
スポンサーリンク

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インスタンスに接続する方法を確認します。

構築する環境

Amazon.co.jp: AWS認定資格試験テキスト AWS認定ソリューションアーキテクト - アソシエイト 改訂第2版 電子書籍: 佐々木 拓郎, 林 晋一郎, 金澤 圭: Kindleストア
Amazon.co.jp: AWS認定資格試験テキスト AWS認定ソリューションアーキテクト - アソシエイト 改訂第2版 電子書籍: 佐々木 拓郎, 林 晋一郎, 金澤 圭: Kindleストア
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リポジトリを構築する方法に関しては、以下のページで取り上げています。

本項目では、各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スタックを作成します。
スタックの作成および各スタックの確認方法については、以下のページをご確認ください。

各スタックのリソースを確認した結果、今回作成された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を使用します。詳細は以下のページをご確認ください。

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 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

タイトルとURLをコピーしました