aws-tools

在使用AWS的过程中,需要用到很多AWS提供的工具,以完成相关的AWS部署、配置和更新等操作,这里总结一下最近用到的一些AWS提供的工具。

一、AWS CLI

1.1 基本功能介绍

官方链接:
https://aws.amazon.com/cn/cli/

AWS CLI是AWS官方提供的命令行工具,
安装方法: pip install awscli

功能

aws cli提供基本所有操作,所有可以在界面进行的操作,使用aws cli命令都可以进行相应的操作,所以这个对于需要用脚本自动化一些操作非常有用。

局限

感觉上aws cli应该是针对AWS操作功能最完善的了吧,目前没发现什么局限性。

使用

具体使用方法可以看 aws help,或者看官网,感觉使用起来比较简单。

1.2 使用的一些记录

aws cli账户配置

AWS上账户和权限管理分了很多类,对于账户来说,常见的有User和Role这2类:

(1) User 就是账号+密码,一般公司给的账号会需要安装手机软件,每次登陆时需要输入验证码(MFA 认证)。

(2) Role,这个是用来给一些程序配置用的,比如aws cli, cloudwatch exporter,datadog等。

一般个人用户给的是User用户,User类型用户应为每次登陆需要输入验证码,所以无法直接配置aws cli。如果已有一个User账户,想用这个账户配置aws cli的认证,可以按照官方的教程来:
https://aws.amazon.com/cn/premiumsupport/knowledge-center/authenticate-mfa-cli/

步骤以及需要注意的地方如下:

  1. 在AWS网页->IAM->Users->自己的账户,在Security credentials下面创建一个access key。
  2. 配置aws cli的key id 和 secret key, 这里记得一定要把token设置为空。
1
2
3
aws configure set aws_access_key_id "上面创建的key id"
aws configure set aws_secret_access_key "上面创建的secret key"
aws configure set aws_session_token ""

执行完这几行后,再按照官方的介绍,执行下面的指令。

1
aws sts get-session-token --serial-number arn-of-the-mfa-device --token-code code-from-token

这个时候就可以得到对应的key id, secret key 和 token,用上面的方法配置这3个参数后,就可以用aws cli对aws对象进行操作了。这里,因为用这种方法每次创建的认证key只有差不多1天不到的有效期,所以只用来测试用,而且经常需要重新配置,在获取新的key时,记得需要执行配置aws_session_token的指令把这一项清空,否则会导致无法获取新的key。

二、AWS SDK

为了方便编写自动化脚本,AWS提供了很多SDK,支持目前用到的大多数语言,可以从官方看具体的SDK细节:
https://aws.amazon.com/cn/tools/

支持的列表有:

  • Java
  • .NET
  • Node.js
  • PHP
  • Python
  • Ruby
  • 浏览器
  • golang
  • C++
  • Android
  • IOS
  • React Native
  • 移动Web

SDK的功能和AWS CLI基本一样,集成更方便,具体可以在官方上看官方文档。

三、CloudFormation

官方文档:https://aws.amazon.com/cn/cloudformation/

CloudFormation是AWS提供的一种通过配置文件来管理AWS资源的一种方法。
CloudFormation的配置文件采用json或YAML格式,你可以将你需要创建的一组AWS对象编写在一个CloudFormation配置文件里,比如你的一个服务需要创建几台EC2,并创建对应的Security Group, ELB, CNAME, 你可以将所有资源以及它们之间的关联按照要求的格式,编写在一个CloudFormation文件里,然后在AWS页面里或者用aws cli等方式创建这个CloudFormation,就可以一次创建所有你需要的一套对象。

通过看文档和使用,总结下来CloudFormation有一些优势和局限:

优势

官方的描述:

(1) 全面建模

AWS CloudFormation 使您可以在文本文件中为整个基础设施建模。此模板会成为您的基础设施的单一信任源。这有助于您将组织中使用的基础设施组件标准化,从而实现配置合规性并加快故障排除速度。

(2) 自动化和部署

AWS CloudFormation 以安全、可重复的方式预配置您的资源,使您可以构建和重新构建您的基础设施和应用程序,而不必执行手动操作或编写自定义脚本。CloudFormation 负责确定管理堆栈时要执行的适当操作,并在检测到错误时自动会滚更改。

(3) 仅仅就是代码

通过编纂基础设施,您可以将您的基础设施仅仅视为代码。您可以使用任何代码编辑器对它进行创作,将它签入版本控制系统中,与团队成员一起查看文件,然后将其部署到生产环境中。

限制

最新通过使用CloudFormation总结发现,你可以创建、更新、删除你定义的一组资源,但是CloudFormation有个限制就是你只能对用CloudFormation创建的对象进行更新和操作,不能对已有的手动创建的对象进行操作。

比如你手动在AWS页面上创建了一个EC2,你是不能通过编写CloudFormation文件来对这个EC2的熟悉或配置进行修改的,如果你想修改这个EC2的熟悉,你只能在用在网页上或者aws cli等这些方法进行。典型的案例就是如果你用kops在aws上创建了一个k8s cluster,你是没办法通过CloudFormation来对kops创建的资源进行修改的。

教程资料

官方教程: https://aws.amazon.com/cn/cloudformation/getting-started/

一般创建资源都是参照官方模板来写,官方所有模板: http://docs.amazonaws.cn/AWSCloudFormation/latest/UserGuide/template-reference.html

下面是一些技巧:
比如,你在给一个EC2配置security group列表时,想一部分SG应用你CloudFormation里创建的,一部分SG id是用户输入的,下面的例子显示了如果在一个EC2里把两部分SG组合在一个:
https://gist.github.com/magnetikonline/a6cfc522a1e9f876b75962f5f553c8e5

另外的一些配置技巧参考:
http://garbe.io/blog/2017/07/17/cloudformation-hacks/

四、 CloudFormer

官方文档:https://docs.aws.amazon.com/zh_cn/AWSCloudFormation/latest/UserGuide/cfn-using-cloudformer.html

CloudFormer是AWS提供的一个工具,它能够把你AWS里面已有的资源导出成CloudFormation模板。这个我没有用到,所以详细信息可以参考官方文档。