Azure 删除空闲的资源

网友投稿 278 2022-10-02

Azure 删除空闲的资源

介绍

Azure 云的设计和其他云厂商有些区别,Azure 云中的每个组件都是一个资源,都是单独存在的,比如磁盘、网卡、安全组、公网IP 等等,在我们删除 VM 的时候,相关的资源并不会连带删除,如果忘记删除,账户中会产生很多没有使用的资源,但是这些资源有的是收费的,比如磁盘、公网 IP 等,这样就会造成不必要的损失,我们可以在 portal 里面去手动删除没有使用的资源,但是如果这样没有使用的资源众多的话,那删除起来会很麻烦,所以我们使用脚本进行删除。

删除未附加的磁盘

删除 Azure 中的虚拟机 (VM) 时,默认不删除附加到 VM 的任何磁盘。 此功能可帮助防止意外删除 VM 而导致的数据丢失。 删除 VM 后,可继续支付未附加的磁盘。 本文演示了如何查找并删除任何未附加的磁盘,以及如何减少不必要的成本。

以下脚本通过检查 ManagedBy 属性的值查找未附加的托管磁盘。 有托管磁盘附加到 VM 时,ManagedBy 属性包含 VM 的资源 ID。 未附加托管磁盘时,ManagedBy 属性为 null。 该脚本检查 Azure 订阅中的所有托管磁盘。 当脚本找到一个 ManagedBy 属性设置为 null 的托管磁盘时,脚本将确定该磁盘为未附加。

重要 首先,通过将 deleteUnattachedDisks 变量设置为 0 来运行脚本。 通过此操作可查找并查看所有未附加的托管磁盘。 在检查所有未附加磁盘后,再次运行脚本并将 deleteUnattachedDisks 变量设置为 1。 通过此操作可删除所有未附加的托管磁盘。

在 CloudShell 里面执行下面的命令即可:

unattachedDiskIds=$(az disk list --query '[?managedBy==`null`].[id]' -o tsv) for id in ${unattachedDiskIds[@]} do echo "Deleting unattached Managed Disk with Id: "$id az disk delete --ids $id --yes echo "Deleted unattached Managed Disk with Id: "$id done

删除未连接的 NIC

在 Azure 中删除虚拟机 (VM) 时,网络接口卡 (NIC) 不会默认删除。 如果在创建多个 VM 后又将其删除,则未使用过的 NIC 会继续使用内部 IP 地址租约。 创建其他 VM NIC 时,这些 NIC 可能无法在子网的地址空间中获得 IP 租约。

NIC 的 virtualMachine 属性存储该 NIC 连接到的 VM 的 ID 和资源组。 以下脚本循环访问某个订阅中的所有 NIC,检查 virtualMachine 属性是否为 null。 如果该属性为 null,则 NIC 未连接到 VM。

若要查看所有未连接的 NIC,强烈建议先在将 deleteUnattachedNics 变量设置为 0 的情况下运行脚本。 若要在查看列表输出后删除所有未连接的 NIC,请在将 deleteUnattachedNics 设置为 1 的情况下运行脚本。

在 CloudShell 里面执行下面的命令即可:

unattachedNicsIds=$(az network nic list --query '[?virtualMachine==`null`]|[?privateEndpoint==null].[id]' -o tsv) for id in ${unattachedNicsIds[@]} do echo "Deleting unattached NIC with Id: "$id az network nic delete --ids $id echo "Deleted unattached NIC with Id: "$id done

删除未关联的公共 IP

也不用担心,如果公共 IP 已经关联到其他资源,我们是无法直接删掉的。

unattachedPubIPs=$(az network public-ip list --query '[?ipConfiguration==null]|[?natGateway==null].[id]' -o tsv) for id in ${unattachedPubIPs[@]} do echo "Deleting unattached PubIP with Id: "$id az network public-ip delete --ids $id echo "Deleted unattached PubIP with Id: "$id done

删除未关联的安全组

如果安全组已经关联到其他资源(如网络接口、子网),我们是无法直接删掉的。

unattachedNSGs=$(az network nsg list --query '[?networkInterfaces[0].id==null]|[?subnets[0].id==null].[id]' -o tsv) for id in ${unattachedNSGs[@]} do echo "Deleting unattached NSG with Id: "$id az network nsg delete --ids $id echo "Deleted unattached NSG with Id: "$id done

不需要的资源清理一下,账户立刻就变得干净了,一些可以复用的资源,建议不要每个 VM 都创建一个,比如安全组,一类的服务器可以使用一个安全组,既干净了,成本也节省了。

#

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:深入理解DevOps+微服务框架
下一篇:OpenStack 对接 Ceph 环境可以创建卷但不能挂载卷的问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~