LambdaIntegration 函数获取 handler: IFunction 作为参数,它是 lambda 对象。
话虽如此,您可以使用以下代码 sn-p 导入所需的 lambda 版本:
const lambdaAlias=lambda.Function.fromFunctionArn(scope,'LambdaImportUsingARN',"lambdaAliasARN")
将lambdaAliasARN 替换为您的 lambda 的 ARN。
例如-
arn:aws:lambda:${AWS_REGION}:${AWS_ACCOUNT}:function:${LAMBDA_NAME}:${ALIAS_NAME}
然后,将其传递给LambdaIntegration:
const lambdaIntegrationUsingAlias = new apigateway.LambdaIntegration(lambdaAlias)
此外,lambda 别名需要权限才能允许 ApiGateway 调用它。
const lambda = ...
const alias = Alias(this, "alias-id", AliasProps.builder()
.provisionedConcurrentExecutions(1)
.version(lambda.currentVersion)
.aliasName(ALIAS_NAME)
.build()
)
// First add permission for your stage to invoke
alias.addPermission("apigateway-permission", Permission.builder()
.action("lambda:InvokeFunction")
.principal(ServicePrincipal("apigateway.amazonaws.com"))
.sourceArn("arn:aws:execute-api:$region:$account:${api.restApiId}/$stage/POST/$path")
.build())
// Next add permission for testing
alias.addPermission("apigateway-test-permission", Permission.builder()
.action("lambda:InvokeFunction")
.principal(ServicePrincipal("apigateway.amazonaws.com"))
.sourceArn("arn:aws:execute-api:$region:$account:${api.restApiId}/test-invoke-stage/POST/$path")
.build())