Я вызываю пошаговую функцию из лямбда-функции, которая обрабатывает данные и сохраняет их в корзине S3. Из этой лямбда-функции я пытался загрузить данные, но я получаю сообщение об ошибке с «AccessDenied» (см. Далее ниже).
Если я запускаю эту лямбда-функцию во второй раз, я не получаю никакой ошибки и выполнение успешно завершается. Насколько я понимаю, во время первого запуска данные еще не сохраняются, пока я пытаюсь их загрузить, что объясняет, почему во второй попытке это работает хорошо.
Я использую пару async/await
думая, что этого будет достаточно, чтобы задержать выполнение в ожидании сохранения данных. Есть что-то, что я не правильно делаю?
Вот выдержка из кода (пошаговая функция здесь не детализирована):
async function downloadData(){
var rawData = await s3.getObject({Bucket: 'myBucket/', Key: 'myData.json'}).promise();
var data = JSON.parse(rawData.Body.toString('utf-8'));
return data;
}
async function invokeStepFunction(){
const stepfunctions = new AWS.StepFunctions();
var params = {
stateMachineArn: process.env.state_machine_arn,
input: JSON.stringify({"Bucket": 'myBucket/'})
};
await stepfunctions.startExecution(params).promise();
}
const AWS = require('aws-sdk');
AWS.config.update({region: process.env.region});
const s3 = new AWS.S3({apiVersion: '2006-03-01'});
module.exports.handler = async (event, context) => {
await invokeStepFunction();
const data = await downloadData();
console.log(data);
}
, и это сообщение об ошибке:
{"errorType":"AccessDenied","errorMessage":"AccessDenied","code":"AccessDenied","message":"AccessDenied","region":null,"time":"2020-03-25T13:13:20.832Z","requestId":"...","extendedRequestId":"...","statusCode":403,"retryable":false,"retryDelay":91.97041111587372,"stack":["AccessDenied: Access Denied"," at Request.extractError (/var/runtime/node_modules/aws-sdk/lib/services/s3.js:816:35)"," at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:106:20)"," at Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:78:10)"," at Request.emit (/var/runtime/node_modules/aws-sdk/lib/request.js:683:14)"," at Request.transition (/var/runtime/node_modules/aws-sdk/lib/request.js:22:10)"," at AcceptorStateMachine.runTo (/var/runtime/node_modules/aws-sdk/lib/state_machine.js:14:12)"," at /var/runtime/node_modules/aws-sdk/lib/state_machine.js:26:10"," at Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:38:9)"," at Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:685:12)"," at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:116:18)"]}