阿里云客户端aliyun-cli使用

阿里云CLI

阿里云命令行工具 CLI(Alibaba Cloud CLI)是使用 Go 语言编写,基于阿里云开放 API 建立的管理工具。借助此工具,您可以通过调用阿里云开放 API 来管理阿里云产品。该命令行工具与阿里云开放 API 一一对应,灵活性高且易于扩展。您可基于该命令行工具对阿里云原生 API 进行封装,扩展出您想要的功能。


安装

  • 下载安装包 (推荐)

    阿里云CLI工具下载、解压后即可使用,支持Mac, Linux, Windows平台(x64版本)。您可以将解压的aliyun可执行文件移至/usr/local/bin目录下,或添加到$PATH中。

    下载链接如下 (3.0.73):

  • 使用brew

    如果你的电脑上安装了 brew, 你可以使用它来安装阿里云命令行工具:

    brew install aliyun-cli

如果需要详细安装步骤或者编译安装步骤请访问官网文档 安装 CLI

配置

详细配置指引请访问官网 配置 CLI

在使用阿里云CLI之前,您需要配置调用阿里云资源所需的凭证信息、地域、语言等。

你可以运行aliyun configure命令进行快速配置

$ aliyun configure
Configuring profile 'default' in '' authenticate mode...
Access Key Id []: AccessKey ID
Access Key Secret []: AccessKey Secret
Default Region Id []: cn-hangzhou
Default Output Format [json]: json (Only support json))
Default Language [zh|en] en:
Saving profile[akProfile] ...Done.

其中,
Access ID:RAM子账号的ID
Access Secret:RAM子账号的Secret
Region ID:阿里云账号中镜像仓库的区位(如,cn-hangzhou)
Language:zh

启用zsh/bash自动补全

  • 使用aliyun auto-completion命令开启自动补全,目前支持zsh/bash

  • 使用aliyun auto-completion --uninstall命令关闭自动补全

多账号环境

如果你需要让不同的命令执行到不同的账号上,或者频繁切换账号,则最好使用profile来配置账号。

格式如下:

aliyun configure --profile 账号

其中profile后面的参数只是一个描述字段,为了规范,建议配置为账号名。

配置好以后,之后每次执行命令需要带一个 --profile 参数,来指定账号。

可以输入如下命令查看某个账号的信息:

aliyun configure list --profile 账号

使用阿里云CLI

这里是基础使用指引,如需要详细使用手册,请访问 这里

阿里云云产品的 OpenAPI 有 RPC 和 RESTful 两种风格,大部分产品使用的是RPC风格。不同风格的API的调用方法也不同。

您可以通过以下特点判断API风格:

  • API参数中包含Action字段的是RPC风格,需要PathPattern参数的是Restful风格。

  • 一般情况下,每个产品内,所有API的调用风格是统一的。

  • 每个API仅支持特定的一种风格,传入错误的标识,可能会调用到其他API,或收到“ApiNotFound”的错误信息。

调用RPC风格的API

阿里云CLI中RPC风格的API调用的基本结构如下:

aliyun <product> <operation> [--parameter1 value1 --parameter2 value2 ...]

代码示例:

aliyun rds DescribeDBInstances --PageSize 50
aliyun ecs DescribeRegions
aliyun rds DescribeDBInstanceAttribute --DBInstanceId xxxxxx

调用RESTful风格的API

部分阿里云产品如容器服务的OpenAPI为Restful风格,调用Restful风格的接口与调用RPC风格的接口方式不同。参考以下代码示例,调用RESTful API。

  • GET请求示例:

    aliyun cs GET /clusters
  • POST请求示例:

    aliyun cs POST /clusters --body "$(cat input.json)"
  • DELETE请求示例:

    aliyun cs DELETE /clusters/ce2cdc26227e09c864d0ca0b2d5671a07

获取帮助信息

阿里云CLI集成了一部分产品的API和参数列表信息, 您可以使用如下命令来获取帮助:

  • $ aliyun help: 获取产品列表

  • $ aliyun help <product>: 获取产品的API信息

    如获取ECS的API信息:$ aliyun help ecs

  • $ aliyun help <product> <apiName>: 获取API的调用信息

    如获取ECS的CreateInstance的信息: aliyun help ecs CreateInstance

阿里云CLI命令行工具 3.0.73

Usage:
  aliyun <product> <operation> [--parameter1 value1 --parameter2 value2 ...]

