@aws-cdk/cfn-property-mixins

中文文档
2.275.0发布于 2026/10/27Apache-2.0TypeScriptCommonJS零依赖近 30 天下载 2.5万

为 CloudFormation 资源属性自动生成的 CDK Mixins.

中文使用文档
文档目录5 节
  1. 使用量
  2. 跨服务参考资料
  3. 合并策略
  4. 递延值(框)
  5. 每个服务的云格式属性混合

CDK 云格式属性混合


cdk-constructs: Stable


每个 CloudFormation 资源属性的自动生成,类型安全 CDK Mixins. 这些允许您将 L1 属性应用到任何使用 Mixins 机制的构造( L1, L2 或自定义) aws-cdk-lib。 。 。 .

使用量

对于每一个 CloudFormation 资源,此软件包提供 CfnXxxPropsMixin 课. 应用它 .with() 或者说 Mixins.of()数字 :

new s3.Bucket(scope, "MyBucket")
  .with(new CfnBucketPropsMixin({
    versioningConfiguration: { status: "Enabled" },
    publicAccessBlockConfiguration: {
      blockPublicAcls: true,
      blockPublicPolicy: true,
    },
  }));

跨服务参考资料

深嵌属性支持跨服务引用:

const myKey = new kms.Key(scope, "MyKey");

new s3.Bucket(scope, "EncryptedBucket")
  .with(new CfnBucketPropsMixin({
    bucketEncryption: {
      serverSideEncryptionConfiguration: [{
        serverSideEncryptionByDefault: {
          sseAlgorithm: "aws:kms",
          kmsMasterKeyId: myKey,
        },
      }],
    },
  }));

合并策略

当使用混音时,其属性会使用合并策略被合并到目标资源上. 策略控制了混合和现有资源定义同一属性时会发生什么.

有两个内在战略:

PropertyMergeStrategy.combine() (默认)

深地将从混合物中嵌入的物体合并入目标. 当一个属性的现有值和新值都是平面对象时,它们的键会相继被合并——保留了现有的键并添加了新的键. 初级、数组和不匹配类型被混合值所取代.

如果您想要在不丢失已经设置的内容的情况下添加配置, 这样做是有用的 :

const combineBucket = new s3.CfnBucket(scope, "CombineBucket");
combineBucket.publicAccessBlockConfiguration = { blockPublicAcls: true };

// Adds blockPublicPolicy while preserving the existing blockPublicAcls
combineBucket.with(new CfnBucketPropsMixin({
  publicAccessBlockConfiguration: { blockPublicPolicy: true },
}));
// Result: { blockPublicAcls: true, blockPublicPolicy: true }

PropertyMergeStrategy.override()

用混合值取代已有属性值. 每个财产都按原样复制,而不检查嵌入物. 目标上任何先前的值都会被丢弃.

当您想要完全替换配置时, 这样做是有用的 :

const overrideBucket = new s3.CfnBucket(scope, "OverrideBucket");
overrideBucket.publicAccessBlockConfiguration = { blockPublicAcls: true };

// Replaces the entire publicAccessBlockConfiguration
overrideBucket.with(new CfnBucketPropsMixin(
  { publicAccessBlockConfiguration: { blockPublicPolicy: true } },
  { strategy: PropertyMergeStrategy.override() },
));
// Result: { blockPublicPolicy: true } — blockPublicAcls is gone

自定义策略

您可以执行 IMergeStrategy 定义自己的合并行为. 这个 apply 方法接收目标对象、源对象和属性密钥允许列表:

class ArrayAppendStrategy implements IMergeStrategy {
  public apply(target: any, source: any, allowedKeys: string[]) {
    for (const key of allowedKeys) {
      if (key in source) {
        if (Array.isArray(target[key])) {
          // append to target
          target[key] = target[key].concat(source[key]);
        } else {
          // override
          target[key] = source[key];
        }
      }
    }
  }
}

递延值(框)

属性混合支持 框后值中的大多数 L2 构造 aws-cdk-lib 内部使用 Boxes 将属性计算推迟到合成时间。 当混音在目标上遇到Box时,合并会被自动推迟——一旦Box解决,合并策略就会运行,确保它运行在最终值上.

这意味着混合剂与使用 Boxes 属性的 L2 构造正确工作,例如 replicas, (中文(简体) ), rules,或 tags,无需用户的特殊处理:

// TableV2 uses a Box internally for replicas.
// The mixin defers the merge and appends the new replica at synthesis time.
const table = new dynamodb.TableV2(scope, 'Table', {
  partitionKey: { name: 'pk', type: dynamodb.AttributeType.STRING },
  // L2 prop: pointInTimeRecovery is a boolean
  replicas: [{ region: 'us-east-1', pointInTimeRecovery: true }],
});

