AWS 命令行界面 (CLI) 是用于管理 AWS 服务的统一工具。只通过一个工具进行下载和配置,您可以使用命令行控制多个 AWS 服务并利用脚本来自动执行这些服务。 —- aws官方是这么描叙aws-cli的。在实际使用的时候通过脚本完成全自动化部署,一键管理许多云服务,aws-cli确实是你管理aws服务的一个提高生产力的好工具。

安装aws-cli

$ curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"
$ unzip awscli-bundle.zip
$ ./awscli-bundle/install -b ~/bin/aws
$ sudo ln -s  ~/.local/lib/aws/bin/aws  /usr/local/bin/aws
$ aws --version

配置aws-cli

1. 创建访问密钥

话不多说,看图操作。

最后的访问密钥ID和私有访问密钥复制一下,准备工作👌。

2. 设置本地配置

$ aws configure
AWS Access Key ID [None]: # 刚刚获得的访问密钥ID
AWS Secret Access Key [None]: # 刚刚获得的私有访问密钥 
Default region name [None]: us-west-2  # 你的服务地区
Default output format [None]: json # 你需要返回的数据格式

如果你不知道你的地区名字 你可以点这里查找。

上手使用

这里有几个日常管理常用的命令使用方法,更多的请看这里

实例管理

创建实例

1.在创建实例前你的选择一个镜像,也是就一个模板,可以是自己的或社区的。

# 查看所有AMI,包括你的所有公用AMI
aws ec2 describe-images --executable-users all
# 查看亚马逊的
aws ec2 describe-images --owners amazon
# 查看指定账户公用的
aws ec2 describe-images --owners 123456789012

可以通过--filters 筛选出你感兴趣的 AMI 类型。如只显示 EBS 支持的 AMI

 --filters "Name=root-device-type,Values=ebs"

2.创建实例

# 我选的是 Amazon Linux AMI 2017.09.1 (HVM), SSD Volume Type - ami-ec499a81
aws ec2 run-instances \
	--image-id ami-ec499a81 \ # 从哪个镜像起
	--count 1 \ # 起多少台
	--instance-type t2.microE \ # 什么型号的实例
	--key-name mykey \ # 用那组秘钥对
	--security-group-ids sg-2236db46 # 实例安全组

更多实例型号看这里

添加标签
aws ec2 create-tags --resources "i-031380f079902c9bd" --tags 'Key=Name,Value=MyAuto'

aws ec2 create-tags命令能给所有的资源添加标签,所以这里你指定你的--resources 为你的实例 ID,并且指定你需要添加的标签名以及内容。

获取实例状态信息
aws ec2 describe-instance-status --instance-id "i-031380f079902c9bd"

这个返回的是实例的所有状态信息,如果你只需要部分可以利用--query参数

# 查看实例是不是在运行
aws ec2 describe-instance-status --instance-id "i-031380f079902c9bd" --query "InstanceStatuses[0].InstanceState.Name"
>> "running"
获取实例详细信息
aws ec2 describe-instances --instance-ids "i-031380f079902c9bd"

当然,如果你只看IP

 aws ec2 describe-instances --instance-ids "i-031380f079902c9bd" --query "Reservations[0].Instances[0].PublicIpAddress"
>> "55.222.111.22"

到这里你就可以在控制台看到该实例了。

删除实例
aws ec2 terminate-instances --instance-ids "i-031380f079902c9bd"

AMI管理

创建AMI
# 从实例 i-031380f079902c9bd 创建镜像
aws ec2 create-image \
	--description "TEST_AMI" \ # AMI描叙 
	--instance-id "i-031380f079902c9bd" \ # 实例ID
	--name "testami20171030" # 创建的AMI名字

在创建该镜像时会自动创建一个快照,当然如果你要指定快照信息可以使用--block-device-mappings参数。

为AMI添加标签
aws ec2 create-tags --resources "ami-d4975eb9" --tags 'Key=Name,Value=MyAutoAMI'
查看AMI信息
aws ec2 describe-images --image-ids "ami-d4975eb9"

这个可以返回镜像的所有信息,如果你只看其中某一项,你可以利用--query参数.

 # 只查看状态
aws ec2 describe-images --image-ids "ami-d4975eb9" --query "Images[0].State" 
>> pendding

上面一顿操作结束,你就可以在你的AMI控制台看到。

删除AMI
aws ec2 deregister-image --image-id "ami-d4975eb9"

如果你和我一样在创建AMI没有指定快照,那么它会自动为你创建快照。

# 查询该镜像快照ID
aws ec2 describe-images --image-ids "ami-d4975eb9" --query "Images[0].BlockDeviceMappings[0].Ebs.SnapshotId"
>> "snap-f269e2fa"
# 删除快照
aws ec2 delete-snapshot --snapshot-id "snap-f269e2fa"

自动缩放组管理

创建缩放组启动配置
aws autoscaling create-launch-configuration \
	--launch-configuration-name "oldlanchconf" \ # 启动配置名字
	--image-id "ami-d4975eb9" \ # 启动的模板镜像
	--instance-type "t2.microE" \ # 启动的实例类型
	--security-groups "sg-2236db46" \ # 启动的实例安全组
	--key-name "mykey" \ # 秘钥
	--associate-public-ip-address  # 为该实例分配一个公有IP
创建自动缩放组
# 在指定的子网内创建一个缩放组
aws autoscaling create-auto-scaling-group \
	--auto-scaling-group-name "mygroup" \  # 缩放组名字
	--launch-configuration-name "oldlanchconf" \  # 缩放组启动配置
	--min-size 1 \  # 缩放组最小实例数
	--max-size 3 \  # 最大
	--vpc-zone-identifier "subnet-41767929c" # "缩放组子网id"
# 创建一个配置负载均衡的缩放组
aws autoscaling create-auto-scaling-group \
	--auto-scaling-group-name "mygroup" \
	--launch-configuration-name "oldlanchconf" \
	--load-balancer-names "my-load-balancer" \  # 负载平衡器
	--health-check-type "ELB" \  # 健康状态检查类型 使用ELB提供的健康检查
	--health-check-grace-period 120  # 实例自动伸缩前120秒的任何健康检查失败将被忽略
修改已有缩放组启动配置
aws autoscaling update-auto-scaling-group --auto-scaling-group-name "oldlanchconf" --launch-configuration-name "newlaunchconf"
将实例加入缩放组
 aws autoscaling attach-instances --instance-ids "i-031380f079902c9bd" --auto-scaling-group-name "mygroup" 

主要的操作大概也就这些,更多请看官方文档,如有错误,请指出哦。