四个步骤,带你使用 KCL 自动化验证 Terraform 配置!

本文讲述了如何使用KCL语言特性验证Terraform的配置文件,通过定义KCL策略确保执行计划符合预期,避免在大规模基础设施管理中的潜在问题。

3aeedbf9eabbf9835db98b666c12983c.jpeg

🧐为什么需要 KCL 验证 Terraform 配置

Terraform 是一种广泛使用的基础设施即代码工具,它以声明性的方式帮助开发团队定义和管理基础架构。然而,随着基础架构规模的增大,Terraform 执行计划生成的配置文件变得越来越复杂,因此借助工具自动化验证执行计划中的行为变得至关重要。

KCL 由于其独特的语言特性,能够提供出色的配置验证能力本文将介绍如何使用 KCL 及其 vet 工具手动或自动执行 Terraform 配置验证,通过定义 KCL 策略来对 Terraform 执行计划进行验证,来保证 Terraform 的执行计划符合期望。

06e658351379e283f076853ef2eea0da.jpeg

🔖概念补充:什么是 Terraform

Terraform 是一种开源的基础设施即代码(Infrastructure as Code)工具,它允许开发团队以声明性的方式定义和管理基础架构,包括云服务、服务器、网络、存储等资源。

基础设施即代码是一种将基础设施的配置和管理与应用程序代码相结合的方法。通过使用 Terraform,开发人员可以使用简单的配置语言来描述所需的基础设施资源,并将其存储在版本控制系统中。这样做的好处是可以实现基础设施的可重复性、可管理性和可追溯性

Terraform 中一个重要概念是执行计划(Execution Plan)。执行计划是指在应用配置更改之前,Terraform 会生成一个详细的计划,展示将要创建、更新或删除的资源。执行计划可以帮助开发人员了解 Terraform 将如何修改基础设施,以及可能引起的变化和影响。

⚒️上手环境准备

想要实践 KCL 验证 Terraform 配置,首先我们需要安装相关的工具。

  • 安装 KCL: https://kcl-lang.io/docs/user_docs/getting-started/install

  • 安装 Terraform: https://developer.hashicorp.com/terraform/downloads?product_intent=terraform

  • 设置您的 AWS 凭证以供终端使用: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html

🌰举例上手 Terraform

我们准备了一个例子。你可以通过以下命令来下载这个案例。

git clone https://github.com/kcl-lang/kcl-lang.io.git/

下载完成后,进入案例的目录,并且查看 Terraform 的配置。

cd ./kcl-lang.io/examples/terraform/validation
cat main.tf

如果您能看到如下输出,证明您已经正确下载了这个案例!

provider "aws" {
   region = "us-west-1"
}
resource "aws_instance" "web" {
 instance_type = "t2.micro"
 ami = "ami-09b4b74c"
}
resource "aws_autoscaling_group" "my_asg" {
 availability_zones        = ["us-west-1a"]
 name                      = "my_asg"
 max_size                  = 5
 min_size                  = 1
 health_check_grace_period = 300
 health_check_type         = "ELB"
 desired_capacity          = 4
 force_delete              = true
 launch_configuration      = "my_web_config"
}
resource "aws_launch_configuration" "my_web_config" {
   name = "my_web_config"
   image_id = "ami-09b4b74c"
   instance_type = "t2.micro"
}

接下来,您可以通过如下命令,在生成的 tfplan.json 文件中查看 Terraform plan 对应的配置。

terraform init
terraform plan --out tfplan.binary
terraform show -json tfplan.binary > tfplan.json

现在,您已经学会了查看 Terraform 的配置执行计划🆒

💻编写对应的 KCL 验证策略

为了使用 KCL 验证上面例子中提供的配置,我们需要在 KCL 程序编写配置的验证规则。假设我们现在在 AWS 资源组的自动扩缩操作中禁止删除资源,我们可以编写如下 KCL 程序:

schema TFPlan:
   # 忽略其他属性
   [...str]: any
   resource_changes?: [AcceptableChange]
schema AcceptableChange:
   # 忽略其他属性
   [...str]: any
   check:
       # 拒绝 AWS autoscaling group Resource delete action
       all action in change.actions {
           action not in ["delete"]
       } if type == "aws_autoscaling_group", "Disable AWS autoscaling group resource delete action for the resource ${type} ${name}"

我们在校验规则中,通过 action not in["delete"]  语句检查所有的操作是否包含 delete action。如果没有包含 delete action,则通过验证;否则将会输出验证错误信息。

使用 KCL 验证 Terraform Plan 文件

您可以使用如下命令对 Terraform Plan 进行验证。

kcl-vet tfplan.json main.k

由于计划符合策略文件中包含的验证规则,所以没有错误信息输出👍🏻

来看看验证失败的效果

我们可以创建一个验证失败的 KCL 文件 main.policy.failure.k 来展示一下验证失败的效果。

我们在上面给出的 KCL 文件中调整验证规则,将不能包含 delete action 对应的规则 action not in["delete"]调整为不能包含 create action 的规则 action not in["create"]

schema TFPlan:
   # 忽略其他属性
   [...str]: any
   resource_changes?: [AcceptableChange]
schema AcceptableChange:
   # 忽略其他属性
   [...str]: any
   check:
       # 拒绝 AWS autoscaling group Resource delete action
       all action in change.actions {
           action not in ["create"]
       } if type == "aws_autoscaling_group", "Disable AWS autoscaling group resource create action for the resource ${type} ${name}"

在上面的规则中,我们的规则定义了生成的 tfplan.json 文件中不可以包含 “create action”,即禁止创建资源, 通过如下命令对配置内容进行验证。

kcl-vet tfplan.json main.policy.failure.k

因为上述生成的 tfplan.json 文件中包含对资源的创建操作 “create action”,

"change": {
  "actions": [
     "create"
  ],
...
}

因此,我们可以看到由于没有通过验证而输出的错误提示信息。

Error: EvaluationError
 --> main.policy.failure.k:13:1
  |
13 |         } if type == "aws_autoscaling_group", "Disable AWS autoscaling group resource create action for the resource ${type} ${name}"
  |  Check failed on the condition: Disable AWS autoscaling group resource create action for the resource aws_autoscaling_group my_asg
  |

🙌课后总结

本文介绍了如何使用 KCL 及其 vet 工具验证 Terraform 配置。通过使用 KCL 和 vet 工具,我们可以手动或自动执行 Terraform 配置验证,以确保数据与 KCL 策略代码的一致性。

欢迎 star ⭐️

https://github.com/kcl-lang

https://github.com/KusionStack/kusion

https://kcl-lang.io/

https://kusionstack.io/

📝本周推荐阅读

c7550713c822a5c03871270cc59afb54.jpeg

使用 GitHub、Argo CD 和 KCL 实现 GitOps 以简化 DevOps

2163daa740e93e0adf0a6363c02337e1.jpeg

Lunettes - 让 Kubernetes 服务运营更简单

17cadeb1a1189a32141ee96c09bf85f4.jpeg

告别复杂性!用正确的工具轻松应对 K8s 管理挑战

c6c3459144e4d826ebfa933800c571c2.jpeg

SOFABoot 4.0 正式发布,多项新特性等你来体验!

657e4b1a58afbf5c9ae51bd716072e97.jpeg

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值