# @cdklabs/cdk-enterprise-iac 中文文档

规范地址：https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/

版本：0\.1\.0
npm 元数据更新时间：2025-03-04T17:03:32.034Z
中文译文更新时间：2026-11-09T15:12:55.534Z
软件包许可：Apache-2\.0

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

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

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

- 包体积（解压后）：984 kB，47 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- 运行依赖：0 个
- peer 依赖：aws-cdk-lib ^2\.103\.1，constructs ^10\.0\.5
- 首次发布：2022-09-14T10:00:25.713Z
- 最新版本发布：2025-03-04T17:03:31.548Z
- 近 30 天下载量：2391（2026-10-10 至 2026-11-08，npm 官方下载统计）
- 已发布版本数：527（近 12 个月 0 个）

## 中文简介

暂无中文简介

## 安装

```sh
npm install @cdklabs/cdk-enterprise-iac
```

也可以使用：`pnpm add @cdklabs/cdk-enterprise-iac`、`yarn add @cdklabs/cdk-enterprise-iac`、`bun add @cdklabs/cdk-enterprise-iac`

## README

# CDK 企业 IaC

在企业限制范围内使用CDK的公用事业.

## 安装

字体

```zsh
npm install @cdklabs/cdk-enterprise-iac
```

蟒

```zsh
pip install cdklabs.cdk-enterprise-iac
```

## 这个项目是为了谁

在大型企业中,建设者在部署AWS时可能会遇到企业强加的限制.

这可能是一些简单的事情,比如"所有IAM角色必须有一个特定的权限边界附加".

这也可能是更严格的限制,例如严格的职责分离,只允许某些团队部署特定的AWS资源(例如网络团队可以部署VPC,Subnet,和路由表). 安全小组可以部署IAM资源. 开发者可以部署计算. DBA可以部署数据库等)

此类环境非常受限制的企业如能更仔细地审视其政策,看看如何使建筑商能够在较少的摩擦下安全地部署资源,将会获益. 但是,在许多企业,说起来比做起来容易,而且建造者仍然可望交付.

该项目旨在减少在这些企业制约下工作的建筑商的摩擦,而企业则决定何种政策对其组织最有意义,绝不是规范性的.

## 使用量

有许多工具可用,详情见: [`API.md`](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/API.md)。 。 。 .

这些工具的几个例子如下:

### 在所有生成的 IAM 角色中添加权限边界

示例 `AddPermissionBoundary` 在 Typescript 工程中.

```ts
import * as cdk from 'aws-cdk-lib';
import { MyStack } from '../lib/my-project-stack';
import { Aspects } from 'aws-cdk-lib';
import { AddPermissionBoundary } from '@cdklabs/cdk-enterprise-iac';

const app = new cdk.App();
new MyStack(app, 'MyStack');

Aspects.of(app).add(
  new AddPermissionBoundary({
    permissionsBoundaryPolicyName: 'MyPermissionBoundaryName',
    instanceProfilePrefix: 'MY_PREFIX_', // optional, Defaults to ''
    policyPrefix: 'MY_POLICY_PREFIX_', // optional, Defaults to ''
    rolePrefix: 'MY_ROLE_PREFIX_', // optional, Defaults to ''
  })
);
```

示例 `AddPermissionBoundary` 在 Python 项目中.

```python
import aws_cdk as cdk
from cdklabs.cdk_enterprise_iac import AddPermissionBoundary
from test_py.test_py_stack import TestPyStack


app = cdk.App()
TestPyStack(app, "TestPyStack")

cdk.Aspects.of(app).add(AddPermissionBoundary(
    permissions_boundary_policy_name="MyPermissionBoundaryName",
    instance_profile_prefix="MY_PREFIX_",  # optional, Defaults to ""
    policy_prefix="MY_POLICY_PREFIX_",  # optional, Defaults to ""
    role_prefix="MY_ROLE_PREFIX_"  # optional, Defaults to ""
))

app.synth()
```

### 资源提取

