#terraform #infrastructure #tf-bindgen #cli #bindings-generator

tf-bindgen-cli

围绕 Terraform 的包装器,以改进 tf-bindgen 的使用

1 个不稳定版本

0.1.0 2023 年 4 月 16 日

#617配置


用于 3 个 Crates(通过 tf-bindgen

BSD-3-Clause

21KB
266

tf-bindgen

docs crates

tf-bindgen 可用于为 Terraform 提供商生成 Rust 绑定并部署您的基础设施。此库将复制 CDK for Terraform 的大多数功能,但用 Rust 编写。

要求

必需的工具

  • cargo
  • terraform

什么是 tf-bindgen

tf-bindgen 是一个代码生成器,可以生成 Rust 代码来使用 Terraform 配置基础设施。以下示例显示了如何使用 tf-bindgen 配置运行 nginx 的 Kubernetes pod

fn init() -> Stack {
	let stack = Stack::new("nginx");

	/// Configure Resources using a builder
	let metadata = KubernetesNamespaceMetadata::builder()
		.name("nginx")
		.build();
	let namespace = KubernetesNamespace::create(&stack, "nginx-namespace")
		.metadata(metadata)
		.build();

	/// Configure Resources using the resource! macro
	resource! {
		&stack, resource "kubernetes_pod" "nginx" {
			metadata {
				namespace = &namespace.metadata[0].name
				name = "nginx"
			}
			spec {
				container {
					name = "nginx"
					image = "nginx"
					port {
						container_port = 80
					}
				}
			}
		}
	};

	stack
}

有关 tf-bindgen 的全面介绍,请参阅 文档

问题

编译性能

某些提供商(如 tf-kubernetes)将生成大型绑定,导致编译时间过长。如果您遇到此问题,请参阅 提高编译时间 部分。

路线图

v0.1

  • 为 Terraform 提供商生成 Rust 代码
    • 实现数据块
    • 实现资源块
  • 添加对变量引用的支持
  • 从 Terraform 模块生成 Rust 代码
  • 添加代码生成器 tf_bindgen::codegen::resource
  • 添加 Construct derive 宏
  • 创建 Markdown 书籍

v0.2

  • 在结构中添加对输出的支持
  • 添加用于生成 CLI 应用的宏
  • 添加 format! 用于值类型
  • 从生成的源代码中删除 derive 宏

限制

如上所述,此库将复制由 CDK for Terraform 提供的功能。它不是 Rust 的直接替代品,在实现的一些方面将有所不同

  1. cdktf(库和 CLI 应用程序)不是使用此库必需的
  2. tf-bindgen 构造与 CDK 构造不兼容。

贡献

许可

本项目采用 BSD-3-Clause 许可协议。

依赖

~1–1.8MB
~41K SLoC