使用 aws-sdk 终止实例后删除子网时发生 DependencyViolation
Posted
技术标签:
【中文标题】使用 aws-sdk 终止实例后删除子网时发生 DependencyViolation【英文标题】:DependencyViolation occurred when I delete subnet after terminate instance using aws-sdk 【发布时间】:2019-12-14 21:29:42 【问题描述】:我使用 AWS-SDK php 控制 AWS 环境。 当我删除所有测试环境时,问题就出现了。
我阅读了document,并且我已经知道如果我在目标子网中有正在运行的实例,就会发生DependencyViolation
。
所以我先终止了正在运行的实例,然后我尝试删除子网,但出现DependencyViolation
错误。
我使用这段代码尝试了这些序列。
<?php
$options = [
/**
* information about region, version ..
*/
];
$client = new Ec2Client($options);
$promise = $client->terminateInstancesAsync([
'InstanceIds' => ['instance-id'],
])->then(function ($result) use ($client)
return $client->deleteSubnetAsync([
'SubnetId' => 'subnet-id',
]);
);
我猜错误的原因是“实例没有完全终止,但删除子网操作正在运行”。
但我不知道在没有DependencyViolation
的情况下删除子网该怎么办。
【问题讨论】:
【参考方案1】:我可以在使用terminateInstnaces
方法之后使用deleteSubnet
方法,而使用Waiters
没有任何错误。
我使用了这些代码。
$promise = $client->terminateInstancesAsync([
'InstanceIds' => ['instance-id'],
])->then(function ($result) use ($client)
$client->waitUntil('InstanceTerminated', [
'InstanceIds' => ['instance-id'],
]);
return $client->deleteSubnetAsync([
'SubnetId' => 'subnet-id',
]);
);
【讨论】:
以上是关于使用 aws-sdk 终止实例后删除子网时发生 DependencyViolation的主要内容,如果未能解决你的问题,请参考以下文章
Google Cloud Platform抢占实例:磁盘发生了什么?