Flags:
  --mode               使用 `--mode {AK|StsToken|RamRoleArn|EcsRamRole|RsaKeyPair|RamRoleArnWithRoleName}` 指定认证方式
  --profile,-p         使用 `--profile <profileName>` 指定操作的配置集
  --language           使用 `--language [en|zh]` 来指定语言
  --region             使用 `--region <regionId>` 来指定访问大区
  --config-path        使用 `--config-path` 指定配置文件路径
  --access-key-id      使用 `--access-key-id <AccessKeyId>` 指定AccessKeyId
  --access-key-secret  使用 `--access-key-secret <AccessKeySecret>` 指定AccessKeySecret
  --sts-token          使用 `--sts-token <StsToken>` 指定StsToken
  --ram-role-name      使用 `--ram-role-name <RamRoleName>` 指定RamRoleName
  --ram-role-arn       使用 `--ram-role-arn <RamRoleArn>` 指定RamRoleArn
  --role-session-name  使用 `--role-session-name <RoleSessionName>` 指定RoleSessionName
  --private-key        使用 `--private-key <PrivateKey>` 指定RSA私钥
  --key-pair-name      使用 `--key-pair-name <KeyPairName>` 指定KeyPairName
  --read-timeout       使用 `--read-timeout <seconds>` 指定I/O超时时间(秒)
  --connect-timeout    使用 `--connect-timeout <seconds>` 指定请求连接超时时间(秒)
  --retry-count        使用 `--retry-count <count>` 指定重试次数
  --skip-secure-verify 使用 `--skip-secure-verify` 跳过https的证书校验 [不推荐使用]
  --expired-seconds    使用 `--expired-seconds <seconds>` 指定凭证过期时间
  --process-command    使用 `--process-command <ProcessCommand>` 指定外部程序运行命令
  --secure             使用 `--secure` 开关强制使用https方式调用
  --force              添加 `--force` 开关可跳过API与参数的合法性检查
  --endpoint           使用 `--endpoint <endpoint>` 来指定接入点地址
  --version            使用 `--version <YYYY-MM-DD>` 来指定访问的API版本
  --header             使用 `--header X-foo=bar` 来添加特定的HTTP头, 可多次添加
  --body               使用 `--body $(cat foo.json)` 来指定在RESTful调用中的HTTP包体
  --pager              使用 `--pager` 在访问分页的API时合并结果分页
  --output,-o          使用 `--output cols=Field1,Field1 [rows=jmesPath]` 使用表格方式打印输出
  --waiter             使用 `--waiter expr=<jmesPath> to=<value>` 来轮询调用OpenAPI,知道返回期望的值
  --dryrun             使用 `--dryrun` 在执行校验后打印请求包体,跳过实际运行
  --quiet,-q           使用 `--quiet` 关闭正常输出
  --help               打印帮助信息

Sample:
  aliyun ecs DescribeRegions

Products:
  sls                日志服务
  goodstech          视觉智能开放平台
  imageaudit         视觉智能开放平台
  gpdb               分析型数据库PostgreSQL版
  sales
  cloudauth          实人认证
  sts                访问控制
  jaq                移动安全
  imagerecog         视觉智能开放平台
  hpc                高性能计算 HPC
  cds                CodePipeline
  cas                证书服务
  green              内容安全
  objectdet          视觉智能开放平台
  ots                表格存储
  yundun-bastionhost 堡垒机
  fnf                FunctionFlow
  imageenhan         视觉智能开放平台
  smc                服务器迁移中心
  sas-api            态势感知
  ocr                视觉智能开放平台
  actiontrail        操作审计
  imageseg           视觉智能开放平台
  eci                Elastic Container Instances
  domain             域名
  ledgerdb           可信账本数据库
  agency             agency
  httpdns            HTTPDNS
  batchcompute       批量计算
  servicemesh        服务网格
  itaas              云投屏
  alikafka           消息队列 Kafka
  qualitycheck       智能对话分析服务
  dms-enterprise     数据管理
  pvtz               PrivateZone
  push               移动推送
  csb                云服务总线 CSB
  ons                消息队列 MQ
  petadata           HybridDB for MySQL
  kms                密钥管理服务
  ros                资源编排
  facebody           视觉智能开放平台
  cr                 容器镜像服务
  oos                运维编排服务
  ram                访问控制
  arms               业务实时监控服务 ARMS
  scdn               安全加速 SCDN
  ims                访问控制 身份管理
  resourcemanager    资源管理
  ess                弹性伸缩
  dm                 邮件推送
  chatbot            云小蜜
  bssopenapi
  cloudphoto         智能云相册
  nas                文件存储
  domain-intl        域名
  config             配置审计
  dts                数据传输
  ddospro            DDoS高防IP
  hbase              云数据库 HBase
  sae                轻量级分布式应用服务
  dds                云数据库 MongoDB 版
  elasticsearch      elasticsearch
  dcdn               全站加速
  cbn                云企业网
  ens                边缘节点服务
  r-kvstore          云数据库 Redis 版
  cms                云监控
  waf-openapi        Web应用防火墙
  cs                 容器服务
  ccc                云呼叫中心
  ddoscoo            新BGP高防IP
  polardb            云数据库 PolarDB 版
  slb                负载均衡
  cloudapi           API 网关
  drds               分布式关系型数据库服务 DRDS
  mts                媒体处理
  edas               企业级分布式应用服务EDAS
  cloudwf            云AP
  cdn                CDN
  alidns             云解析DNS
  aegis              服务器安全(安骑士)
  vod                视频点播
  vpc                专有网络VPC
  ecs                云服务器 ECS
  live               视频直播
  rds                云数据库RDS版
  emr                E-MapReduce
  iot                物联网套件

