通过API开启华为云弹性伸缩
由于业务需要,客户使用高峰期需要临时加一台服务器,以顶住线上服务器压力,该脚本由此诞生,在检测到线上用户排队数大于某个值时,直接调用该脚本即可
弹性伸缩启用脚本
#!/bin/bash
#钉钉群机器人,用于机器弹性拉起状态通知
dingtalk="https://oapi.dingtalk.com/robot/send?access_token=XXXXXXXXXXX"
#获取Token
username="IAM用户名"
password="IAM用户密码"
name="主账号"
#区域,这里以北京一为例
project="cn-north-1"
tokenurl="https://iam.cn-north-1.myhuaweicloud.com/v3/auth/tokens"
data='{
"auth": {
"identity": {
"methods": [
"password"
],
"password": {
"user": {
"name": "'$username'",
"password": "'$password'",
"domain": {
"name": "'$name'"
}
}
}
},
"scope": {
"project": {
"name": "'$project'"
}
}
}
}'
tokenresponse=$(curl -s -X POST -i -H "Content-Type: application/json" -d "$data" $tokenurl)
x_subject_token=$(echo "$tokenresponse" | awk -F ': ' '/X-Subject-Token/ { print $2 }')
echo "$x_subject_token"
#启用弹性伸缩策略
qiyongurl="https://as.cn-north-1.myhuaweicloud.com/autoscaling-api/v1[项目ID]/scaling_policy/[伸缩策略ID]/action"
data1='{
"action": "resume"
}'
auth_token="$x_subject_token"
qiyongresponse=$(curl -s -X POST -i -H "Content-Type: application/json" -H "X-Auth-Token: $auth_token" -d "$data1" $qiyongurl)
status_code=$(echo "$qiyongresponse" | awk '/HTTP/ {print $2}')
#判断返回的状态码是否为204
if [ $status_code -eq 204 ]
then
echo "弹性伸缩策略启用成功"
curl $dingtalk \
-H 'Content-Type: application/json' \
-d '{"msgtype": "text","text": {"content":"弹性伸缩策略启用成功"}}'
else
echo "弹性伸缩策略启用失败"
curl $dingtalk \
-H 'Content-Type: application/json' \
-d '{"msgtype": "text","text": {"content":"弹性伸缩策略启用失败"}}'
exit 1
fi
#立即执行弹性伸缩策略
data2='{
"action": "execute"
}'
auth_token="$x_subject_token"
zhixingresponse=$(curl -s -X POST -i -H "Content-Type: application/json" -H "X-Auth-Token: $auth_token" -d "$data2" $qiyongurl)
status_code1=$(echo "$zhixingresponse" | awk '/HTTP/ {print $2}')
if [ $status_code1 -eq 204 ]
then
echo "弹性算法机器资源请求成功"
curl $dingtalk \
-H 'Content-Type: application/json' \
-d '{"msgtype": "text","text": {"content":"弹性算法机器资源请求成功,请关注稍后弹性算法机器是否启用"}}'
else
echo "弹性算法机器资源请求失败"
curl $dingtalk \
-H 'Content-Type: application/json' \
-d '{"msgtype": "text","text": {"content":"弹性算法机器资源请求失败"}}'
exit 1
fi
#停用弹性伸缩策略(由于弹性策略设置了拉起时间,为了避免自动触发,故关闭该弹性策略)
data3='{
"action": "pause"
}'
auth_token="$x_subject_token"
stopresponse=$(curl -s -X POST -i -H "Content-Type: application/json" -H "X-Auth-Token: $auth_token" -d "$data3" $qiyongurl)
status_code2=$(echo "$stopresponse" | awk '/HTTP/ {print $2}')
if [ $status_code2 -eq 204 ]
then
echo "弹性资源请求完毕后,伸缩策略停用成功"
curl $dingtalk \
-H 'Content-Type: application/json' \
-d '{"msgtype": "text","text": {"content":"弹性资源请求完毕后,伸缩策略停用成功"}}'
else
echo "弹性伸缩策略停用失败"
curl $dingtalk \
-H 'Content-Type: application/json' \
-d '{"msgtype": "text","text": {"content":"弹性伸缩策略停用失败"}}'
exit 1
fi
#参考文档
https://support.huaweicloud.com/api-as/as_06_0410.html
https://console.huaweicloud.com/apiexplorer/#/openapi/AS/doc?api=ResumeScalingPolicy
https://console.huaweicloud.com/iam/?region=cn-north-4&locale=zh-cn#/mine/apiCredential