区块链网站|NFTS Terra(LUNC) 使用Terratest测试您的基础设施代码

使用Terratest测试您的基础设施代码

广告位

使用 Terratest 测试您的基础架构作为代码

随着越来越多的基础设施成为代码,有必要对IaC进行单元测试和集成测试。IaC和测试你的基础设施代码意味着什么?每天分享最新的软件开发、Devops、敏捷、测试、项目管理的最新最热的文章,每天花3分钟学习为什么不。希望大家喜欢,评论,关注。你的支持是我最大的动力。手动设置基础架构可能是一个耗时且繁忙的过程。此时,我们可以使用基础设施作为代码(IaC)工具来自动化基础设施。IaC automation可用于任何类型的基础设施,如虚拟机、存储等。随着越来越多的基础设施成为代码,有必要对IaC进行单元测试和集成测试。我们将简要讨论什么是IaC以及测试您的基础设施代码的意义。然后深入研究了如何使用Terratest进行IaC测试。

我们可以开始了吗?

基础设施即代码(IaC)基础设施即代码是通过代码提供和配置环境的过程,而不是通过GUI手动设置所需的基础设施和支持系统。例如,提供一个虚拟机,对其进行配置并为其设置监控。IaC的一些例子有Terraform、Packer、Ansible等。借助作为代码的基础设施,还可以将基础设施追溯到Git等版本控制系统中,对其进行模块化和模板化,以便在多个环境和区域中重用相同的代码。灾难恢复是编写基础设施代码的重要好处之一。借助IaC,您可以尽快在其他地区或环境中复制您的基础架构。

测试基础架构代码IaC测试可以分为几个阶段:

健全性或静态分析静态分析单元测试单元测试集成测试集成测试健全性或静态分析这是测试基础架构代码的初始阶段。在静态分析中,我们确保代码具有正确的语法。它还有助于确保我们的代码符合行业标准并遵循最佳实践。短羊毛就属于这一类。声音测试工具的一些例子,比如Chef的美食评论家,Docker的hadolint,Terraform的tflint等。

单元测试在单元测试的帮助下,我们在不实际提供基础设施的情况下评估我们的代码。例如,您可以限制容器作为非根用户运行,或者您的组应该只使用TCP协议。单元测试的例子有Terraform的竞赛和Chefspecs的厨师食谱。

作为非根用户进行的根竞赛示例:

package deny[msg]{ input . kind==\’ deployment \’ not input . spec . template . spec . security context . runasnonroot msg:=\’ containers不得以root身份运行\’ }集成测试在集成测试中,我们希望通过将IaC实际部署到所需的环境来测试它。例如,您部署了一个虚拟机,并在该虚拟机的端口80上托管了一个Nginx服务器。因此,您将在部署后检查端口80是否侦听。

下面是一个使用ServerSpec实现这一点的示例:

描述端口(80)do it { should be _ listening }结束

在本文中,我们将使用Terrratest探索基础设施代码的集成测试。

什么是Terratest?我们能用它做什么?Terratest是由Gruntwork开发的围棋库。它可以帮助您创建和自动化用Terraform编写的基础代码测试,并为IaaS提供商如Amazon和Google或Kubernetes集群打包它们。它为您提供了各种功能和任务模式,例如:

测试Docker图像、舵图和包装模板。允许使用各种云提供商API,如AWS和AzureTerratest,来对您的基础架构代码执行可靠性和功能测试。使用Terratest,您可以很容易地识别当前基础设施代码中的问题,并尽快修复它。我们还可以使用Terratest测试您的基础设施的合规性,例如,在通过IaC创建的任何新S3存储桶上启用版本控制和加密。

安装Terratest所需的二进制文件Terratest,主要需要Terraform和Go来执行。在这篇博文中,我们使用了Terraform 1 . 0 . 0版和Go 1 . 17 . 6版进行测试。

安装Terraform根据Terraform网站上的下载部分在你的电脑上安装terra form;您可以使用包管理器或下载二进制文件并在PATH中提供它。

安装后,运行以下命令验证安装是否正确:

地形版本

