# @aws-cdk/cloudformation-include 中文文档

规范地址：https://npmcn.com/package/%40aws-cdk/cloudformation-include/

版本：1\.204\.0
npm 元数据更新时间：2023-11-21T10:13:02.852Z
中文译文更新时间：2026-11-07T20:14:27.917Z
软件包许可：Apache-2\.0

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

原始 npm 页面：https://www.npmjs.com/package/%40aws-cdk/cloudformation-include
原文对照：https://npmcn.com/package/%40aws-cdk/cloudformation-include/?lang=original
项目主页：https://github.com/aws/aws-cdk
源码仓库：https://github.com/aws/aws-cdk

弃用说明：AWS CDK v1 has reached End-of-Support on 2023-06-01\. This package is no longer being updated, and users should migrate to AWS CDK v2\. For more information on how to migrate, see https://docs\.aws\.amazon\.com/cdk/v2/guide/migrating-v2\.html

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

- 包体积（解压后）：1 MB，79 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- Node.js 要求：\>= 14\.15\.0
- 运行依赖：221 个
- peer 依赖：@aws-cdk/alexa-ask 1\.204\.0，@aws-cdk/aws-accessanalyzer 1\.204\.0，@aws-cdk/aws-acmpca 1\.204\.0，@aws-cdk/aws-amazonmq 1\.204\.0，@aws-cdk/aws-amplify 1\.204\.0，@aws-cdk/aws-amplifyuibuilder 1\.204\.0，@aws-cdk/aws-apigateway 1\.204\.0，@aws-cdk/aws-apigatewayv2 1\.204\.0，@aws-cdk/aws-appconfig 1\.204\.0，@aws-cdk/aws-appflow 1\.204\.0，@aws-cdk/aws-appintegrations 1\.204\.0，@aws-cdk/aws-applicationautoscaling 1\.204\.0，@aws-cdk/aws-applicationinsights 1\.204\.0，@aws-cdk/aws-appmesh 1\.204\.0，@aws-cdk/aws-apprunner 1\.204\.0，@aws-cdk/aws-appstream 1\.204\.0，@aws-cdk/aws-appsync 1\.204\.0，@aws-cdk/aws-aps 1\.204\.0，@aws-cdk/aws-athena 1\.204\.0，@aws-cdk/aws-auditmanager 1\.204\.0，@aws-cdk/aws-autoscaling 1\.204\.0，@aws-cdk/aws-autoscalingplans 1\.204\.0，@aws-cdk/aws-backup 1\.204\.0，@aws-cdk/aws-backupgateway 1\.204\.0，@aws-cdk/aws-batch 1\.204\.0，@aws-cdk/aws-billingconductor 1\.204\.0，@aws-cdk/aws-budgets 1\.204\.0，@aws-cdk/aws-cassandra 1\.204\.0，@aws-cdk/aws-ce 1\.204\.0，@aws-cdk/aws-certificatemanager 1\.204\.0，@aws-cdk/aws-chatbot 1\.204\.0，@aws-cdk/aws-cloud9 1\.204\.0，@aws-cdk/aws-cloudfront 1\.204\.0，@aws-cdk/aws-cloudtrail 1\.204\.0，@aws-cdk/aws-cloudwatch 1\.204\.0，@aws-cdk/aws-codeartifact 1\.204\.0，@aws-cdk/aws-codebuild 1\.204\.0，@aws-cdk/aws-codecommit 1\.204\.0，@aws-cdk/aws-codedeploy 1\.204\.0，@aws-cdk/aws-codeguruprofiler 1\.204\.0，@aws-cdk/aws-codegurureviewer 1\.204\.0，@aws-cdk/aws-codepipeline 1\.204\.0，@aws-cdk/aws-codestar 1\.204\.0，@aws-cdk/aws-codestarconnections 1\.204\.0，@aws-cdk/aws-codestarnotifications 1\.204\.0，@aws-cdk/aws-cognito 1\.204\.0，@aws-cdk/aws-comprehend 1\.204\.0，@aws-cdk/aws-config 1\.204\.0，@aws-cdk/aws-connect 1\.204\.0，@aws-cdk/aws-connectcampaigns 1\.204\.0，@aws-cdk/aws-controltower 1\.204\.0，@aws-cdk/aws-cur 1\.204\.0，@aws-cdk/aws-customerprofiles 1\.204\.0，@aws-cdk/aws-databrew 1\.204\.0，@aws-cdk/aws-datapipeline 1\.204\.0，@aws-cdk/aws-datasync 1\.204\.0，@aws-cdk/aws-dax 1\.204\.0，@aws-cdk/aws-detective 1\.204\.0，@aws-cdk/aws-devopsguru 1\.204\.0，@aws-cdk/aws-directoryservice 1\.204\.0，@aws-cdk/aws-dlm 1\.204\.0，@aws-cdk/aws-dms 1\.204\.0，@aws-cdk/aws-docdb 1\.204\.0，@aws-cdk/aws-docdbelastic 1\.204\.0，@aws-cdk/aws-dynamodb 1\.204\.0，@aws-cdk/aws-ec2 1\.204\.0，@aws-cdk/aws-ecr 1\.204\.0，@aws-cdk/aws-ecs 1\.204\.0，@aws-cdk/aws-efs 1\.204\.0，@aws-cdk/aws-eks 1\.204\.0，@aws-cdk/aws-elasticache 1\.204\.0，@aws-cdk/aws-elasticbeanstalk 1\.204\.0，@aws-cdk/aws-elasticloadbalancing 1\.204\.0，@aws-cdk/aws-elasticloadbalancingv2 1\.204\.0，@aws-cdk/aws-elasticsearch 1\.204\.0，@aws-cdk/aws-emr 1\.204\.0，@aws-cdk/aws-emrcontainers 1\.204\.0，@aws-cdk/aws-emrserverless 1\.204\.0，@aws-cdk/aws-events 1\.204\.0，@aws-cdk/aws-eventschemas 1\.204\.0，@aws-cdk/aws-evidently 1\.204\.0，@aws-cdk/aws-finspace 1\.204\.0，@aws-cdk/aws-fis 1\.204\.0，@aws-cdk/aws-fms 1\.204\.0，@aws-cdk/aws-forecast 1\.204\.0，@aws-cdk/aws-frauddetector 1\.204\.0，@aws-cdk/aws-fsx 1\.204\.0，@aws-cdk/aws-gamelift 1\.204\.0，@aws-cdk/aws-globalaccelerator 1\.204\.0，@aws-cdk/aws-glue 1\.204\.0，@aws-cdk/aws-grafana 1\.204\.0，@aws-cdk/aws-greengrass 1\.204\.0，@aws-cdk/aws-greengrassv2 1\.204\.0，@aws-cdk/aws-groundstation 1\.204\.0，@aws-cdk/aws-guardduty 1\.204\.0，@aws-cdk/aws-healthlake 1\.204\.0，@aws-cdk/aws-iam 1\.204\.0，@aws-cdk/aws-identitystore 1\.204\.0，@aws-cdk/aws-imagebuilder 1\.204\.0，@aws-cdk/aws-inspector 1\.204\.0，@aws-cdk/aws-inspectorv2 1\.204\.0，@aws-cdk/aws-internetmonitor 1\.204\.0，@aws-cdk/aws-iot 1\.204\.0，@aws-cdk/aws-iot1click 1\.204\.0，@aws-cdk/aws-iotanalytics 1\.204\.0，@aws-cdk/aws-iotcoredeviceadvisor 1\.204\.0，@aws-cdk/aws-iotevents 1\.204\.0，@aws-cdk/aws-iotfleethub 1\.204\.0，@aws-cdk/aws-iotfleetwise 1\.204\.0，@aws-cdk/aws-iotsitewise 1\.204\.0，@aws-cdk/aws-iotthingsgraph 1\.204\.0，@aws-cdk/aws-iottwinmaker 1\.204\.0，@aws-cdk/aws-iotwireless 1\.204\.0，@aws-cdk/aws-ivs 1\.204\.0，@aws-cdk/aws-ivschat 1\.204\.0，@aws-cdk/aws-kafkaconnect 1\.204\.0，@aws-cdk/aws-kendra 1\.204\.0，@aws-cdk/aws-kendraranking 1\.204\.0，@aws-cdk/aws-kinesis 1\.204\.0，@aws-cdk/aws-kinesisanalytics 1\.204\.0，@aws-cdk/aws-kinesisanalyticsv2 1\.204\.0，@aws-cdk/aws-kinesisfirehose 1\.204\.0，@aws-cdk/aws-kinesisvideo 1\.204\.0，@aws-cdk/aws-kms 1\.204\.0，@aws-cdk/aws-lakeformation 1\.204\.0，@aws-cdk/aws-lambda 1\.204\.0，@aws-cdk/aws-lex 1\.204\.0，@aws-cdk/aws-licensemanager 1\.204\.0，@aws-cdk/aws-lightsail 1\.204\.0，@aws-cdk/aws-location 1\.204\.0，@aws-cdk/aws-logs 1\.204\.0，@aws-cdk/aws-lookoutequipment 1\.204\.0，@aws-cdk/aws-lookoutmetrics 1\.204\.0，@aws-cdk/aws-lookoutvision 1\.204\.0，@aws-cdk/aws-m2 1\.204\.0，@aws-cdk/aws-macie 1\.204\.0，@aws-cdk/aws-managedblockchain 1\.204\.0，@aws-cdk/aws-mediaconnect 1\.204\.0，@aws-cdk/aws-mediaconvert 1\.204\.0，@aws-cdk/aws-medialive 1\.204\.0，@aws-cdk/aws-mediapackage 1\.204\.0，@aws-cdk/aws-mediastore 1\.204\.0，@aws-cdk/aws-mediatailor 1\.204\.0，@aws-cdk/aws-memorydb 1\.204\.0，@aws-cdk/aws-msk 1\.204\.0，@aws-cdk/aws-mwaa 1\.204\.0，@aws-cdk/aws-neptune 1\.204\.0，@aws-cdk/aws-networkfirewall 1\.204\.0，@aws-cdk/aws-networkmanager 1\.204\.0，@aws-cdk/aws-nimblestudio 1\.204\.0，@aws-cdk/aws-oam 1\.204\.0，@aws-cdk/aws-omics 1\.204\.0，@aws-cdk/aws-opensearchserverless 1\.204\.0，@aws-cdk/aws-opensearchservice 1\.204\.0，@aws-cdk/aws-opsworks 1\.204\.0，@aws-cdk/aws-opsworkscm 1\.204\.0，@aws-cdk/aws-organizations 1\.204\.0，@aws-cdk/aws-osis 1\.204\.0，@aws-cdk/aws-panorama 1\.204\.0，@aws-cdk/aws-personalize 1\.204\.0，@aws-cdk/aws-pinpoint 1\.204\.0，@aws-cdk/aws-pinpointemail 1\.204\.0，@aws-cdk/aws-pipes 1\.204\.0，@aws-cdk/aws-proton 1\.204\.0，@aws-cdk/aws-qldb 1\.204\.0，@aws-cdk/aws-quicksight 1\.204\.0，@aws-cdk/aws-ram 1\.204\.0，@aws-cdk/aws-rds 1\.204\.0，@aws-cdk/aws-redshift 1\.204\.0，@aws-cdk/aws-redshiftserverless 1\.204\.0，@aws-cdk/aws-refactorspaces 1\.204\.0，@aws-cdk/aws-rekognition 1\.204\.0，@aws-cdk/aws-resiliencehub 1\.204\.0，@aws-cdk/aws-resourceexplorer2 1\.204\.0，@aws-cdk/aws-resourcegroups 1\.204\.0，@aws-cdk/aws-robomaker 1\.204\.0，@aws-cdk/aws-rolesanywhere 1\.204\.0，@aws-cdk/aws-route53 1\.204\.0，@aws-cdk/aws-route53recoverycontrol 1\.204\.0，@aws-cdk/aws-route53recoveryreadiness 1\.204\.0，@aws-cdk/aws-route53resolver 1\.204\.0，@aws-cdk/aws-rum 1\.204\.0，@aws-cdk/aws-s3 1\.204\.0，@aws-cdk/aws-s3objectlambda 1\.204\.0，@aws-cdk/aws-s3outposts 1\.204\.0，@aws-cdk/aws-sagemaker 1\.204\.0，@aws-cdk/aws-sam 1\.204\.0，@aws-cdk/aws-scheduler 1\.204\.0，@aws-cdk/aws-sdb 1\.204\.0，@aws-cdk/aws-secretsmanager 1\.204\.0，@aws-cdk/aws-securityhub 1\.204\.0，@aws-cdk/aws-servicecatalog 1\.204\.0，@aws-cdk/aws-servicecatalogappregistry 1\.204\.0，@aws-cdk/aws-servicediscovery 1\.204\.0，@aws-cdk/aws-ses 1\.204\.0，@aws-cdk/aws-shield 1\.204\.0，@aws-cdk/aws-signer 1\.204\.0，@aws-cdk/aws-simspaceweaver 1\.204\.0，@aws-cdk/aws-sns 1\.204\.0，@aws-cdk/aws-sqs 1\.204\.0，@aws-cdk/aws-ssm 1\.204\.0，@aws-cdk/aws-ssmcontacts 1\.204\.0，@aws-cdk/aws-ssmincidents 1\.204\.0，@aws-cdk/aws-sso 1\.204\.0，@aws-cdk/aws-stepfunctions 1\.204\.0，@aws-cdk/aws-supportapp 1\.204\.0，@aws-cdk/aws-synthetics 1\.204\.0，@aws-cdk/aws-systemsmanagersap 1\.204\.0，@aws-cdk/aws-timestream 1\.204\.0，@aws-cdk/aws-transfer 1\.204\.0，@aws-cdk/aws-voiceid 1\.204\.0，@aws-cdk/aws-vpclattice 1\.204\.0，@aws-cdk/aws-waf 1\.204\.0，@aws-cdk/aws-wafregional 1\.204\.0，@aws-cdk/aws-wafv2 1\.204\.0，@aws-cdk/aws-wisdom 1\.204\.0，@aws-cdk/aws-workspaces 1\.204\.0，@aws-cdk/aws-xray 1\.204\.0，@aws-cdk/core 1\.204\.0，constructs ^3\.3\.69
- 首次发布：2020-05-16T01:59:24.099Z
- 最新版本发布：2023-06-19T21:11:48.653Z
- 近 30 天下载量：2665（2026-10-08 至 2026-11-06，npm 官方下载统计）
- 已发布版本数：190（近 12 个月 0 个）

