はじめに
このドキュメントは AWS RDS で作成した Serverless RDB に
Data API を使用してアクセスするための環境構築と確認手順です。
この手順書では PostgreSQL
互換を使って環境構築します。
今回の環境
VPC(Virtual Private Cloud)の中に、検証対象となる RDB と作業用のEC2 を用意します。クライアントPCからはEC2を経由してRDSにアクセスするようにします。
環境構築編(仮想ハード)
VPCとセキュリティグループ作成
VPC コンソールでVPC を作成します。また EC2 用と RDB 用のセキュリティグループも作成します。
VPCの設定とタグ
- 名前タグ
- 「任意の文字列」
- IPv4 CIDR ブロック
- 「任意の範囲 (例:172.31.0.0/16)」
- IPv6 CIDR ブロック
- 「IPv6 CIDR ブロックなし」
- テナンシー
- 「デフォルト」
- タグ
- 設定は任意
セキュリティグループの作成
VPCコンソールメニューの「セキュリティグループ」からセキュリティグループを作成します。
作業EC2用セキュリティグループ作成
- 基本的な詳細
- セキュリティグループ名
- 「EC2 用とわかる文字列」
- 説明
- 「任意の文字列」
- VPC
- 「前項で作成したVPC」
- セキュリティグループ名
- インバウンドルール
- タイプ
- 「SSH」
- ソース
- 「カスタム (0.0.0.0)」
- タイプ
- アウトバウンドルール
- 変更なし
RDB用セキュリティグループ作成
- 基本的な詳細
- セキュリティグループ名
- 「RDB 用とわかる文字列」
- 説明
- 「任意の文字列」
- VPC
- 「前項で作成したVPC」
- セキュリティグループ名
- インバウンドルール
- タイプ
- 「PostgresSQL」
- ソース
- 「カスタム (EC2用のセキュリティグループを選択)」
- タイプ
- アウトバウンドルール
- 変更なし
EC2作成
RDBを操作する作業用のEC2を、EC2 コンソールで作成します。
ステップ1:Amazon マシンイメージ (AMI)
Amazon Linux 2 AMI (HVM), SSD Volume Type
を選択し「次のステップ」ボタンをクリックします。
ステップ2:インスタンスタイプの選択
無料利用枠の対象である t2.micro
を選択し「次のステップ」ボタンをクリックします。
ステップ3:インスタンスの詳細の設定
デフォルトのまま「次のステップ」ボタンをクリックします。
ステップ4:ストレージの追加
デフォルトのまま「次のステップ」ボタンをクリックします。
ステップ5:タグの追加
デフォルトのまま「次のステップ」ボタンをクリックします。
ステップ6:セキュリティグループの設定
下記を設定し、「次のステップ」ボタンをクリックします。
- セキュリティグループの割り当て
- 「既存のセキュリティグループを選択する」
- セキュリティグループID
- 「作業EC2用セキュリティグループ作成で作成したセキュリティグループ」
ステップ7:インスタンス作成の確認
設定内容を確認したうえで、「起動」ボタンをクリックします。
既存のキーペアを選択するか、新しいキーペアを作成します。
新しいキーペアの作成
を選択し、キーペア名に任意の文字列を入力します。「キーペアのダウンロード」ボタンが有効になったらクリックし、*.pem
ファイルをダウンロードしておきます。
RDB作成
Aurora Serverlessの作成
Amazon Aurora ユーザガイドの、Amazon Aurora Serverless を使用するを参考に Amazon Aurora Serverless DBクラスター
を、RDSコンソールで作成します。
データベースの作成とエンジンのオプション
- データベースの作成方法
- 「標準作成」
- エンジンのオプション
- エンジンのタイプ
- 「Amazon Aurora」
- エディション
- 「PostgreSQL との互換性を持つ Amazon Aurora」
- キャパシティータイプ
「サーバーレス」
- バージョン
- 「Aurora PostgreSQL (Compatible with PostgreSQL 10.12)」
- エンジンのタイプ
設定とキャパシティの設定
- DB クラスター識別子
- 「任意の文字列」
- 認証情報の設定
- マスターユーザー名
- 「任意の文字列」
- マスターパスワード
- 「自動生成」 or 「任意の文字列」
- マスターユーザー名
- キャパシティの設定
- 最小 Aurora キャパシティーユニット
- 「2 (4GB RAM)」
- 最大 Aurora キャパシティーユニット
- 「4 (4GB RAM)」
- 最小 Aurora キャパシティーユニット
接続
Virtual Private Cloud(VPC)
「VPCとセキュリティグループ作成で作成したVPC」
追加の接続設定
サブネットグループ
「デフォルト」(そのまま)
VPC セキュリティグループ
「既存の選択」を選択し
「RDB用セキュリティグループ作成で作成したセキュリティグループ」を選択後、default
を削除します。(図を参照)
Data API
必ずチェック
を入れる
すべての設定が完了したら「データベースの作成」ボタンをクリックします。
環境構築編(ソフトウェア)
EC2側セットアップ
クライアントPCから直接ターミナルでSSH、もしくはブラウザベースのSSHコンソール(EC2 Instance Connect)を紹介します。
クライアントPCからターミナルでSSH
既存のキーペアを選択するか、新しいキーペアを作成します。で保存したキーペアを使用してssh接続します。
EC2 Instance Connect でSSH
AWS EC2 コンソールからEC2作成で作成したインスタンスを選択し、「接続」ボタンをクリックして[インスタンスに接続]からEC2 Instance Conect
でSSH接続します。
下図はからSSH接続する参考資料です。
AWS コマンドリージョン設定
CLI AWS
のリージョンを設定しておきます。
アクセスキーの取得
Identity and Access Management(IAM)
コンソールでアクセスキー
を作成して控えます。AWSコンソール画面右上のユーザ名をクリックして表示されるメニューから「マイセキュリティ資格情報」をクリックします。
AWS IAM 認証情報
内の「アクセスキーの作成」ボタンをクリックします。
表示された アクセスキーID
とシークレットアクセスキー
控えておきます。
接続しているSSHターミナルで、以下のコマンドを入力します。
aws configure
4つの入力項目が表示されるので適切に入力します。
AWS Access Key ID [None]: 「アクセスキーID」
AWS Secret Access Key [None]: 「シークレットアクセスキー」
Default region name [None]: AWSコンソール右上のリージョンメニューをクリックして表示される「現在のリージョン」
Default output format [None]: json
psql インストール
yum
コマンドを使って、PostgreSQL client programs
をインストールします。
sudo yum install postgresql
Is this ok [y/d/N] では、y
を入力します。
Is this ok [y/d/N]: y
正常にインストールされたかどうかを確認します。
psql --version
バージョン情報が表示されれば成功です。
DB側セットアップ
psql インストールでインストールしたコマンドを使用して、PostgreSQL にユーザ/データベース/テーブルを作成します。
ログインするためにで作成したAuroraServerless のホスト名を確認します。
RDS コンソールからインスタンスを選択し、[エンドポイント]をコピーします。
コンソールログイン
エンドポイントが確認できたら、コンソールからログインします。
psql -h [エンドポイント] -U [マスターユーザ名]
この後にパスワードを聞かれるので、適切に入力します。
ユーザ作成
PostgreSQL にログインした状態で作業用のユーザを作成します。
CREATE USER [ユーザ名] WITH password '[パスワード]';
権限追加
新しく追加したユーザに権限を追加します。
alter role [新しく作ったユーザ] CREATEDB;
GRANT RDS_SUPERUSER to [新しく作ったユーザ];
ユーザ切り替え
新しく作ったユーザにログインしなおします。
\q - [新しく作ったユーザ];
データベース作成
作業用の新しいデータベースを作成します。
CREATE DATABASE [新しいDB名];
データベース切り替え
新しく作成したデータベースに切り替えます。
\q [新しく作ったDB];
テーブル作成
作業用に新しいテーブルを作成します。
CREATE TABLE test01
(
id bigserial, -- 自動発番ID
name varchar(10), -- 名前
addr varchar(10), -- 住所?
updt varchar(25) -- 更新日
);
動作確認
正しくテーブルが作成できたかSQLで確認します。
データ挿入
SQL
INSERT INTO test01 (name, addr, updt) VALUES ('yuka', 'nakano', '202011071425');
データ取得
SQL
SELECT * FROM test01;
結果
id | name | addr | updt
----+------+--------+--------------
1 | yuka | nakano | 202011071425
(1 row)
DataAPI アクセス確認
今回は CLI AWS コマンド
を利用して DataAPI の動作確認をします。
シークレット作成
[AWS Secrets Manager] で、RDSデータベースの認証情報
のシークレットを作成します。
[AWS Secrets Manager]コンソールで「新しいシークレットを保存する」ボタンをクリックします。
シークレットの設定1
- シークレットの種類を選択
- [RDSデータベースの認証情報]
- ユーザー名
- ユーザ作成で作成したDBユーザ名
- パスワード
- ユーザ作成で入力したパスワード
- このシークレットがアクセスするRDSデータベースを選択してください
- DB側セットアップで作成したDBインスタンスを選択
「次」ボタンをクリックします。
シークレットの設定2
- シークレットの名前
- 「任意の文字列」
「次」ボタンをクリックします。
シークレットの設定3
デフォルトのまま「次」ボタンをクリックします。
シークレットの設定4
確認画面で内容を確認したうえで「保存」ボタンをクリックします。
アプリケーションでシークレットを取得するサンプルコードが記載されているので、プログラミングする場合にはコピーしておくと便利です。
シークレットを控える
作成されたシークレット一覧が表示されるので、今回作成したシークレットの名前をクリックして詳細を表示します。
シークレットのARN
を控えておきます。
RDB ARN 取得
[Amazon RDS]コンソールで Aurora Serverlessの作成 で作成したRDBを選択します。
画面中部、「設定」タブをクリックし、このデータベースの ARN
を控えます。
動作確認
SSH コンソールで下記のコマンドを入力します。SQL が発行され、結果が JSON 形式で表示されます。
コマンド
aws rds-data execute-statement \
--resource-arn "[RDB ARN]" \
--secret-arn "[AWS Secrets Manager で作成したシークレットのARN]" \
--sql "SELECT * FROM test01"\
--database "[作成したデータベース名]"
結果
{
"records": [
[
{
"longValue": 1
},
{
"stringValue": "yuka"
},
{
"stringValue": "nakano"
},
{
"stringValue": "202011071425"
}
]
],
"numberOfRecordsUpdated": 0
}
ここまでで、DataAPI によるSQL実行の確認ができました。あとは好きなプログラミング言語でコーディングしていくことになります。
最後に
CLI で作業できるようになりたい。