@probot/adapter-aws-lambda-serverless

An extension for running Probot in AWS Lambda

Usage no npm install needed!

<script type="module">
  import probotAdapterAwsLambdaServerless from 'https://cdn.skypack.dev/@probot/adapter-aws-lambda-serverless';
</script>

README

@probot/adapter-aws-lambda-serverless

Adapter to run a Probot application function in AWS Lambda using the Serverless Framework

Build Status

Usage

npm install @probot/adapter-aws-lambda-serverless
// handler.js
const {
  createLambdaFunction,
  createProbot,
} = require("@probot/adapter-aws-lambda-serverless");
const appFn = require("./");
module.exports.webhooks = createLambdaFunction(appFn, {
  probot: createProbot(),
});

Configuration

You need to add environment variables to configure Probot to your Lambda function. If you use the Serverless App, you can add parameters for APP_ID, PRIVATE_KEY, WEBHOOK_SECRET, the use these parameters in serverless.yaml.

provider:
  name: aws
  runtime: nodejs12.x
  lambdaHashingVersion: 20201221
  environment:
    APP_ID: ${param:APP_ID}
    PRIVATE_KEY: ${param:PRIVATE_KEY}
    WEBHOOK_SECRET: ${param:WEBHOOK_SECRET}
    NODE_ENV: production
    LOG_LEVEL: debug

functions:
  webhooks:
    handler: handler.webhooks
    events:
      - httpApi:
          path: /api/github/webhooks
          method: post

Make sure to configure your GitHub App registration's webhook URL to <your lambda's URL>/api/github/webhooks.

Test deployment

For testing your Probot deployment without end to end (GitHub) integration, you can use this shell snippet:

$ LAMBDA_URL=https://x.execute-api.y.amazonaws.com/stage-or-basePath/api/github/webhooks
$ SECRET=the_webhook_secret
$ TMP_DATA_FILE=/tmp/smoke.data

$ echo -n "{\"action\":\"test\"}" > $TMP_DATA_FILE
$ SIGN=$(openssl dgst -sha1 -hmac $SECRET $TMP_DATA_FILE | cut -d" " -f2)
$ curl --request POST --header "X-Hub-Signature: sha1=$SIGN" --header "X-Github-Event: test" --header "X-GitHub-Delivery: fake" --data-binary "@$TMP_DATA_FILE" $LAMBDA_URL
{"ok":true}        <-- Concent for Probot v10: {"message":"Received test.test"}

Examples

Add yours!

Common errors

Http Code Message Description
403 Missing Authentication Token Bad endpoint (this one is not binded on Lambda)
500 Internal server error Incorrect headers value (X-GitHub-Delivery, X-GitHub-Event, X-Hub-Signature) or Probot error

Probot v11 migration key points

For Probot v11 support, this adapter introduces significant changes. Here the key points to update (in addition of Probot v11 breaking changes):

Key point / Probot <= v10 >= v11
NPM package name @probot/serverless-lambda @probot/adapter-aws-lambda-serverless
handler.js content See Usage v1.x See Usage
AWS Lambda Runtime handler.probot handler.webhooks
AWS Lambda Handler Node.js 12.x (preferred) Node.js 12.x (required)

LICENSE

ISC