@cdk8s/cdktf-resolver

中文文档
0.0.314发布于 2026/10/27Apache-2.0TypeScriptCommonJS零依赖构建来源已验证近 30 天下载 2319

这个 CdkTfResolver 能够解决任何 TerraformOutput 由您的 CDKTF 应用程序定义。 在这个例子中,我们创建一个S3 Bucket 使用CDKTF,以及

中文使用文档

CDK 为地表解析器

这个 CdkTfResolver 能够解决任何 TerraformOutput 由您的 CDKTF 应用程序定义。 在这个例子中,我们创建一个S3 Bucket 与 CDKTF 连接,并传递其(所生成的部署时间) 名称为 Kubernetes 的环境变量 CronJob 资源.

import * as tf from "cdktf";
import * as aws from "@cdktf/provider-aws";
import * as k8s from 'cdk8s';
import * as kplus from 'cdk8s-plus-26';

import { CdkTfResolver } from '@cdk8s/cdktf-resolver';

const awsApp = new tf.App();
const stack = new tf.TerraformStack(awsApp, 'aws');

const k8sApp = new k8s.App({ resolvers: [new resolver.CdktfResolver({ app: awsApp })] });
const manifest = new k8s.Chart(k8sApp, 'Manifest', { resolver });

const bucket = new aws.s3Bucket.S3Bucket(stack, 'Bucket');
const bucketName = new tf.TerraformOutput(constrcut, 'BucketName', {
  value: bucket.bucket,
});

new kplus.CronJob(manifest, 'CronJob', {
  schedule: k8s.Cron.daily(),
  containers: [{
    image: 'job',
    envVariables: {
      // directly passing the value of the `TerraformOutput` containing 
      // the deploy time bucket name
      BUCKET_NAME: kplus.EnvValue.fromValue(bucketName.value),
    }
 }]
});

awsApp.synth();
k8sApp.synth();

在cdk8s合成过程中,自定义解析器会检测到 bucketName.value 这不是一个具体的价值, 但它是一个价值 TerraformOutput。然后将进行 cdktf 要获取 CLI 命令 实际价值来自您账户中部署的基础设施。 这意味着,按照顺序 页:1 cdk8s synth 要成功,必须执行 之后 cDKTF资源已经部署. 因此,你的部署工作流程(概念上)应该是:

  1. cdktf deploy
  2. cdk8s synth

注意 CdkTfResolver 实值 仅限 能够获取具有 TerraformOutput 为他们定义.

权限

自运行以来 cdk8s synth 现在需要读取三角形输出,它必须有这样做的权限. 如果使用远程状态文件,这意味着为可以访问的账户提供一套证书 到州所贮. 这取决于云提供商的不同, 但在大多数情况下,将涉及给予 读取 blob 存储设备上的权限(例如 S3 桶).

注意 cdk8 所需的权限比通常所需的权限要小得多 部署 CDKTF 应用程序。 因此建议不重复使用同样的一套全权证书, 转而建立一个缩小范围 ReadOnly 用于 cdk8s 解析器的角色.

解析器将执行的命令如下:

交叉仓库工作流程

正如我们所看到的,你的 cdk8s 应用程序需要访问您云应用程序中定义的对象。 如果两个申请 定义在同一文件中,这是微不足道的实现。 如果放在不同的文件里 很简单 import 说明就够了. 然而,如果这些应用程序在两个单独的储存库中管理,怎么办? 这使得它有点狡猾,但仍有可能.

在这种情况下, cdktf.ts 在 CDKTF 应用程序中,存储在一个专用仓库中.

import * as tf from "cdktf";
import * as aws from "@cdktf/provider-aws";

import { CdkTfResolver } from '@cdk8s/cdktf-resolver';

const awsApp = new tf.App();
const stack = new tf.TerraformStack(awsApp, 'aws');

const bucket = new aws.s3Bucket.S3Bucket(stack, 'Bucket');
const bucketName = new tf.TerraformOutput(constrcut, 'BucketName', {
  value: bucket.bucket,
});

awsApp.synth();