Go test依赖项安装可通过以下步骤完成:

安装Go你可以使用Linux发行版的包管理器来安装Go或者按照Go的安装文档来安装。

测试需要gccGo test命令。gcc可能是必需的,您可以使用分布式包管理器来安装它。例如,在CentOS/Amazon Linux 2上,可以使用yum install-y gcc。

Terratest在行动。现在我们将使用terratest来执行一些集成测试。安装步骤完成后,克隆terratest-sample存储库以开始执行terratest。首先,我们使用Go编写测试并执行它。

首先要做的是:

你的测试文件名应该有,例如,它的名字sample_test.go这是go查找测试文件的方式。测试函数名应该用test t大写,比如Test function可以,但是testFunction会给出一个错误“no test to run”来安装AWS授权配置。我们需要AWS凭证来设置AWS中的基础设施;我们可以使用环境变量或共享凭证文件来配置它。请参考Terraform文档了解更多详情。

基础设施的Terraform代码可以在组件的相应文件夹中找到。对于ec2,在ec2 _ instance下,对于API gateway,在API _ gate文件夹下。Terratest将Terraform的output.tf的输出作为其测试的输入。下面是一个代码片段,用于测试我们在使用的ec2实例上是否有相同的ssh密钥。

包terratestimport(\’ testing \’ \’ github . com/stretchr/evidence/assert \’ \’ github . com/grunt work-io/terra test/modules/terra form \’)func test C2 ssh key(t * testing。T) { terraformOptions :=terraform。WithDefaultRetryableErrors(t,terraform。选项{ TerraformDir:\’./terraform \’,})延迟terraform。销毁(t,terraformOptions) terraform。InitAndApply(t,terraformOptions)EC 2s shkey:=terraform。Output(t,terraformOptions,\’ instance_ssh_key\’) assert。Equal(t,\’ terratest \’,ec2SshKey)}

为了更好的理解,我们将它分成不同的部分:第一步,我们定义一个名为terratest的Go包,然后导入测试执行所需的不同包。

封装terratestimport(\’ testing \’ \’ github . com/stretchr/evidence/assert \’ \’ github . com/grunt work-io/terra test/modules/terra form \’)

一旦我们具备了所有的先决条件,我们将创建一个函数来执行实际的测试:

func test C2 sshkey(t *测试。T) { terraformOptions :=terraform。WithDefaultRetryableErrors(t,terraform。选项{ TerraformDir:\’./terraform \’,})延迟terraform。销毁(t,terraformOptions) terraform。InitAndApply(t,terraformOptions)EC 2s shkey:=terraform。Output(t,terraformOptions,\’ instance_ssh_key\’) assert。Equal(t,\’ terratest \’,ec2SshKey)}

在下面的小节中,我们定义了terratest应该在其中查找Terraform清单的目录,即main.tf和output.tf,以创建基础结构。

terraformOptions :=terraform。WithDefaultRetryableErrors(t,terraform。选项{ TerraformDir:\’./terraform \’,})

在go中,我们使用delay方法来执行清理任务,应该是terraform destroy。

我们使用下面的代码片段定义:

推迟地形改造。销毁(T,Terraform选项)现在我们可以进入实际执行阶段了:

使用地形。InitAndApply我们调用Terraform函数Terraform init并应用通常用于Terraform执行的函数:

地形。InitAndApply(t,terraformOptions)

如前所述,Terratest从output.tf中寻找变量定义的输出

在下面的代码片段中,我们从Terraform输出中获取ssh密钥,并将其与我们定义的ssh密钥名称进行匹配:

ec2SshKey :=terraform .Output(t,terraformOptions,\’ instance_ssh_key \’)断言.Equal(t,\’ terratest \’,ec2SshKey)执行测试将目录切换到克隆存储库的位置。导航到测试文件所在的位置。

初始化去模块,并下载依赖项。有关更多细节,请查看地形测试文档的设置项目部分。

go mod init ec2_instancego mod tidy

最后,执行测试:

