0

我正在使用 Amazon 提供的最新 PHP 工具包来操作我的 EC2 实例

我使用以下代码检查驱动器是否可用

$this->client->waitUntil('__VolumeStatus', array(
        'VolumeIds' => array($volumeId),
        'waiter.success.value' => VolumeState::AVAILABLE
    ));

问题是没有定义为DELETED的状态。下面仅提供可用选项

class VolumeState extends Enum
{
  const CREATING = 'creating';
  const AVAILABLE = 'available';
  const IN_USE = 'in-use';
  const DELETING = 'deleting';
  const ERROR = 'error';
}

有没有一种干净的方法来停止 PHP 进程,直到驱动器被删除?

4

1 回答 1

2

EBS 的工作方式是,一旦卷被删除,您将不会再看到它。从逻辑上讲,没有理由拥有“已删除”状态。没有“软删除”或“取消删除”的概念,这需要“已删除”状态。

DescribeVolumes 响应中缺少卷将是 EBS API 层的工作方式:http: //docs.aws.amazon.com/AWSSDKforPHP/latest/#m=AmazonEC2/describe_volumes

在 Web 服务 SDK 级别,如果您尝试描述不存在的卷,EBS 将返回错误。由于我对 PHP 不熟悉,我不确定这在 PHP 中是如何翻译的。

一个猜测(来自从未写过一行 PHP 代码的人!)会是这样的:

do {
  $response = $ec2->describe_volumes($volumeId);
} while (! $response.isOk)

这应该使用 SDK 中的“ waiter ”基础设施来完成,而不是像您已经在为可用性做的那样在 while 循环中完成。

于 2013-09-19T17:32:50.093 回答