Я использую AWS SDK для PHP 3.x, в частности LightsailClient, для разработки веб-приложения для отображения снимков экземпляров Lightsail.
В отличие от EC2Client, LightsailClient не возвращает все shapshots при вызове:
$result = $client->getInstanceSnapshots();
Результаты разбиты на страницы по умолчанию с 20 результатами вместе с токеном для получения следующего набора результатов.
После извлечения первых результатов я перебираю следующие результаты, используя:
while(!empty($result['nextPageToken'])){
$result = $client->getInstanceSnapshots([
'pageToken' => $result['nextPageToken'],
]);
/process the result
...
}
Я извлекаю снимки и объединяю их в массив для последующей обработки.
Как выполнять запросы параллельно?
Мне нужно проверить все снимки всех экземпляров во всех регионах. Это легко сделать для первых 20 снимков, так как я могу использовать методы __asyn c, встроенные в AWS, но я не могу сделать это после первой итерации, поскольку у меня должен быть токен разбиения на страницы.
Как я могу получить снимки асинхронно из всех регионов, примерно так:
foreach ($regions as $region){
/* get the snapshots asynchronously
}
/* wait for results
/* process results
Прямо сейчас я просто l oop последовательно через регионы. Пока это терпимо, но не масштабируется. Я подозреваю, что нам, возможно, придется перенести это в фоновые задания, а панели мониторинга не будут генерировать данные в режиме реального времени.