[英]Sometimes data is not getting written in the AWS S3 bucket by Lambda
[英]AWS lambda function get timeout without any error message When it connect S3 SDK sometimes
AWS lambda function 有時在連接 S3 SDK 時超時,沒有任何錯誤消息。
關鍵是 lambda function “有時”會出現問題。 通常,它運作良好。 但是,它突然停止了。
請幫我解決這個問題
2020-07-30T16:45:22.003+09:00 START RequestId: 2c1dcd43-41f6-5d95-a862-9adf3d267ecf Version: $LATEST 2020-07-30T16:45:22.009+09:00 2020-07-30T07:45:22.009Z 2c1dcd43-41f6-5d95-a862-9adf3d267ecf INFO fileKeys: [ '701bcf80-ed63-46d4-9524-d38a14a74fe0.dwg' ] 2020-07-30T16:45:22.009+09:00 2020-07-30T07:45:22.009Z 2c1dcd43-41f6-5d95-a862-9adf3d267ecf INFO getObject drawingFile 701bcf80-ed63-46d4-9524-d38a14a74fe0.dwg 2020-07-30T16:45:22.019+09:00 2020-07-30T07:45:22.018Z 2c1dcd43-41f6-5d95-a862-9adf3d267ecf INFO before getObject 2020-07-30T16:45:22.020+09:00 2020-07-30T07:45:22.020Z 2c1dcd43-41f6-5d95-a862-9adf3d267ecf INFO before createReadStream 2020-07-30T16:45:22.021+09:00 2020-07-30T07:45:22.021Z 2c1dcd43-41f6-5d95-a862-9adf3d267ecf INFO before pipe 2020-07-30T16:45:52.032+09:00 END RequestId: 2c1dcd43-41f6-5d95-a862-9adf3d267ecf 2020-07-30T16:45:52.032+09:00 REPORT RequestId: 2c1dcd43-41f6-5d95-a862-9adf3d267ecf Duration: 30027.38 ms Billed Duration: 30000 ms Memory Size: 3008 MB Max Memory Used: 31 MB 2020-07-30T16:45:52.032+09:00 2020-07-30T07:45:52.032Z 2c1dcd43-41f6-5d95-a862-9adf3d267ecf Task timed out after 30.03 seconds
這是代碼
exports.getObject = async (type, fileKey) => { try { const config = env[type](); const s3 = new AWS.S3(); return new Promise((resolve, reject) => { const fileName = `/tmp/${fileKey}`; const fileStream = fs.createWriteStream(fileName, 'binary'); const s3Stream = s3.getObject({ Bucket: config.origin, Key: fileKey, }).createReadStream(); s3Stream.on('error', function (err) { console.error('s3Stream: ', err); fileStream.end(); reject(err); }).on('data', (data) => { // console.log('data stream...'); }).on('end', () => { console.log('s3Stream read end'); }); fileStream.on('error', function (err) { console.error('fileStream: ', err); fileStream.end(); reject(err); }).on('close', function () { console.log('fileStream Done.'); resolve('success'); }); s3Stream.pipe(fileStream).on('error', function (err) { console.error('File Stream:', err); reject(err); }).on('close', function () { console.log('Pipe Done.'); });; }); } catch (error) { throw (error); } };
聽起來您的 Lambda function 連接到私有子網和公共子網的混合。
調用 AWS 服務時,需要訪問 Internet。 這可以通過以下方式獲得:
0.0.0.0/0
的流量發送到 NAT 網關,或者如果 Lambda function 連接到公共子網,它將無法使用 NAT 網關。 這將導致與 AWS 的連接超時。 隨機行為可能與 Lambda function 正在使用的子網有關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.