コーヒーが好きな木谷映見です。
手元に BI ツールが無くても、EC2 インスタンスから接続しちゃえばいいじゃない。
ということで、Amazon Redshift Serverless の検証をするため、手軽に検証環境を作ります。
- 構成図
- VPC と サブネットを作成する
- IAM ロールを作成する
- EC2 インスタンスを構築し、psql をインストールする
- Redshift Serverless を作成する
- EC2 インスタンスから 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 ロールの信頼ポリシー)
Principal
にec2.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 ロールの信頼ポリシー)
Principal
にredshift.amazonaws.com
、redshift-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
を押下です。
参考
psql ツールを使用してクラスターに接続する - Amazon Redshift
emi kitani(執筆記事の一覧)
AS部LX課。2022/2入社、コーヒーとサウナが好きです。執筆活動に興味があります。AWS認定12冠。