EC2 インスタンスに psql をインストールして Redshift Serverless に接続する

記事タイトルとURLをコピーする


コーヒーが好きな木谷映見です。

手元に BI ツールが無くても、EC2 インスタンスから接続しちゃえばいいじゃない。
ということで、Amazon Redshift Serverless の検証をするため、手軽に検証環境を作ります。

構成図

東京リージョンの Amazon VPC 内に Redshift Serverless を構築します。 Redshift Serverless に接続して操作を行うためのクライアントとして、パブリックサブネットに EC2 インスタンスを 1 台作成し、セッションマネージャーで手元の端末から接続できるようにしておきます。

VPC と サブネットを作成する

VPC の作成手順は割愛します。構成図をご参照ください。

IAM ロールを作成する

まず、EC2 インスタンス用と Redshift 用に 2 つ IAM ロールを作成します。

EC2 用 IAM ロールを作成する

以下のような IAM ロールを作成します。

  • 名前
    • 任意の名前
      • 例)yyMMdd_AmazonSSMManagedInstanceCoreRole
  • 許可ポリシー(ID ベースのポリシー)
    • AmazonSSMManagedInstanceCore
      • セッションマネージャーを使うのに必要なポリシー
  • 信頼されたエンティティ(IAM ロールの信頼ポリシー)
    • Principalec2.amazonaws.com を指定
      • IAM ロールを付与する AWS サービスを指定

Redshift 用 IAM ロールを作成する

以下のような IAM ロールを作成します。

  • 名前
    • 任意の名前
      • 例)yyMMdd_RedshiftServerlessRole
  • 許可ポリシー(ID ベースのポリシー)
    • AmazonRedshiftAllCommandsFullAccess
      • Redshift 上のデータを COPY、LOAD、UNLOAD、クエリ、分析のための SQL コマンドを実行する権限必要なポリシー
      • Amazon S3、Amazon CloudWatch ログ、Amazon SageMaker、AWS Glueなどの関連サービスに対する select 文の実行権限
  • 信頼されたエンティティ(IAM ロールの信頼ポリシー)
    • Principalredshift.amazonaws.comredshift-serverless.amazonaws.com を指定
      • IAM ロールを付与する AWS サービスを指定

今回は接続して簡単な SQL コマンドを実行してみるだけなので多くの権限は不要なのですが、例として AWS マネージドポリシーである AmazonRedshiftAllCommandsFullAccess を付与しています。

EC2 インスタンスを構築し、psql をインストールする

以下のような EC2 インスタンスを作成します。

設定項目 パラメータ 備考
名前とタグ client 任意の名前
AMI ID ami-078296f82eb463377 Amazon Linux 2 Kernel 5.10 AMI 2.0.20220912.1 x86_64 HVM gp2(20221004 時点のデフォルト AMI)
セキュリティグループ client-sg HTTP ポート 80 マイ IP からのインバウンド許可
IAM インスタンスプロフィール EC2 用 IAM ロールを作成する で作成した IAM ロールを指定 セッションマネージャーでログインするため

EC2 インスタンスが起動したら、セッションマネージャーでログインします。
Amazon Redshift Serverless への接続確認用に、psql が使用できるようにしておきます。

以下コマンドを実行して psql をインストールします。

sudo yum install postgresql

実行結果

sh-4.2$ sudo yum install postgresql
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
amzn2-core                                                                                                                                                                                | 3.7 kB  00:00:00
Resolving Dependencies
--> Running transaction check
---> Package postgresql.x86_64 0:9.2.24-8.amzn2 will be installed
--> Processing Dependency: postgresql-libs(x86-64) = 9.2.24-8.amzn2 for package: postgresql-9.2.24-8.amzn2.x86_64
--> Processing Dependency: libpq.so.5()(64bit) for package: postgresql-9.2.24-8.amzn2.x86_64
--> Running transaction check
---> Package postgresql-libs.x86_64 0:9.2.24-8.amzn2 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

=================================================================================================================================================================================================================
 Package                                               Arch                                         Version                                               Repository                                        Size
=================================================================================================================================================================================================================
Installing:
 postgresql                                            x86_64                                       9.2.24-8.amzn2                                        amzn2-core                                       3.0 M
