检测 VM 中的云类型

Posted

技术标签:

【中文标题】检测 VM 中的云类型【英文标题】:Detect Cloud Type in VM 【发布时间】:2022-01-22 01:19:49 【问题描述】:

在一个解决方案中,我们计划将多个云(AWS、Azure 和 GCP)作为解决方案。相同的代码将部署在不同云中运行的多个虚拟机中。

在很多情况下,我们需要检测云并相应地编写代码。例如在 AWS 上运行时使用 AWS S3 SDK,在 Azure 上运行时使用 Azure Blob SDK。

在 AWS 中,我们可以点击元数据 URL 来检测 (http://169.254.169.254/latest/meta-data/) 是否是 AWS。

我想知道是否有任何方法可以检测 VM 内的云提供商(例如通过环境变量或元数据 URL 或任何其他方式)。

首选代码可以在 python 或 shell 脚本中。

【问题讨论】:

使用“azure vm 元数据”的简单搜索将我引向这个:docs.microsoft.com/en-us/azure/virtual-machines/linux/… 对于谷歌:***.com/questions/30911775/… 哪种语言?哪个云?我写了一个库来做到这一点。 @erik-oppedijk 的答案很接近,但有几个因素需要考虑。有三种方法: 1) cloud-init 文件。 2) 系统设备文件。 3) 元数据。元数据可以被禁用,如果其他两个失败或不可用,应该是最后检查的项目。对于大多数云供应商而言,此文件包含您想要的信息。寻找 cloud-name:/run/cloud-init/instance-data.json @JohnHanley shell 脚本,python 和 java。 使用这些详细信息编辑您的问题。但是,请将您的问题限制在一种语言和一组云上。我编写的代码是在 .NET 中,并且太大而无法作为答案发布。这个过程很容易理解,实现需要相当多的代码。对于 shell 脚本来说可能太复杂了,但是 shell 脚本可以调用程序或 Python 脚本。 【参考方案1】:

结合 CSharpRocks 和 Dany L 的答案:

天蓝色:

http://169.254.169.254/metadata/instance?api-version=2021-02-01

谷歌

http://metadata.google.internal/computeMetadata/v1 带标题:Metadata-Flavor: Google

网址解析为:http://169.254.169.254/

亚马逊

http://169.254.169.254/latest/meta-data/

文档

不要为这些请求使用代理服务器 https://docs.microsoft.com/en-us/azure/virtual-machines/linux/instance-metadata-service?tabs=windows https://cloud.google.com/compute/docs/metadata/overview https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html

【讨论】:

以上是关于检测 VM 中的云类型的主要内容,如果未能解决你的问题,请参考以下文章

js中的数据类型,以及如何检测数据类型

JS中的数据类型检测

具有另一个复杂类型的字段的复杂类型中的空检测

从负载平衡的云服务中删除 Azure VM 实例

如何检测 Django 中的浏览器类型?

数据类型及类型检测