通过CLI创建并使用ECS实例

阿里云CLI(Command Line Interface)是一种命令行工具,允许用户在终端或命令行界面调用阿里云API,来创建、配置、管理阿里云云资源。本文主要介绍如何使用阿里云CLI调用ECS API来创建和管理ECS实例的方法及其常用示例。

说明

关于阿里云CLI的详细信息,请参见什么是阿里云CLI

准备工作

  1. 由于阿里云账号(主账号)拥有资源的所有权限,其AccessKey一旦泄露风险巨大,所以建议您使用满足最小化权限需求的RAM用户的AccessKey。获取方法请参见创建AccessKey

  2. 给RAM用户授予操作云服务器ECS和专有网络VPC相关资源的权限。本文提供的示例代码需要创建实例、VPC、交换机等资源,建议授予以下权限:

    云产品

    授予权限

    专有网络VPC

    本示例选择系统策略:AliyunVPCFullAccess

    云服务器ECS

    本示例选择系统策略:AliyunECSFullAccess

  3. 安装和配置CLI。调试使用阿里云CLI前,您需要先安装阿里云CLI。阿里云CLI提供了Windows、Linux和macOS三种操作系统下的安装服务,请根据您使用设备的操作系统选择:

    1. 安装CLI。

    2. 配置CLI。

      配置调用阿里云资源所需的身份凭证信息、服务请求地域等。具体配置,请参见配置身份凭证

    如果您只是用于临时调试,不需要安装阿里云CLI,您可使用阿里云提供的云命令行Cloud Shell。更多信息,请参见什么是云命令行?image

创建ECS实例

创建ECS实例时,有很多必填参数,包括交换机ID、安全组、镜像等。您可以传入已经准备好的资源ID,或者调用以下OpenAPI创建对应资源。

  1. 创建VPC。

    VPC是一种专有的云上私有网络,允许用户在公共云上配置和管理一个逻辑隔离的网络区域。

    API

    参数

    示例取值

    CreateVpc

    RegionId

    地域:cn-hangzhou

    CidrBlock

    VPC网段:192.168.0.0/16

  2. 创建交换机。

    交换机是一种在虚拟化环境中使用的网络交换设备,它模拟了物理交换机的功能,使虚拟机(VMs)之间以及虚拟机与物理网络之间可以进行通信。

    API

    参数

    示例取值

    RegionId

    地域:cn-hangzhou

    CreateVSwitch

    ZoneId

    可用区:cn-hangzhou-i

    VpcId

    VPC ID:vpc-bp1aag0sb9s4i92i3****

    CidrBlock

    交换机网段:192.168.0.0/24

  3. 创建安全组。

    安全组是一种虚拟防火墙,能够控制ECS实例的出入方向流量。

    API

    参数

    示例取值

    CreateSecurityGroup

    RegionId

    地域:cn-hangzhou

    VpcId

    VPC ID:vpc-bp1aag0sb9s4i92i3****

  4. 给安全组添加入防护规则。

    API

    参数

    示例取值

    AuthorizeSecurityGroup

    RegionId

    地域:cn-hangzhou

    SecurityGroupId

    安全组ID:sg-bp1esyhwfbqeyudt****

    IpProtocol

    协议:tcp

    SourceCidrIp

    源CIDR:0.0.0.0/0

    PortRange

    端口范围:

    • Linux实例:22/22

    • Windows实例:3389/3389

  5. 创建ECS实例。

    使用ECS,您可以快速部署和运行应用程序,灵活调整资源以应对业务变化,同时享受高性能、高安全性和低成本的计算能力,适用于网站托管、应用开发、数据处理等多种场景。

    API

    参数

    示例取值

    RunInstances

    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脚本,并运行,预期结果如下:

image

连接实例

通过SSH方式登录ECS实例,就可以进行部署业务、搭建应用等操作。

  1. 获取实例的公网IP信息。

    调用DescribeInstances,通过<实例ID>获取实例的公网IP信息。

    • 请求示例

      aliyun ecs DescribeInstances \
      --RegionId cn-hangzhou \
      --InstanceIds '["<实例ID>"]'
    • 返回示例

      参数PublicIpAddresses为实例的公网IP信息。

      公网IP

  2. 连接ECS实例。

    ssh <用户名>@<公网IP>

    image

释放资源

当您不再需要所创建的资源时,可以调用以下OpenAPI接口以释放该资源。

说明

根据您的实际需求,选择相应的OpenAPI释放资源 。本示例释放上述步骤创建的所有资源。

  1. 释放ECS实例

    API

    参数

    示例取值

    DeleteInstances

    RegionId

    地域:cn-hangzhou

    InstanceId

    实例 ID:i-bp17f3kzgtzzj91r****

  2. 删除安全组

    API

    参数

    示例取值

    DeleteSecurityGroup

    RegionId

    地域:cn-hangzhou

    SecurityGroupId

    安全组ID:sg-bp1esyhwfbqeyudt****

  3. 删除交换机

    API

    参数

    示例取值

    DeleteVSwitch

    RegionId

    地域:cn-hangzhou

    VSwitchId

    交换机ID:vsw-bp1nzprm8h7mmnl8t****

  4. 删除VPC

    API

    参数

    示例取值

    DeleteVpc

    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> ...

生成CLI命令

为了能够让开发者快速高效地学习和使用云产品OpenAPI,阿里云为用户提供OpenAPI网站。它是一款集OpenAPI智能搜索、文档、在线调试、SDK获取、CodeSample、调用出错诊断、调用统计为一体的产品。您可以通过OpenAPI自动生成API对应的CLI代码。更多信息,请参见什么是OpenAPI

  1. 登录云服务器ECS API调试列表

  2. 选择您需要使用的API,并填写参数。

  3. 单击右侧的CLI示例页签即可生成携带参数的命令。

    2024-08-12_10-30-57.png