## 中文简介

一个协助使用 CDK 中现有的 CloudFormation 模板的软件包

## 安装

```sh
npm install @aws-cdk/cloudformation-include
```

也可以使用：`pnpm add @aws-cdk/cloudformation-include`、`yarn add @aws-cdk/cloudformation-include`、`bun add @aws-cdk/cloudformation-include`

## README

# 在 CDK 中包含 CloudFormation 模板

* * *

![End-of-Support](https://img.shields.io/badge/End--of--Support-critical.svg?style=for-the-badge)

> AWS CDK v1在2023-06-01上达到了支持结束. 此软件包不再更新,用户应该迁移到 AWS CDK v2.
> 
> 关于如何移徙的更多信息,请参见: [_移动到 AWS CDK v2_ 指南](https://docs.aws.amazon.com/cdk/v2/guide/migrating-v2.html)。 。 。 .

* * *

本单元包含一组班级,其目标在于促进就业 在 CDK 中带有已存在的 CloudFormation 模板. 可以认为是扩展了 [`CfnInclude` 类](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_core.CfnInclude.html)。 。 。 .

## 基本用途

假设我们有一个文件 与已有的模板. 它可能是JSON格式的, 在一个文件中 `my-template.json`数字 :

```json
{
  "Resources": {
    "Bucket": {
      "Type": "AWS::S3::Bucket",
      "Properties": {
        "BucketName": "some-bucket-name"
      }
    }
  }
}
```

或者可以用YAML格式,在文件中 `my-template.yaml`数字 :

```yaml
Resources:
  Bucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: some-bucket-name
```

它可以包含在CDK应用程序中,其代码如下:

```ts
const cfnTemplate = new cfn_inc.CfnInclude(this, 'Template', {
  templateFile: 'my-template.json',
});
```

或者,如果您的模板使用YAML:

```ts
const cfnTemplate = new cfn_inc.CfnInclude(this, 'Template', {
  templateFile: 'my-template.yaml',
});
```

**说明**:不同的YAML解析器有时对何为有效的YAML并不认同. 如果您在包含模板时获得YAML的例外, 尝试将其转换为 JSON, 并包含该文件 . 如果您正在下载您的模板 从 Cloud Formation AWS Console, 您可以点击“ 在设计器中查看” , 轻松地以 JSON 格式获取 选项卡上的按钮 - 一次在 Designer 中,用“ 选择 JSON ” 模板语言 底板上的无线电按钮.

这将增加来自 `my-template.json` 编号 : `my-template.yaml` 输入 CDK 应用程序, 从模板文件中保留其原始逻辑ID.

请注意,包括这一进程在内的工作将: _没有_ 执行任何 [云阵变换](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html) - 说吧 包括《京都议定书》 [无服务器转换](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/transform-aws-serverless.html)。 。 。 .

从包含的模板中获取的任何资源都可以通过从模板中引用其逻辑ID来获取. 如果您知道该资源对应的 CDK 对象的类别, 您可以将返回对象投放到正确的类型:

```ts
declare const cfnTemplate: cfn_inc.CfnInclude;
const cfnBucket = cfnTemplate.getResource('Bucket') as s3.CfnBucket;
// cfnBucket is of type s3.CfnBucket
```

注意最新版本 CloudFormation 方案中没有的任何资源 在发布您所依赖的这个模块的版本时, 包括 [自定义资源](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cfn-customresource.html), (中文(简体) ), 将返回为类例 `CfnResource`, (中文(简体) ), 因此不能投放到不同的资源类型.

对该资源的任何修改将反映在产生的CDK模板中; 例如,可以更改桶名:

```ts
declare const cfnTemplate: cfn_inc.CfnInclude;
const cfnBucket = cfnTemplate.getResource('Bucket') as s3.CfnBucket;
cfnBucket.bucketName = 'my-bucket-name';
```

您也可以在定义其他构造时引用资源 , 包括高级别 (其名称不从 `Cfn`, (中文(简体) ), 例如:

```ts
declare const cfnTemplate: cfn_inc.CfnInclude;
const cfnBucket = cfnTemplate.getResource('Bucket') as s3.CfnBucket;

const role = new iam.Role(this, 'Role', {
  assumedBy: new iam.AnyPrincipal(),
});
role.addToPolicy(new iam.PolicyStatement({
  actions: ['s3:*'],
  resources: [cfnBucket.attrArn],
}));
```

### 将 L1 资源转换为 L2

资源 `getResource` 方法返回是 CDK 所谓的 [第一层资源](https://docs.aws.amazon.com/cdk/latest/guide/cfn_layer.html#cfn_layer_cfn) (比如说) `CfnBucket`) (中文(简体) ). 然而,在建筑图书馆的许多地方, cDK 需要所谓的 第2层资源,例如 `IBucket`。 。 。 . 从L1到L2资源有两种方式.

#### 使用`fromCfn*()` 方法

这是将L1资源转换为L2的首选方法. L2 资源类的静态方法 谁的名字从 `fromCfn` - 说吧 例如,对于 KMS 密钥 `Kms.fromCfnKey()` 方法 - 将L1作为论据:

```ts
declare const cfnTemplate: cfn_inc.CfnInclude;
const cfnKey = cfnTemplate.getResource('Key') as kms.CfnKey;
const key = kms.Key.fromCfnKey(cfnKey);
```

返回一个实例 `kms.IKey` 类型,可以在 CDK 中通过 `IKey` 预期. 还有.. `IKey` 实例会变异 - 意思是把任何变异方法都叫上去, 喜欢 `addToResourcePolicy()`, (中文(简体) ), 将反映在所产生的模板中.

注意在某些情况下 `fromCfn*()` 方法可能无法从基本的L1中创建 L2 . 当基础L1大量使用CloudFormation函数时,这种情况可能发生. 例如,如果尝试创建 L2 `IKey` 从此 CloudFormation 模板所代表的 L1 中:

```json
{
  "Resources": {
    "Key": {
      "Type": "AWS::KMS::Key",
      "Properties": {
        "KeyPolicy": {
          "Statement": [
            {
              "Fn::If": [
                "Condition",
                {
                  "Action": "kms:if-action",
                  "Resource": "*",
                  "Principal": "*",
                  "Effect": "Allow"
                },
                {
                  "Action": "kms:else-action",
                  "Resource": "*",
                  "Principal": "*",
                  "Effect": "Allow"
                }
              ]
            }
          ],
          "Version": "2012-10-17"
        }
      }
    }
  }
}
```

这个 `Key.fromCfnKey()` 方法不知道如何将它转化为CDK L2概念, 并放弃一个例外.

在这种情况下,需要使用第二种方法将一L1转换为一L2.

#### 使用 `from*Name/Arn/Attributes()` 方法

如果您需要的资源没有 `fromCfn*()` 方法, 或者,如果它确实存在,但它为您特定的L1投出一个例外, 您需要使用第二种方法将 L1 资源转换为 L2 .

每一个L2级都有静态工厂方法 名字像 `from*Name()`, (中文(简体) ), `from*Arn()`,和(或) `from*Attributes()`。 。 。 . 您可以通过将 L1 的正确属性传递给这些方法来获取 L1 资源 :

```ts
declare const cfnTemplate: cfn_inc.CfnInclude;

// using from*Name()
const cfnBucket = cfnTemplate.getResource('Bucket') as s3.CfnBucket;
const bucket = s3.Bucket.fromBucketName(this, 'L2Bucket', cfnBucket.ref);

// using from*Arn()
const cfnKey = cfnTemplate.getResource('Key') as kms.CfnKey;
const key = kms.Key.fromKeyArn(this, 'L2Key', cfnKey.attrArn);

// using from*Attributes()
declare const privateCfnSubnet1: ec2.CfnSubnet;
declare const privateCfnSubnet2: ec2.CfnSubnet;
const cfnVpc = cfnTemplate.getResource('Vpc') as ec2.CfnVPC;
const vpc = ec2.Vpc.fromVpcAttributes(this, 'L2Vpc', {
  vpcId: cfnVpc.ref,
  availabilityZones: core.Fn.getAzs(),
  privateSubnetIds: [privateCfnSubnet1.ref, privateCfnSubnet2.ref],
});
```

只要他们需要参考, 绝不改变一切,一切都应成功; 然而,注意到这些方法所节省的资源, 和那些返回的不一样 `fromCfn*()` 方法, 不可改变的 也就是说 任何变异方法都无效. 你必须改变L1 才能改变它们.

## 非资源模板要素

除资源外, ,也可以获取和变异所有其他模板元素:

-   [参数](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html)数字 :
    
    ```ts
    declare const cfnTemplate: cfn_inc.CfnInclude;
    const param: core.CfnParameter = cfnTemplate.getParameter('MyParameter');
    
    // mutating the parameter
    param.default = 'MyDefault';
    ```
    
-   [条件](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/conditions-section-structure.html)数字 :
    
    ```ts
    declare const cfnTemplate: cfn_inc.CfnInclude;
    const condition: core.CfnCondition = cfnTemplate.getCondition('MyCondition');
    
    // mutating the condition
    condition.expression = core.Fn.conditionEquals(1, 2);
    ```
    
-   [绘图](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/mappings-section-structure.html)数字 :
    
    ```ts
    declare const cfnTemplate: cfn_inc.CfnInclude;
    const mapping: core.CfnMapping = cfnTemplate.getMapping('MyMapping');
    
    // mutating the mapping
    mapping.setValue('my-region', 'AMI', 'ami-04681a1dbd79675a5');
    ```
    
-   [服务目录模板规则](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/reference-template_constraint_rules.html)数字 :
    
    ```ts
    declare const cfnTemplate: cfn_inc.CfnInclude;
    const rule: core.CfnRule = cfnTemplate.getRule('MyRule');
    
    // mutating the rule
    declare const myParameter: core.CfnParameter;
    rule.addAssertion(core.Fn.conditionContains(['m1.small'], myParameter.valueAsString),
      'MyParameter has to be m1.small');
    ```
    
-   [产出](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/outputs-section-structure.html)数字 :
    
    ```ts
    declare const cfnTemplate: cfn_inc.CfnInclude;
    const output: core.CfnOutput = cfnTemplate.getOutput('MyOutput');
    
    // mutating the output
    declare const cfnBucket: s3.CfnBucket;
    output.value = cfnBucket.attrArn;
    ```
    
-   [蓝绿色部署用钩](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/blue-green.html)数字 :
    
    ```ts
    declare const cfnTemplate: cfn_inc.CfnInclude;
    const hook: core.CfnHook = cfnTemplate.getHook('MyOutput');
    
    // mutating the hook
    declare const myRole: iam.Role;
    const codeDeployHook = hook as core.CfnCodeDeployBlueGreenHook;
    codeDeployHook.serviceRole = myRole.roleArn;
    ```
    

## 参数替换

如果您的模板使用了 CloudFormation 参数, 您可能想要删除它们, 以有利于构建时间值. 你可以用这个 `parameters` 属性 :

```ts
new cfn_inc.CfnInclude(this, 'includeTemplate', {
  templateFile: 'path/to/my/template',
  parameters: {
    'MyParam': 'my-value',
  },
});
```

这将取代所有提及 `MyParam` 带字符串 `'my-value'`, (中文(简体) ), 财务报告和审定财务报表 `MyParam` 将被从生成模板的“参数”部分去除.

## 嵌入式堆栈

此模块还支持使用模板 [嵌入式堆栈](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html)。 。 。 .

例如,如果您的父模板如下:

```json
{
  "Resources": {
    "ChildStack": {
      "Type": "AWS::CloudFormation::Stack",
      "Properties": {
        "TemplateURL": "https://my-s3-template-source.s3.amazonaws.com/child-stack.json"
      }
    }
  }
}
```

其中,儿童模板指向 `https://my-s3-template-source.s3.amazonaws.com/child-stack.json` 为:

```json
{
  "Resources": {
    "MyBucket": {
      "Type": "AWS::S3::Bucket"
    }
  }
}
```

你可以包括两个母堆, 和CDK应用程序中的嵌入堆栈如下:

```ts
const parentTemplate = new cfn_inc.CfnInclude(this, 'ParentStack', {
  templateFile: 'path/to/my-parent-template.json',
  loadNestedStacks: {
    'ChildStack': {
      templateFile: 'path/to/my-nested-template.json',
    },
  },
});
```

这里, `path/to/my-nested-template.json` 代表磁盘上从嵌入堆栈的原始模板 URL 下载模板文件的路径 (单位:千美元)`https://my-s3-template-source.s3.amazonaws.com/child-stack.json`) (中文(简体) ). 在CDK应用程序中, 此文件将变为 [资产](https://docs.aws.amazon.com/cdk/latest/guide/assets.html), (中文(简体) ), 编辑 `TemplateURL` 嵌入式堆栈资源属性 将修改以指出该资产.

包含的嵌入式堆栈可访问 `getNestedStack` 方法 :

```ts
declare const parentTemplate: cfn_inc.CfnInclude;

const includedChildStack = parentTemplate.getNestedStack('ChildStack');
const childStack: core.NestedStack = includedChildStack.stack;
const childTemplate: cfn_inc.CfnInclude = includedChildStack.includedTemplate;
```

现在可以参考来自 `ChildStack`, (中文(简体) ), 并与其他包含的模板一样对其进行修改:

```ts
declare const childTemplate: cfn_inc.CfnInclude;

const cfnBucket = childTemplate.getResource('MyBucket') as s3.CfnBucket;
cfnBucket.bucketName = 'my-new-bucket-name';

const role = new iam.Role(this, 'MyRole', {
  assumedBy: new iam.AccountRootPrincipal(),
});

role.addToPolicy(new iam.PolicyStatement({
  actions: [
    's3:GetObject*',
    's3:GetBucket*',
    's3:List*',
  ],
  resources: [cfnBucket.attrArn],
}));
```

还可以包括: `CfnInclude` 对象被创建, 而不是在建筑上这样做:

```ts
declare const parentTemplate: cfn_inc.CfnInclude;
const includedChildStack = parentTemplate.loadNestedStack('ChildTemplate', {
  templateFile: 'path/to/my-nested-template.json',
});
```

## 将云格式模板作为构造

在许多情况下,现有的 Cloud Formation 模板不是整个应用程序, 但更像是专门的片段, 执行特定的模式或最佳做法. 如果你有这样的模板, 您可以使用 `CfnInclude` 类以 CDK 建构方式进行 :

```ts
import { Construct } from 'constructs';
import * as cfn_inc from '@aws-cdk/cloudformation-include';
import * as path from 'path';

export class MyConstruct extends Construct {
  constructor(scope: Construct, id: string) {
    super(scope, id);

    // include a template inside the Construct
    new cfn_inc.CfnInclude(this, 'MyConstruct', {
      templateFile: path.join(__dirname, 'my-template.json'),
      preserveLogicalIds: false, // <--- !!!
    });
  }
}
```

注意到 `preserveLogicalIds` 参数 - 它确保包含的所有模板元素的逻辑ID使用CDK的算法重新命名, 保证它们在您的申请中是独一无二的. 没有这个参数通过, 即时 `MyConstruct` 在同一堆中两次将产生重复的逻辑ID.

## 常见问题

### @aws-cdk/cloudformation-include 是什么？

一个协助使用 CDK 中现有的 CloudFormation 模板的软件包注意：该包已被作者标记为弃用——AWS CDK v1 has reached End-of-Support on 2023-06-01\. This package is no longer being updated, and users should migrate to AWS CDK v2\. For more information on how to migrate, see https://docs\.aws\.amazon\.com/cdk/v2/guide/migrating-v2\.html

### 如何安装 @aws-cdk/cloudformation-include？

在项目目录运行 npm install @aws-cdk/cloudformation-include，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：@aws-cdk/alexa-ask（1\.204\.0）、@aws-cdk/aws-accessanalyzer（1\.204\.0）、@aws-cdk/aws-acmpca（1\.204\.0）、@aws-cdk/aws-amazonmq（1\.204\.0）、@aws-cdk/aws-amplify（1\.204\.0）、@aws-cdk/aws-amplifyuibuilder（1\.204\.0）、@aws-cdk/aws-apigateway（1\.204\.0）、@aws-cdk/aws-apigatewayv2（1\.204\.0）、@aws-cdk/aws-appconfig（1\.204\.0）、@aws-cdk/aws-appflow（1\.204\.0）、@aws-cdk/aws-appintegrations（1\.204\.0）、@aws-cdk/aws-applicationautoscaling（1\.204\.0）、@aws-cdk/aws-applicationinsights（1\.204\.0）、@aws-cdk/aws-appmesh（1\.204\.0）、@aws-cdk/aws-apprunner（1\.204\.0）、@aws-cdk/aws-appstream（1\.204\.0）、@aws-cdk/aws-appsync（1\.204\.0）、@aws-cdk/aws-aps（1\.204\.0）、@aws-cdk/aws-athena（1\.204\.0）、@aws-cdk/aws-auditmanager（1\.204\.0）、@aws-cdk/aws-autoscaling（1\.204\.0）、@aws-cdk/aws-autoscalingplans（1\.204\.0）、@aws-cdk/aws-backup（1\.204\.0）、@aws-cdk/aws-backupgateway（1\.204\.0）、@aws-cdk/aws-batch（1\.204\.0）、@aws-cdk/aws-billingconductor（1\.204\.0）、@aws-cdk/aws-budgets（1\.204\.0）、@aws-cdk/aws-cassandra（1\.204\.0）、@aws-cdk/aws-ce（1\.204\.0）、@aws-cdk/aws-certificatemanager（1\.204\.0）、@aws-cdk/aws-chatbot（1\.204\.0）、@aws-cdk/aws-cloud9（1\.204\.0）、@aws-cdk/aws-cloudfront（1\.204\.0）、@aws-cdk/aws-cloudtrail（1\.204\.0）、@aws-cdk/aws-cloudwatch（1\.204\.0）、@aws-cdk/aws-codeartifact（1\.204\.0）、@aws-cdk/aws-codebuild（1\.204\.0）、@aws-cdk/aws-codecommit（1\.204\.0）、@aws-cdk/aws-codedeploy（1\.204\.0）、@aws-cdk/aws-codeguruprofiler（1\.204\.0）、@aws-cdk/aws-codegurureviewer（1\.204\.0）、@aws-cdk/aws-codepipeline（1\.204\.0）、@aws-cdk/aws-codestar（1\.204\.0）、@aws-cdk/aws-codestarconnections（1\.204\.0）、@aws-cdk/aws-codestarnotifications（1\.204\.0）、@aws-cdk/aws-cognito（1\.204\.0）、@aws-cdk/aws-comprehend（1\.204\.0）、@aws-cdk/aws-config（1\.204\.0）、@aws-cdk/aws-connect（1\.204\.0）、@aws-cdk/aws-connectcampaigns（1\.204\.0）、@aws-cdk/aws-controltower（1\.204\.0）、@aws-cdk/aws-cur（1\.204\.0）、@aws-cdk/aws-customerprofiles（1\.204\.0）、@aws-cdk/aws-databrew（1\.204\.0）、@aws-cdk/aws-datapipeline（1\.204\.0）、@aws-cdk/aws-datasync（1\.204\.0）、@aws-cdk/aws-dax（1\.204\.0）、@aws-cdk/aws-detective（1\.204\.0）、@aws-cdk/aws-devopsguru（1\.204\.0）、@aws-cdk/aws-directoryservice（1\.204\.0）、@aws-cdk/aws-dlm（1\.204\.0）、@aws-cdk/aws-dms（1\.204\.0）、@aws-cdk/aws-docdb（1\.204\.0）、@aws-cdk/aws-docdbelastic（1\.204\.0）、@aws-cdk/aws-dynamodb（1\.204\.0）、@aws-cdk/aws-ec2（1\.204\.0）、@aws-cdk/aws-ecr（1\.204\.0）、@aws-cdk/aws-ecs（1\.204\.0）、@aws-cdk/aws-efs（1\.204\.0）、@aws-cdk/aws-eks（1\.204\.0）、@aws-cdk/aws-elasticache（1\.204\.0）、@aws-cdk/aws-elasticbeanstalk（1\.204\.0）、@aws-cdk/aws-elasticloadbalancing（1\.204\.0）、@aws-cdk/aws-elasticloadbalancingv2（1\.204\.0）、@aws-cdk/aws-elasticsearch（1\.204\.0）、@aws-cdk/aws-emr（1\.204\.0）、@aws-cdk/aws-emrcontainers（1\.204\.0）、@aws-cdk/aws-emrserverless（1\.204\.0）、@aws-cdk/aws-events（1\.204\.0）、@aws-cdk/aws-eventschemas（1\.204\.0）、@aws-cdk/aws-evidently（1\.204\.0）、@aws-cdk/aws-finspace（1\.204\.0）、@aws-cdk/aws-fis（1\.204\.0）、@aws-cdk/aws-fms（1\.204\.0）、@aws-cdk/aws-forecast（1\.204\.0）、@aws-cdk/aws-frauddetector（1\.204\.0）、@aws-cdk/aws-fsx（1\.204\.0）、@aws-cdk/aws-gamelift（1\.204\.0）、@aws-cdk/aws-globalaccelerator（1\.204\.0）、@aws-cdk/aws-glue（1\.204\.0）、@aws-cdk/aws-grafana（1\.204\.0）、@aws-cdk/aws-greengrass（1\.204\.0）、@aws-cdk/aws-greengrassv2（1\.204\.0）、@aws-cdk/aws-groundstation（1\.204\.0）、@aws-cdk/aws-guardduty（1\.204\.0）、@aws-cdk/aws-healthlake（1\.204\.0）、@aws-cdk/aws-iam（1\.204\.0）、@aws-cdk/aws-identitystore（1\.204\.0）、@aws-cdk/aws-imagebuilder（1\.204\.0）、@aws-cdk/aws-inspector（1\.204\.0）、@aws-cdk/aws-inspectorv2（1\.204\.0）、@aws-cdk/aws-internetmonitor（1\.204\.0）、@aws-cdk/aws-iot（1\.204\.0）、@aws-cdk/aws-iot1click（1\.204\.0）、@aws-cdk/aws-iotanalytics（1\.204\.0）、@aws-cdk/aws-iotcoredeviceadvisor（1\.204\.0）、@aws-cdk/aws-iotevents（1\.204\.0）、@aws-cdk/aws-iotfleethub（1\.204\.0）、@aws-cdk/aws-iotfleetwise（1\.204\.0）、@aws-cdk/aws-iotsitewise（1\.204\.0）、@aws-cdk/aws-iotthingsgraph（1\.204\.0）、@aws-cdk/aws-iottwinmaker（1\.204\.0）、@aws-cdk/aws-iotwireless（1\.204\.0）、@aws-cdk/aws-ivs（1\.204\.0）、@aws-cdk/aws-ivschat（1\.204\.0）、@aws-cdk/aws-kafkaconnect（1\.204\.0）、@aws-cdk/aws-kendra（1\.204\.0）、@aws-cdk/aws-kendraranking（1\.204\.0）、@aws-cdk/aws-kinesis（1\.204\.0）、@aws-cdk/aws-kinesisanalytics（1\.204\.0）、@aws-cdk/aws-kinesisanalyticsv2（1\.204\.0）、@aws-cdk/aws-kinesisfirehose（1\.204\.0）、@aws-cdk/aws-kinesisvideo（1\.204\.0）、@aws-cdk/aws-kms（1\.204\.0）、@aws-cdk/aws-lakeformation（1\.204\.0）、@aws-cdk/aws-lambda（1\.204\.0）、@aws-cdk/aws-lex（1\.204\.0）、@aws-cdk/aws-licensemanager（1\.204\.0）、@aws-cdk/aws-lightsail（1\.204\.0）、@aws-cdk/aws-location（1\.204\.0）、@aws-cdk/aws-logs（1\.204\.0）、@aws-cdk/aws-lookoutequipment（1\.204\.0）、@aws-cdk/aws-lookoutmetrics（1\.204\.0）、@aws-cdk/aws-lookoutvision（1\.204\.0）、@aws-cdk/aws-m2（1\.204\.0）、@aws-cdk/aws-macie（1\.204\.0）、@aws-cdk/aws-managedblockchain（1\.204\.0）、@aws-cdk/aws-mediaconnect（1\.204\.0）、@aws-cdk/aws-mediaconvert（1\.204\.0）、@aws-cdk/aws-medialive（1\.204\.0）、@aws-cdk/aws-mediapackage（1\.204\.0）、@aws-cdk/aws-mediastore（1\.204\.0）、@aws-cdk/aws-mediatailor（1\.204\.0）、@aws-cdk/aws-memorydb（1\.204\.0）、@aws-cdk/aws-msk（1\.204\.0）、@aws-cdk/aws-mwaa（1\.204\.0）、@aws-cdk/aws-neptune（1\.204\.0）、@aws-cdk/aws-networkfirewall（1\.204\.0）、@aws-cdk/aws-networkmanager（1\.204\.0）、@aws-cdk/aws-nimblestudio（1\.204\.0）、@aws-cdk/aws-oam（1\.204\.0）、@aws-cdk/aws-omics（1\.204\.0）、@aws-cdk/aws-opensearchserverless（1\.204\.0）、@aws-cdk/aws-opensearchservice（1\.204\.0）、@aws-cdk/aws-opsworks（1\.204\.0）、@aws-cdk/aws-opsworkscm（1\.204\.0）、@aws-cdk/aws-organizations（1\.204\.0）、@aws-cdk/aws-osis（1\.204\.0）、@aws-cdk/aws-panorama（1\.204\.0）、@aws-cdk/aws-personalize（1\.204\.0）、@aws-cdk/aws-pinpoint（1\.204\.0）、@aws-cdk/aws-pinpointemail（1\.204\.0）、@aws-cdk/aws-pipes（1\.204\.0）、@aws-cdk/aws-proton（1\.204\.0）、@aws-cdk/aws-qldb（1\.204\.0）、@aws-cdk/aws-quicksight（1\.204\.0）、@aws-cdk/aws-ram（1\.204\.0）、@aws-cdk/aws-rds（1\.204\.0）、@aws-cdk/aws-redshift（1\.204\.0）、@aws-cdk/aws-redshiftserverless（1\.204\.0）、@aws-cdk/aws-refactorspaces（1\.204\.0）、@aws-cdk/aws-rekognition（1\.204\.0）、@aws-cdk/aws-resiliencehub（1\.204\.0）、@aws-cdk/aws-resourceexplorer2（1\.204\.0）、@aws-cdk/aws-resourcegroups（1\.204\.0）、@aws-cdk/aws-robomaker（1\.204\.0）、@aws-cdk/aws-rolesanywhere（1\.204\.0）、@aws-cdk/aws-route53（1\.204\.0）、@aws-cdk/aws-route53recoverycontrol（1\.204\.0）、@aws-cdk/aws-route53recoveryreadiness（1\.204\.0）、@aws-cdk/aws-route53resolver（1\.204\.0）、@aws-cdk/aws-rum（1\.204\.0）、@aws-cdk/aws-s3（1\.204\.0）、@aws-cdk/aws-s3objectlambda（1\.204\.0）、@aws-cdk/aws-s3outposts（1\.204\.0）、@aws-cdk/aws-sagemaker（1\.204\.0）、@aws-cdk/aws-sam（1\.204\.0）、@aws-cdk/aws-scheduler（1\.204\.0）、@aws-cdk/aws-sdb（1\.204\.0）、@aws-cdk/aws-secretsmanager（1\.204\.0）、@aws-cdk/aws-securityhub（1\.204\.0）、@aws-cdk/aws-servicecatalog（1\.204\.0）、@aws-cdk/aws-servicecatalogappregistry（1\.204\.0）、@aws-cdk/aws-servicediscovery（1\.204\.0）、@aws-cdk/aws-ses（1\.204\.0）、@aws-cdk/aws-shield（1\.204\.0）、@aws-cdk/aws-signer（1\.204\.0）、@aws-cdk/aws-simspaceweaver（1\.204\.0）、@aws-cdk/aws-sns（1\.204\.0）、@aws-cdk/aws-sqs（1\.204\.0）、@aws-cdk/aws-ssm（1\.204\.0）、@aws-cdk/aws-ssmcontacts（1\.204\.0）、@aws-cdk/aws-ssmincidents（1\.204\.0）、@aws-cdk/aws-sso（1\.204\.0）、@aws-cdk/aws-stepfunctions（1\.204\.0）、@aws-cdk/aws-supportapp（1\.204\.0）、@aws-cdk/aws-synthetics（1\.204\.0）、@aws-cdk/aws-systemsmanagersap（1\.204\.0）、@aws-cdk/aws-timestream（1\.204\.0）、@aws-cdk/aws-transfer（1\.204\.0）、@aws-cdk/aws-voiceid（1\.204\.0）、@aws-cdk/aws-vpclattice（1\.204\.0）、@aws-cdk/aws-waf（1\.204\.0）、@aws-cdk/aws-wafregional（1\.204\.0）、@aws-cdk/aws-wafv2（1\.204\.0）、@aws-cdk/aws-wisdom（1\.204\.0）、@aws-cdk/aws-workspaces（1\.204\.0）、@aws-cdk/aws-xray（1\.204\.0）、@aws-cdk/core（1\.204\.0）、constructs（^3\.3\.69）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @aws-cdk/cloudformation-include 支持 TypeScript 吗？

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

### @aws-cdk/cloudformation-include 支持 ESM 还是 CommonJS？

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

### @aws-cdk/cloudformation-include 需要什么版本的 Node\.js？

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

### @aws-cdk/cloudformation-include 可以商用吗？

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

### @aws-cdk/cloudformation-include 的下载量有多少？

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

### @aws-cdk/cloudformation-include 还在维护吗？

最新版本 1\.204\.0 发布于 2023/06/20（3 年前）；至今共发布 190 个版本，其中过去 12 个月发布了 0 个；首次发布于 2020/05/16。作者已将其标记为弃用，新项目建议寻找替代方案。

