Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有时Lambda没有将数据写入AWS S3存储桶中_Javascript_Typescript_Amazon S3_Aws Lambda - Fatal编程技术网

Javascript 有时Lambda没有将数据写入AWS S3存储桶中

Javascript 有时Lambda没有将数据写入AWS S3存储桶中,javascript,typescript,amazon-s3,aws-lambda,Javascript,Typescript,Amazon S3,Aws Lambda,我的Lambda代码使用TypeScript编写,创建S3 bucket并向其中写入JSON数据数组,这让我面临一个奇怪的问题。此Lambda根据到达SQS队列的消息触发。有时,突然之间会有很多信息 我怀疑,当只有一条消息时,我的Lambda工作正常,首先创建一个S3 bucket并将JSON数组写入其中,但是当消息增长时(比如一次10条消息),Lambda只创建了一个bucket,无法写入其中的内容,因此我只在其中获得一个空JSON,就像{} 不确定这是否是由于邮件数量造成的。因为所有消息都必

我的Lambda代码使用TypeScript编写,创建S3 bucket并向其中写入JSON数据数组,这让我面临一个奇怪的问题。此Lambda根据到达SQS队列的消息触发。有时,突然之间会有很多信息

我怀疑,当只有一条消息时,我的Lambda工作正常,首先创建一个S3 bucket并将JSON数组写入其中,但是当消息增长时(比如一次10条消息),Lambda只创建了一个bucket,无法写入其中的内容,因此我只在其中获得一个空JSON,就像{}

不确定这是否是由于邮件数量造成的。因为所有消息都必须执行相同的任务,即创建相同的bucket(如果还不存在的话),并将类似的内容写入其中,或者需要执行下面描述的CacheControl属性。 下面是我的代码片段:-

exports.createBucketAndUploadToS3 = async (s3Client, bucket, prefix, contents) => {
const params = {
Bucket: bucket,
Key: `${prefix}/data.json`,
Body: JSON.stringify(contents),
ContentType: 'application/json; charset=utf-8',
CacheControl: 'max-age=60'
};
await s3Client.createBucket({ Bucket: bucket }).promise();
return await s3Client.putObject(params).promise();
};

我建议在调用createBucket命令之前检查bucket是否存在,这通常会在再次尝试创建现有对象时导致异常。可以使用以下代码执行此操作:

const checkBucketExists=async bucket=>{
const s3=新的AWS.s3();
常量选项={
桶:桶,
};
试一试{
等待s3.headBucket(选项).promise();
返回true;
}捕获(错误){
如果(error.statusCode==404){
返回false;
}
投掷误差;
}
};
//在代码中
让isBucketExisting=等待checkBucketExists(bucket);
如果(是否存在BucketExisting){
等待s3Client.createBucket({Bucket:Bucket}).promise();
}
返回wait s3Client.putObject(params.promise();