我正在设计一个状态机,它将运行两个 lambda 函数,每个函数并行返回一个 Json 数组。此外,这些函数的结果随后会传递给另外两个 lambda 函数,这些函数将获取这些输入并添加到数据库中。我已准备好所有功能并单独工作,但当我执行状态机时,它表示其中一项执行由于 DataLimitExceeded 而失败。我检查了文档,它说输入或输出结果的限制是 32.768 个字符。奇怪的是,执行成功的是 Json 对象返回的大约 50k 个字符,而失败的是大约 46k 个字符。那么,如果两者都超过了限制,为什么其中一个失败而另一个没有!
{
"StartAt": "Sync",
"States": {
"Sync": {
"Type": "Parallel",
"Next": "EnviarNotificacion",
"Branches": [
{
"StartAt": "SyncClientes",
"States": {
"SyncClientes": {
"Type": "Task",
"Resource": "arn...",
"Next": "AddClientes"
},
"AddClientes" : {
"Type": "Task",
"Resource": "arn...",
"End": true
}
}
},
{
"StartAt": "SyncArticulos",
"States": {
"SyncArticulos": {
"Type": "Task",
"Resource": "arn...",
"Next": "AddArticulos"
},
"AddArticulos": {
"Type": "Task",
"Resource": "arn...",
"End": true
}
}
}
]
},
"EnviarNotificacion": {
"Type": "Pass",
"End": true
}
}
}
非常感谢!
有人给了我另一个对我有好处的解决方案,所以如果有人遇到类似的问题,我会将其发布在这里。我所做的只是将所需的数据保存在 S3 上的文件中,在第二个函数中,我从 S3 读取该文件并且工作得很好。我注意到的一件事是,当我将文件保存在 S3 上时,运行正常的函数的数据为 31kb,而失败的函数的数据为 35kb,所以最大大小可能是 32kb,而不是文档中所说的字符。
middy-store
,可以自动处理上传和下载。中间件检查 lambda 输出的大小,如果输出太大,则将输出上传到 S3,并且仅返回 S3 URL 或 ARN。对于下一个 lambda,它会检查输入是否包含 S3 URL 或 ARN 并再次下载。这发生在幕后,无需太多配置:
import { middyStore } from 'middy-store';
import { S3Store } from 'middy-store-s3';
const handler = middy()
.use(
middyStore({
stores: [
new S3Store({
bucket: "your-bucket",
}),
],
}),
)
.handler(async (input) => {
return { /* your handler */ };
});