繁体   English   中英

来自PHP SDK的AWS EC2 Spot请求执行侍者无限期等待

[英]AWS EC2 Spot request fulfillment waiter from PHP SDK waits indefinitely

我试图通过竞价型实例的最终一致性,以便可以在我的应用程序中分配它。 这是我从一个非常简单的竞价实例调用中看到的内容。

所请求的实例将立即启动(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自己的轮询,即可专门查找正在运行或init的竞价型实例,并自行处理-因为对DescribeSpotInstanceRequests的调用会无限期地进行下去告诉。

我已经将SpotRequestId参数SpotRequestId错误。 有人在AWS PHP SDK的github上迅速友好地向我指出了这一点!

我的竞价型实例请求的格式需要复数和数组作为参数。

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

成为:

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

我认为,作为API用户,我更喜欢异常或警告错误的参数,但这是另一个地方的讨论。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM