Я пытаюсь использовать ManagedUpload из aws -sdk. Мой код:
var buffer = fs.readFileSync(filePath);
var paramsCreate = {
Bucket: bucketName,
Key: 'myfile.ogv',
Body: buffer
};
let perc = 0;
var upload = new AWS.S3.ManagedUpload({
partSize: 5 * 1024 * 1024, queueSize: 4,
params: paramsCreate
}).on('httpUploadProgress',function(progress) {
let newPerc = Math.round(progress.loaded / progress.total * 100);
if (newPerc != perc) {
perc = newPerc;
console.log(perc + '% sent');
}
});
let up = upload.promise();
up.then(data=>{
console.log('Finished');
console.log(data);
}).catch(err=>console.log('Err: ', err));
с этим кодом я (очевидно) получил следующую ошибку:
Error: connect EHOSTUNREACH 169.254.169.254:80
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1141:16) {
message: 'Missing credentials in config, if using AWS_CONFIG_FILE, set AWS_SDK_LOAD_CONFIG=1',
errno: -113,
code: 'CredentialsError',
syscall: 'connect',
address: '169.254.169.254',
port: 80,
time: 2020-05-08T23:29:33.528Z,
originalError: {
message: 'Could not load credentials from any providers',
errno: -113,
code: 'CredentialsError',
syscall: 'connect',
address: '169.254.169.254',
port: 80,
time: 2020-05-08T23:29:33.527Z,
originalError: {
message: 'EC2 Metadata roleName request returned error',
errno: -113,
code: 'EHOSTUNREACH',
syscall: 'connect',
address: '169.254.169.254',
port: 80,
time: 2020-05-08T23:29:33.526Z,
originalError: [Object]
}
}
}
Я сказал, очевидно, потому что я нигде не сообщил учетные данные. Но на странице документации ManagedUpload ( здесь ) об этом даже не упоминается.
Как сообщить учетные данные aws lib для использования с ManagedUpload?
Изменить:
Для обычных (не составных) переводов , и общий доступ к S3. Я сообщаю учетные данные следующим образом:
import dotenv from 'dotenv';
import AWS, { AWSError } from 'aws-sdk';
import {
CreateBucketOutput,
PutObjectOutput,
GetBucketCorsOutput,
GetObjectOutput,
DeleteObjectOutput
} from 'aws-sdk/clients/s3';
dotenv.config();
let s3Options = {
accessKeyId: process.env.CEPH_ACCESS_KEY,
secretAccessKey: process.env.CEPH_SECRET_KEY,
endpoint: process.env.CEPH_ENDPOINT,
s3BucketEndpoint: false,
s3ForcePathStyle: true
};
function s3Instance() {
return new AWS.S3(s3Options);
}
и вот пример использования этого экземпляра:
export function sendObject(
nameBucket,
nameObject,
data,
metadata
) {
metadata = metadata || {};
const params = {
Bucket: nameBucket,
Key: nameObject,
Body: data,
Metadata: metadata
};
let perc = 0;
return new Promise((resolve, reject) => {
s3Instance()
.putObject(params, (err, res) => {
if (err) reject(err); else resolve(res);
}).on('httpUploadProgress',function(progress) {
let newPerc = Math.round(progress.loaded / progress.total * 100);
if (newPerc != perc) {
perc = newPerc;
console.log(perc + '% sent');
}
});
});
}