CDK 将 API Gateway 堆栈拆分为 2 个小堆栈

Ami*_*nes 9 amazon-web-services aws-api-gateway aws-cdk

我正在尝试创建 CDK 堆栈以创建 API 网关。如果我在“小块”(资源的评论部分)中创建堆栈,一切都正常工作,但是当我尝试创建完整的堆栈时,我收到此异常:

 Number of resources, 224, is greater than maximum allowed, 200
Run Code Online (Sandbox Code Playgroud)

因此,我尝试将我的大堆栈拆分为 2 个较小的堆栈,一个堆栈创建资源并创建一半的资源,另一个堆栈填充相关数据。

代码片段:

 Number of resources, 224, is greater than maximum allowed, 200
Run Code Online (Sandbox Code Playgroud)

我尝试创建cross-stacknested-stack将 API 数据传递给它,但到目前为止没有运气。

我的目标是创建一个包含 2 个小栈的栈——它们都指向同一个 API。或者,如果可能,为资源限制创建一个解决方法。

任何帮助都感激不尽。


2020 年 10 月 10 日更新:

目前,没有解决此问题的方法,最终将 API 网关拆分为多个 API 网关。

2020 年 24 月 10 日更新:

AWS CloudFormation 现在支持增加对五个服务配额的限制 - 模板大小、资源、参数、映射和输出。可以在 S3 对象中传递的模板的最大大小现在是 1MB(以前是 450KB)。最大资源数的新每个模板限制为 500(以前为 200)

更多信息可以在这里找到。

小智 9

这就是我们现在正在做的事情。我们基本上有多个堆栈共享相同的 API 网关类 (RestApi)

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

    // Main stack with shared components
    const commonStack = new CommonStack(
      scope,
      `common-stack`
    );

    // Module 1
    const moduleOneStack = new ModulOneStack(
      scope,
      `module-one`,
      {
        apiGatewayRestApi: commonStack.apiGatewayRestApi
      }
    );

    // Module 2, 3, etc.....
  }
}
Run Code Online (Sandbox Code Playgroud)

此接口用于将 props 传递给模块堆栈:

export interface CommonProps extends cdk.StackProps {
  apiGatewayRestApi: apigw.RestApi;
}
Run Code Online (Sandbox Code Playgroud)

通用模块将创建 API 网关对象:

export class CommonStack extends cdk.Stack {
  public readonly apiGatewayRestApi: apigw.RestApi;

  constructor(scope: cdk.Construct, id: string, props?: CommonProps) {
    super(scope, id, props);

    /******** SETUP API ********/
    this.apiGatewayRestApi = new apigw.RestApi(this, "MyAPI", {
      // Options here
    });
}
Run Code Online (Sandbox Code Playgroud)

所以模块堆栈本身将是这样的:

export class ModuleOneStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: CommonProps) {
    super(scope, id, props);

    if (props && props.apiGatewayRestApi) {
      const apiGatewayRestApi = props.apiGatewayRestApi;

      // associate lambda with api gateway
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我们只使用一个 API 网关,多个 Lambda 被分成多个堆栈,因为我们也遇到了限制问题。

有来自 AWS 的文档使用 VPC 做同样的事情:https : //docs.aws.amazon.com/cdk/api/latest/docs/aws-ec2-readme.html#sharing-vpcs-between-stacks

从这里复制粘贴我的评论:https : //github.com/aws/aws-cdk/issues/1477#issuecomment-568652807