兼容多云商metadata-2021-11

背景

公司使用了多个云商aws、阿里云腾讯云 都有涉及
不少场景需要获取机器的公网ip、hostname这些基础信息
一般直接请求云商的meta-data接口

问题

怎样弄一个相对通用的获取meta-data的接口呢?

思路

没有使用的:机器初始化的时候就把这个标记打上;潜在的风险在于可能填错;; 因此,更倾向使用外部服务来获取相关信息
各个云商的meta-data接口又都是保留地址,一个个尝试等超时不够合理,看腾讯云的meta-data接口受到了启发

解决

每个云商都配置一个只对内网生效的域名,通过判断域名是否能正常解析来判断当前的机器在什么云商
即,通过配置内网生效的域名作为云商的标记,该配置在机器外,比在机器上的内部系统更靠谱

#!/bin/bash
##dev by HuHuCat
##aws自带内网域名 instance-data,不用配置
if curl instance-data -o /dev/null &>/dev/null;then
    echo "aws cloud"
    EC2_REGION=`curl -s http://instance-data/latest/dynamic/instance-identity/document|grep region|awk -F\" '{print $4}' `
    INSTANCE_ID=`curl -s http://instance-data/latest/meta-data/instance-id`
    NAME=`aws ec2 describe-tags --filters "Name=resource-id,Values=$INSTANCE_ID" "Name=key,Values=Name" --region $EC2_REGION --output=text | cut -f5`

##腾讯云自带内网域名 metadata.tencentyun.com,不用配置
elif curl metadata.tencentyun.com -o /dev/null &>/dev/null;then
    echo "tencent cloud"
    NAME=`curl http://metadata.tencentyun.com/latest/meta-data/instance-name`

##因为目前只有三个云商,else里面直接判断为阿里云,偷懒
else
    echo "ali cloud"
    NAME=`curl http://100.100.100.200/latest/meta-data/hostname`
fi

echo $NAME
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,959评论 6 342
  • 问:Sql 注入无回显的情况下,利用 DNSlog,mysql 下利用什么构造代码,mssql 下又如何? 答: ...
    唐小风7阅读 771评论 0 2
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,038评论 2 89
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,969评论 19 139
  • 方案背景 客户主要生产业务在阿里云,运行在阿里云侧业务应用, MySQL, Redis, MongoDB,现在需要...
    行者深蓝阅读 2,415评论 0 0