Estoy tratando de implementar una API de descanso lambda con mi propia implementación y no quiero usar la implementación predeterminada que se crea para usted cuando deployment deploy=True . Me encuentro con errores extraños cuando trato de definir explícitamente mi propia implementación. Aquí está mi pila hasta ahora:
class Stack(core.Stack): def __init__(self, scope: core.Construct, id: str, **kwargs) -> None: super().__init__(scope, id, **kwargs) # existing lambda with correct permissions lambda_function = aws_lambda.Function.from_function_arn(self, "lambda", "arn") api_gateway = aws_apigateway.LambdaRestApi( self, id="APIGateway", proxy=False, description="poc apigateway", rest_api_name="poc-voice-qa-api", handler=lambda_function, deploy=False ) api_key = api_gateway.add_api_key( id="ApiKey", api_key_name="voice-qa-api-key" ) deployment = aws_apigateway.Deployment( self, id="Deployment", api=api_gateway ) deployment.add_to_logical_id(str(api_gateway.latest_deployment)) stage = aws_apigateway.Stage( self, id="DeploymentStage", deployment=deployment, stage_name="api" ) stage_usage_plan = aws_apigateway.UsagePlanPerApiStage( api=api_gateway, stage=stage ) api_gateway.add_usage_plan( id="UsagePlan", api_key=api_key, api_stages=[stage_usage_plan], description="poc usage plan", name="poc-voice-qa-usage-plan" ) resource = api_gateway.root.add_resource( path_part="qa" ) resource = resource.add_resource( path_part="test" ) lambda_integration = aws_apigateway.LambdaIntegration( handler=lambda_function, passthrough_behavior=aws_apigateway.PassthroughBehavior.WHEN_NO_MATCH ) resource.add_method( "GET", lambda_integration, api_key_required=True ) resource.add_method( "POST", lambda_integration, api_key_required=True ) De otras publicaciones que he leído, creo que necesito adjuntar mi escenario o implementación a la API, pero no hay métodos con esta funcionalidad. Intenté hacer api_gateway.deployment_stage = stage pero no funcionó. CDK es bastante nuevo, por lo que no hay mucho por ahí, cualquier ayuda sería apreciada.
api_gateway.deployment_stage = stage debe estar creando el nombre de la etapa api .
¿Tu API_gateway está creando prod de nombre artístico?
Intenta eliminar esto.
deployment.add_to_logical_id(str(api_gateway.latest_deployment))
a continuación funcionará:
api_gateway.add_usage_plan( id="UsagePlan", name="poc-voice-qa-usage-plan", description="poc usage plan", api_stages=[apigw.UsagePlanPerApiStage(stage=api_gateway.deployment_stage)] )