为了 cdk8s 应用程序具有交叉寄存器访问, CDKTF 对象实例 我们想要曝光的,需要通过一个软件包存储库提供。 要做到这一点,分手 CDKTF 应用到以下文件中 :

app.ts

import * as tf from "cdktf";
import * as aws from "@cdktf/provider-aws";

import { CdkTfResolver } from '@cdk8s/cdktf-resolver';

// export the app so we can pass it to the cdk8s resolver
export const awsApp = new tf.App();
const stack = new tf.TerraformStack(awsApp, 'aws');

const bucket = new aws.s3Bucket.S3Bucket(stack, 'Bucket');
// export the thing we want to have available for cdk8s applications
export const bucketName = new tf.TerraformOutput(constrcut, 'BucketName', {
  value: bucket.bucket,
});

// note that we don't call awsApp.synth here

main.ts

import { awsApp } from './app.ts'

awsApp.synth();

现在,发表 app.ts 文件到软件包管理器,以便您 cdk8s 应用程序可以安装并导入. 这种方法可能有些反常, 因为通常我们只公布课程 给软件包管理者, 非实例。 实际上,这些类型的应用程序引入了一个新的使用案例,需要共享实例. 从概念上来说,这和写作状态没什么不同* 联合国 它允许我们留下 在我们的编程语言的边界, 和它的打字保证.

* 联合国 事实上,我们只是发布指令 获取状态,而不是国家本身.

假设 app.ts 发表于 my-cdktf-app 包,我们 cdk8s 应用程序现在看起来是这样:

import * as k8s from 'cdk8s';
import * as kplus from 'cdk8s-plus-27';

// import the desired instance from the CDKTF app.
import { bucketName, awsApp } from 'my-cdktf-app';

import { CdkTfResolver } from '@cdk8s/cdktf-resolver';

const k8sApp = new k8s.App({ resolvers: [new resolver.CdktfResolver({ app: awsApp })] });
const manifest = new k8s.Chart(k8sApp, 'Manifest');

new kplus.CronJob(manifest, 'CronJob', {
  schedule: k8s.Cron.daily(),
  containers: [{
    image: 'job',
    envVariables: {
      // directly passing the value of the `TerraformOutput` containing 
      // the deploy time bucket name
      BUCKET_NAME: kplus.EnvValue.fromValue(bucketName.value),
    }
 }]
});

k8sApp.synth();

版本与发布记录

@cdk8s/cdktf-resolver 共发布 309 个版本,首次发布于 2023/10/03;过去 12 个月发布了 101 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.0.314latest2026/10/2713 天前
0.0.3132026/10/2614 天前
0.0.3122026/10/2020 天前
0.0.3112026/10/1921 天前
0.0.3102026/10/1228 天前
0.0.3092026/10/1030 天前

关于 @cdk8s/cdktf-resolver 的常见问题

@cdk8s/cdktf-resolver 是什么?

这个 CdkTfResolver 能够解决任何 TerraformOutput 由您的 CDKTF 应用程序定义。 在这个例子中,我们创建一个S3 Bucket 使用CDKTF,以及

如何安装 @cdk8s/cdktf-resolver?

在项目目录运行 npm install @cdk8s/cdktf-resolver,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:cdk8s(^2.68.91)、cdktf(^0.20.8)、constructs(^10.3.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@cdk8s/cdktf-resolver 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@cdk8s/cdktf-resolver 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@cdk8s/cdktf-resolver 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >= 16.20.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@cdk8s/cdktf-resolver 可以商用吗?

@cdk8s/cdktf-resolver 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@cdk8s/cdktf-resolver 的下载量有多少?

根据 npm 官方下载统计,@cdk8s/cdktf-resolver 在 2026/10/10 – 2026/11/08 这 30 天内被下载 2,319 次,日均约 77 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@cdk8s/cdktf-resolver 还在维护吗?

最新版本 0.0.314 发布于 2026/10/27(13 天前);至今共发布 309 个版本,其中过去 12 个月发布了 101 个;首次发布于 2023/10/03。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。