Я хотел бы перечислить настройки шифрования по умолчанию (нет, AES-256, AWS-KMS) для всех моих корзин s3, используя AWS SDK для javascript. (2.305)
Сначала я выбираю все сегменты с помощью listBuckets, а затем перебираю все сегменты с помощью функции getBucketEncryption
.
Моя проблема в том, что getBucketEncryption
является асинхронным, и поэтому я использую обещания, чтобы дождаться обработки всех запросов. Поэтому я добавляю все обещания в список и жду их с Promise.all()
. Наконец, когда я получаю все результаты, я не знаю, к какому контейнеру относятся результаты, потому что getBucketEncryption
не возвращает имя сегмента с данными, и обещания могут быть выполнены в любом порядке.
Каким-то образом мне нужно обернуть обещание вокруг вызова s3.getBucketEncryption
, где я могу передать имя сегмента, чтобы оно позже было у меня для оценки ... но как?
А вот и код:
console.log('Loading function');
const aws = require('aws-sdk');
const s3 = new aws.S3({ apiVersion: '2006-03-01', region: 'eu-west-1' });
function reflect(promise){
return promise.then(
function(v){ return {cryptSetting:v, status: "COMPLIANT" }},
function(e){ return {error:e, status: "NON_COMPLIANT"}});
}
s3.listBuckets({},function(err,data){
if (err){
console.log(err, err.stack); // an error occurred
}
else{
var bucketList = JSON.parse(JSON.stringify(data.Buckets));
var list = new Array();
for(let i in bucketList){
list.push(s3.getBucketEncryption({Bucket: bucketList[i].Name})
.promise());
}
Promise.all(list.map(reflect)).then(function(values) {
for(let i in values){
// at this point I do not have the bucket name any more
// because it's not included in the values array
console.log("Bucketname missing here " + values[i].cryptSetting
+ ' ' + values[i].status);
}
});
}
});
Вывод выглядит так:
Loading function
Bucketname missing here [object Object] COMPLIANT
Bucketname missing here [object Object] COMPLIANT
Bucketname missing here [object Object] COMPLIANT
Bucketname missing here [object Object] COMPLIANT
Bucketname missing here [object Object] COMPLIANT
Bucketname missing here [object Object] COMPLIANT
Bucketname missing here [object Object] COMPLIANT
Bucketname missing here undefined NON_COMPLIANT
Bucketname missing here undefined NON_COMPLIANT
Bucketname missing here [object Object] COMPLIANT
Bucketname missing here undefined NON_COMPLIANT