Ожидание выполнения спотового запроса AWS EC2 из PHP SDK неопределенное время

Я пытаюсь добиться возможной согласованности спотового экземпляра, чтобы я мог назначить его в своем приложении. Вот что я видел из довольно простого вызова спотового экземпляра.

Запрошенный экземпляр запускается немедленно (быстрое 15-30-секундное рабочее состояние экземпляра), но ожидание продолжается бесконечно.

Я не уверен, связана ли проблема с моим кодом, SDK или AWS, которые не выполняют запрос быстро.

$spotEc2Client = $this->sdk->createEc2([]);

// Create instance via spot request
$result        = $spotEc2Client->requestSpotInstances($spotConfig);
$spotResult    = $result->getPath('SpotInstanceRequests');
$spotRequestId = $spotResult[0]['SpotInstanceRequestId'];

$now = date("F d, Y H:i:s A");
echo "Spot Request ID is: $spotRequestId\n";
echo "Starting at $now MST\n";
$spotEc2Client->waitUntil(
    'SpotInstanceRequestFulfilled',
    [
        'SpotInstanceRequestId' => $spotRequestId,
        '@waiter' => [
            'before' => function (CommandInterface $command, $attempts) {
                $now = date("H:i:s");
                printf(
                    "[$now] About to send %s. Attempt %d\n",
                    $command->getName(),
                    $attempts
                );
            }
        ],
    ]
);

Выход:

Spot Request ID is: sir-<my request id>
Starting at August 18, 2017 10:10:20 AM MST
[10:10:20] About to send DescribeSpotInstanceRequests. Attempt 1
[10:10:21] About to send DescribeSpotInstanceRequests. Attempt 2
[10:10:36] About to send DescribeSpotInstanceRequests. Attempt 3
[10:10:52] About to send DescribeSpotInstanceRequests. Attempt 4
[10:11:07] About to send DescribeSpotInstanceRequests. Attempt 5
[10:11:23] About to send DescribeSpotInstanceRequests. Attempt 6
[10:11:38] About to send DescribeSpotInstanceRequests. Attempt 7

Сравнение времени проверки со временем запуска:

время запуска спотового экземпляра

Я думаю, что мне нужно просто выполнить свой собственный опрос для describeInstances, специально отыскивая точечные экземпляры, которые запущены или инициализированы, и справиться с этим самостоятельно, потому что вызов DescribeSpotInstanceRequests продолжается бесконечно, насколько я мог сказать.


person Jared Habeck    schedule 18.08.2017    source источник


Ответы (1)


Я неправильно отформатировал свой аргумент для SpotRequestId. На это мне быстро и любезно указал кто-то из github AWS PHP SDK!

Форматирование моего запроса на точечный экземпляр требовало множественного числа и массива в качестве аргумента.

$spotEc2Client->waitUntil(
    'SpotInstanceRequestFulfilled',
    [
        'SpotInstanceRequestId' => $spotRequestId,
    ]
    ...

To Be:

$spotEc2Client->waitUntil(
    'SpotInstanceRequestFulfilled',
    [
        'SpotInstanceRequestIds' => [
            $spotRequestId
    ]
    ...

Я думаю, что как пользователь API я бы предпочел исключение или, может быть, предупреждение о неправильном аргументе, но это обсуждение для другого места.

person Jared Habeck    schedule 18.08.2017