2.0.0 • Published 4 years ago

lambda-service-client v2.0.0

Weekly downloads
1
License
MIT
Repository
github
Last release
4 years ago

lambda-service-client

ci_on_commit deploy_on_tag

A simple, convenient way to invoke aws lambda functions with best practices.

Best practices:

  • optional logDebug of input and output
  • throw an error if response contains an error object

Install

npm install --save lambda-service-client

Example

import { createLambdaServiceClient } from 'lambda-service-client';

const invokeLambdaFunction = createLambdaServiceClient({ serviceName: 'svc-jobs', stage });

export const getJobByUuid = (event: { uuid: string }): Promise<{ job: Job | null }> => invokeLambdaFunction({ functionName: 'getJobByUuid', event });

Usage

invoke

create a function to invoke your lambda with the createLambdaServiceClient method

import { createLambdaServiceClient } from 'lambda-service-client';

const invokeLambdaFunction = createLambdaServiceClient({ serviceName: 'svc-jobs', stage });

which you can use directly:

const result = await invokeLambdaFunction({ functionName, event: testPayload });
// ...do amazing things with result...

type

but you'll probably want to add some typedefs and name it for readability:

export const getJobByUuid = (event: { uuid: string }) => invokeLambdaFunction<{ job: Job | null }>({ functionName: 'getJobByUuid', event });

which makes using that alot easier:

const { job } = await getJobByUuid({ uuid: '__uuid__' });
// ...do amazing things with job

now you can just create a file of those typed lambda function methods, like above, and export each one, and let that be your client.

namespace (if you like)

alternatively, you can build a full namespaced client:

// export the namespaced client
export const jobsServiceClient = {
  getJobByUuid,
  // other methods...
};

and add extra context about "where" getJobByUuid is coming from

import { jobsServiceClient } from '../path/to/client';

const { job } = await jobsServiceClient.getJobByUuid({ uuid: '__uuid__' });
// ...do amazing things with job

Tips

lambda permissions

if you're using this client from inside a lambda, ensure that this lambda has permission to invoke other lambdas

# serverless.yml
iamRoleStatements:
  - Effect: Allow
    Action:
      - lambda:InvokeFunction
      - lambda:InvokeAsync
    Resource: '*' # TODO: constrain to a specific account, region, service, and stage
2.0.0

4 years ago

1.3.0

5 years ago

1.2.1

5 years ago

1.2.0

5 years ago

1.1.0

5 years ago

1.0.3

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago