![](/img/trans.png)
[英]How to batch the iot data in aws sqs and then store data in aws s3
[英]store batch data from aws sqs to aws s3 using aws lambda
我正在嘗試從 aws lambda(nodejs 運行時)獲取 aws sqs 中的輪詢消息(iot 數據),並嘗試將其存儲在 aws s3 存儲桶中。 但是我在存儲它時遇到錯誤。
這是我的有效載荷:-
{ "device_name": "xxx", "temp":23.44, "humidity":33.44, "timestamp": epoch timestamp }
這是我的代碼:-
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
export const putInS3 = async (device_name,year,month,day) => {
let bucketName = "my-bucket-name";
const client = new S3Client({Bucket:bucketName,key:`${device_name}/${year}/${month}/${day}/`});
try {
const putObj = new PutObjectCommand(client);
const sendRequest = await client.send(putObj);
console.log(sendRequest);
} catch (err) {
if(err) console.log(err);
}
}
export const handler = async(event) => {
// TODO implement
// console.log(s3Bucket);
const date = new Date();
const year = date.getFullYear();
const month = date.getMonth() + 1;
const day = date.getDate();
event.Records.forEach(record => {
let { body } = record;
body = JSON.parse(body);
let device_name = body.device_name;
putInS3(device_name,year,month,day);
console.log(body + " ");
});
};
上面的代碼給出了以下錯誤:
Error: No value provided for input HTTP label: Bucket.
任何幫助將不勝感激。 謝謝
您向 PutObjectCommand 提供的值不正確。 您正在傳遞客戶端,但您應該傳遞參數。
這應該工作:
const { S3Client, PutObjectCommand } = require('@aws-sdk/client-s3');
const s3Client = new S3Client({'region': 'us-east-1'});
export const putInS3 = async (device_name,year,month,day, body) => {
let bucketName = "my-bucket-name";
const parameters = {
'Bucket': bucketName,
'Key': `${device_name}/${year}/${month}/${day}/`,
'Body': body
}
try {
const putObj = new PutObjectCommand(parameters);
const sendRequest = await s3Client.send(putObj);
console.log(sendRequest);
} catch (err) {
if(err) console.log(err);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.