云计算之路-出海记:命令行下的 AWS

俗话说“三百六十行,行行出状元”,自从有了电脑之后,三百六十行又多了一行 —— 命令行。GUI 的诞生开创了繁荣的 PC “窗口”(windows)时代,互联网的诞生给 GUI 家族增添新成员 Web UI,移动互相网的诞生又帮 GUI 家族生下了二胎 Mobile UI,但用情专一的程序员念念不忘的依然是命令行,于是这一行出了个网红状元 —— Linux。

程序员的执念,成为任何一个技术平台厂商都不敢忽略的牵连,于是 CLI 成为技术平台或者底层技术产品的标配,各大云厂商都推出了自己的 CLI,就连靠 GUI 打天下的微软后来也不得不为 .NET 推出了 CLI —— dotnet。

一番废话之后,今天我们来体验一下云计算厂商的代表 Amazon Web Services (AWS) 的命令行 AWS CLI。

The AWS Command Line Interface (CLI) is a unified tool to manage your AWS services.

首先准备好发号施令的指挥台,我们这里用的是一台阿里云 ubuntu 云服务器。

接着在指挥台上安装指挥棒 AWS CLI

$ curl "//awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

安装好之后看一下版本号

$ aws --version
aws-cli/2.0.62 Python/3.7.3 Linux/4.15.0-42-generic exe/x86_64.ubuntu.18

接下来配置 AWS CLI

配置之前先到AWS官网控制台拿到访问密钥(Access Key),在右上角用户名处点击“我的安全凭证” -> “访问密钥” -> “创建新的访问密钥”,得到“访问密钥ID(Access Key ID)”与“私有访问密钥(Secret Access Key)”。

执行 aws configure 命令进行配置:

aws configure
AWS Access Key ID [None]: *****
AWS Secret Access Key [None]: ******
Default region name [None]: us-west-1
Default output format [None]: 

(注:默认输出格式是json)
配置完成后就可以用 aws 命令操作 AWS 云资源。

为了更养眼地显示 AWS CLI 在控制台输出的 json 结果,我们先安装一下jq

apt install jq

先用一个很简单的获取当前用户信息的命令(aws iam get-user)体验一下:

接下来我们重点体验一下用 AWS CLI 启动与关闭 EC2 实例。

启动 EC2 实例的命令是 aws ec2 run-instances ,为了运行这个命令,我们需要先准备它需要的4个食材:image-id, key-name, security-group-ids, subnet-id。

第1个食材 image-id 就是 Amazon 系统映像 (AMI) ID,这里我们选择支持免费套餐(free tier)的 ubuntu 20.04 镜像,但目前 aws ec2 describe-images 命令不支持根据免费套餐筛选镜像,只能通过 AWS 官网控制台查询到,对应的 image-id 是 ami-00831fc7c1e3ddc60。

Ubuntu Server 20.04 LTS (HVM), SSD Volume Type – ami-00831fc7c1e3ddc60 (64 位 (x86)) / ami-017b2c64d333ddbf6 (64 位 ARM)

第2个食材是 key-name(密钥对名称),可以通过 aws ec2 describe-key-pairs 命令拿到,key-name 是 cnblogs。

第3个食材是 security-group-ids(安全组ID),可以通过 aws ec2 describe-security-groups 命令拿到,这里选择第一个只开放了22端口的安全组,GroupId 是 sg-08222bcdeaaaf100f。

第4个食材是 subnet-id(VPC子网ID),可以通过 aws ec2 describe-subnets 命令拿到,这里选择第一个子网,subnet-id 是 subnet-01d11e5b。

4个食材都准备好了,准备下锅,炒个小份(instance-type 选择 t2.micro,免费套餐中的实例类型)

一起下锅爆炒啦

aws ec2 run-instances \
    --image-id ami-017b2c64d333ddbf60 \
    --count 1 \
    --instance-type t2.micro \
    --key-name cnblogs \
    --security-group-ids sg-08222bcdeaaaf100f \
    --subnet-id subnet-01d11e5b

瞬间就炒好了(秒启的感觉),实例ID是 i-0499ec0c6d43d6d9d

aws ec2 describe-instance-status 命令确认服务器是否正常启动:

处于 running 状态,启动成功。

去 AWS 官网 EC2 控制台进一步确认:

的确启动成功!

最后用2行命令关闭(stop)并释放(terminate)刚刚启动的服务器,收官这次 AWS 命令行体验之旅。

aws ec2 stop-instances --instance-id i-0499ec0c6d43d6d9d
aws ec2 terminate-instances --i-0499ec0c6d43d6d9d