OpenAPI для Managed Postgres
Private preview in ClickHouse Cloud
Используйте ClickHouse OpenAPI, чтобы программно
управлять сервисами Managed Postgres так же, как сервисами ClickHouse. Уже
знакомы с OpenAPI? Получите [ключи API] и сразу переходите к
справочнику по API Managed
Postgres. Если нет, ниже приведён краткий обзор.
Ключи API
Для использования ClickHouse OpenAPI требуется аутентификация; о том, как
создать ключи, см. в разделе [Ключи API]. Затем используйте их в учетных данных Basic Auth следующим образом:
KEY_ID=mykeyid
KEY_SECRET=mykeysecret
curl -s --user "$KEY_ID:$KEY_SECRET" https://api.clickhouse.cloud/v1/organizations | jq
Идентификатор организации
Далее вам понадобится идентификатор организации.
- Выберите название организации в левом нижнем углу консоли.
- Выберите Сведения об организации.
- Нажмите значок копирования справа от Идентификатор организации, чтобы сразу скопировать его
в буфер обмена.
CRUD
Рассмотрим жизненный цикл сервиса Postgres.
Создание
Сначала создайте новый экземпляр
с помощью create API. Для этого в JSON-теле
запроса должны быть указаны следующие свойства:
name: Имя нового сервиса Postgres
provider: Имя облачного провайдера
region: Регион в инфраструктуре провайдера, где будет развернут
сервис
size: Размер VM
storageSize: Размер хранилища для VM
В документации по create API приведены возможные значения этих свойств. Кроме
того, укажем Postgres 18 вместо версии по умолчанию — 17:
create_data='{
"name": "my postgres",
"provider": "aws",
"region": "us-west-2",
"postgresVersion": "18",
"size": "r8gd.large",
"storageSize": 118
}'
Теперь используйте эти данные, чтобы создать новый экземпляр; обратите внимание, что для этого требуется заголовок
Content-Type:
curl -s --user "$KEY_ID:$KEY_SECRET" -H 'Content-Type: application/json' \
"https://api.clickhouse.cloud/v1/organizations/$ORG_ID/postgres" \
-d "$create_data" | jq
В случае успеха будет создан новый экземпляр и возвращена информация о нём,
включая данные для подключения:
{
"result": {
"id": "pg7myrd1j06p3gx4zrm2ze8qz6",
"name": "my postgres",
"provider": "aws",
"region": "us-west-2",
"postgresVersion": "18",
"size": "r8gd.large",
"storageSize": 118,
"haType": "none",
"tags": [],
"connectionString": "postgres://postgres:vV6cfEr2p_-TzkCDrZOx@my-postgres-6d8d2e3e.pg7myrd1j06p3gx4zrm2ze8qz6.c0.us-west-2.aws.pg.clickhouse-dev.com:5432/postgres?channel_binding=require",
"username": "postgres",
"password": "vV6cfEr2p_-TzkCDrZOx",
"hostname": "my-postgres-6d8d2e3e.pg7myrd1j06p3gx4zrm2ze8qz6.c0.us-west-2.aws.pg.clickhouse-dev.com",
"isPrimary": true,
"state": "creating"
},
"requestId": "a5957990-dbe5-46fd-b5ce-a7f8f79e50fe",
"status": 200
}
Получение
Используйте id из ответа, чтобы повторно получить сервис:
PG_ID=pg7myrd1j06p3gx4zrm2ze8qz6
curl -s --user "$KEY_ID:$KEY_SECRET" \
"https://api.clickhouse.cloud/v1/organizations/$ORG_ID/postgres/$PG_ID" \
| jq
Вывод будет похож на JSON, возвращаемый при создании, но следите
за state; когда его значение изменится на running, сервер будет готов к работе:
curl -s --user "$KEY_ID:$KEY_SECRET" \
"https://api.clickhouse.cloud/v1/organizations/$ORG_ID/postgres/$PG_ID" \
| jq .result.state
Теперь вы можете использовать свойство connectionString для подключения, например, через
psql:
$ psql "$(
curl -s --user "$KEY_ID:$KEY_SECRET" \
"https://api.clickhouse.cloud/v1/organizations/$ORG_ID/postgres/$PG_ID" \
| jq -r .result.connectionString
)"
psql (18.3)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off, ALPN: postgresql)
Type "help" for help.
postgres=#
Введите \q, чтобы выйти из psql.
Обновление
patch API поддерживает обновление части свойств сервиса Managed
Postgres с помощью JSON Merge Patch по RFC 7396. Теги могут быть
особенно полезны при сложных развертываниях; просто отправьте в запросе
только их:
curl -sX PATCH --user "$KEY_ID:$KEY_SECRET" -H 'Content-Type: application/json' \
"https://api.clickhouse.cloud/v1/organizations/$ORG_ID/postgres/$PG_ID" \
-d '{"tags": [{"key": "Environment", "value": "production"}]}' \
| jq .result
Возвращённые данные должны содержать новые теги:
{
"id": "$PG_ID",
"name": "my postgres",
"provider": "aws",
"region": "us-west-2",
"postgresVersion": "18",
"size": "r8gd.large",
"storageSize": 118,
"haType": "none",
"tags": [
{
"key": "Environment",
"value": "production"
}
],
"connectionString": "postgres://postgres:vV6cfEr2p_-TzkCDrZOx@my-postgres-6d8d2e3e.$PG_ID.c0.us-west-2.aws.pg.clickhouse-dev.com:5432/postgres?channel_binding=require",
"username": "postgres",
"password": "vV6cfEr2p_-TzkCDrZOx",
"hostname": "my-postgres-6d8d2e3e.$PG_ID.c0.us-west-2.aws.pg.clickhouse-dev.com",
"isPrimary": true,
"state": "running"
}
Удаление
Используйте [API удаления], чтобы удалить сервис Postgres.
Примечание
Удаление сервиса Postgres полностью удаляет сам сервис и все его
данные. Перед удалением сервиса убедитесь, что у вас есть резервная копия
или что вы предварительно повысили реплику до основной.
curl -sX DELETE --user "$KEY_ID:$KEY_SECRET" \
"https://api.clickhouse.cloud/v1/organizations/$ORG_ID/postgres/$PG_ID" \
| jq
В случае успеха в ответе будет указан код состояния 200, например:
{
"requestId": "ac9bbffa-e370-410c-8bdd-bd24bf3d7f82",
"status": 200
}