Вот способ сделать это с помощью рекурсивной асинхронной функции, ожидающей завершения выборки дочерних элементов, прежде чем возвращать обещание.
Таким образом, мы можем вызвать doSomething
, когда все будет сделано.
const tree = {
url: 'http://www.json-generator.com/api/json/get/cevhxOsZnS',
children: [{
url: 'http://www.json-generator.com/api/json/get/cguaPsRxAi'
}, {
url: 'http://www.json-generator.com/api/json/get/cguaPsRxAi',
children: [{
url: 'http://www.json-generator.com/api/json/get/cfDZdmxnDm'
}]
}]
};
function doSomething() {
console.log("doing something");
}
async function fetchIt(element) {
if (element.children) {
await Promise.all(element.children.map(fetchIt));
}
return new Promise((resolve) => {
console.log("fetching " + element.url);
fetch(element.url).then(res => {
console.log("done");
resolve();
});
});
}
fetchIt(tree).then(doSomething);
Вы можете использовать Набор конфигурации в шаблоне формирования облака, чтобы определить шаги, на которых вы можете выполнять копии или запускать сценарии или команды при запуске ресурса EC2. Вы даже можете временно запустить его, чтобы он отключился после завершения всех операций.
Затем вы можете использовать скрипт или лямбда-функцию для выполнения стека облачной информации
Рассматривали ли вы использовать Amazon SageMaker? Легко настроить повторяющиеся учебные задания. Я хотел бы услышать ваши отзывы и ответить на любые вопросы.
Я бы выбрал самое простое решение, так как это не такая сложная задача (с архитектурной точки зрения).
Сконфигурируйте событие S3 для сегмента, в котором вы храните новый большой трехмерный массив, для запуска лямбда-функции после помещения объекта в блок (вы можете быть более детализированным и запускать его на основе префикса, если вы хранение всех / разных данных в одной корзине).
Внутри этой лямбда-функции вы просто запускаете новый экземпляр EC2 и передаете ему скрипт user data
, который загрузит необходимые файлы и запустит задачу (это можно сделать с помощью boto3 для Python).
Использование CloudFormation в этом случае было бы излишним (мое мнение).