gpt4 book ai didi

reactjs - 在不使用 API Gateway 的情况下从 Amplify 生成的 React App 调用 Lambda 函数

转载 作者:行者123 更新时间:2023-12-04 06:14:22 26 4
gpt4 key购买 nike

我用过 Amplify生成静态网站和底层 React 应用程序。最初我还生成了一个 API 端点,但由于我的 lambda 函数可能会超过 API 网关超时限制(29 秒),我需要直接从生成的 React 应用程序调用 lambda 函数,而不是通过 API 网关。

代码如下所示,用于 React 页面使用 Cognito 进行身份验证:

import Auth from '@aws-amplify/auth';
import { withAuthenticator } from 'aws-amplify-react';
import awsconfig from './aws-exports';

Auth.configure(awsconfig);

以上几行包装了 App(根)对象并按宣传的方式工作。但是既然不想使用API​​ Gateway,如何直接从React App调用AWS Lambda函数呢?

answers我可以找到关于导入 AWS 等的讨论,这似乎与我们在这里尝试做的事情相冲突。在调用 lambda 时,我需要使用经过身份验证的连接(已经使用上述代码工作),因此我不能使用本示例中给出的通用调用。

Invoke API也不提供任何示例。

任何建议表示赞赏。

最佳答案

注意:如果在长时间运行 lambda 后不需要响应,请考虑 API Gateways' Asynchronous Invocation

Amplify 调用此方法 "working with service objects" .

为此,您必须确保角色 Cognito 为您的经过身份验证的用户提供了对 lambda:invoke 的权限。以及函数中所需的任何其他权限。我假设您现在可以这样做,但是您可以看到 Role-Based Access Control文档,如果没有,请提出另一个问题。

要在 Amplify 中访问这些角色,您需要使用 Auth.currentCredentials函数,它返回一个带有 credentials 的 promise 对象,然后可以在 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 }),
});
})


您可以在 AWS-SDK javascript documentation 上查看有关调用 lambdas 的完整文档。 .

但是,您应该知道来自 API Gateway 的有效负载是由 AWS 构建的,并且包含的​​信息远不止调用端点所用的主体,但是当您直接调用时,您将获得的只是有效负载,因此您将必须相应地构建该有效负载对象。

关于reactjs - 在不使用 API Gateway 的情况下从 Amplify 生成的 React App 调用 Lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56106825/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com