// Mixins always use L1 (CloudFormation) property names and shapes,
// regardless of what the L2 API looks like.
table.with(new CfnGlobalTablePropsMixin({
  replicas: [{
    region: 'eu-west-1',
    // L1 prop: pointInTimeRecoverySpecification is an object
    pointInTimeRecoverySpecification: { pointInTimeRecoveryEnabled: true },
  }],
}, { strategy: PropertyMergeStrategy.combine({ arrays: ArrayMergeStrategy.append() }) }));

// Result (synthesized CloudFormation):
// Replicas:
//   - Region: us-east-1
//     PointInTimeRecoverySpecification:
//       PointInTimeRecoveryEnabled: true
//   - Region: us-west-2        <-- primary region, added by L2
//   - Region: eu-west-1        <-- added by mixin
//     PointInTimeRecoverySpecification:
//       PointInTimeRecoveryEnabled: true

大多数 L2 构造在 aws-cdk-lib 内部使用 Boxes 或 Lazys 将属性计算推迟到合成时间。 属性混和器自动检测到这些并推迟合并直到数值解决,所以合并策略总是在最终值上运行——不需要用户的特殊处理. 无法推迟合并的唯一情况是原始 Token 没有盒子支持。 这在AWS Construction 库中非常罕见,但可能在第三方包中出现. 如果你遇到一个建筑 合并没有预期的效果,请 打开一个问题 这样我们就可以调查了.

每个服务的云格式属性混合

这个软件包为所有AWS服务的每个CloudFormation资源提供自动生成的地产混接器. 每个服务都有自己的子模块来反映 aws-cdk-lib 模块结构. 从相应的服务子模块导入您想要配置的资源的混音 :

import { CfnBucketPropsMixin } from '@aws-cdk/cfn-property-mixins/aws-s3';
import { CfnFunctionPropsMixin } from '@aws-cdk/cfn-property-mixins/aws-lambda';
import { CfnTablePropsMixin } from '@aws-cdk/cfn-property-mixins/aws-dynamodb';
import { CfnLogGroupPropsMixin } from '@aws-cdk/cfn-property-mixins/aws-logs';
import { CfnDistributionPropsMixin } from '@aws-cdk/cfn-property-mixins/aws-cloudfront';
import { CfnDBInstancePropsMixin } from '@aws-cdk/cfn-property-mixins/aws-rds';

命名公约遵循一个一致的模式: 用于 Cloud Formation 资源 AWS::S3::Bucket,混音类是 CfnBucketPropsMixin 并生活在一个 aws-s3 子模块. 混合道具接口的名称 CfnBucketMixinProps 而所有属性都是可选的,所以只需要指定要设置的属性.

属性混合与任何以目标资源为默认子的构造相配合. 这意味着您可以将其应用于 L1 构造, L2 构造,以及自定义构造 :

// L1 construct
new s3.CfnBucket(scope, "L1Bucket")
  .with(new CfnBucketPropsMixin({ versioningConfiguration: { status: "Enabled" } }));

// L2 construct — the mixin finds the CfnBucket default child
new s3.Bucket(scope, "L2Bucket")
  .with(new CfnBucketPropsMixin({ versioningConfiguration: { status: "Enabled" } }));

版本与发布记录

@aws-cdk/cfn-property-mixins 共发布 38 个版本,首次发布于 2026/03/12;过去 12 个月发布了 38 个版本。

版本发布日期距今
2.275.0latest2026/10/2712 天前
2.274.02026/10/2018 天前
2.273.02026/10/0929 天前
2.272.02026/09/301 个月前
2.271.02026/09/261 个月前
2.270.02026/09/181 个月前

关于 @aws-cdk/cfn-property-mixins 的常见问题

@aws-cdk/cfn-property-mixins 是什么?

为 CloudFormation 资源属性自动生成的 CDK Mixins.

如何安装 @aws-cdk/cfn-property-mixins?

在项目目录运行 npm install @aws-cdk/cfn-property-mixins,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:constructs(^10.5.0)、aws-cdk-lib(^2.275.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@aws-cdk/cfn-property-mixins 支持 TypeScript 吗?

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

@aws-cdk/cfn-property-mixins 支持 ESM 还是 CommonJS?

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

@aws-cdk/cfn-property-mixins 需要什么版本的 Node.js?

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

@aws-cdk/cfn-property-mixins 可以商用吗?

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

@aws-cdk/cfn-property-mixins 的下载量有多少?

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

@aws-cdk/cfn-property-mixins 还在维护吗?

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