使用WaitUntil方法检查是否删除了EBS存储

时间:2013-09-19 15:10:09

标签: php amazon-ec2 amazon-ebs

我正在使用亚马逊提供的最新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进程?

1 个答案:

答案 0 :(得分:2)

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

DescribeVolumes响应中没有卷将是如何在EBS API层工作的: http://docs.aws.amazon.com/AWSSDKforPHP/latest/#m=AmazonEC2/describe_volumes

在Web Service SDK级别,如果您尝试描述不存在的卷,则EBS将返回错误。由于我缺乏熟悉的PHP,我不确定如何在PHP中进行翻译。

猜测(来自那些从未编写过PHP代码行的人!)就像是:

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

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