Categories
程式開發

Cloud Development Kit:使用TypeScript和Python生成Terraform配置


AWS、HashiCorp和Terrastack联合发布了 针对Terraform的云开发套件CDK(CDK,Cloud Development Kit)预览版 简称cdktf。cdktf支持开发人员使用Python、Typescript等编程语言管理 基础设施 即代码。cdktf 会生成JSON格式的Terraform配置,进而可使用“terraform apply”命令部署资源。此外,cdktf支持Terraform Registry现有的 module 和 provider ,以部署资源到AWS、Azure和Google Cloud。

CDK是一开源框架,支持使用 TypeScript、Java和Python等编程语言定义和 供应基础设施 ,功能上类似于 PulumiTerrastack等工具。目前的cdktf初始发布版仅支持Typescript和Python语言, 但是会 在未来版本中添加对Java、JavaScript和C#等编程语言的支持。AWS CDK可生成用于部署 基础设施 的Cloudformation格式 的 配置,但cdkft (或称 CDK for Terraform ) 生成的是JSON格式的Terraform配置文件,这并非HashiCorp配置语言(HCL , HashiCorp Configuration Language )的传统模板。 因此 ,“terraform plan”和“terraform apply”等命令将继续支持使用cdktf输出的JSON格式配置。

此外,开发人员可以使用 Terraform Registry现有的 provider和module 。例如,cdktf可以部署 基础设施 资源到 除AWS之外的Azure、Google Cloud等云服务提供商。cdktf还兼容 Docker容器HashiCorp Vault

鉴于Terrastack 的 维护者 Sebastian Korfmann现在同样是cdktf的维护者,因此二者存在很多相似之处。AWS CDK团队也通过为 CDK构建编程模型和AWS CDK工具核心软件库 jsii推荐模式和实践 以便于为该 项目做出贡献。对于上述两个组件,HashiCorp的 Anubhav Mishra预览版发布公告中做出了如下解释:

CDK构建编程模型是定义 基础设施 资源和适配器的一组语言原生框架,用于生成适用于底层 资源供应 引擎的配置文件。jsii 允许 所有支持 的 语言与JavaScript类 进行 自然 的 交互,并支持以多种编程语言交付软件库 ,所有这些语言的代码能够来自同一个代码库 。AWS CDK 能够 使用这两个组件从TypeScript、JavaScript、Python、Java和C#编写的代码中生成CloudFormation配置。

预览版发布公告中,AWS团队给出了一段示例代码,展示了如何使用cdktf框架以TypeScript代码设置AWS EC2实例:

import { Construct } from 'constructs';
import { App, TerraformStack } from 'cdktf';
import { AwsProvider } from './.gen/providers/aws';
import { Instance } from './.gen/providers/aws/instance';
 
class HelloTerraform extends TerraformStack {
 constructor(scope: Construct, name: string) {
   super(scope, name);
 
   new AwsProvider(this, 'aws', {
     region: 'us-east-1'
   });
 
   new Instance(this, 'Hello', {
     ami: "ami-2757f631",
     instanceType: "t2.micro"
   });
 }
}
 
const app = new App();
new HelloTerraform(app, 'hello-terraform');
app.synth();

想要上手使用cdktf的开发人员,首先需要 安装cdktf CLI,初始化项目并生成Terraform配置文件。然后,开发人员需要根据所使用的编程语言 下载相应的框架软件库。之后开发人员可以运行“cdktf init –template=typescript”命令,引导应用,下载依赖,并确认项目状态的存储位置。下面展示了cdkft项目的目录和文件结构:

$ tree 

├── .gen 

│   └── providers 

│       └── aws 

│        ├── accessanalyzer-analyzer.ts 

│        ├── # omitted for clarity 

│        └── xray-sampling-rule.ts 

│   └── modules 

├── .terraform 

├── cdktf.json 

├── help 

├── main.d.ts 

├── main.js 

├── main.ts 

├── package.json 

└── tsconfig.json 

在完成 基础设施 定义后,开发人员需使用cdktf提供的“cdktf synth”命令生成Terraform配置。然后,开发人员可以使用传统的Terraform工作流去下载依赖、验证计划的更改,进而将 基础设施 部署到云上。也可使用“cdktf deploy”命令实现同一工作流的部署。此外,cdktf也支持在 基础设施 代码中使用 Chef等其它provider 。

图片

图片来源:预览版发布公告“ CDK for Terraform:提供对Python和TypeScript的支持

HashiCorp同时发布了 手把手的 入门操作指南,指导 我们 使用cdktf实现 用Docker设置NGINX服务器,用TypeScript部署AWS EC2实例,并给出了用于 AzureGoogle Cloud等 provider 的示例。cdktf工具目前依然是一个实验性项目,社区欢迎通过 在GitHub上反馈或创建pull request 做出贡献。

原文链接:

Cloud Development Kit Can Now Generate Terraform Configurations Using TypeScript and Python