Use `aliyun --help` for more information.

使用--force参数

阿里云CLI集成了一部分云产品的元数据,在调用时会对参数的合法性进行检查。如果使用了一个元数据中未包含的API或参数会导致unknown apiunknown parameter错误。可以使用--force参数跳过API和参数检查,强制调用元数据列表外的API和参数,如:

aliyun newproduct --version 2018-01-01 --endpoint newproduct.aliyuncs.com --param1 ... --force

在使用--force参数时,必须指定以下两个参数:

  • --version: 指定API的版本,你可以在API文档中找到版本号,如ECS的版本号是2014-05-26

  • --endpoint: 指定产品的接入地址。请参考各产品的API文档。

使用--output参数

阿里云产品的查询接口会返回json结构化数据,不方便阅读。例如:

aliyun ecs DescribeInstances

执行以上命令将得到以下json结果:

{
 "PageNumber": 1,
 "TotalCount": 2,
 "PageSize": 10,
 "RequestId": "2B76ECBD-A296-407E-BE17-7E668A609DDA",
 "Instances": {
   "Instance": [
     {
       "ImageId": "ubuntu_16_0402_64_20G_alibase_20171227.vhd",
       "InstanceTypeFamily": "ecs.xn4",
       "VlanId": "",
       "InstanceId": "i-12345678912345678123",
       "Status": "Stopped",
       //omit some fields
     },
     Instance": [
     {
       "ImageId": "ubuntu_16_0402_64_20G_alibase_20171227.vhd",
       "InstanceTypeFamily": "ecs.xn4",
       "VlanId": "",
       "InstanceId": "i-abcdefghijklmnopqrst",
       "Status": "Running",
       //omit some fields
     },
   ]
 }
}

可以使用--output参数提取结果中感兴趣的字段,并进行表格化输出。例如:

aliyun ecs DescribeInstances --output cols=InstanceId,Status rows=Instances.Instance[]

执行以上命令将得到以下形式的结果:

InstanceId             | Status
-----------------------|--------
i-12345678912345678123 | Stopped
i-abcdefghijklmnopqrst | Running

在使用--output参数时,必须指定以下子参数:

  • cols: 表格的列名,需要与json数据中的字段相对应。如ECS DescribeInstances 接口返回结果中的字段InstanceId 以及 Status

可选子参数:

  • rows: 通过 jmespath 查询语句来指定表格行在json结果中的数据来源。

使用效果

阿里云客户端aliyun-cli使用

# 根据实例名查实例相关信息

 $ ecsn(){echo;aliyun ecs DescribeInstances --RegionId cn-beijing --InstanceName "$@" -o cols=InstanceName,InstanceId,VpcAttributes.PrivateIpAddress.IpAddress,ImageId,InstanceType,Cpu,GPUSpec,Memory,KeyPairName,Status rows=Instances.Instance;};ecsn alibjh-chegva-000001-vm

InstanceName            | InstanceId             | VpcAttributes.PrivateIpAddress.IpAddress | ImageId                | InstanceType           | Cpu | GPUSpec     | Memory | KeyPairName | Status
------------            | ----------             | ---------------------------------------- | -------                | ------------           | --- | -------     | ------ | ----------- | ------
alibjh-chegva-000001-vm | i-2zec3mp4hrseaabc9fbx | [10.13.11.110]                           | m-2zei7oryfhjchegvf4zu | ecs.gn6e-c12g1.3xlarge | 12  | NVIDIA V100 | 94208  | f99         | Running

参考:

anzhihe 安志合个人博客,版权所有 丨 如未注明,均为原创 丨 转载请注明转自:https://chegva.com/4353.html | ☆★★每天进步一点点,加油!★★☆ | 

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注