使用Terratest自动化AWS基础设施测试

在 AWS 上采用基础设施即代码(IaC)的组织通常面临着确保其基础设施不仅正确配置,而且在部署后能够按照预期运行的挑战。即使是微小的配置错误也可能导致高昂的停机时间、安全漏洞或性能问题。

传统的测试方法——例如手动检查资源或仅依赖静态代码分析——并不能为生产环境提供足够的信心。因此,迫切需要一种自动化、可靠的方法来验证AWS 基础设施的更改,以便在上线之前进行确认。

解决方案

Terratest提供了一个用 Go 编写的自动化测试框架,专门设计用于测试像 AWS 这样的真实云环境中的基础设施代码。通过程序化地部署、验证和销毁资源,Terratest 填补了编写 IaC(例如 Terraform)与自信地发布更改之间的鸿沟。以下是其工作原理:

下面是一个详细指南,介绍如何使用 Terratest 和 Terraform 实现 AWS 基础设施测试,并附有 Go 语言的示例代码片段。该工作流程将帮助您配置 AWS 资源,对其进行测试以确保其按预期工作,然后自动销毁所有内容。

先决条件

安装 Terraform

官方网站下载并安装 Terraform。

安装 Go

Terratest 是用 Go 编写的,所以您需要安装 Go。从官方网站下载 Go。

设置 AWS 凭据

确保您已配置 AWS 凭据(例如,通过 ~/.aws/credentials 文件或像 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 这样的环境变量)。

初始化 Go 模块

在项目目录中运行:

Shell

 

将 Terratest 添加到您的 go.mod

在项目/仓库目录中运行:

Shell

 

示例 Terraform 配置

创建一个简单的 Terraform 配置,启动一个 AWS EC2 实例。将以下文件放在一个名为 aws_ec2_example(或您喜欢的任何名称)的目录中。

将其保存为 main.tf 以供参考。

Shell

 

接下来,variables.tf

Shell

 

Terratest 代码片段

在一个名为 test(或您可以随意命名,但 test 是常规的)的目录中创建一个 Go 测试文件。例如,aws_ec2_test.go

Shell

 

这个测试的目的

  • 初始化和应用../aws_ec2_example中的Terraform配置。
  • 部署一个具有指定AMI的EC2实例在us-east-1。
  • 捕获instance_id的Terraform输出。
  • 使用Testify的assert库验证实例ID不为空。
  • 在测试结束时销毁资源以避免持续费用。

运行测试

  • 导航到包含Go测试文件(例如,测试目录)的目录。
  • 运行以下命令:
Shell

 

  • 观察输出
    • 您将看到Terraform正在初始化和应用您的AWS基础设施。
    • 在测试断言通过后,Terraform将销毁资源。

结论

通过遵循这些步骤,您可以将Terratest集成到您的AWS IaC工作流程中,以:

  • 使用Terraform为AWS资源进行配置
  • 使用基于Go的测试进行程序化测试
  • 验证您的基础设施已正确配置并正常运行
  • 拆除自动化,确保您不会产生不必要的AWS成本,并为重复的测试运行维护一个干净的环境。

Source:
https://dzone.com/articles/terratest-for-aws