Я использую кластер базы данных postgres на aws и хотел бы разрешить экземпляру ec2 вносить программные изменения в базу данных. При попытке запустить программу получаю следующую ошибку:
"botocore.errorfactory.HttpEndpointNotEnabledException: An error occurred (HttpEndpointNotEnabledException) when calling the ExecuteStatement operation: HttpEndpoint is not enabled for resource arn:aws:rds:xxxx:xxxx:cluster:xxxx."
Однако когда я пытаюсь включить HttpEndpoint через aws cli на экземпляре ec2 с помощью команды:
aws rds modify-db-cluster --db-cluster-identifier db-xxxx --enable-http-endpoint
Флаг оставлен без изменений. Я также пробовал использовать флаг --apply-immediately, хотя в документации говорится, что это не имеет значения. Как включить HttpEndpoint в кластере базы данных postgres 16.3, работающем на aws?
В экземпляре ec2, подключенном к кластеру postgres:
$ aws rds modify-db-cluster --db-cluster-identifier db-xxxx --enable-http-endpoint
и
$ aws rds modify-db-cluster --db-cluster-identifier db-xxxx --enable-http-endpoint --apply-immediately
оба дают один и тот же ответ:
{
"DBCluster: {
"AllocatedStorage": xxxx,
"DBClusterIdentifier": "db-xxxxx",
...
"HttpEndpointEnabled: false,
...
}
Я ожидал, что ответ изменит значение HttpEndpointEnabled на true:
{
"DBCluster: {
"AllocatedStorage": xxxx,
"DBClusterIdentifier": "db-xxxxx",
...
"HttpEndpointEnabled: true,
...
}
Я также попробовал запустить:
aws rds enable-http-endpoint --resource-arn arn:aws:rds:us-east-2:xxxx:cluster:db-xxxx
В кластере Aurora PostgreSQL возникла следующая ошибка:
An error occurred (InvalidParameterValue) when calling the EnableHttpEndpoint operation: Access Denied to API Version: APIDataApi
Я попытался открыть группу безопасности для всего трафика, думая, что команда может быть на каком-то порту, отличном от 5432, но ошибка все та же.
Решение см. в комментариях: Услуга недоступна в Огайо (США-Восток-2)
Опция modify-db-cluster
работает только с Aurora Serverless V1 в соответствии с документацией , так что, скорее всего, она вам не поможет. Вы пишете о кластере БД Postgres 16.3, последняя поддерживаемая версия, которую я вижу, — 16.2 на момент написания этой статьи, вы уверены, что это правильно?
Помимо этого, в первых документах, на которые я ссылался, упоминалось, что вы должны использовать API EnableHttpEndpoint или DisableHttpEndpoint для чего-либо, кроме Aurora Serverless v1.
В вашем случае следующая команда должна включить конечную точку:
$ aws rds enable-http-endpoint --resource-arn <cluster-arn>
API данных доступен только для Aurora Postgres, а не для «обычного» Postgres AFAIK: docs. Можете ли вы добавить команды, которые вы выполняете, а также полное сообщение об ошибке в качестве редактирования исходного вопроса (не стесняйтесь заменять идентификатор учетной записи)
Думаю, я нашел ответ. Я работал в Огайо (восток США-2), но DataApi недоступен для бессерверных серверов Aurora PostgreSQL v2 в этом регионе. Он доступен в Северной Вирджинии (США-Восток-1). Я переведу операции в этот регион.
Спасибо за помощь. Я думаю, что разница в версии заключается в том, что это кластер PostgreSQL, а не кластер Aurora PostgreSQL. Когда я запускаю предложенную вами команду, я получаю новую ошибку:
Access Denied to API Version: APIDataApi
, которая, как я предполагаю, связана с какой-то проблемой с разрешениями. Я добавил АдминистраторДоступ к экземпляру EC2 и попробовал еще раз. Я также попробовал использовать кластер базы данных Aurora PostgreSQL 16.1 с одной и той же ошибкой оба раза.