Примечание: если вам не нужен ответ после длительной работы лямбды, рассмотрите Асинхронный вызов шлюзов API
Амплификация вызывает этот подход «работа с сервисными объектами» .
Для этого вам необходимо убедиться, что роль, которую Cognito предоставляет вашим аутентифицированным пользователям, включает разрешения для lambda:invoke
, а также любые дополнительные разрешения, необходимые для функции.Я предполагаю, что вы можете сделать это сейчас, однако вы можете просмотреть документацию Управление доступом на основе ролей или задать другой вопрос, если нет.
Для доступа к этим ролям в Amplify вам нужноиспользовать функцию Auth.currentCredentials
, которая возвращает обещание с объектом credentials
, который затем можно использовать на клиенте aws-sdk
.
Например:
import Auth from '@aws-amplify/auth';
import Lambda from 'aws-sdk/clients/lambda'; // npm install aws-sdk
Auth.currentCredentials()
.then(credentials => {
const lambda = new Lambda({
credentials: Auth.essentialCredentials(credentials)
});
return lambda.invoke({
FunctionName: 'my-function',
Payload: JSON.stringify({ hello: world }),
});
})
Youполную документацию по вызову лямбды можно найти в документации по JavaScript AWS-SDK .
Однако вы должны помнить , что полезная нагрузка из API Gateway создается AWS исодержит гораздо больше информации, чем просто тело, с которым была вызвана конечная точка, однако при непосредственном вызове вы получите только полезную нагрузку, поэтому вам придется соответствующим образом построить этот объект.