背景
公司使用了多个云商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