使用 Lambda 函数集成部署带有 Rest API 的 CDK 堆栈时出错 (AWS CDK 2 Python API)
Error deploying a CDK stack with a Rest API with a Lambda Function Integration (AWS CDK 2 Python API)
我正在尝试使用 AWS Lambda、API 网关和 AWS CDK 2.16 Python API.
创建一个简单的 Rest API
此 Rest API 应该有一个资源,其中包含一个启用了 CORS 属性 的方法和一个带有 lambda 函数集成的 POST 方法。
但是,当我添加方法(使用 add_method)并部署堆栈时发生错误。
代码:
lambda_predictor = lambda_.CfnFunction(self, "LambdaPredictor",
code = lambda_.CfnFunction.CodeProperty(s3_bucket="my-bucket",
s3_key=lambda_predictor_location),
role =lambda_glue_role.attr_arn,
# properties
architectures = ["x86_64"],
description = 'Lambda function',
function_name = f"{environment}-{project}-lambda-predictor",
handler = "lambda_function.lambda_handler",
memory_size = 256,
layers=[layer.layer_version_arn],
package_type = "Zip",
runtime = "python3.8",
timeout = 30)
lambda_predictor.add_depends_on(lambda_glue_role)
rest_api = apigateway.RestApi(self, "InferencePipelineRestApi",
rest_api_name="InferencePipelineAPI")
api_resource = rest_api.root.add_resource('myResource',
default_cors_preflight_options=apigateway.CorsOptions(
allow_headers=['Content-Type', 'X-Amz-Date', 'Authorization', 'X-Api-Key', 'X-Amz-Security-Token'],
allow_methods=['OPTIONS', 'GET', 'POST', 'PUT', 'PATCH', 'DELETE'],
allow_origins=["*"])
)
api_resource.add_method("POST", apigateway.LambdaIntegration(lambda_predictor))
错误:
'''
jsii.errors.JavaScriptError:
TypeError: this.handler.addPermission is not a function
你知道会发生什么吗?
提前致谢
您正在传递 low-level (L1) lambda 函数构造,CfnFunction
,而 LambdaIntegration
仅接受 IFunction
,它由 [=22= 实现] (L2) 构造如 Function
.
相关文档:https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.LambdaIntegration.html
您使用 L1 结构的任何原因?
我正在尝试使用 AWS Lambda、API 网关和 AWS CDK 2.16 Python API.
创建一个简单的 Rest API此 Rest API 应该有一个资源,其中包含一个启用了 CORS 属性 的方法和一个带有 lambda 函数集成的 POST 方法。
但是,当我添加方法(使用 add_method)并部署堆栈时发生错误。
代码:
lambda_predictor = lambda_.CfnFunction(self, "LambdaPredictor",
code = lambda_.CfnFunction.CodeProperty(s3_bucket="my-bucket",
s3_key=lambda_predictor_location),
role =lambda_glue_role.attr_arn,
# properties
architectures = ["x86_64"],
description = 'Lambda function',
function_name = f"{environment}-{project}-lambda-predictor",
handler = "lambda_function.lambda_handler",
memory_size = 256,
layers=[layer.layer_version_arn],
package_type = "Zip",
runtime = "python3.8",
timeout = 30)
lambda_predictor.add_depends_on(lambda_glue_role)
rest_api = apigateway.RestApi(self, "InferencePipelineRestApi",
rest_api_name="InferencePipelineAPI")
api_resource = rest_api.root.add_resource('myResource',
default_cors_preflight_options=apigateway.CorsOptions(
allow_headers=['Content-Type', 'X-Amz-Date', 'Authorization', 'X-Api-Key', 'X-Amz-Security-Token'],
allow_methods=['OPTIONS', 'GET', 'POST', 'PUT', 'PATCH', 'DELETE'],
allow_origins=["*"])
)
api_resource.add_method("POST", apigateway.LambdaIntegration(lambda_predictor))
错误:
'''
jsii.errors.JavaScriptError:
TypeError: this.handler.addPermission is not a function
你知道会发生什么吗?
提前致谢
您正在传递 low-level (L1) lambda 函数构造,CfnFunction
,而 LambdaIntegration
仅接受 IFunction
,它由 [=22= 实现] (L2) 构造如 Function
.
相关文档:https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.LambdaIntegration.html
您使用 L1 结构的任何原因?