12 2月

使用AWS管理跨多个环境的资源

文 / AWS Activate

原文链接:https://medium.com/aws-activate-startup-blog/managing-resources-across-multiple-environments-in-aws-7e139351f9c7

为了开发出优秀的应用程序,处于初创期的企业通常需要多环境(multiple environments)的支持,如产品环境、开发环境、QA环境和预备(staging)环境。但在多环境中对资源进行跟踪和管理可能是个挑战,特别是在业务与日俱增的情况下。

例如,随着企业研发人员数量的增加,企业所耗费资源的速度可能比预期的要快得多。这时你会发现自己需要更加清晰地认识到资源与环境的匹配问题。

有多少实例(Amazon Web Services中的虚拟机被称为实例)属于QA(Quality Assurance)?谁有权开启和关闭产品实例?开发环境的成本有多少?随着初创企业的发展,你可能需要找到这类问题的答案。

使用Amazon Web Services(AWS)不仅可以建立多环境的实例,而且还可以跟踪、管理和控制在不同环境间访问资源的方式。我们一起来看看那些能为你所用的相关功能。

标签

你可以使用标签来标记跨多个环境(甚至多个AWS账户)的AWS资源。标签是由一个键和一个值构成的label,你可以对大多数AWS资源进行标记,可以对每个资源添加的标签数量多达10个。

由于使用标签显然会带来很多好处,所以你要标记能够标记的每个资源。例如,你可以对下列任务使用标签。

  • 查找、组织资源
  • 资源的访问控制
  • 查看详细计费报告

此外,对资源进行标记会让你更有效地利用下列AWS的功能特性。

资源组

资源组(Resource Group)是AWS管理控制台(AWS Management Console)的一个酷酷的新功能特性。它允许你创建、查看和维护带有相同标签的资源集。你还可以创建属于自己的视图,这些视图可以带有不同的环境标签。你可以查看带有同一标签的资源,如Environment=Prod,在支持标签的所有服务中都是如此。你也可以查看所有共享多个标签的资源,如下面的屏幕截图所示。

1

详情请参阅资源组的使用

将标签用于身份识别和访问管理

你想为一组标记为Prod的特定用户锁定服务和资源吗?你可以将标签与AWS的身份识别和访问管理(Identity and Access Management, IAM)结合使用,来对用户或组的访问进行控制。例如,你可以控制哪些IAM用户或组可以对特定的EC2实例做开始、停止、重启和终止的操作。通过这样的方式,你可以让开发人员只能对标记为Environment=Dev的实例进行访问控制。

查看支持IAM资源标签的完整服务列表,点击IAM支持的AWS服务

将标签用于计费报告

你想知道一个特定的环境成本是多少吗?可以使用成本分配标签来对AWS的成本进行分类和跟踪。当你对AWS资源(比如Amazon的EC2实例、S3 bucket)使用标签时,AWS会生成一个由逗号将内容分隔开的成本分配报告(CSV文件),使用情况和所消耗成本按照标签被聚合在一起。你可以使用代表业务类别的标签跨多个服务来组织你所消耗的成本。

成本分配报告包括你使用AWS服务在每个结算期的全部成本。

该报告包括已标记和未标记的资源,所以你可以清楚地对这些资源所产生的费用进行管理。例如,如果将某个应用程序名作为资源的标记,那么你就可以跟踪单个应用程序在这些资源上运行的总成本。

有关更多信息,请参见每月成本分配报告的设置

维护标签

现在我们知道了对资源使用标签的好处,那么我们如何确保一切都能够被标记呢?如何确保一切已经被标记了呢?要做到这一点,你可以使用AWS管理控制台中的一些有关标记的功能特性。例如,向实例添加批量标签。下面的屏幕截图就展示了这种类型的标签管理。

2

然而,当新的资源被加进来的时候,你确实需要登录到控制台去手动更新这些资源。随着时间的推移,这种做法就会显得有些笨拙。以下是一些标记资源的其他方法。

创建自己的启动脚本

为团队成员提供一份或一组脚本来创建他们所需的环境。这样做是确保资源被正确标记的好办法。这还使团队成员的工作变得更轻松。他们会很快得到自己想要的环境,分分钟就被创建起来了。

因为每个AWS服务都有一个API,因此有很多方法去构建用来创建资源的脚本。你可以使用AWS命令行接口(AWS CLI)创建一份脚本,还可以使用平台中众多可用SDK中的某一个创建脚本。诸如此类的做法非常简单。关于SDK的更多信息,请参见开始使用AWS进行开发

你还可以从GitHub这样的网站上找到无数的可用脚本,可以拿过来直接用。

使用CloudFormation模版

模版像脚本一样,为团队提供一种在AWS上创建资源的方式,这种方式简单,并且重现性好。你可以创建一个模版,描述想要的所有AWS资源(如Amazon EC2实例、RDS DB实例),AWS CloudFormation将会为你提供和配置这些资源。

几乎每一个支持标签的资源在CloudFormation模版中也支持标签。你可以针对不同环境创建模版,还可以使用条件语句为多个环境使用一个单独的模版。

使用自动伸缩服务

自动伸缩服务(Auto Scaling Service)为你提供了若干个很给力的功能。当应用程序需求增加时,你可以对EC2实例做横向扩展(scale out)。你还可以减少不必要的实例,替换反映变得迟钝的实例。

你也可以对自动伸缩的实例使用标签。已经启动的实例作为自动伸缩功能的一部分在启动后被自动标识,免得你还要创建一种机制来做到这一点。

使用配置管理

许多常见的配置管理工具都支持在创建资源的时候对其进行标记。如Chef、Puppet、SaltStack和Ansible。这些配置工具通常还为多个环境提供有条件的分离。如果你正在使用这些工具中的某一个,那么可以很容易地对已创建资源进行标记。

发现未加标签的资源

你可能会时不时地想要审核自己的账户来识别未加标签的资源,或者去验证资源是否被正确地标记。看看下面建立审核资源的选项设置。

使用AWS管理控制台

AWS管理控制台提供了一种查看资源的简便方法。这些资源全部基于标签,尤其是EC2实例。你可以为大多数资源视图使用标签来创建列。这样就能够使你发现标记不正确或者根本没有进行标记的资源。如下面截图所示。

3

创建自己的脚本

如前所述,AWS提供了访问服务的API。你可以使用相同的API去查询资源列表所提供的服务。你还可以使用这些列表找到没有标记或被错误标记的资源。

总结

你可以使用标签跨多个环境跟踪和管理那些资源,对这些资源做访问控制。在AWS中使用标签的选择不是唯一的。例如,你可以使用AWS管理控制台、CloudFormation模版,还有自定义脚本。无论你选择哪种方法,你都会发现标签是管理资源不可或缺的方法。

http://www.csdn.net/article/2015-02-11/2823926