npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@financial-times/serverless-plugin-healthcheck

v0.0.9

Published

Check your lambdas are healthy.

Downloads

13

Readme

Serverless HealthCheck Plugin

serverless npm (scoped) npm license

Check the health of your lambdas.

Requirements:

  • Serverless v1.12.x or higher.
  • AWS provider

How it works

Healthcheck solves heart beat by creating one schedule event lambda that invokes all the service lambdas you select in a configured time interval (default: 5 minutes) or a specific time, forcing your containers to report their status. In aditional, it creates a new endpoint (named __health by default) which can be called to provide a json summary of the current status of each healthcheck.

Setup

Install via npm in the root of your Serverless service:

npm install serverless-plugin-healthcheck --save-dev
  • Add the plugin to the plugins array in your Serverless serverless.yml:
plugins:
  - serverless-plugin-healthcheck
  • Add a healthcheck property to all the events in all the functions you want to be checked.
functions:
  hello:
    events
      - http:
          path: /schema/{TypeID}
          method: get
          private: false
          healthcheck:
            params: {"subjectType": "system"}
      - http:
          path: /schema/{TypeID}/{ItemID}
          method: get
          private: false
          healthcheck:
            params: {"subjectType": "system", "subjectID": "dewey"}
  • Add additional format properties to trigger the output of a full diagnotic for each check
         healthcheck:
            params: {"subjectType": "system"}
            format:
              id: fullschema
              name: Get system schema
              ok: []
              severity: 2
              businessImpact: Unable to describe system records
              technicalSummary: The schema for the system type cannot be read from the CMDB
              checkOutput: false
              lastUpdated: []

Note that the ok and lastUpdated are reserved and will automatically be populated, as follows: o ok is true when statuscode is 200, false otherwise o lastUpdated is the date.time at which the check was ran

  • healthcheck to be able to invoke lambdas requires the following Policy Statement in iamRoleStatements:
iamRoleStatements:
  - Effect: 'Allow'
    Action:
      - 'lambda:InvokeFunction'
    Resource:
    - Fn::Join:
      - ':'
      - - arn:aws:lambda
        - Ref: AWS::Region
        - Ref: AWS::AccountId
        - function:${self:service}-${opt:stage, self:provider.stage}-*

If using pre-check, the deployment user also needs a similar policy so it can run the healthcheck lambda.

  • All done! healthcheck will run on SLS deploy and package commands

Options

  • cleanFolder (default true)
  • memorySize (default 128)
  • name (default ${service}-${stage}-healthcheck-plugin)
  • schedule (default rate(5 minutes))
  • timeout (default 10 seconds)
  • precheck (default false)
  • endpoint (default __health)
custom:
  healthcheck:
    cleanFolder: false,
    memorySize: 256
    name: 'make-them-pop'
    schedule: 'rate(15 minutes)'
    timeout: 20
    precheck: true
    endpoint: _show_health
  • define a custom header for the healtcheck to give the healtcheck output some contaxt
    endpoint: __health
    format:
      schemaVersion: 1
      name: A great system that uses healthchecks
      systemCode: greatsys
      checks: []

Note that checks is reserved and is used to identify the location into which the array of check responses will be placed

Lambdas invoked by healthcheck will have event source serverless-plugin-healthcheck:

{
    "Event": {
        "source": "serverless-plugin-healthcheck"
    }
}

Artifact

If you are doing your own package artifact set option cleanFolder to false and run serverless package. This will allow you to extract the healthcheck NodeJS lambda file from the _healthcheck folder and add it in your custom artifact logic.

Gotchas

If you are deploying to a VPC, you need to use private subnets with a Network Address Translation (NAT) gateway (http://docs.aws.amazon.com/lambda/latest/dg/vpc.html). Healthcheck requires this so it can call the other lambdas but this is applicable to any lambda that needs access to the public internet or to any other AWS service.

Only one lambda function will be checked/invoked per HealthCheck declaration, even if multiple containers are running.

Cost

Lambda pricing here. CloudWatch pricing here. You can use AWS Lambda Pricing Calculator to check how much will cost you monthly.

Example

Free Tier not included + Default HealthCheck options + 10 lambdas to check, each with memorySize = 1024 and duration = 10:

  • HealthCheck: runs 8640 times per month = $0.18
  • 10 checked lambdas: each invoked 8640 times per month = $14.4
  • Total = $14.58

CloudWatch costs are not in this example because they are very low.

Contribute

Help us making this plugin better and future proof.

  • Clone the code
  • Install the dependencies with npm install
  • Create a feature branch git checkout -b new_feature
  • Lint with standard npm run lint

License

This software is released under the MIT license. See the license file for more details.