:警告:资源提取处于实验阶段. 在生产中使用前进行测试和验证。 请打开发现的任何问题 [这里](https://github.com/cdklabs/cdk-enterprise-iac/)。 。 。 .

> 注:必须安装AWS CLI并可供资源提取器工作.

在许多企业中,与部署CDK应用程序的开发者相比,有不同的团队拥有不同的IAM权限.

例如,可能有一个网络小组,有权部署 `AWS::EC2::SecurityGroup` 财务报告和审定财务报表 `AWS::EC2::EIP`,或有权部署的安全小组 `AWS::IAM::Role` 财务报告和审定财务报表 `AWS::IAM::Policy`,但部署CDK的开发者没有这些权限.

当一个开发者没有权限在其CDK应用程序中部署必要的资源时,当一个 cdk 部署由于无法部署类似的东西而很快出错时,写好代码变得难以管理 `AWS::IAM::Role` 用于AWS的任何项目的基础.

企业应当 _允许_ 通过 CDK 部署这些资源的构建者 [许多原因](https://github.com/aws/aws-cdk/wiki/Security-And-Safety-Dev-Guide#allowing-creation-of-iam-roles-without-privilege-escalation),并可以使用 [允许边界](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html) 防止特权升级。 对于尚未使用许可边界的企业 `ResourceExtractor` 可以让建设者更容易在遵守企业政策的同时写出好的CDK.

使用 `ResourceExtractor` Spect,开发者可以将CDK代码写成他们拥有足够的IAM权限,但将这些资源取出为单独的堆栈,供外部团队代表他们部署.

Ưμ㼯A

```ts
import { App, Aspects, RemovalPolicy, Stack } from 'aws-cdk-lib';
import { Code, Function, Runtime } from 'aws-cdk-lib/aws-lambda';
import { Bucket } from 'aws-cdk-lib/aws-s3';

const app = new App();
const appStack = new Stack(app, 'MyAppStack');

const func = new Function(appStack, 'TestLambda', {
  code: Code.fromAsset(path.join(__dirname, 'lambda-handler')),
  handler: 'index.handler',
  runtime: Runtime.PYTHON_3_11,
});
const bucket = new Bucket(appStack, 'TestBucket', {
  autoDeleteObjects: true,
  removalPolicy: RemovalPolicy.DESTROY,
});
bucket.grantReadWrite(func);

app.synth()
```

合成的云形包括: _全部_ 所需AWS资源,包括开发商可能没有权限部署的资源

上述例子包括合成云形中的以下片段

```yaml
TestLambdaServiceRoleC28C2D9C:
  Type: 'AWS::IAM::Role'
  Properties:
    AssumeRolePolicyDocument:
      Statement:
        - Action: 'sts:AssumeRole'
          Effect: Allow
          Principal:
            Service: lambda.amazonaws.com
      Version: 2012-10-17
    # excluding remaining properties
  TestLambda2F70C45E:
    Type: 'AWS::Lambda::Function'
    Properties:
      Role: !GetAtt
        - TestLambdaServiceRoleC28C2D9C
        - Arn
      # excluding remaining properties
```

包括 `bucket.grantReadWrite(func)` 在CDK应用程序中,确保IAM的作用,对应用程序的IAM政策最不具有特权,IAM资源的创建,如"角色与政策"可能仅限于安全团队,导致被合成的"云形"模板不被开发者部署.

使用 `ResourceExtractor`,我们可以抽出一个任意的 Cloudform 资源列表 一个开发者 _没有_ 拥有提供权限,并创建一个单独的堆栈,可以发送给安全小组.

```ts
import { App, Aspects, RemovalPolicy, Stack } from 'aws-cdk-lib';
import { Code, Function, Runtime } from 'aws-cdk-lib/aws-lambda';
import { Bucket } from 'aws-cdk-lib/aws-s3';
// Import ResourceExtractor
import { ResourceExtractor } from '@cdklabs/cdk-enterprise-iac';

const app = new App();
const appStack = new Stack(app, 'MyAppStack');
// Set up a destination stack to extract resources to
const extractedStack = new Stack(app, 'ExtractedStack');

const func = new Function(appStack, 'TestLambda', {
  code: Code.fromAsset(path.join(__dirname, 'lambda-handler')),
  handler: 'index.handler',
  runtime: Runtime.PYTHON_3_11,
});
const bucket = new Bucket(appStack, 'TestBucket', {
  autoDeleteObjects: true,
  removalPolicy: RemovalPolicy.DESTROY,
});
bucket.grantReadWrite(func);

// Capture the output of app.synth()
const synthedApp = app.synth();
// Apply the ResourceExtractor Aspect
Aspects.of(app).add(
  new ResourceExtractor({
    // synthesized stacks to examine
    stackArtifacts: synthedApp.stacks,
    // Array of Cloudformation resources to extract
    resourceTypesToExtract: [
      'AWS::IAM::Role',
      'AWS::IAM::Policy',
      'AWS::IAM::ManagedPolicy',
      'AWS::IAM::InstanceProfile',
    ],
    // Destination stack for extracted resources
    extractDestinationStack: extractedStack,
  })
);
// Resynthing since ResourceExtractor has modified the app
app.synth({ force: true });
```

在上述例子中, _全部_ 资源创建于 `appStack`空时 `extractedStack` 还创建了.

我们应用 `ResourceExtractor` Spect,指定开发者由于IAM权限不足而无法部署的Cloudform资源类型.

当我们在 CDK 项目中列出堆栈时, 可以看到一个添加的堆栈

```zsh
$ cdk ls
MyAppStack
ExtractedStack
```

看看这些合成的堆栈,在 `ExtractedStack` 我们会找到:

```yaml
Resources:
  TestLambdaServiceRoleC28C2D9C:
    Type: 'AWS::IAM::Role'
    Properties:
      AssumeRolePolicyDocument:
        Statement:
          - Action: 'sts:AssumeRole'
            Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
        Version: 2012-10-17
      # excluding remaining properties
Outputs:
  ExportAppStackTestLambdaServiceRoleC28C2D9C:
    Value:
      'Fn::GetAtt':
        - TestLambdaServiceRoleC28C2D9C
        - Arn
    Export:
      Name: 'AppStack:TestLambdaServiceRoleC28C2D9C'  # Exported name
```

和内被合成 `MyAppStack` 模板 :

```yaml
Resources:
  TestLambda2F70C45E:
    Type: 'AWS::Lambda::Function'
    Properties:
      Role: !ImportValue 'AppStack:TestLambdaServiceRoleC28C2D9C'  # Using ImportValue instrinsic function to use pre-created IAM role
      # excluding remaining properties
```

在这种情况下,开发者能够向外部安全小组提供足够的IAM权限,以部署 `ExtractedStack`。 。 。 .

一旦部署,开发者可以运行 `cdk deploy MyAppStack` 没有因IAM权限不足而出错

#### 价值分享方法

从堆栈取出资源时,必须有一种方法来引用取出的资源.

有三种方法(见 `ResourceExtractorShareMethod` 页:1

-   `CFN_OUTPUT`
-   `SSM_PARAMETER`
-   `API_LOOKUP`

##### `CFN_OUTPUT`

默认共享方法是 `CFN_OUTPUT`,它使用 Cloudform 导出/导入导出堆栈中的值(参见 [产出](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/outputs-section-structure.html),并使用 [Fn:: 导入值](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-importvalue.html) 用于引用这些值的内在函数.

这很好,但一些团队可能更喜欢在外部团队部署的取出堆栈与其它CDK基础设施之间进行松散相接.

##### `SSM_PARAMETER`

在这个方法中,所提取的堆栈在 AWS 系统管理器参数存储中生成参数,并修改了 CDK 应用程序以使用 [`aws_ssm.StringParameter.valueFromLookup()`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ssm.StringParameter.html#static-valuewbrfromwbrlookupscope-parametername) 在合成时间.

使用这种方法的例子:

```ts
import { ResourceExtractor, ResourceExtractorShareMethod } from '@cdklabs/cdk-enterprise-iac';

Aspects.of(app).add(
  new ResourceExtractor({
    stackArtifacts: synthedApp.stacks,
    resourceTypesToExtract: [
      'AWS::IAM::Role',
      'AWS::IAM::Policy',
      'AWS::IAM::ManagedPolicy',
      'AWS::IAM::InstanceProfile',
    ],
    extractDestinationStack: extractedStack,
    valueShareMethod: ResourceExtractorShareMethod.SSM_PARAMETER,  // Specify SSM_PARAMETER Method
  });
);
```

##### `API_LOOKUP`

这个 `API_LOOKUP` 共享方法是一项正在进行中的工作,尚未支持

#### 资源部分

一些被提取的资源可能参考了尚未创建的资源.

在我们的例子 CDK 应用程序中包含行

```ts
bucket.grantReadWrite(func);
```

这创造了一个 `AWS::IAM::Policy` 包括范围扩大到S3桶的必要行动.

当 `AWS::IAM::Policy` 无法使用 `Ref` 或者说 `Fn::GetAtt` 参考S3桶,因为S3桶没有被取出.

在这种情况下,我们用“部分ARN”来取而代之,该“部分ARN”将IAM政策声明中的资源范围扩大到尚未创建的S3桶的ARN.

框外支持有多种资源类型(发现于 [`createDefaultTransforms`](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/src/patches/resource-extractor/resourceTransformer.ts)) (中文(简体) ). 如果你有资源 还没有支持, 你会收到一个 `MissingTransformError`。在这种情况下,您可以打开 [问题](https://github.com/cdklabs/cdk-enterprise-iac/issues) ,或者您可以包含 `additionalTransforms` 属性.

审议如下:

```ts
const vpc = new Vpc(stack, 'TestVpc');
const db = new DatabaseInstance(stack, 'TestDb', {
  vpc,
  engine: DatabaseInstanceEngine.POSTGRES,
})
const func = new Function(stack, 'TestLambda', {
  code: Code.fromAsset(path.join(__dirname, 'lambda-handler')),
  handler: 'index.handler',
  runtime: Runtime.PYTHON_3_11,
});
db.secret?.grantRead(func)

const synthedApp = app.synth();
Aspects.of(app).add(
  new ResourceExtractor({
    extractDestinationStack: extractedStack,
    stackArtifacts: synthedApp.stacks,
    valueShareMethod: ResourceExtractorShareMethod.CFN_OUTPUT,
    resourceTypesToExtract: ['AWS::IAM::Role', 'AWS::IAM::Policy'],
    additionalTransforms: {
      'AWS::SecretsManager::SecretTargetAttachment': `arn:${Aws.PARTITION}:secretsmanager:${Aws.REGION}:${Aws.ACCOUNT_ID}:secret:some-expected-value*`,
    },
  });
);
app.synth({ force: true });
```

在这种情况下,有一个 `AWS::SecretsManager::SecretTargetAttachment` 生成以通过将数据库连接信息添加到秘密 JSON 来完成一个秘密管理器秘密和关联数据库之间的最终链接,该秘密返回生成的秘密的ARN.

在提炼IAM政策方面,我们要告诉 `ResourceExtractor` 如何处理IAM政策说明中的资源部分,使其范围足够缩小.

在这种情况下,而不是使用 `Ref: LogicalIdForTheSecretTargetAttachment` 我们建造了我们想要使用的ARN.

详细情况 [API.md (英语)](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/API.md)

## 生成的 API.md

* * *

生成 API.md 如下:

展开以查看 API 文件

# CDK 企业 IaC

在企业限制范围内使用CDK的公用事业.

## 安装

字体

```zsh
npm install @cdklabs/cdk-enterprise-iac
```

蟒

```zsh
pip install cdklabs.cdk-enterprise-iac
```

## 这个项目是为了谁

在大型企业中,建设者在部署AWS时可能会遇到企业强加的限制.

这可能是一些简单的事情,比如"所有IAM角色必须有一个特定的权限边界附加".

这也可能是更严格的限制,例如严格的职责分离,只允许某些团队部署特定的AWS资源(例如网络团队可以部署VPC,Subnet,和路由表). 安全小组可以部署IAM资源. 开发者可以部署计算. DBA可以部署数据库等)

此类环境非常受限制的企业如能更仔细地审视其政策,看看如何使建筑商能够在较少的摩擦下安全地部署资源,将会获益. 但是,在许多企业,说起来比做起来容易,而且建造者仍然可望交付.

该项目旨在减少在这些企业制约下工作的建筑商的摩擦,而企业则决定何种政策对其组织最有意义,绝不是规范性的.

## 使用量

有许多工具可用,详情见: [`API.md`](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/API.md)。 。 。 .

这些工具的几个例子如下:

### 在所有生成的 IAM 角色中添加权限边界

示例 `AddPermissionBoundary` 在 Typescript 工程中.

```ts
import * as cdk from 'aws-cdk-lib';
import { MyStack } from '../lib/my-project-stack';
import { Aspects } from 'aws-cdk-lib';
import { AddPermissionBoundary } from '@cdklabs/cdk-enterprise-iac';

const app = new cdk.App();
new MyStack(app, 'MyStack');

Aspects.of(app).add(
  new AddPermissionBoundary({
    permissionsBoundaryPolicyName: 'MyPermissionBoundaryName',
    instanceProfilePrefix: 'MY_PREFIX_', // optional, Defaults to ''
    policyPrefix: 'MY_POLICY_PREFIX_', // optional, Defaults to ''
    rolePrefix: 'MY_ROLE_PREFIX_', // optional, Defaults to ''
  })
);
```

示例 `AddPermissionBoundary` 在 Python 项目中.

```python
import aws_cdk as cdk
from cdklabs.cdk_enterprise_iac import AddPermissionBoundary
from test_py.test_py_stack import TestPyStack


app = cdk.App()
TestPyStack(app, "TestPyStack")

cdk.Aspects.of(app).add(AddPermissionBoundary(
    permissions_boundary_policy_name="MyPermissionBoundaryName",
    instance_profile_prefix="MY_PREFIX_",  # optional, Defaults to ""
    policy_prefix="MY_POLICY_PREFIX_",  # optional, Defaults to ""
    role_prefix="MY_ROLE_PREFIX_"  # optional, Defaults to ""
))

app.synth()
```

### 资源提取

:警告:资源提取处于实验阶段. 在生产中使用前进行测试和验证。 请打开发现的任何问题 [这里](https://github.com/cdklabs/cdk-enterprise-iac/)。 。 。 .

在许多企业中,与部署CDK应用程序的开发者相比,有不同的团队拥有不同的IAM权限.

例如,可能有一个网络小组,有权部署 `AWS::EC2::SecurityGroup` 财务报告和审定财务报表 `AWS::EC2::EIP`,或有权部署的安全小组 `AWS::IAM::Role` 财务报告和审定财务报表 `AWS::IAM::Policy`,但部署CDK的开发者没有这些权限.

当一个开发者没有权限在其CDK应用程序中部署必要的资源时,当一个 cdk 部署由于无法部署类似的东西而很快出错时,写好代码变得难以管理 `AWS::IAM::Role` 用于AWS的任何项目的基础.

企业应当 _允许_ 通过 CDK 部署这些资源的构建者 [许多原因](https://github.com/aws/aws-cdk/wiki/Security-And-Safety-Dev-Guide#allowing-creation-of-iam-roles-without-privilege-escalation),并可以使用 [允许边界](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html) 防止特权升级。 对于尚未使用许可边界的企业 `ResourceExtractor` 可以让建设者更容易在遵守企业政策的同时写出好的CDK.

使用 `ResourceExtractor` Spect,开发者可以将CDK代码写成他们拥有足够的IAM权限,但将这些资源取出为单独的堆栈,供外部团队代表他们部署.

Ưμ㼯A

```ts
import { App, Aspects, RemovalPolicy, Stack } from 'aws-cdk-lib';
import { Code, Function, Runtime } from 'aws-cdk-lib/aws-lambda';
import { Bucket } from 'aws-cdk-lib/aws-s3';

const app = new App();
const appStack = new Stack(app, 'MyAppStack');

const func = new Function(appStack, 'TestLambda', {
  code: Code.fromAsset(path.join(__dirname, 'lambda-handler')),
  handler: 'index.handler',
  runtime: Runtime.PYTHON_3_11,
});
const bucket = new Bucket(appStack, 'TestBucket', {
  autoDeleteObjects: true,
  removalPolicy: RemovalPolicy.DESTROY,
});
bucket.grantReadWrite(func);

app.synth()
```

合成的云形包括: _全部_ 所需AWS资源,包括开发商可能没有权限部署的资源

上述例子包括合成云形中的以下片段

```yaml
TestLambdaServiceRoleC28C2D9C:
  Type: 'AWS::IAM::Role'
  Properties:
    AssumeRolePolicyDocument:
      Statement:
        - Action: 'sts:AssumeRole'
          Effect: Allow
          Principal:
            Service: lambda.amazonaws.com
      Version: 2012-10-17
    # excluding remaining properties
  TestLambda2F70C45E:
    Type: 'AWS::Lambda::Function'
    Properties:
      Role: !GetAtt
        - TestLambdaServiceRoleC28C2D9C
        - Arn
      # excluding remaining properties
```

包括 `bucket.grantReadWrite(func)` 在CDK应用程序中,确保IAM的作用,对应用程序的IAM政策最不具有特权,IAM资源的创建,如"角色与政策"可能仅限于安全团队,导致被合成的"云形"模板不被开发者部署.

使用 `ResourceExtractor`,我们可以抽出一个任意的 Cloudform 资源列表 一个开发者 _没有_ 拥有提供权限,并创建一个单独的堆栈,可以发送给安全小组.

```ts
import { App, Aspects, RemovalPolicy, Stack } from 'aws-cdk-lib';
import { Code, Function, Runtime } from 'aws-cdk-lib/aws-lambda';
import { Bucket } from 'aws-cdk-lib/aws-s3';
// Import ResourceExtractor
import { ResourceExtractor } from '@cdklabs/cdk-enterprise-iac';

const app = new App();
const appStack = new Stack(app, 'MyAppStack');
// Set up a destination stack to extract resources to
const extractedStack = new Stack(app, 'ExtractedStack');

const func = new Function(appStack, 'TestLambda', {
  code: Code.fromAsset(path.join(__dirname, 'lambda-handler')),
  handler: 'index.handler',
  runtime: Runtime.PYTHON_3_11,
});
const bucket = new Bucket(appStack, 'TestBucket', {
  autoDeleteObjects: true,
  removalPolicy: RemovalPolicy.DESTROY,
});
bucket.grantReadWrite(func);

// Capture the output of app.synth()
const synthedApp = app.synth();
// Apply the ResourceExtractor Aspect
Aspects.of(app).add(
  new ResourceExtractor({
    // synthesized stacks to examine
    stackArtifacts: synthedApp.stacks,
    // Array of Cloudformation resources to extract
    resourceTypesToExtract: [
      'AWS::IAM::Role',
      'AWS::IAM::Policy',
      'AWS::IAM::ManagedPolicy',
      'AWS::IAM::InstanceProfile',
    ],
    // Destination stack for extracted resources
    extractDestinationStack: extractedStack,
  })
);
// Resynthing since ResourceExtractor has modified the app
app.synth({ force: true });
```

在上述例子中, _全部_ 资源创建于 `appStack`空时 `extractedStack` 还创建了.

我们应用 `ResourceExtractor` Spect,指定开发者由于IAM权限不足而无法部署的Cloudform资源类型.

当我们在 CDK 项目中列出堆栈时, 可以看到一个添加的堆栈

```zsh
$ cdk ls
MyAppStack
ExtractedStack
```

看看这些合成的堆栈,在 `ExtractedStack` 我们会找到:

```yaml
Resources:
  TestLambdaServiceRoleC28C2D9C:
    Type: 'AWS::IAM::Role'
    Properties:
      AssumeRolePolicyDocument:
        Statement:
          - Action: 'sts:AssumeRole'
            Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
        Version: 2012-10-17
      # excluding remaining properties
Outputs:
  ExportAppStackTestLambdaServiceRoleC28C2D9C:
    Value:
      'Fn::GetAtt':
        - TestLambdaServiceRoleC28C2D9C
        - Arn
    Export:
      Name: 'AppStack:TestLambdaServiceRoleC28C2D9C'  # Exported name
```

和内被合成 `MyAppStack` 模板 :

```yaml
Resources:
  TestLambda2F70C45E:
    Type: 'AWS::Lambda::Function'
    Properties:
      Role: !ImportValue 'AppStack:TestLambdaServiceRoleC28C2D9C'  # Using ImportValue instrinsic function to use pre-created IAM role
      # excluding remaining properties
```

在这种情况下,开发者能够向外部安全小组提供足够的IAM权限,以部署 `ExtractedStack`。 。 。 .

一旦部署,开发者可以运行 `cdk deploy MyAppStack` 没有因IAM权限不足而出错

#### 价值分享方法

从堆栈取出资源时,必须有一种方法来引用取出的资源.

有三种方法(见 `ResourceExtractorShareMethod` 页:1

-   `CFN_OUTPUT`
-   `SSM_PARAMETER`
-   `API_LOOKUP`

##### `CFN_OUTPUT`

默认共享方法是 `CFN_OUTPUT`,它使用 Cloudform 导出/导入导出堆栈中的值(参见 [产出](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/outputs-section-structure.html),并使用 [Fn:: 导入值](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-importvalue.html) 用于引用这些值的内在函数.

这很好,但一些团队可能更喜欢在外部团队部署的取出堆栈与其它CDK基础设施之间进行松散相接.

##### `SSM_PARAMETER`

在这个方法中,所提取的堆栈在 AWS 系统管理器参数存储中生成参数,并修改了 CDK 应用程序以使用 [`aws_ssm.StringParameter.valueFromLookup()`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ssm.StringParameter.html#static-valuewbrfromwbrlookupscope-parametername) 在合成时间.

使用这种方法的例子:

```ts
import { ResourceExtractor, ResourceExtractorShareMethod } from '@cdklabs/cdk-enterprise-iac';

Aspects.of(app).add(
  new ResourceExtractor({
    stackArtifacts: synthedApp.stacks,
    resourceTypesToExtract: [
      'AWS::IAM::Role',
      'AWS::IAM::Policy',
      'AWS::IAM::ManagedPolicy',
      'AWS::IAM::InstanceProfile',
    ],
    extractDestinationStack: extractedStack,
    valueShareMethod: ResourceExtractorShareMethod.SSM_PARAMETER,  // Specify SSM_PARAMETER Method
  });
);
```

##### `API_LOOKUP`

这个 `API_LOOKUP` 共享方法是一项正在进行中的工作,尚未支持

#### 资源部分

一些被提取的资源可能参考了尚未创建的资源.

在我们的例子 CDK 应用程序中包含行

```ts
bucket.grantReadWrite(func);
```

这创造了一个 `AWS::IAM::Policy` 包括范围扩大到S3桶的必要行动.

当 `AWS::IAM::Policy` 无法使用 `Ref` 或者说 `Fn::GetAtt` 参考S3桶,因为S3桶没有被取出.

在这种情况下,我们用“部分ARN”来取而代之,该“部分ARN”将IAM政策声明中的资源范围扩大到尚未创建的S3桶的ARN.

框外支持有多种资源类型(发现于 [`createDefaultTransforms`](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/src/patches/resource-extractor/resourceTransformer.ts)) (中文(简体) ). 如果你有资源 还没有支持, 你会收到一个 `MissingTransformError`。在这种情况下,您可以打开 [问题](https://github.com/cdklabs/cdk-enterprise-iac/issues) ,或者您可以包含 `additionalTransforms` 属性.

审议如下:

```ts
const vpc = new Vpc(stack, 'TestVpc');
const db = new DatabaseInstance(stack, 'TestDb', {
  vpc,
  engine: DatabaseInstanceEngine.POSTGRES,
})
const func = new Function(stack, 'TestLambda', {
  code: Code.fromAsset(path.join(__dirname, 'lambda-handler')),
  handler: 'index.handler',
  runtime: Runtime.PYTHON_3_11,
});
db.secret?.grantRead(func)

const synthedApp = app.synth();
Aspects.of(app).add(
  new ResourceExtractor({
    extractDestinationStack: extractedStack,
    stackArtifacts: synthedApp.stacks,
    valueShareMethod: ResourceExtractorShareMethod.CFN_OUTPUT,
    resourceTypesToExtract: ['AWS::IAM::Role', 'AWS::IAM::Policy'],
    additionalTransforms: {
      'AWS::SecretsManager::SecretTargetAttachment': `arn:${Aws.PARTITION}:secretsmanager:${Aws.REGION}:${Aws.ACCOUNT_ID}:secret:some-expected-value*`,
    },
  });
);
app.synth({ force: true });
```

在这种情况下,有一个 `AWS::SecretsManager::SecretTargetAttachment` 生成以通过将数据库连接信息添加到秘密 JSON 来完成一个秘密管理器秘密和关联数据库之间的最终链接,该秘密返回生成的秘密的ARN.

在提炼IAM政策方面,我们要告诉 `ResourceExtractor` 如何处理IAM政策说明中的资源部分,使其范围足够缩小.

在这种情况下,而不是使用 `Ref: LogicalIdForTheSecretTargetAttachment` 我们建造了我们想要使用的ARN.

详细情况 [API.md (英语)](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/API.md)

## 生成的 API.md

* * *

生成 API.md 如下:

展开以查看 API 文件

# API 参考

## 构造

### EcsIso 服务自动缩放器

创建 EcsIsoService自动缩放构建.

此构造允许您在 ISO 中缩放 ECS 服务 区域中可能无法提供经典ECS自动缩放.

#### 初始化剂

```typescript
import { EcsIsoServiceAutoscaler } from '@cdklabs/cdk-enterprise-iac'

new EcsIsoServiceAutoscaler(scope: Construct, id: string, props: EcsIsoServiceAutoscalerProps)
```

| **名称** | **类型** | **说明** |
| --- | --- | --- |
| `[scope](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.EcsIsoServiceAutoscaler.Initializer.parameter.scope)` | `constructs.Construct` | _没有描述._ |
| `[id](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.EcsIsoServiceAutoscaler.Initializer.parameter.id)` | `string` | _没有描述._ |
| `[props](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.EcsIsoServiceAutoscaler.Initializer.parameter.props)` | `[EcsIsoServiceAutoscalerProps](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.EcsIsoServiceAutoscalerProps)` | _没有描述._ |

* * *

##### `scope`需求

-   _类型 :_ 构造 构造

* * *

##### `id`需求

-   _类型 :_ 字符串

* * *

##### `props`需求

-   _类型 :_ [EcsIso 服务自动缩放程序](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.EcsIsoServiceAutoscalerProps)

* * *

#### 方法

| **名称** | **说明** |
| --- | --- |
| `[toString](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.EcsIsoServiceAutoscaler.toString)` | 返回此构造的字符串表达式 . |

* * *

##### `toString`

```typescript
public toString(): string
```

返回此构造的字符串表达式 .

#### 静态函数

| **名称** | **说明** |
| --- | --- |
| `[isConstruct](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.EcsIsoServiceAutoscaler.isConstruct)` | 检查是否 `x` 是一个构造. |

* * *

##### ~`isConstruct`~

```typescript
import { EcsIsoServiceAutoscaler } from '@cdklabs/cdk-enterprise-iac'

EcsIsoServiceAutoscaler.isConstruct(x: any)
```

检查是否 `x` 是一个构造.

###### `x`需求

-   _类型 :_ 任意

任何物体.

* * *

#### 属性

| **名称** | **类型** | **说明** |
| --- | --- | --- |
| `[node](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.EcsIsoServiceAutoscaler.property.node)` | `constructs.Node` | 树节. |
| `[ecsScalingManagerFunction](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.EcsIsoServiceAutoscaler.property.ecsScalingManagerFunction)` | `aws-cdk-lib.aws_lambda.Function` | _没有描述._ |

* * *

##### `node`需求

```typescript
public readonly node: Node;
```

-   _类型 :_ 构造 节点

树节.

* * *

##### `ecsScalingManagerFunction`需求

```typescript
public readonly ecsScalingManagerFunction: Function;
```

-   _类型 :_ aws-cdk-lib.aws lambda (英语). 函数

* * *

### 以配置填充

输入一个基于所提供配置的 VPC 子网.

_示例_

```typescript
const mySubnetConfig: SubnetConfig[] = [
   {
     groupName: 'app',
     cidrRange: '172.31.0.0/27',
     availabilityZone: 'a',
     subnetType: subnetType.PUBLIC,
   },
   {
     groupName: 'app',
     cidrRange: '172.31.0.32/27',
     availabilityZone: 'b',
     subnetType: subnetType.PUBLIC,
   },
   {
     groupName: 'db',
     cidrRange: '172.31.0.64/27',
     availabilityZone: 'a',
     subnetType: subnetType.PRIVATE_WITH_EGRESS,
   },
   {
     groupName: 'db',
     cidrRange: '172.31.0.96/27',
     availabilityZone: 'b',
     subnetType: subnetType.PRIVATE_WITH_EGRESS,
   },
   {
     groupName: 'iso',
     cidrRange: '172.31.0.128/26',
     availabilityZone: 'a',
     subnetType: subnetType.PRIVATE_ISOLATED,
   },
   {
     groupName: 'iso',
     cidrRange: '172.31.0.196/26',
     availabilityZone: 'b',
     subnetType: subnetType.PRIVATE_ISOLATED,
   },
 ];
new PopulateWithConfig(this, "vpcPopulater", {
  vpcId: 'vpc-abcdefg1234567',
  privateRouteTableId: 'rt-abcdefg123456',
  localRouteTableId: 'rt-123456abcdefg',
  subnetConfig: mySubnetConfig,
})
```

#### 初始化剂

```typescript
import { PopulateWithConfig } from '@cdklabs/cdk-enterprise-iac'

new PopulateWithConfig(scope: Construct, id: string, props: PopulateWithConfigProps)
```

| **名称** | **类型** | **说明** |
| --- | --- | --- |
| `[scope](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.PopulateWithConfig.Initializer.parameter.scope)` | `constructs.Construct` | _没有描述._ |
| `[id](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.PopulateWithConfig.Initializer.parameter.id)` | `string` | _没有描述._ |
| `[props](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.PopulateWithConfig.Initializer.parameter.props)` | `[PopulateWithConfigProps](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.PopulateWithConfigProps)` | _没有描述._ |

* * *

##### `scope`需求

-   _类型 :_ 构造 构造

* * *

##### `id`需求

-   _类型 :_ 字符串

* * *

##### `props`需求

-   _类型 :_ [使用配置配置](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.PopulateWithConfigProps)

* * *

#### 方法

| **名称** | **说明** |
| --- | --- |
| `[toString](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.PopulateWithConfig.toString)` | 返回此构造的字符串表达式 . |

* * *

##### `toString`

```typescript
public toString(): string
```

返回此构造的字符串表达式 .

#### 静态函数

| **名称** | **说明** |
| --- | --- |
| `[isConstruct](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.PopulateWithConfig.isConstruct)` | 检查是否 `x` 是一个构造. |

* * *

##### ~`isConstruct`~

```typescript
import { PopulateWithConfig } from '@cdklabs/cdk-enterprise-iac'

PopulateWithConfig.isConstruct(x: any)
```

检查是否 `x` 是一个构造.

###### `x`需求

-   _类型 :_ 任意

任何物体.

* * *

#### 属性

| **名称** | **类型** | **说明** |
| --- | --- | --- |
| `[node](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.PopulateWithConfig.property.node)` | `constructs.Node` | 树节. |

* * *

##### `node`需求

```typescript
public readonly node: Node;
```

-   _类型 :_ 构造 节点

树节.

* * *

### 分割 Vpc 偶数

将一个 VPC 平分到一个指定的 AZ 数( 如果没有定义 ) 之间, 并附上一个指定的路由表和标签 .

_示例_

```typescript
// with more specific properties
new SplitVpcEvenly(this, 'evenSplitVpc', {
  vpcId: 'vpc-abcdefg123456',
  vpcCidr: '172.16.0.0/16',
  routeTableId: 'rt-abcdefgh123456',
  cidrBits: '10',
  numberOfAzs: 4,
  subnetType: subnetType.PRIVATE_ISOLATED,
});
```

#### 初始化剂

```typescript
import { SplitVpcEvenly } from '@cdklabs/cdk-enterprise-iac'

new SplitVpcEvenly(scope: Construct, id: string, props: SplitVpcEvenlyProps)
```

| **名称** | **类型** | **说明** |
| --- | --- | --- |
| `[scope](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.SplitVpcEvenly.Initializer.parameter.scope)` | `constructs.Construct` | _没有描述._ |
| `[id](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.SplitVpcEvenly.Initializer.parameter.id)` | `string` | _没有描述._ |
| `[props](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.SplitVpcEvenly.Initializer.parameter.props)` | `[SplitVpcEvenlyProps](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.SplitVpcEvenlyProps)` | _没有描述._ |

* * *

##### `scope`需求

-   _类型 :_ 构造 构造

* * *

##### `id`需求

-   _类型 :_ 字符串

* * *

##### `props`需求

-   _类型 :_ [分割 VpcEvenly 程序](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.SplitVpcEvenlyProps)

* * *

#### 方法

| **名称** | **说明** |
| --- | --- |
| `[toString](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.SplitVpcEvenly.toString)` | 返回此构造的字符串表达式 . |

* * *

##### `toString`

```typescript
public toString(): string
```

返回此构造的字符串表达式 .

#### 静态函数

| **名称** | **说明** |
| --- | --- |
| `[isConstruct](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.SplitVpcEvenly.isConstruct)` | 检查是否 `x` 是一个构造. |

* * *

##### ~`isConstruct`~

```typescript
import { SplitVpcEvenly } from '@cdklabs/cdk-enterprise-iac'

SplitVpcEvenly.isConstruct(x: any)
```

检查是否 `x` 是一个构造.

###### `x`需求

-   _类型 :_ 任意

任何物体.

* * *

#### 属性

| **名称** | **类型** | **说明** |
| --- | --- | --- |
| `[node](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.SplitVpcEvenly.property.node)` | `constructs.Node` | 树节. |

* * *

##### `node`需求

```typescript
public readonly node: Node;
```

-   _类型 :_ 构造 节点

树节.

* * *

## 字符串

### 添加Cfninit Proxy 软件

代理服务器使用 Cfn 帮助命令的属性 .

#### 初始化器

```typescript
import { AddCfnInitProxyProps } from '@cdklabs/cdk-enterprise-iac'

const addCfnInitProxyProps: AddCfnInitProxyProps = { ... }
```

#### 属性

| **名称** | **类型** | **说明** |
| --- | --- | --- |
| `[proxyHost](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.AddCfnInitProxyProps.property.proxyHost)` | `string` | 您代理服务器的主机 . |
| `[proxyPort](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.AddCfnInitProxyProps.property.proxyPort)` | `number` | 代理端口 . |
| `[proxyCredentials](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.AddCfnInitProxyProps.property.proxyCredentials)` | `aws-cdk-lib.aws_secretsmanager.ISecret` | 包含 `user` 财务报告和审定财务报表 `password` 如果代理机需要证书, 属性将使用 `http://user:password@host:port` 可能包含敏感数据, 所以使用一个秘密. |
| `[proxyType](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.AddCfnInitProxyProps.property.proxyType)` | `[ProxyType](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.ProxyType)` | 代理类型. |

* * *

##### `proxyHost`需求

```typescript
public readonly proxyHost: string;
```

-   _类型 :_ 字符串

您代理服务器的主机 .

* * *

_示例_

```typescript
example.com
```

##### `proxyPort`需求

```typescript
public readonly proxyPort: number;
```

-   _类型 :_ 编号

代理端口 .

* * *

_示例_

```typescript
8080
```

##### `proxyCredentials`可选

```typescript
public readonly proxyCredentials: ISecret;
```

-   _类型 :_ aws-cdk-lib.aws secretsmanager.ISecret (英语)

包含 `user` 财务报告和审定财务报表 `password` 如果代理机需要证书, 属性将使用 `http://user:password@host:port` 可能包含敏感数据, 所以使用一个秘密.

请注意,虽然 `user` 财务报告和审定财务报表 `password` 在云形模板中看不到 他们 **将** 以简洁的文字在您体内 `UserData`

* * *

_示例_

```typescript
const secret = new Secret(stack, 'TestSecret', {
 secretObjectValue: {
   user: SecretValue,
   password: SecretValue,
 },
});
```

##### `proxyType`可选

```typescript
public readonly proxyType: ProxyType;
```

-   _类型 :_ [代理服务器](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.ProxyType)
-   _默认 :_ 代理服务器. HTTP

代理类型.

* * *

_示例_

```typescript
ProxyType.HTTPS
```

### 添加任务界限

传递给添加边界的属性 .

#### 初始化器

```typescript
import { AddPermissionBoundaryProps } from '@cdklabs/cdk-enterprise-iac'

const addPermissionBoundaryProps: AddPermissionBoundaryProps = { ... }
```

#### 属性

| **名称** | **类型** | **说明** |
| --- | --- | --- |
| `[permissionsBoundaryPolicyName](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.AddPermissionBoundaryProps.property.permissionsBoundaryPolicyName)` | `string` | 许可边界政策名称,以添加所有IAM角色. |
| `[instanceProfilePrefix](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.AddPermissionBoundaryProps.property.instanceProfilePrefix)` | `string` | IAM IntextProfiles (Default: '') 名称的前缀 . |
| `[policyPrefix](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.AddPermissionBoundaryProps.property.policyPrefix)` | `string` | IAM 政策和管理政策名称前缀(默认:"'"). |
| `[rolePrefix](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.AddPermissionBoundaryProps.property.rolePrefix)` | `string` | 一个预置到IAM角色(Default:"'")名称的前缀. |

* * *

##### `permissionsBoundaryPolicyName`需求

```typescript
public readonly permissionsBoundaryPolicyName: string;
```

-   _类型 :_ 字符串

许可边界政策名称,以添加所有IAM角色.

* * *

##### `instanceProfilePrefix`可选

```typescript
public readonly instanceProfilePrefix: string;
```

-   _类型 :_ 字符串

IAM IntextProfiles (Default: '') 名称的前缀 .

* * *

##### `policyPrefix`可选

```typescript
public readonly policyPrefix: string;
```

-   _类型 :_ 字符串

IAM 政策和管理政策名称前缀(默认:"'").

* * *

##### `rolePrefix`可选

```typescript
public readonly rolePrefix: string;
```

-   _类型 :_ 字符串

一个预置到IAM角色(Default:"'")名称的前缀.

* * *

### EcsIso 服务自动缩放程序

#### 初始化器

```typescript
import { EcsIsoServiceAutoscalerProps } from '@cdklabs/cdk-enterprise-iac'

const ecsIsoServiceAutoscalerProps: EcsIsoServiceAutoscalerProps = { ... }
```

#### 属性

| **名称** | **类型** | **说明** |
| --- | --- | --- |
| `[ecsCluster](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.EcsIsoServiceAutoscalerProps.property.ecsCluster)` | `aws-cdk-lib.aws_ecs.Cluster` | 您想要扩展的服务所在的集群 . |
| `[ecsService](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.EcsIsoServiceAutoscalerProps.property.ecsService)` | `aws-cdk-lib.aws_ecs.IService` | 您想要扩展的ECS服务 . |
| `[scaleAlarm](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.EcsIsoServiceAutoscalerProps.property.scaleAlarm)` | `aws-cdk-lib.aws_cloudwatch.AlarmBase` | 云表警报会引发规模化动作的被引用,无论它是否处于警报状态,都会决定规模上下动作. |
| `[maximumTaskCount](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.EcsIsoServiceAutoscalerProps.property.maximumTaskCount)` | `number` | 服务将扩展至的最大任务数 . |
| `[minimumTaskCount](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.EcsIsoServiceAutoscalerProps.property.minimumTaskCount)` | `number` | 服务将承担的最低任务数 . |
| `[role](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.EcsIsoServiceAutoscalerProps.property.role)` | `aws-cdk-lib.aws_iam.IRole` | 可选的IAM角色附在所创建的Lambda上以调整ECS服务所期望的计数. |
| `[scaleInCooldown](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.EcsIsoServiceAutoscalerProps.property.scaleInCooldown)` | `aws-cdk-lib.Duration` | 申请要等多久才能执行另一个行动尺度. |
| `[scaleInIncrement](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.EcsIsoServiceAutoscalerProps.property.scaleInIncrement)` | `number` | 在提醒状态下规模化的任务数量 . |
| `[scaleOutCooldown](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.EcsIsoServiceAutoscalerProps.property.scaleOutCooldown)` | `aws-cdk-lib.Duration` | 应用程序要等多久才能执行另一个缩放动作 . |
| `[scaleOutIncrement](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.EcsIsoServiceAutoscalerProps.property.scaleOutIncrement)` | `number` | 规模化的提醒状态任务数量 . |

* * *

##### `ecsCluster`需求

```typescript
public readonly ecsCluster: Cluster;
```

-   _类型 :_ aws-cdk-lib.aws ecs. (原始内容存档于2018-10-12). 组

您想要扩展的服务所在的集群 .

* * *

##### `ecsService`需求

```typescript
public readonly ecsService: IService;
```

-   _类型 :_ aws-cdk-lib.aws ecs.IService (英语)

您想要扩展的ECS服务 .

* * *

##### `scaleAlarm`需求

```typescript
public readonly scaleAlarm: AlarmBase;
```

-   _类型 :_ aws-cdk-lib.aws cloudwatch. (原始内容存档于2018-09-27). 提醒库

云表警报会引发规模化动作的被引用,无论它是否处于警报状态,都会决定规模上下动作.

注意: 综合提醒无法在所有地区与 CFN 一起生成, 而允许您在综合提醒创建中通过, 不属于此构造的范围

* * *

##### `maximumTaskCount`可选

```typescript
public readonly maximumTaskCount: number;
```

-   _类型 :_ 编号
-   _默认 :_ 10个

服务将扩展至的最大任务数 .

说明: 这并不能防止超出您账户允许的上限、设置该变量并适当管理账户配额.

* * *

##### `minimumTaskCount`可选

```typescript
public readonly minimumTaskCount: number;
```

-   _类型 :_ 编号
-   _默认 :_ 1个

服务将承担的最低任务数 .

* * *

##### `role`可选

```typescript
public readonly role: IRole;
```

-   _类型 :_ aws-cdk-lib.aws iam (英语). 内弹
-   _默认 :_ 给您创造了一个角色 以最小的特权IAM政策

可选的IAM角色附在所创建的Lambda上以调整ECS服务所期望的计数.

确保这一作用具有适当的特权。 实例IAM政策声明:

```json
{
  "PolicyDocument": {
    "Statement": [
      {
        "Action": "cloudwatch:DescribeAlarms",
        "Effect": "Allow",
        "Resource": "*"
      },
      {
        "Action": [
          "ecs:DescribeServices",
          "ecs:UpdateService"
        ],
        "Condition": {
          "StringEquals": {
            "ecs:cluster": "arn:${Partition}:ecs:${Region}:${Account}:cluster/${ClusterName}"
          }
        },
        "Effect": "Allow",
        "Resource": "arn:${Partition}:ecs:${Region}:${Account}:service/${ClusterName}/${ServiceName}"
      }
    ],
    "Version": "2012-10-17"
  }
}
```

* * *

##### `scaleInCooldown`可选

```typescript
public readonly scaleInCooldown: Duration;
```

-   _类型 :_ aws-cdk-lib (英语). 会期
-   _默认 :_ 60秒钟

申请要等多久才能执行另一个行动尺度.

* * *

##### `scaleInIncrement`可选

```typescript
public readonly scaleInIncrement: number;
```

-   _类型 :_ 编号
-   _默认 :_ 1个

在提醒状态下规模化的任务数量 .

* * *

##### `scaleOutCooldown`可选

```typescript
public readonly scaleOutCooldown: Duration;
```

-   _类型 :_ aws-cdk-lib (英语). 会期
-   _默认 :_ 60秒钟

应用程序要等多久才能执行另一个缩放动作 .

* * *

##### `scaleOutIncrement`可选

```typescript
public readonly scaleOutIncrement: number;
```

-   _类型 :_ 编号
-   _默认 :_ 1个

规模化的提醒状态任务数量 .

* * *

### 使用配置配置

#### 初始化器

```typescript
import { PopulateWithConfigProps } from '@cdklabs/cdk-enterprise-iac'

const populateWithConfigProps: PopulateWithConfigProps = { ... }
```

#### 属性

| **名称** | **类型** | **说明** |
| --- | --- | --- |
| `[localRouteTableId](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.PopulateWithConfigProps.property.localRouteTableId)` | `string` | 本地路由表ID,线路仅通向当地VPC. |
| `[privateRouteTableId](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.PopulateWithConfigProps.property.privateRouteTableId)` | `string` | 附有通往企业网络的路线的路线表的路由表ID. |
| `[subnetConfig](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.PopulateWithConfigProps.property.subnetConfig)` | `[SubnetConfig](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.SubnetConfig)[]` | 子网配置列表,用于提供. |
| `[vpcId](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.PopulateWithConfigProps.property.vpcId)` | `string` | 人身保护局的身份证规定需要有人居住. |

* * *

##### `localRouteTableId`需求

```typescript
public readonly localRouteTableId: string;
```

-   _类型 :_ 字符串

本地路由表ID,线路仅通向当地VPC.

* * *

##### `privateRouteTableId`需求

```typescript
public readonly privateRouteTableId: string;
```

-   _类型 :_ 字符串

附有通往企业网络的路线的路线表的路由表ID.

双子网Type.PUBLIC和子网Type.PRIVATE WITH EGRESS将使用此属性

* * *

##### `subnetConfig`需求

```typescript
public readonly subnetConfig: SubnetConfig[];
```

-   _类型 :_ [子网连接](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.SubnetConfig)\[

子网配置列表,用于提供.

* * *

##### `vpcId`需求

```typescript
public readonly vpcId: string;
```

-   _类型 :_ 字符串

人身保护局的身份证规定需要有人居住.

* * *

### 删除标签

#### 初始化器

```typescript
import { RemoveTagsProps } from '@cdklabs/cdk-enterprise-iac'

const removeTagsProps: RemoveTagsProps = { ... }
```

#### 属性

| **名称** | **类型** | **说明** |
| --- | --- | --- |
| `[cloudformationResource](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.RemoveTagsProps.property.cloudformationResource)` | `string` | 云形资源类型的名称(例如"AWS:Lambda::Function"). |
| `[tagPropertyName](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.RemoveTagsProps.property.tagPropertyName)` | `string` | 要从资源中删除的标签属性名称 . |

* * *

##### `cloudformationResource`需求

```typescript
public readonly cloudformationResource: string;
```

-   _类型 :_ 字符串

云形资源类型的名称(例如"AWS:Lambda::Function").

* * *

##### `tagPropertyName`可选

```typescript
public readonly tagPropertyName: string;
```

-   _类型 :_ 字符串
-   _默认 :_ 标记

要从资源中删除的标签属性名称 .

* * *

### 资源外传程序

#### 初始化器

```typescript
import { ResourceExtractorProps } from '@cdklabs/cdk-enterprise-iac'

const resourceExtractorProps: ResourceExtractorProps = { ... }
```

#### 属性

| **名称** | **类型** | **说明** |
| --- | --- | --- |
| `[extractDestinationStack](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.ResourceExtractorProps.property.extractDestinationStack)` | `aws-cdk-lib.Stack` | 堆栈可移动已找到的提取资源 . |
| `[resourceTypesToExtract](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.ResourceExtractorProps.property.resourceTypesToExtract)` | `string[]` | 要提取的资源类型列表, 如 : `AWS::IAM::Role`。 。 。 . |
| `[stackArtifacts](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.ResourceExtractorProps.property.stackArtifacts)` | `aws-cdk-lib.cx_api.CloudFormationStackArtifact[]` | 从你的CDK应用程序合成的堆栈文物. |
| `[additionalTransforms](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.ResourceExtractorProps.property.additionalTransforms)` | `{[ key: string ]: string}` | 额外资源转型. |
| `[valueShareMethod](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.ResourceExtractorProps.property.valueShareMethod)` | `[ResourceExtractorShareMethod](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.ResourceExtractorShareMethod)` | 将“ Extraded Stack” 输出资源传递到原始堆栈时使用的共享方法 . |

* * *

##### `extractDestinationStack`需求

```typescript
public readonly extractDestinationStack: Stack;
```

-   _类型 :_ aws-cdk-lib (英语). 堆栈

堆栈可移动已找到的提取资源 .

* * *

##### `resourceTypesToExtract`需求

```typescript
public readonly resourceTypesToExtract: string[];
```

-   _类型 :_ 字符串 \[\]

要提取的资源类型列表, 如 : `AWS::IAM::Role`。 。 。 .

* * *

##### `stackArtifacts`需求

```typescript
public readonly stackArtifacts: CloudFormationStackArtifact[];
```

-   _类型 :_ aws-cdk-lib.cx api. CloudFormation StackArtifact\[\] 互联网档案馆的存檔,存档日期2013-12-21

从你的CDK应用程序合成的堆栈文物.

* * *

##### `additionalTransforms`可选

```typescript
public readonly additionalTransforms: {[ key: string ]: string};
```

-   _类型 :_ {\[键:字符串\]:字符串}

额外资源转型.

* * *

##### `valueShareMethod`可选

```typescript
public readonly valueShareMethod: ResourceExtractorShareMethod;
```

-   _类型 :_ [资源Extractor 共享方法](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.ResourceExtractorShareMethod)

将“ Extraded Stack” 输出资源传递到原始堆栈时使用的共享方法 .

* * *

### 设置 ApiGateway 终端配置

#### 初始化器

```typescript
import { SetApiGatewayEndpointConfigurationProps } from '@cdklabs/cdk-enterprise-iac'

const setApiGatewayEndpointConfigurationProps: SetApiGatewayEndpointConfigurationProps = { ... }
```

#### 属性

| **名称** | **类型** | **说明** |
| --- | --- | --- |
| `[endpointType](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.SetApiGatewayEndpointConfigurationProps.property.endpointType)` | `aws-cdk-lib.aws_apigateway.EndpointType` | API Gateway 端点类型要覆盖到 . |

* * *

##### `endpointType`可选

```typescript
public readonly endpointType: EndpointType;
```

-   _类型 :_ aws-cdk-lib.aws apigateway. EndpointType (英语)
-   _默认 :_ 端点Type.区域

API Gateway 端点类型要覆盖到 .

默认为 EndpointType.regional

* * *

### 分割 VpcEvenly 程序

#### 初始化器

```typescript
import { SplitVpcEvenlyProps } from '@cdklabs/cdk-enterprise-iac'

const splitVpcEvenlyProps: SplitVpcEvenlyProps = { ... }
```

#### 属性

| **名称** | **类型** | **说明** |
| --- | --- | --- |
| `[routeTableId](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.SplitVpcEvenlyProps.property.routeTableId)` | `string` | 将附加到每个子网的路由表 ID . |
| `[vpcCidr](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.SplitVpcEvenlyProps.property.vpcCidr)` | `string` | CIDR的VPC范围 你正在流行. |
| `[vpcId](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.SplitVpcEvenlyProps.property.vpcId)` | `string` | 你试图填充的VPC的ID. |
| `[cidrBits](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.SplitVpcEvenlyProps.property.cidrBits)` | `string` | `cidrBits` 参数 [`Fn::Cidr`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-cidr.html) 云形内在功能. |
| `[numberOfAzs](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.SplitVpcEvenlyProps.property.numberOfAzs)` | `number` | 要平分的 AZ 数 . |
| `[subnetType](https://npmcn.com/package/%40cdklabs/cdk-enterprise-iac/#readme-@cdklabs/cdk-enterprise-iac.SplitVpcEvenlyProps.property.subnetType)` | `aws-cdk-lib.aws_ec2.SubnetType` | _没有描述._ |

* * *

##### `routeTableId`需求

```typescript
public readonly routeTableId: string;
```

-   _类型 :_ 字符串

将附加到每个子网的路由表 ID .

* * *

##### `vpcCidr`需求

```typescript
public readonly vpcCidr: string;
```

-   _类型 :_ 字符串

CIDR的VPC范围 你正在流行.

* * *

##### `vpcId`需求

```typescript
public readonly vpcId: string;
```

-   _类型 :_ 字符串

你试图填充的VPC的ID.

* * *

##### `cidrBits`可选

```typescript
public readonly cidrBits: string;
```

-   _类型 :_ 字符串
-   _默认 :_ 六号

`cidrBits` 参数 [`Fn::Cidr`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-cidr.html) 云形内在功能.

* * *

##### 数字

## 常见问题

### 如何安装 @cdklabs/cdk-enterprise-iac？

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

### @cdklabs/cdk-enterprise-iac 支持 TypeScript 吗？

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

### @cdklabs/cdk-enterprise-iac 支持 ESM 还是 CommonJS？

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

### @cdklabs/cdk-enterprise-iac 可以商用吗？

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

### @cdklabs/cdk-enterprise-iac 的下载量有多少？

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

### @cdklabs/cdk-enterprise-iac 还在维护吗？

最新版本 0\.1\.0 发布于 2025/03/05（1\.7 年前）；至今共发布 527 个版本，其中过去 12 个月发布了 0 个；首次发布于 2022/09/14。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

