亚马逊aws-shell:AWS CLI的交互式shell

亚马逊aws-shell:AWS CLI的交互式shell

Aws cli 是AWS(亚马逊云服务)的统一管理工具,其基于python开发,是在boto基础上的增强和封装。其提供了我们一种类似于操作linux命令一样的方式操作aws的全系统产品资源。而本文介绍的aws-shell,则是Aws cli的shell交互版本,给用户提供了更多的便利。

安装

安装aws-shell需要python环境和pip,你可以使用如下方式,借pip进行安装:

$ pip install aws-shell

权限不够可以:

$ sudo pip install aws-shell

Mac OS X下在安装时,可能会存在python依赖包的问题,事见:

https://github.com/pypa/pip/issues/3165

暂时你可以这样做:

sudo pip install aws-shell --upgrade --ignore-installed six

安装好aws-shell,你可以运行:

$ aws-shell

退出shell,请按Ctrl-D。

升级aws-shell

如果你要将aws-shell升级到最新版本,你可以运行:

$ pip install --upgrade aws-shell

你还可以在需要升级AWS-CLI(包含新服务和API)时,使用这条upgrade命令,然后你就可以在aws-shell里施用这些新的服务和升级后的API。

支持的python版本

与AWS CLI相同,aws-shell支持以下python版本:

2.6.5+  2.7.x  3.3.x  3.4.x

配置

Aws-shell使用了与AWS CLI相同的配置,如果你以前不曾用过AWS CLI,最简单的法子就是运行configure命令:

$ aws-shell  aws> configure  AWS Access Key ID [None]: your-access-key-id  AWS Secret Access Key [None]: your-secret-access-key  Default region name [None]: region-to-use (e.g us-west-2, us-west-1, etc).  Default output format [None]:  aws>

详细信息请看这里:

http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html

基本用法

aws-shell与AWS CLI命令相同,但是你不需要加上aws前缀。下面就有一些命令案例:

$ aws-shell  aws> ec2 describe-regions  {      "Regions": [          {              "Endpoint": "ec2.eu-west-1.amazonaws.com",              "RegionName": "eu-west-1"          },          ...  aws> s3 ls  2015-12-07 15:03:34 bucket1  2015-12-07 15:03:34 bucket2  aws> dynamodb list-tables --output text  TABLENAMES     First  TABLENAMES     Second  TABLENAMES     Third

特性

自动化补全命令和选项:

aws-shell会根据你的输入,自动化补全命令和选项:

亚马逊aws-shell:AWS CLI的交互式shell

简写补全:

aws-shell还会为AWS CLI的选项,进行简写示例展示:

亚马逊aws-shell:AWS CLI的交互式shell

服务端自动补全:

aws-shell也有使用boto3,这是python的AWS SDK。boto3被用来补全服务端资源,如Amazon EC2 instance Ids,Amazon Dynamodb表名,AWS IAM用户名,Amazon S3 bucket名字等等。该功能正在积极开发,支持资源的列表会继续添加:

亚马逊aws-shell:AWS CLI的交互式shell

Fuzzy搜索

每个自动化补全的值,支持fuzzy搜索。所以你可以不用敲那么多字符,就能自定义命令、选项和值,比如:

每个联合词的第一个字母:ec2 describe-reserved-instances-offerings -> ec2 drio  每个词输入一小段:ec2 describe-instances -> ec2 descinst  输入命令的一小段:dynamodb table -> 会给你提供所有可能

亚马逊aws-shell:AWS CLI的交互式shell

内置文档

aws-shell会在你输入命令时,自动化弹出介绍。它会给你展示CLI选项的内置文档。同时,还有个单独的文档界面会显示当前你输入的命令或者选项。

Fish-Style自动建议

aws-shell支持Fish-style自动化建议,使用右方向键可以补全建议:

亚马逊aws-shell:AWS CLI的交互式shell

命令历史

aws-shell记录了你运行的命令,并把它们写入了~/.aws/shell/history。你可以使用上下方向键,去搜索回滚你的历史记录:

亚马逊aws-shell:AWS CLI的交互式shell

工具栏(toolbar)选项

aws-shell有个底部工具栏,可以给你提供部分选项:

F2:切换fuzzy和字符串匹配  F3:切换VI和Emacs的键绑定  F4:切换单复列的自动补全  F5:显示隐藏帮助文档  F10或者Ctrl-D:退出aws-shell

在你切换工具栏选项时,你的喜好被存在~/.aws/shell/awsshellrc文件里,所以下次你运行aws-shell时,可以很方便地进行恢复:

亚马逊aws-shell:AWS CLI的交互式shell

点命令

aws-shell提供了额外的命令,可以在命令加前“.”,效果相同。

用.edit创建shell脚本

当然,有时候你需要在aws-shell使用一系列命令,可以直接写一个脚本。此外,历史命令文件里,aws-shell可以跟踪所有你aws-shell里使用过的命令。

你可以使用.edit命令在编辑器里浏览这些命令,使用的是默认编辑器环境:

aws> ec2 describe-instances  aws> dynamodb list-tables  aws> .edit

执行shell命令

aws-shell在某些方面集成了一些其他命令。首先,你可以将AWS CLI命令管道传递给其他进程,同时把输出写进文件里:

aws> dynamodb list-tables --output text | head -n 1  TABLENAMES     First  aws> dynamodb list-tables --output text > /tmp/foo.txt

然后,如果你想要运行shell命令,而不是AWS CLI命令,你可以在命令里加上!前缀:

aws> !ls /tmp/  foo.txt bar.txt

aws-shell尚在开发期,可能还存在不兼容的问题。期待大家的反馈,我们将继续对aws-shell的代码进行迭代。

相关阅读

AWS CLI Reference Docs

AWS CLI User Guide

AWS CLI Blog

AWS CLI Github Repo

*参考来源:github,FB小编dawner编译,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)