美文网首页
兼容多云商metadata-2021-11

兼容多云商metadata-2021-11

作者: 貓叔 | 来源:发表于2021-11-17 15:29 被阅读0次

背景

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

相关文章

网友评论

      本文标题:兼容多云商metadata-2021-11

      本文链接:https://www.haomeiwen.com/subject/cfeltrtx.html