Aurora PostgreSQL を AWS CLI で構築してみた

  • PostgreSQL
  • RDS
  • 前提知識

    Aurora PostgreSQLを構築するに当たって、事前に以下のAWS基本サービスは理解しておく必要があります。

    • EC2(サーバー構築)
    • VPC(ネットワーク管理)
    • IAM(AWSのユーザーや、各サービスのアクセス権管理)

    これらの基本的な使い方は理解をしている前提で書いていきます。

    Aurora PostgreSQL を構築する前の準備作業

    今回のゴールは以下の構成を実現することと、実際にEC2サーバーからアクセスしてSQLが実行できるまでを目標とします。

    postgresql-01

    まず、以下の要素を準備します。

    • VPC
    • パブリックサブネット
    • プライベートサブネット(2個)
    • パブリック用セキュリティグループ(client からの SSH 通 信を許可)
    • プライベート用セキュリティグループ(EC2 から port 5432 通信を許可)
    • ロール(AWS RDS コマンドを実行するための権限をEC2に付与するため)
    • EC2(今回は AmazonLinux2 を使用)

    client から EC2 まで SSH 接続が出来るようにしておきます。EC2 に対して RDS を操作するためのロールを付与しておくことを忘れないようにしてください。

    postgresql-02

    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 です。

    簡単ではありますが、以上でございます。

  • PostgreSQL
  • RDS