LambdaIntegration
Function gets handler: IFunction
as a parameter which is the lambda object.
With that been said, you can import the lambda version you want using the following code snippet:
const lambdaAlias=lambda.Function.fromFunctionArn(scope,'LambdaImportUsingARN',"lambdaAliasARN")
Replace lambdaAliasARN
with the ARN of your lambda.
e.g -
arn:aws:lambda:${AWS_REGION}:${AWS_ACCOUNT}:function:${LAMBDA_NAME}:${ALIAS_NAME}
And later, pass it to LambdaIntegration
:
const lambdaIntegrationUsingAlias = new apigateway.LambdaIntegration(lambdaAlias)
In addition, the lambda alias needs permissions in order to allow the ApiGateway to invoke it.
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())