我认为您可以通过将资源分成更小的堆栈来实现您的目标。您似乎不需要跨堆栈引用或嵌套堆栈。
这是一个示例(在 Python 中),其中 295 个资源被分成两个堆栈。
#!/usr/bin/env python3
from aws_cdk import core
from lambda_api.lambda_api_stack import APIStack
from lambda_api.lambda_api_stack import LambdasStack
app = core.App()
lambdas_stack = LambdasStack(app, 'lambdasstack')
APIStack(app, 'apistack', lambdas=lambdas_stack.lambdas)
app.synth()
from aws_cdk import (
aws_apigateway as apigateway,
aws_lambda as _lambda,
aws_s3 as s3,
core
)
class LambdasStack(core.Stack):
@property
def lambdas(self):
return self._lambdas
def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
super().__init__(scope, id, **kwargs)
self._lambdas = list()
for i in range(48):
handler = _lambda.Function(
self, f'Handler_{i}',
function_name=f'Handler_{i}',
runtime=_lambda.Runtime.PYTHON_3_8,
code=_lambda.Code.from_asset('resources'),
handler='handler.main'
)
self._lambdas.append(handler)
class APIStack(core.Stack):
def __init__(self, scope: core.Construct, id: str, lambdas: list,
**kwargs) -> None:
super().__init__(scope, id, **kwargs)
api = apigateway.RestApi(
self, 'lambdas-api',
rest_api_name='Lambdas Service',
description='This service serves lambdas.'
)
for i in range(len(lambdas)):
get_lambda_integration = apigateway.LambdaIntegration(
lambdas[i],
request_templates={
'application/json':
'{ "statusCode": "200" }'
}
)
model = api.root.add_resource(f'Resource_{i}')
model.add_method('GET', get_lambda_integration)
对于此示例,API 资源 + Lambda 集成生成的资源最多。以下是所创建资源的概要。
在lambdasstack中创建了97个资源。
- 1
AWS::CDK::Metadata
- 48 x 2 资源
- 1
AWS::Lambda::Function
- 1
AWS::IAM::Role
在apistack 中创建了198 个资源。
- 1
AWS::CDK::Metadata
- 1
AWS::ApiGateway::Account
- 1
AWS::IAM::Role
- 1
AWS::ApiGateway::RestApi
- 1
AWS::ApiGateway::Deployment
- 1
AWS::ApiGateway::Stage
- 48 x 4 资源
- 1
AWS::ApiGateway::Resource
- 1
AWS::ApiGateway::Method
- 2
AWS::IAM::Role