前提知識
Aurora PostgreSQLを構築するに当たって、事前に以下のAWS基本サービスは理解しておく必要があります。
- EC2(サーバー構築)
- VPC(ネットワーク管理)
- IAM(AWSのユーザーや、各サービスのアクセス権管理)
これらの基本的な使い方は理解をしている前提で書いていきます。
Aurora PostgreSQL を構築する前の準備作業
今回のゴールは以下の構成を実現することと、実際にEC2サーバーからアクセスしてSQLが実行できるまでを目標とします。
まず、以下の要素を準備します。
- VPC
- パブリックサブネット
- プライベートサブネット(2個)
- パブリック用セキュリティグループ(client からの SSH 通
信を許可)
- プライベート用セキュリティグループ(EC2 から port 5432 通信を許可)
- ロール(AWS RDS コマンドを実行するための権限をEC2に付与するため)
- EC2(今回は AmazonLinux2 を使用)
client から EC2 まで SSH 接続が出来るようにしておきます。EC2 に対して RDS を操作するためのロールを付与しておくことを忘れないようにしてください。
EC2に付与するロール(ポリシー)について
EC2に付与するロールには、以下のような権限を与えておくと、コマンドが失敗することはありません。筆者は FULL ACCESS を付与することはせず、なるべく必要最低限の権限を付与することを心掛けています。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"rds:CreateDBCluster",
"rds:CreateDBClusterParameterGroup",
"rds:CreateDBInstance",
"rds:CreateDBInstanceReadReplica",
"rds:CreateDBParameterGroup",
"rds:CreateDBSubnetGroup",
"rds:DescribeDBClusterParameters",
"rds:DescribeDBInstances",
"rds:DescribeDBParameterGroups",
"rds:DescribeDBParameters",
"rds:DescribeDBClusters",
"rds:DescribeDBClusterParameterGroups",
"rds:ModifyDBClusterParameterGroup",
"rds:ModifyDBParameterGroup",
"rds:RebootDBInstance",
"rds:StartDBCluster",
"rds:StartDBInstance",
"rds:StopDBCluster",
"rds:StopDBInstance"
],
"Resource": "*"
}
]
}
Aurora PostgreSQL の DBサブネットグループの作成
事前に作成しておいたプライベートサブネット2個を用いて、DBサブネットグループを作成します。
$ aws rds create-db-subnet-group \
--db-subnet-group-name koizumi-db-subnet \
--db-subnet-group-description "Dedicated subnet for database." \
--subnet-ids "subnet-id-0000000000" "subnet-id-1111111111"
Aurora PostgreSQL パラメータグループ作成
なぜ、いちいちパラメータグループを作成しておくかと言うと、後からパラメータグループを変更する際、DB再起動が必要となるからです。
クラスターパラメータグループファミリーは "aurora-postgresql11" を指定して作ります。
$ aws rds create-db-cluster-parameter-group \
--db-cluster-parameter-group-name koizumi-posgresql-parameter-cluster \
--db-parameter-group-family aurora-postgresql11 \
--description "Dedicated cluster parameter for koizumi-postgresql."
続いて、インスタンス用のパラメータグループを作成します。
$ aws rds create-db-parameter-group \
--db-parameter-group-name koizumi-posgresql-parameter-instance \
--db-parameter-group-family aurora-postgresql11 \
--description "Dedicated cluster parameter for koizumi-postgresql."
Aurora PostgreSQL を AWS CLI で構築
それでは、いよいよ本番です。Aurora PostgreSQL を AWS CLI で構築していきます。
DBクラスター作成
まずは、クラスターを作成します。ログは CloudWatch Logs へ転送するよう設定しておきます。
$ aws rds create-db-cluster \
--db-cluster-identifier koizumi-postgreSQL \
--engine aurora-postgresql \
--engine-version 11.6 \
--master-username postgres \
--master-user-password xxxxxxxxxx \
--vpc-security-group-ids vpc-00000000000000 \
--db-subnet-group-name koizumi-db-subnet \
--vpc-security-group-ids sg-11111111111111 \
--port 5432 \
--database-name emilydb01 \
--db-cluster-parameter-group-name koizumi-posgresql-parameter-cluster \
--enable-cloudwatch-logs-exports postgresql
DBインスタンス作成
クラスターが作成できたら、インスタンスを追加しましょう。
$ aws rds create-db-instance \
--db-instance-identifier koizumi-postgresql-01 \
--db-instance-class db.r5.large \
--engine aurora-postgresql \
--engine-version 11.6 \
--db-cluster-identifier koizumi-postgresql \
--db-parameter-group-name koizumi-posgresql-parameter-instance
上記のインスタンス追加のコマンドをもう一度実行すると、Read Replica が作成されます。よかったら試してみてください。
接続確認とSQL実行
では、EC2 から Aurora PostgreSQL に接続できるかどうか、確認してみましょう。
$ psql -h "hostname" -U postgresql -p 5432 -d emilydb01
Password for user postgresql:
psql (9.2.24, server 11.6)
WARNING: psql version 9.2, server version 11.0.
Some psql features might not work.
SSL connection (cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256)
Type "help" for help.
emilydb01=>
"hostname" には、エンドポイント名を指定してください。
試しにSQLも実行してみましょう。
emilydb01=> select current_user;
current_user
--------------
posgresql
(1 row)
emilydb01=> select now();
now
-------------------------------
2020-05-31 10:00:29.411401+00
(1 row)
ちなみに、RDS の時刻は deafult で UTC です。
簡単ではありますが、以上でございます。
PostgreSQLRDS