使用“等待时间”方法检查是否删除了 EBS 存储


Using the WaitUntil method to check if EBS Storage is deleted

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

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

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

问题是没有将状态定义为已删除。下面仅给出可用选项

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

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

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 中的"服务员"基础结构来完成,而不是像你已经为可用性所做的那样在 while 循环中完成。