阿里云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。更多信息,请参见什么是云命令行?。登录阿里云控制台,单击顶部导航栏中工单右侧的 Cloud Shell 图标(终端样式图标)即可启动 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脚本,并运行,预期结果如下:
[root@i-xxxxx Z ~]# bash ecs-cli.sh
正在安装依赖工具jq...
Last metadata expiration check: 0:24:56 ago on Tue 22 Oct 2024 09:24:50 AM CST.
Package jq-1.6-15.al8.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
正在创建VPC...
正在创建VSwitch...
正在创建SecurityGtoup...
Input Your Password:
PASSWORD OK.
正在创建ECS实例...
等待ECS创建中...
查询ECS状态...
InstanceId | InstanceName | InstanceType | ImageId | Status
---------- | ------------ | ------------ | ------- | -------
i-bpxxxxxxxxxxxz4 | ecs_cli_demo | ecs.e-c1m1.large | aliyun_3_x64_20G_alibase_20240819.vhd | Running
连接实例
通过SSH方式登录ECS实例,就可以进行部署业务、搭建应用等操作。
-
获取实例的公网IP信息。
调用DescribeInstances,通过
<实例ID>获取实例的公网IP信息。-
请求示例
aliyun ecs DescribeInstances \ --RegionId cn-hangzhou \ --InstanceIds '["<实例ID>"]' -
返回示例
参数PublicIpAddresses为实例的公网IP信息。
"PublicIpAddress": { "IpAddress": [ "115.29.xxx.xxx" ] }
-
-
连接ECS实例。
ssh <用户名>@<公网IP>[root@i-xxx bfZ ~ ]# ssh root@1xxx The authenticity of host 'xxx (xxx)' can't be established. ECDSA key fingerprint is SHA256:PVyhCaxxx4mecykrU. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'xxx' (ECDSA) to the list of known hosts. root@1xxx's password: Welcome to Alibaba Cloud Elastic Compute Service ! Last login: Thu Oct 10 13:31:58 2024 from xxx.67 [root@iZ xxx ugZ ~]#
释放资源
当您不再需要所创建的资源时,可以调用以下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> ...