AWS: RDS – Connection refused и StorageFull

By | 03/02/2018
 

Имеется AWS RDS инстанс PostgreSQL, который в какой-то момент перестал принимать подключения:

$ psql --host=datascience-ops.cjonwt.us-west-2.rds.amazonaws.com --username=dsops --password --dbname=dsops
Password for user dsops: 
psql: could not connect to server: Connection refused
        Is the server running on host "datascience-ops.cjonwt.us-west-2.rds.amazonaws.com" and accepting
        TCP/IP connections on port 5432?

Проверяем статус:

aws --profile ads-mic rds describe-db-instances --db-instance-identifier datascience-ops --query 'DBInstances[*].[DBInstanceStatus,AllocatedStorage]'  --output text
storage-full    5

И в логах:

Бекап сейчас выполнить тоже нельзя:

aws --profile ads-mic rds create-db-snapshot --db-snapshot-identifier datascience-ops-2018-03-01-sizefix --db-instance-identifier datascience-ops
An error occurred (InvalidDBInstanceState) when calling the CreateDBSnapshot operation: Cannot create a snapshot because the database instance datascience-ops is not currently in the available state.

Увеличим выделенное место, используем modify-db-instance:

aws --profile ads-mic rds modify-db-instance --db-instance-identifier datascience-ops --allocated-storage 20  --apply-immediately

Проверяем:

aws --profile ads-mic rds describe-db-instances --db-instance-identifier datascience-ops --query 'DBInstances[*].[DBInstanceStatus,AllocatedStorage]'  --output text
modifying       5

Статус modifying, ОК, ждём.

Пока modifying – проверяем подключение:

psql --host=datascience-ops.cjoqeswrmnwt.us-west-2.rds.amazonaws.com --username=dsops --password --dbname=dsops
Password for user dsops:
psql (8.4.20, server 9.4.7)
WARNING: psql version 8.4, server version 9.4.
Some psql features might not work.
SSL connection (cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256)
Type "help" for help.
dsops=> \l
List of databases
Name    |   Owner   | Encoding |  Collation  |    Ctype    |    Access privileges
-----------+-----------+----------+-------------+-------------+-------------------------
dsops     | dsops     | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
postgres  | dsops     | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
rdsadmin  | rdsadmin  | UTF8     | en_US.UTF-8 | en_US.UTF-8 | rdsadmin=CTc/rdsadmin
template0 | rdsadmin  | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/rdsadmin
: rdsadmin=CTc/rdsadmin
template1 | dsops     | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/dsops
: dsops=CTc/dsops
(5 rows)
dsops=>

Проверяем таблицы:

dsops=> \d
List of relations
Schema |                 Name                  |   Type   |   Owner
--------+---------------------------------------+----------+-----------
public | user_dealerships                      | table    | dsops
public | user_employeedir                      | table    | dsops
...

Всё на месте, хорошо.

После того, как место было добавлено – статус ещё некоторое время был storage-full, потом запустился бекап расписанию, который не мог быть выполнен ранее (с октября прошлого года, ага), видимо из-за проблем с местом:

aws --profile ads-mic rds describe-db-snapshots --db-instance-identifier datascience-ops --query 'DBSnapshots[*].DBSnapshotIdentifier' --output table
-----------------------------------------------
|             DescribeDBSnapshots             |
+---------------------------------------------+
|  rds:datascience-ops-2017-10-24-11-57       |
|  rds:datascience-ops-2018-03-02-05-15       |
+---------------------------------------------+

И только минут через 20 статус стал available:

aws --profile ads-mic rds describe-db-instances --db-instance-identifier datascience-ops --query 'DBInstances[*].[DBInstanceStatus,AllocatedStorage]'  --output text
available       10

Готово.