Installing for dependencies:
 postgresql-libs                                       x86_64                                       9.2.24-8.amzn2                                        amzn2-core                                       232 k

Transaction Summary
=================================================================================================================================================================================================================
Install  1 Package (+1 Dependent package)

Total download size: 3.3 M
Installed size: 17 M
Is this ok [y/d/N]: y
Downloading packages:
(1/2): postgresql-libs-9.2.24-8.amzn2.x86_64.rpm                                                                                                                                          | 232 kB  00:00:00
(2/2): postgresql-9.2.24-8.amzn2.x86_64.rpm                                                                                                                                               | 3.0 MB  00:00:00
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                                                             15 MB/s | 3.3 MB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : postgresql-libs-9.2.24-8.amzn2.x86_64                                                                                                                                                         1/2
  Installing : postgresql-9.2.24-8.amzn2.x86_64                                                                                                                                                              2/2
  Verifying  : postgresql-9.2.24-8.amzn2.x86_64                                                                                                                                                              1/2
  Verifying  : postgresql-libs-9.2.24-8.amzn2.x86_64                                                                                                                                                         2/2

Installed:
  postgresql.x86_64 0:9.2.24-8.amzn2

Dependency Installed:
  postgresql-libs.x86_64 0:9.2.24-8.amzn2

Complete!
sh-4.2$

インストールした psql のバージョンを確認します。

psql --version

実行結果

sh-4.2$ psql --version
psql (PostgreSQL) 9.2.24
sh-4.2$

psql とは PostgreSQL の管理ツールの一つで、対話的にデータベースやテーブルを作成したりデータの追加や取得操作することができるコマンドライン型のツールです。

Redshift Serverless を作成する

以下のような Redshift Serverless を作成します。

記載していない設定はデフォルトのままです。

設定項目 パラメータ 備考
名前空間の名前 2022mmdd-namespace 任意の名前
管理者ユーザー名 rsadmin 任意の管理者ユーザー名
管理者パスワード ************ 任意のパスワード
IAM ロール Redshift 用 IAM ロールを作成するで作成した IAM ロールを指定 Redshift で SQL コマンドを実行するため
ワークグループの名前 2022mmdd-workgroup 任意の名前
セキュリティグループ redshift-serverless-sg Redshift ポート 5439 client-sg からのインバウンド許可
VPC、サブネット 3 つの AZ にまたがる 3 つのサブネットを選択する 図を参照

EC2 インスタンスから Redshift Serverless に接続する

psql をインストールしておいた EC2 インスタンスから Redshift Serverless にログインします。

ログイン時に Redshift Serverless のエンドポイント必要なので、コピーしておきます。

以下ログインコマンドでログインします。
dev は、デフォルトで作成されるデータベース名です。
途中パスワードを求められるので、Redshift Serverless の名前空間作成時に指定した管理者パスワードを入力してください。

構文

psql -h <Redshift Serverless エンドポイント> -U <管理者ユーザー名> -d dev -p 5439

実行結果

sh-4.2$ psql -h 20220929-workgp.xxxxxxxxxxxx.ap-northeast-1.redshift-serverless.amazonaws.com -U rsadmin -d dev -p 5439
Password for user rsadmin:
psql (9.2.24, server 8.0.2)
WARNING: psql version 9.2, server version 8.0.
         Some psql features might not work.
SSL connection (cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256)
Type "help" for help.

dev=#

ログインできました!

\l で、存在するデータベース一覧を確認してみます。

実行結果

dev=# \l
                  List of databases
     name     | owner | encoding | access privileges
--------------+-------+----------+-------------------
 dev          | rdsdb | UNICODE  |
 padb_harvest | rdsdb | UNICODE  |
 template0    | rdsdb | UNICODE  | rdsdb=CT/rdsdb
 template1    | rdsdb | UNICODE  | rdsdb=CT/rdsdb
(4 rows)

dev=# 

お好きなコマンドで遊んでください。
ログアウトは \q コマンドを入力するか、Ctr + d を押下です。

参考

ダウンロード | 日本PostgreSQLユーザ会

psql ツールを使用してクラスターに接続する - Amazon Redshift

blog.serverworks.co.jp

emi kitani(執筆記事の一覧)

AS部LX課。2022/2入社、コーヒーとサウナが好きです。執筆活動に興味があります。AWS認定12冠。