CDK с использованием вложенных стеков выдает ошибку формата шаблона с исключением ресурса - PullRequest
0 голосов
/ 16 апреля 2020

При использовании одного стека выбрасывалась ошибка формата шаблона с ресурсом, превышающим 200, поэтому началось с вложенного стека, но проблема все та же. один RestAPI. он был разделен на 3 вложенных стека для каждого с лямбда-выражением и связанным с ним API.

class StackOne(aws_cloudformation.NestedStack):
    def __init__(self, scope: core.Construct, id: str,  **kwargs) -> None:
        super().__init__(scope, id, **kwargs)
        funcOne = aws_lambda.Function(self, func_suffix, handler='handler',
                                      function_name='name', role=aws_iam.Role.from_role_arn(self,'role', role),
                                      runtime=aws_lambda.Runtime.JAVA_8, code=aws_lambda.S3Code(bucket, 'path'))
        request_template = {"name": "value"}
        integration_responses = [{'statusCode': '200',
                                  'responseParameters': {'method.response.header.Access-Control-Allow-Origin': "'*'"}}]
        method_responses = [{'statusCode': '200',
                             'responseParameters': {'method.response.header.Access-Control-Allow-Origin': True}}]
        stage_options = aws_apigateway.StageOptions(stage_name='name',variables=dict(key='value'))
        self.rest_api = aws_apigateway.RestApi(self, "gateway", rest_api_name="gateway", deploy_options=stage_options)
        api_entity = rest_api.root.add_resource('api')
        api_integ = aws_apigateway.LambdaIntegration(funcOne, proxy=False, request_templates={'application/json':json.dumps(cap_activate_factor_tempate)},
                                                     integration_responses=integration_responses, allow_test_invoke=False,
                                                     passthrough_behavior=aws_apigateway.PassthroughBehavior.WHEN_NO_TEMPLATES)
        api_entity.add_method('POST', api_integ, method_responses=method_responses)


class StackTwo(aws_cloudformation.NestedStack):
    def __init__(self, scope: core.Construct, id: str,  rest_api:aws_apigateway.RestApi, **kwargs) -> None:
        super().__init__(scope, id, **kwargs)
        funcTwo = aws_lambda.Function(self, func_suffix, handler='handler',
                                      function_name='name', role=aws_iam.Role.from_role_arn(self,'role', role),
                                      runtime=aws_lambda.Runtime.JAVA_8, code=aws_lambda.S3Code(bucket, 'path'))
        request_template = {"name": "value"}
        integration_responses = [{'statusCode': '200',
                                  'responseParameters': {'method.response.header.Access-Control-Allow-Origin': "'*'"}}]
        method_responses = [{'statusCode': '200',
                             'responseParameters': {'method.response.header.Access-Control-Allow-Origin': True}}]
        api_entity = rest_api.root.get_resource('api')
        v1_entity = api_entity.add_resource('v1')
        v1_integ = aws_apigateway.LambdaIntegration(funcTwo, proxy=False, request_templates={'application/json':json.dumps(cap_activate_factor_tempate)},
                                                     integration_responses=integration_responses, allow_test_invoke=False,
                                                     passthrough_behavior=aws_apigateway.PassthroughBehavior.WHEN_NO_TEMPLATES)
        v1_entity.add_method('POST', v1_integ, method_responses=method_responses)


class MainStack(core.Stack):
    def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
        super().__init__(scope, id, **kwargs)

        stack_one = StackOne(self, 'StackOne')
        StackTwo(self, 'StackTwo', rest_api=stack_one.rest_api)


app = core.App()
MainStack(app, 'MainStack', env={'region':'us-east-1'})
...