阿里云CLI(Command Line Interface)是一种命令行工具,允许用户在终端或命令行界面调用阿里云API,来创建、配置、管理阿里云云资源。本文主要介绍如何使用阿里云CLI调用ECS API来创建和管理ECS实例的方法及其常用示例。
关于阿里云CLI的详细信息,请参见什么是阿里云CLI。
准备工作
由于阿里云账号(主账号)拥有资源的所有权限,其AccessKey一旦泄露风险巨大,所以建议您使用满足最小化权限需求的RAM用户的AccessKey。获取方法请参见创建AccessKey。
给RAM用户授予操作云服务器ECS和专有网络VPC相关资源的权限。本文提供的示例代码需要创建实例、VPC、交换机等资源,建议授予以下权限:
云产品
授予权限
专有网络VPC
本示例选择系统策略:AliyunVPCFullAccess
云服务器ECS
本示例选择系统策略:AliyunECSFullAccess
安装和配置CLI。调试使用阿里云CLI前,您需要先安装阿里云CLI。阿里云CLI提供了Windows、Linux和macOS三种操作系统下的安装服务,请根据您使用设备的操作系统选择:
安装CLI。
配置CLI。
配置调用阿里云资源所需的身份凭证信息、服务请求地域等。具体配置,请参见配置身份凭证。
如果您只是用于临时调试,不需要安装阿里云CLI,您可使用阿里云提供的云命令行Cloud Shell。更多信息,请参见什么是云命令行?。
创建ECS实例
创建ECS实例时,有很多必填参数,包括交换机ID、安全组、镜像等。您可以传入已经准备好的资源ID,或者调用以下OpenAPI创建对应资源。
创建VPC。
VPC是一种专有的云上私有网络,允许用户在公共云上配置和管理一个逻辑隔离的网络区域。
API
参数
示例取值
RegionId
地域:cn-hangzhou
CidrBlock
VPC网段:192.168.0.0/16
创建交换机。
交换机是一种在虚拟化环境中使用的网络交换设备,它模拟了物理交换机的功能,使虚拟机(VMs)之间以及虚拟机与物理网络之间可以进行通信。
API
参数
示例取值
RegionId
地域:cn-hangzhou
ZoneId
可用区:cn-hangzhou-i
VpcId
VPC ID:vpc-bp1aag0sb9s4i92i3****
CidrBlock
交换机网段:192.168.0.0/24
创建安全组。
安全组是一种虚拟防火墙,能够控制ECS实例的出入方向流量。
API
参数
示例取值
RegionId
地域:cn-hangzhou
VpcId
VPC ID:vpc-bp1aag0sb9s4i92i3****
给安全组添加入防护规则。
API
参数
示例取值
RegionId
地域:cn-hangzhou
SecurityGroupId
安全组ID:sg-bp1esyhwfbqeyudt****
IpProtocol
协议:tcp
SourceCidrIp
源CIDR:0.0.0.0/0
PortRange
端口范围:
Linux实例:22/22
Windows实例:3389/3389
创建ECS实例。
使用ECS,您可以快速部署和运行应用程序,灵活调整资源以应对业务变化,同时享受高性能、高安全性和低成本的计算能力,适用于网站托管、应用开发、数据处理等多种场景。
API
参数
示例取值
RegionId
地域:cn-hangzhou
ImageId
镜像:使用Alibaba Cloud Linux镜像aliyun_3_x64_20G_alibase_20240819.vhd
InstanceType
实例规格: ecs.e-c1m1.large
SecurityGroupId
安全组ID:sg-bp1esyhwfbqeyudt****
VSwitchId
交换机ID:vsw-bp1nzprm8h7mmnl8t****
InstanceName
实例名称:ecs_cli_demo
InstanceChargeType
付费方式:实例按照按量付费的方式PostPaid
说明您需要确保账号余额能够完成支付。
PASSWORD
登录密码:******
InternetMaxBandwidthOut
公网出带宽最大值。若大于 0,则自动为实例分配公网 IP。
SystemDisk.Category
系统盘的云盘种类:cloud_essd
SystemDisk.Size
系统盘的大小:40 GiB
完整的示例代码如下:
示例代码主要展示了CLI的使用方式。反复执行该脚本会导致VPC、交换机和安全组等资源的重复创建,从而可能引发资源浪费。因此,请务必仔细审阅并结合业务逻辑优化代码。
#!/bin/bash
# 配置阿里云CLI使用的AccessKey和SecretKey
# 注意:实际使用时,请确保已通过环境变量或配置文件安全地设置了AccessKey和SecretKey
# 1. 设置变量
INSTANCE_NAME="ecs_cli_demo"
#2. 安装jq工具
echo "正在安装依赖工具jq..."
yum install jq
sleep 3
# 3. 创建VPC、VSwitch、SecurityGtoup
echo "正在创建VPC..."
VpcId=$(aliyun vpc CreateVpc --RegionId cn-hangzhou --CidrBlock 192.168.0.0/16 | jq -r .VpcId)
aliyun vpc DescribeVpcAttribute --RegionId cn-hangzhou --VpcId ${VpcId} --waiter expr='Status' to=Available > /dev/null 2>&1
echo "正在创建VSwitch..."
VSwitchId=$(aliyun vpc CreateVSwitch --CidrBlock 192.168.0.0/24 --VpcId ${VpcId} --ZoneId=cn-hangzhou-i | jq -r .VSwitchId)
echo "正在创建SecurityGtoup..."
SecurityGroupId=$(aliyun ecs CreateSecurityGroup --RegionId cn-hangzhou --VpcId ${VpcId} | jq -r .SecurityGroupId)
aliyun ecs AuthorizeSecurityGroup --RegionId cn-hangzhou --SecurityGroupId ${SecurityGroupId} --IpProtocol tcp --SourceCidrIp 0.0.0.0/0 --PortRange 22/22 > /dev/null 2>&1
read -s -P "Input Your Password:" PASSWORD
echo
echo "PASSWORD OK."
# 4. 执行创建ECS实例的命令
echo "正在创建ECS实例..."
INSTANCE_ID_RAW=$(aliyun ecs RunInstances \
--RegionId cn-hangzhou \
--ImageId aliyun_3_x64_20G_alibase_20240819.vhd \
--InstanceType ecs.e-c1m1.large \
--SecurityGroupId ${SecurityGroupId} \
--VSwitchId ${VSwitchId} \
--InstanceName $INSTANCE_NAME \
--InstanceChargeType PostPaid \
--InternetMaxBandwidthOut 1 \
--Password $PASSWORD \
--SystemDisk.Category cloud_essd \
--SystemDisk.Size 40)
# 5. 提取InstanceId,用于后续打印状态
INSTANCE_ID=$(echo "$INSTANCE_ID_RAW" | jq -r '.InstanceIdSets.InstanceIdSet[]')
# 6. 休息20秒,等待ECS创建中...
echo "等待ECS创建中..."
sleep 20
# 7. 查询ECS状态
echo "查询ECS状态..."
INSTANCE_ID_QUOTED=$(printf '"%s"' "$INSTANCE_ID")
aliyun ecs DescribeInstances \
--RegionId cn-hangzhou \
--InstanceIds "[${INSTANCE_ID_QUOTED}]" \
--output cols=InstanceId,InstanceName,InstanceType,ImageId,Status rows=Instances.Instance[]
创建Shell脚本,并运行,预期结果如下:
连接实例
通过SSH方式登录ECS实例,就可以进行部署业务、搭建应用等操作。
获取实例的公网IP信息。
调用DescribeInstances,通过
<实例ID>
获取实例的公网IP信息。请求示例
aliyun ecs DescribeInstances \ --RegionId cn-hangzhou \ --InstanceIds '["<实例ID>"]'
返回示例
参数PublicIpAddresses为实例的公网IP信息。
连接ECS实例。
ssh <用户名>@<公网IP>
释放资源
当您不再需要所创建的资源时,可以调用以下OpenAPI接口以释放该资源。
根据您的实际需求,选择相应的OpenAPI释放资源 。本示例释放上述步骤创建的所有资源。
释放ECS实例
API
参数
示例取值
RegionId
地域:cn-hangzhou
InstanceId
实例 ID:i-bp17f3kzgtzzj91r****
删除安全组
API
参数
示例取值
RegionId
地域:cn-hangzhou
SecurityGroupId
安全组ID:sg-bp1esyhwfbqeyudt****
删除交换机
API
参数
示例取值
RegionId
地域:cn-hangzhou
VSwitchId
交换机ID:vsw-bp1nzprm8h7mmnl8t****
删除VPC
API
参数
示例取值
RegionId
地域:cn-hangzhou
VpcId
VPC ID:vpc-bp1aag0sb9s4i92i3****
示例代码如下:
#!/bin/bash
# 定义要释放的资源信息
INSTANCE_ID='ecs_cli_demo' # ECS实例ID
SECURITY_GROUP_ID='sg-bp1esyhwfbqeyudt****' # 安全组ID
VSWITCH_ID='vsw-bp1nzprm8h7mmnl8t****' # VSwitchID
VPC_ID='vpc-bp1aag0sb9s4i92i3****' # VPC ID
REGION='cn-hangzhou' # 区域
echo "正在释放资源..."
# 删除实例
aliyun ecs DeleteInstance \
--region ${REGION} \
--InstanceId ${INSTANCE_ID}
# 删除安全组
aliyun ecs DeleteSecurityGroup \
--region ${REGION} \
--RegionId ${REGION} \
--SecurityGroupId ${SECURITY_GROUP_ID}
# 删除 VSwitch
aliyun vpc DeleteVSwitch \
--region ${REGION} \
--RegionId ${REGION} \
--VSwitchId ${VSWITCH_ID}
# 删除 VPC
aliyun vpc DeleteVpc \
--region ${REGION} \
--RegionId ${REGION} \
--VpcId ${VPC_ID}
echo "释放完成"
相关文档
您可以在命令行执行以下命令,查询支持的CLI命令列表。
aliyun ecs --help
您可以在命令行按照以下命令结构,调用ECS API。详细输入参数,可以参考各API文档。
aliyun ecs <API Name> --<参数1 取值1> --<参数2 取值2> ...