$ go测试-v-PASS:testec 2 sshkey(98.72秒)PASSok命令行参数98.735秒我们先用地形测试测试一下在上一节中,我们使用地形测试执行了一些基本的测试级别。现在,我们将通过部署一个以希腊字母的第11个和白麻布圣职衣为后端的应用程序接口网关来执行一个高级测试。

高级功能应用程序接口网关的得到请求将由白麻布圣职衣提供服务,任何方法将由希腊字母的第11个通过应用程序接口网关提供服务。部署之后,我们将对网关部署统一资源定位器执行HTTPGET请求,并检查它是否返回成功代码。

注意:在我们的执行中,我们没有使用任何API _ KEY进行身份验证,但是您应该利用它来复制应用程序接口网关的更现实的用法。

地形输出。TF输出“lb _ address”value=AWS _ lb。负载平衡器。DNS _ name描述=\’负载平衡器的DNS \’ } output \’ API _ id \’ { description=\’ REST API id \’ value=AWS _ API _ gateway _ REST _ API。API。id } output \’ Deployment _ invoke _ URL \’ { description=\’ Deployment invoke URL \’ value=\’ $ { AWS _ API _ gateway _ stage。测试。invoke _ URL }/resource \’ }测试执行的代码段在第一个场景中,我们已经解释了基本语法,因此将直接使用测试函数。

func testpigateway(t *测试t){//AWS region:=\’ eu-west-2 \’ terraformOptions:=terraform .WithDefaultRetryableErrors(t,terraform .选项{TerraformDir:\’./\’,})延迟地形。销毁(t,terraformOptions) terraform .InitAndApply(t,terraformOptions)阶段URL:=terraform .输出(t,terraformOptions,\’部署_调用_url \’)时间。睡眠(30 *次秒)状态码:=doget request(t,stageUrl) assert .Equal(t,200,状态码)} func doget请求(t terra _ test .TestingT,api string) int{ resp,err :=http .Get(api) if err!=nil { log .fatal ln(err)}//我们读取下面一行的响应状态。返回分别是.StatusCode}

在上面的代码片段中,我们定义了函数DoGetRequest来运行HTTPGET测试。然后,我们使用这个函数的输出作为测试通道函数的输入。

测试执行和输出testapegateway 2022-03-01t 06:56:18Z记录器。go:66:deployment _ invoke _ URL=\’ https://iuabeqgmj 2。执行-API。欧盟-西方-1。亚马逊AWS。“test pigateway 2022-03-01t 06:56:18Z记录器。go:66:lb _ address=\’我的-演示-负载平衡器-376285754。欧盟-西方-1

正如您所看到的,它已经执行了我们的测试函数TestApiGateway,在这个函数中,它已经对应用程序接口网关的部门呼叫全球资源定位器(Uniform Resource Locator)执行了HTTP GET测试,并返回了测试状态。

使用地形测试测试地形测试模块的可扩展性和兼容性我们也可以使用地形测试进行法规遵循性测试:

检查SQS队列或S3桶上是否启用了加密验证是否为应用程序接口网关设置了特定的节流限制我们已经为应用程序接口网关开发了地形测试检查。在本例中,我们将验证是否为您的应用程序接口网关添加了授权人。您可以了解更多关于什么是授权者的信息。

目前,地形测试在其自动警报系统模块中没有应用程序接口网关模块。您可以在Terratest AWS模块目录中找到可用的自动警报系统模块。其他地形测试模块,如码头工人、打包工和头盔,可以在地形测试模块目录中找到。

企业及其客户希望产品运输速度更快。基础设施即代码提供更快的基础设施供应。随着越来越多的基础设施成为代码,对测试的需求也在增加。在本文中,我们讨论了像Terratest这样的工具如何在将代码部署到生产环境之前帮助验证代码。我们展示了Terratest是如何工作的,甚至执行了测试用例来展示它是如何完成的。Terratest的好处之一是它的可伸缩性,这可以通过使用本文中提到的模块来实现。

广告位
本文来自网络,不代表区块链网站|NFTS立场,转载请注明出处:https://www.qklwz.com/jzb/lunc/15599.html

作者: 炒面多吃

上一篇
下一篇

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

返回顶部