# @cdk8s/awscdk-resolver 中文文档

规范地址：https://npmcn.com/package/%40cdk8s/awscdk-resolver/

版本：0\.0\.728
npm 元数据更新时间：2026-11-07T06:21:48.645Z
中文译文更新时间：2026-11-09T06:13:27.224Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40cdk8s/awscdk-resolver
原文对照：https://npmcn.com/package/%40cdk8s/awscdk-resolver/?lang=original
项目主页：https://github.com/cdk8s-team/cdk8s-awscdk-resolver#readme
源码仓库：https://github.com/cdk8s-team/cdk8s-awscdk-resolver

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：7 MB，3120 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- Node.js 要求：\>= 16\.20\.0
- 运行依赖：1 个
- peer 依赖：cdk8s ^2\.68\.91，constructs ^10\.3\.0，aws-cdk-lib ^2\.195\.0
- 首次发布：2023-10-02T17:23:04.139Z
- 最新版本发布：2026-11-07T06:21:48.240Z
- 近 30 天下载量：5622（2026-10-10 至 2026-11-08，npm 官方下载统计）
- 已发布版本数：721（近 12 个月 326 个）

## 中文简介

这个 `AwsCdkResolver` 能够解决任何 [`CfnOutput`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.CfnOutput.html) 由您的 AWS CDK 应用程序定义。 在这个例子中,我们创建一个S3 `Bucket` 使用 AWS CDK,并通过其(部署时间g)

## 安装

```sh
npm install @cdk8s/awscdk-resolver
```

也可以使用：`pnpm add @cdk8s/awscdk-resolver`、`yarn add @cdk8s/awscdk-resolver`、`bun add @cdk8s/awscdk-resolver`

## README

# AWS CDK 解析器

这个 `AwsCdkResolver` 能够解决任何 [`CfnOutput`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.CfnOutput.html) 由您的 AWS CDK 应用程序定义。 在这个例子中,我们创建一个S3 `Bucket` 与 AWS CDK 连接,并传递其( 所生成的部署时间) 名称为 Kubernetes 的环境变量 `CronJob` 资源.

```ts
import * as aws from 'aws-cdk-lib';
import * as k8s from 'cdk8s';
import * as kplus from 'cdk8s-plus-27';

import { AwsCdkResolver } from '@cdk8s/awscdk-resolver';

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

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

const bucket = new aws.aws_s3.Bucket(stack, 'Bucket');
const bucketName = new aws.CfnOutput(stack, 'BucketName', {
  value: bucket.bucketName,
});

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

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

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

1.  `cdk deploy`
2.  `cdk8s synth`

> 注意 `AwsCdkResolver` 实值 **仅限** 能够获取具有 `CfnOutput` 为他们定义.

##### 权限

自运行以来 `cdk8s synth` 现在需要执行AWS服务电话,它必须能够访问 到一组AWS证书。 全权证书必须允许下列一系列行动:

-   `cloudformation:DescribeStacks`

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

## 交叉仓库工作流程

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

在这种情况下, `cdk.ts` 在 AWS CDK 应用程序中,存储在一个专用寄存器中.

```ts
import * as aws from 'aws-cdk-lib';

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

const bucket = new aws.aws_s3.Bucket(stack, 'Bucket');
const bucketName = new aws.CfnOutput(stack, 'BucketName', {
  value: bucket.bucketName,
});

awsApp.synth();
```

为了 `cdk8s` 应用程序具有交叉寄存器访问, 我们需要曝光 AWS CDK 对象实例 通过软件包寄存器。 为此,将 AWS CDK 应用程序分解为以下文件:

`app.ts`

```ts
import * as aws from 'aws-cdk-lib';

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

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

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

`main.ts`

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

awsApp.synth();
```

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

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

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

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

// import the desired instance from the AWS CDK app.
import { bucketName } from 'my-cdk-app';

import { AwsCdkResolver } from '@cdk8s/awscdk-resolver';

const k8sApp = new k8s.App({ resolvers: [new AwsCdkResolver()] });
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 `CfnOutput` containing 
      // the deploy time bucket name
      BUCKET_NAME: kplus.EnvValue.fromValue(bucketName.value),
    }
 }]
});

k8sApp.synth();
```

## 常见问题

### @cdk8s/awscdk-resolver 是什么？

这个 AwsCdkResolver 能够解决任何 CfnOutput 由您的 AWS CDK 应用程序定义。 在这个例子中,我们创建一个S3 Bucket 使用 AWS CDK,并通过其\(部署时间g\)

### 如何安装 @cdk8s/awscdk-resolver？

在项目目录运行 npm install @cdk8s/awscdk-resolver，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：cdk8s（^2\.68\.91）、constructs（^10\.3\.0）、aws-cdk-lib（^2\.195\.0）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @cdk8s/awscdk-resolver 支持 TypeScript 吗？

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

### @cdk8s/awscdk-resolver 支持 ESM 还是 CommonJS？

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

### @cdk8s/awscdk-resolver 需要什么版本的 Node\.js？

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

### @cdk8s/awscdk-resolver 可以商用吗？

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

### @cdk8s/awscdk-resolver 的下载量有多少？

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

### @cdk8s/awscdk-resolver 还在维护吗？

最新版本 0\.0\.728 发布于 2026/11/07（2 天前）；至今共发布 721 个版本，其中过去 12 个月发布了 326 个；首次发布于 2023/10/03。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

