使用Ansible创建AWS资源的清单
4.4(88%) 二十投票

首次发表在nivlesh的个人博客上https://nivleshc.wordpress.com

背景

我最近在一个客户网站,执行AWS房地产的环境评审。作为此次合作的一部分,我要对他们所有的AWS资源做一个清单。从表面上看,这听起来很简单,但是,当您考虑到可以为其提供资源的各个区域时,简单库存所需的工作量很容易增加。

不喜欢体力劳动,我开始研究自动化这项任务的方法。我很快就选定了Ansible作为我选择的工具,不久之后,我准备了两个可供回答的剧本(主剧本和工人剧本),用来执行清单。

在这个博客,我来介绍一下我写的两本可以解释的剧本。第一个剧本是主角。这就是定义变量的地方。这个剧本在指定的AWS区域上迭代,每次都给工人打电话,检查这些地区是否已提供任何资源。输出被写入逗号分隔值(.CSV)文件(我用分号代替逗号)可以很容易地导入到Microsoft Excel(或您选择的任何电子表格程序)中进行分析。

介绍易懂的剧本

已将剧本配置为检查以下AWS资源

  • 虚拟私有云(VPC)
  • vpc中的子网
  • Internet网关
  • 路由表
  • 安全组
  • 网络访问控制列表
  • 客户的网关
  • 虚拟专用网关
  • 弹性IP地址
  • 弹性计算云实例
  • 创建的Amazon机器映像
  • 弹性块存储体
  • 弹性块存储快照
  • 经典负载均衡器
  • 应用负载平衡器
  • 关系数据库服务实例
  • 关系数据库服务快照
  • 简单存储服务(S3)桶

下表提供了这两个可能的剧本的详细信息。

文件名 目的
ansible-aws-inventory-main.yml公司 这是控制器的操作手册。它遍历每个指定区域,调用worker playbook检查这些区域中提供的任何资源。
ansible-aws-inventory-worker.yml公司 这本剧本能起到很大的作用。它检查区域中由控制器Playbook提供给它的任何已配置资源。

让我们看一下主应交待剧本中的每一部分。(ansible-aws-inventory-main.yml公司)以便更好地理解它的作用。

首先,定义将要使用的变量

AWS_地区–这定义了将检查已提供资源的所有AWS区域。

详细的–要在屏幕上显示结果并将其写入文件,将此设置为真正的.将此设置为只需将结果写入文件。

所有者ID-这是正在编目的AWS帐户的帐户id。它用于检索此帐户拥有的所有Amazon机器映像(AMI)

下一步,将定义每个.csv文件的列标题。

在这之后,定义输出文件名。请注意,文件名使用时间戳(用于运行剧本时)作为前缀。这样可以确保它们不会覆盖以前运行的任何输出文件。

当我生成库存清单时,有时我发现我只需要列出资源类型的一个子集,而不是全部(例如,当我只查找EC2实例时)。由于这个原因,我发现使用布尔变量来启用或禁用特定资源类型的库存检查是有益的。

下一节列出布尔变量,它们控制是否应该检查特定的资源类型。设置这个真正的如果要检查的话如果要跳过它。您可以将此设置为您自己的首选项。

在所有变量都定义好之后,配置将要执行的任务。

第一个任务用列标头初始化输出. csv文件。

初始化完成后,inventory流程通过循环遍历每个指定的AWS区域并调用worker Ansible playbook来检查所提供的资源来启动。

最后一个任务显示输出文件的路径。

主要的Ansible playbook (Ansible -aw -inventory-main.yml)可以从这里下载https://gist.github.com/nivleshc/64ea7201fb0ba8cb6f87d06adc6152de.

Worker Playbook(ansible AWS inventory worker.yml)的格式如下。

  • 检查每个已定义的资源类型,并确认要选中它(使用主剧本中定义的布尔变量启用了对特定资源类型的检查)
  • 如果对特定的资源类型启用了检查,在主应负责剧本提供的区域中查找该类型的所有已提供资源
  • 将结果写入相应的输出文件
  • 如果启用了verbose,将结果写入屏幕

可以从其中下载worker文件(ansible-aw -inventory-worker.yml)https://gist.github.com/nivleshc/bedd2c440c816ebc86dbaeddef50d500.

运行可靠的剧本

使用以下步骤运行上面提到的Ansible playbook来执行AWS帐户的清单。

1。在一台安装了Ansible软件的电脑上,创建一个文件夹并适当地命名它(例如库存)

2。从下载ansible-aws-inventory-main.ymlhttps://gist.github.com/nivleshc/64ea7201fb0ba8cb6f87d06adc6152de并将其放入在上面步骤1中创建的文件夹中

三。从下载ansible-aws-inventory-worker.ymlhttps://gist.github.com/nivleshc/bedd2c440c816ebc86dbaeddef50d500并将其放入在上面步骤1中创建的文件夹中

4.从下载可应答清单文件https://gist.github.com/nivleshc/bc2e300fe1d2779ecc15c0876fc4db62,将它重命名为主机并将其放入在上面步骤1中创建的文件夹中

5.自定义ansible-aws-inventory-main.yml公司通过添加你帐户id随着所有者ID并通过更新输出根文件夹变量。如果需要禁用某些资源类型的资源清册,您可以将相应的布尔变量设置为.

6.创建一个在AWS帐户中启用访问密钥的用户帐户。为了检查playbook中定义的所有资源,至少,必须为帐户分配以下权限。

下面我们来举个例子

7。打开命令行,然后运行以下命令,使用上面步骤6中创建的帐户凭据配置环境变量(以下命令是特定于MacOS的)。

导出aws_access_key_id=“xxxxx”出口AWS_SECRET_ACCESS_KEY = " xxxxxxx "

8。您可能会遇到一个错误,boto抱怨它无法访问区域美国西部-3.为了解决这个问题,还定义以下环境变量。

export boto_use_endpoint_heuristics=true

9.使用以下命令行运行Ansible playbook。

ansible-playbook -宿主ansible-aw -inventory-main.yml

取决于有多少资源被盘点,剧本可能需要5到10分钟才能完成。所以,坐下来放松一下,当剧本运行时。

我发现了一个bug与Ansible“AWS S3 bucket facts”有关模块。它忽略了区域参数,而不是返回特定区域的S3桶,它返回所有区域的存储桶。因此,s3 buckets.csv文件将在所有区域中重复相同的buckets。

希望您喜欢上面的Ansible playbook,当您试图查找AWS帐户中部署的所有资源时,它们会使您的生活变得更容易。

直到下一次,享受吧!

类别:
亚马逊网络服务, 德沃斯
标签:
, , ,

留下一个回复