gpt4 book ai didi

Node.js 代码可以在本地运行,但不能在 AWS Lambda 上运行

转载 作者:太空宇宙 更新时间:2023-11-04 00:03:47 25 4
gpt4 key购买 nike

我有一个适用于 AWS Lambda 的 node.js 函数。它以流的形式从 S3 存储桶读取 JSON 文件,对其进行解析并将解析后的对象打印到控制台。我正在使用stream-json模块进行解析。

它适用于我的本地环境并将对象打印到控制台。但它不会将对象打印到 Lambda 上的日志流(CloudWatch)。它只是在最大持续时间后超时。它打印其他日志语句,但不打印对象值。

    1. Using node.js 6.10 in both environments. 
2. callback to the Lambda function is invoked only after the stream ends.
3. Lambda has full access to S3
4. Also tried Promise to wait until streams complete. But no change.

我错过了什么?预先感谢您。

const AWS = require('aws-sdk');
const {parser} = require('stream-json');
const {streamArray} = require('stream-json/streamers/StreamArray');
const {chain} = require('stream-chain');


const S3 = new AWS.S3({ apiVersion: '2006-03-01' });

/** ******************** Lambda Handler *************************** */

exports.handler = (event, context, callback) => {
// Get the object from the event and show its content type
const bucket = event.Records[0].s3.bucket.name;
const key = event.Records[0].s3.object.key;
const params = {
Bucket: bucket,
Key: key
};

console.log("Source: " + bucket +"//" + key);

let s3ReaderStream = S3.getObject(params).createReadStream();

console.log("Setting up pipes");

const pipeline = chain([
s3ReaderStream,
parser(),
streamArray(),
data => {
console.log(data.value);
}
]);

pipeline.on('data', (data) => console.log(data));
pipeline.on('end', () => callback(null, "Stream ended"));
};

最佳答案

我发现这是因为我的 Lambda 函数在私有(private) VPC 内运行。

(我必须在私有(private) VPC 内运行它,因为它需要访问我的 ElastiCache 实例。为了简化,我在发布代码时删除了相关代码)。

代码可以从我的本地计算机访问 S3,但不能从私有(private) VPC 访问。

有一个流程可确保可从您的 VPC 内访问 S3。发布在这里https://aws.amazon.com/premiumsupport/knowledge-center/connect-s3-vpc-endpoint/

这里是另一个链接,说明您应如何设置 VPC 端点以便能够从 VPC 内访问 AWS 资源 https://aws.amazon.com/blogs/aws/new-vpc-endpoint-for-amazon-s3/

关于Node.js 代码可以在本地运行,但不能在 AWS Lambda 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53348972/

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