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

構築する環境

AWS認定資格試験テキスト AWS認定ソリューションアーキテクト - アソシエイト 改訂第2版 | 佐々木 拓郎, 林 晋一郎, 金澤 圭 | 産業研究 | Kindleストア | Amazon
Amazonで佐々木 拓郎, 林 晋一郎, 金澤 圭のAWS認定資格試験テキスト AWS認定ソリューションアーキテクト - アソシエイト 改訂第2版。アマゾンならポイント還元本が多数。一度購入いただいた電子書籍は、KindleおよびFire端末、スマートフォンやタブレットなど、様々な端末でもお楽しみいただけます。
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テンプレートを配置してます。

awstut-fa/033 at main · awstut-an-r/awstut-fa
Contribute to awstut-an-r/awstut-fa development by creating an account on GitHub.

テンプレートファイルのポイント解説

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をコピーしました