本文会介绍下通过阿里云CLI,在ECS实例内以命令行的形式对阿里云各云产品的OpenApi调用。
什么是阿里云CLI
阿里云命令行工具(Alibaba Cloud Command Line Interface)是在Alibaba Cloud SDK for Go之上构建的开源工具。您可以在命令行Shell中,使用aliyun命令与阿里云服务进行交互,管理您的阿里云资源。详见什么是阿里云CLI。
安装指南
支持多个系统安装:
linux:在Linux上安装阿里云CLI。
windows:在Windows上安装阿里云CLI。
macOS:在macOS上安装阿里云CLI。
配置凭证及调试
在使用阿里云CLI之前,您需要配置调用阿里云资源所需的凭证信息、地域、语言等。CLI支持多种凭证类型,如AccessKey、STS Token、RamRoleArn和EcsRamRole,详细参考非交互式配置。
由于在OOS生态下大部分为自动化场景,本文着重介绍下较易上手的,EcsRamRole凭证类型的非交互配置。
首先明确凭证的权限来源,那么在自动化场景下一般我们采用实例的RAM角色作为权限来源,需先为目标实例授予实例RAM角色,授予方式可参考授予实例RAM角色。
假设我们给一台Linux实例授予了名为InstanceRole的RAM角色。
完成授予后,我们则登录到实例终端,来安装并配置CLI。安装及配置脚本如下。
mkdir -p $HOME/aliyun
cd $HOME/aliyun
wget https://aliyuncli.alicdn.com/aliyun-cli-linux-3.0.51-amd64.tgz
tar xzvf aliyun-cli-linux-3.0.51-amd64.tgz
cp $HOME/aliyun/aliyun /usr/bin/
ramRoleName="InstanceRole"
regiond_id=cn-zhangjiakou
aliyun configure set --profile ecsRamRoleProfile --mode EcsRamRole --region $regiond_id --ram-role-name $ramRoleName
上面脚本先是完成CLI安装,然后将region配置为cn-zhangjiakou,并且将已授予实例的RAM角色名InstanceRole设为CLI权限来源。
那么此时可以测试下CLI ,先可以调用该region下OOS的API,首先查询下OOS都有哪些可用API,返回结果如图,此时表示CLI配置已生效。
aliyun OOS
API调用参考
我们可以通过 aliyun oos ApiName --help 查询API入参方式,比如查询ListTemplates的用法。
aliyun oos ListTemplates --help
接着我们试着根据API要求,调用OOS的ListTemplates API来查询模版情况,可看到返回模版信息如下。
aliyun OOS ListTemplates --MaxResults 10
也可调用CreateTemplate创建OOS模版,可创建JSON/YAML格式的模版,模版内容及命令如下。
FormatVersion: OOS-2019-06-01
Description: Views the ECS instances by specifying instance status.
Parameters:
regionId:
Description: The ID of region.
Type: String
Default: '{{ ACS::RegionId }}'
status:
Description: The ECS instances status for query instances.
Type: String
Tasks:
- Name: describeInstances
Action: 'ACS::ExecuteAPI'
Description: Views the ECS instances by specifying instance status.
Properties:
Service: ECS
API: DescribeInstances
Parameters:
RegionId: '{{ regionId }}'
Status: '{{ status }}'
Outputs:
instanceIds:
Type: List
ValueSelector: 'Instances.Instance[].InstanceId'
Outputs:
instanceIds:
Type: List
Value: '{{ describeInstances.instanceIds }}'
{
"FormatVersion": "OOS-2019-06-01",
"Description": "Views the ECS instances by specifying instance status.",
"Parameters": {
"regionId": {
"Description": "The ID of region.",
"Type": "String",
"Default": "{{ ACS::RegionId }}"
},
"status": {
"Description": "The ECS instances status for query instances.",
"Type": "String"
}
},
"Tasks": [
{
"Name": "describeInstances",
"Action": "ACS::ExecuteAPI",
"Description": "Views the ECS instances by specifying instance status.",
"Properties": {
"Service": "ECS",
"API": "DescribeInstances",
"Parameters": {
"RegionId": "{{ regionId }}",
"Status": "{{ status }}"
}
},
"Outputs": {
"instanceIds": {
"Type": "List",
"ValueSelector": "Instances.Instance[].InstanceId"
}
}
}
],
"Outputs": {
"instanceIds": {
"Type": "List",
"Value": "{{ describeInstances.instanceIds }}"
}
}
}
#给json/yaml模版内容加上单引号''
content='{ "FormatVersion": "OOS-2019-06-01", "Description": "Views the ECS instances by specifying instance status.", "Parameters": { "regionId": { "Description": "The ID of region.", "Type": "String", "Default": "{{ ACS::RegionId }}" }, "status": { "Description": "The ECS instances status for query instances.", "Type": "String" } }, "Tasks": [ { "Name": "describeInstances", "Action": "ACS::ExecuteAPI", "Description": "Views the ECS instances by specifying instance status.", "Properties": { "Service": "ECS", "API": "DescribeInstances", "Parameters": { "RegionId": "{{ regionId }}", "Status": "{{ status }}" } }, "Outputs": { "instanceIds": { "Type": "List", "ValueSelector": "Instances.Instance[].InstanceId" } } } ], "Outputs": { "instanceIds": { "Type": "List", "Value": "{{ describeInstances.instanceIds }}" } } }'
aliyun oos CreateTemplate --TemplateName template01 --Content "$content"
通过StartExecution为已存在的我的模版创建执行。
regionId="cn-zhangjiakou" # 资源执行的地域
status="Running"
parameters="{
\"regionId\": \"$regionId\",
\"status\": \"$status\"
}"
aliyun oos StartExecution --TemplateName template01 --Parameters "${parameters}"
通过StartExecution为已有公共模版创建执行。
regionId="cn-zhangjiakou" # 执行的地域
securityGroupId="sg-8vb*********xwvnuqy6" # 请准备安全组参数用于创建临时实例
vSwitchId="vsw-8*******0z9ykpzv01c" # 请准备交换机参数用于创建临时实例
instanceType="ecs.g5.large" # 临时实例的实例规格
sourceImageId="centos_7_8_x64_20G_alibase_20200622.vhd" #要更新的源镜像
commandType="RunShellScript" # 脚本类型
commandContent='ls\npwd\n'
parameters="{
\"securityGroupId\": \"$securityGroupId\",
\"commandType\": \"$commandType\",
\"sourceImageId\": \"$sourceImageId\",
\"regionId\": \"$regionId\",
\"vSwitchId\": \"$vSwitchId\",
\"instanceType\": \"$instanceType\",
\"commandContent\": \"$commandContent\"
}"
aliyun oos StartExecution --TemplateName ACS-ECS-UpdateImage --Parameters "${parameters}"
总结
相信聪明的您早就发现了,只要给该实例授予的RAM 角色,并且该角色具备相关云产品OpenAPI的操作权限,则可通过CLI在命令行调用阿里云各种OpenAPI,所以我们也可以通过云助手执行CLI命令,在OOS中编排CLI执行也完全没问题,编写脚本时,只要把它当成普通的命令一样用就可以。
- 本页导读 (0)