Бессерверный доступ к DataApi в AWS Aurora с использованием настраиваемого HTTP-вызова (curl)
Я пытаюсь использовать функцию API данных без сервера Aurora, чтобы сократить время подключения к базе данных в моем бессерверном приложении. Но создание клиента требует времени.
Я хотел бы вызвать службу HTTP rds через лямбда для получения / публикации данных.
Я наткнулся на несколько сообщений, но все еще получаю сообщение об ошибке: отсутствует токен аутентификации
https://docs.aws.amazon.com/rdsdataservice/latest/APIReference/API_ExecuteStatement.html
Ниже приведен мой пример запроса для MySQL. Я запустил это через облачную оболочку AWS.
curl --location --request POST 'https://rds-data.us-west-2.amazonaws.com/Execute' \
--header 'Content-Type: application/json' \
--data-raw '{
"continueAfterTimeout": false,
"database": "demo_data",
"includeResultMetadata": true,
"parameters": [],
"resourceArn": "arn:aws:rds:us-west-2:*******:cluster:rds-serverless",
"schema": "demo_data",
"secretArn": "arn:aws:secretsmanager:us-west-2:******:secret:serverless/user_u-cMt2Q4",
"sql": "select now()"
}'
1 ответ
Если я могу порекомендовать другой подход - AWS уже проделала за вас много работы, поэтому вам не нужно создавать собственный механизм доступа для API данных.
Например, из командной строки вы можете получить доступ к API данных с помощью приложения aws cli (доступно на Mac , Windows , Linux и т. Д.) Следующим образом :
aws rds-data execute-statement --resource-arn "arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster" \
--database "mydb" --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret" \
--sql "select * from mytable"
Для доступа к api данных из лямбда-выражения обычно требуется использовать sdk для любого языка, на котором настроена ваша лямбда-выражение, а затем использовать их библиотеки для доступа к api данных и другим службам.
Если вы настроены на использование командной строки из лямбда -выражения, вы даже можете создать слой лямбда, который включает упомянутый выше aws cli, а затем использовать системную команду для вызова api таким образом, хотя я бы не рекомендовал это.
Надеюсь, одно из этих более простых решений подойдет вам лучше, чем curl!