serverless-offline-local-authorizers-plugin
Serverless plugin for adding authorizers when developing and testing functions locally with serverless-offline.
This plugin allows you to add local authorizer functions to your serverless projects. These authorizers
are added dynamically in a way they can be called by serverless-offline
but don't interfer with your
deployment and your shared authorizer functions. This helps when you have shared API Gateway authorizers
and developing and testing locally with serverless-offline
.
:warning: If you are using this plugin and get schema validation errors: Please check indentation of
localAuthorizer:
config property! See example below...
Installation
Installing using npm:
npm i serverless-offline-local-authorizers-plugin --save-dev
Usage
Step 1: Define your authorizer functions in a file of your choice (.js, .mjs, .ts and others) and later you will inform the path and name or file default called local-authorizers.js
and put it into your
project root (that's where your serverless.yml
lives).
If you want the local function to call your deployed shared authorizer it could look something like this:
const AWS = require("aws-sdk");const mylocalAuthProxyFn = async (event, context) => { const lambda = new AWS.Lambda(); const result = await lambda.invoke({ FunctionName: "my-shared-lambda-authorizer", InvocationType: "RequestResponse", Payload: JSON.stringify(event), }).promise(); if (result.StatusCode === 200) { return JSON.parse(result.Payload); } throw Error("Authorizer error");};module.exports = { mylocalAuthProxyFn };
Of course you could also just return a mocked response, call Cognito to mock your Cognito Authorizer or whatever suits your needs. You can also define multiple authorizer functions if you need to.
Step 2: In your serverless.yml
, add the localAuthorizer
property to your http events. This will not interfere
with your "real" authorizers and will be ignored upon deployment.
functions: myFunction: handler: myFunction.handler events: - http: path: /my/api/path method: GET authorizer: type: CUSTOM authorizerId: abcjfk localAuthorizer: name: "mylocalAuthProxyFn" pathFile: "local-authorizers.js" # Optional type: "request"
Step 3: Add the plugin to the plugins sections in serverless.yml
:
plugins: - serverless-offline-local-authorizers-plugin - serverless-offline
Step 4: Fire up serverless offline with the local-authorizers
option:
$ sls offline local-authorizers --stage dev --region eu-central-1
License
MIT