Adapter to run a Probot application function in AWS Lambda using the Serverless Framework
npm install @probot/adapter-aws-lambda-serverless// handler.jsconst{ createLambdaFunction, createProbot,}=require("@probot/adapter-aws-lambda-serverless");constappFn=require("./");module.exports.lambdaFn=createLambdaFunction(appFn,{probot: createProbot(),});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: awsruntime: nodejs12.xlambdaHashingVersion: 20201221environment: APP_ID: ${param:APP_ID}PRIVATE_KEY: ${param:PRIVATE_KEY}WEBHOOK_SECRET: ${param:WEBHOOK_SECRET}NODE_ENV: productionLOG_LEVEL: debugfunctions: probot: handler: handler.lambdaFnevents: - httpApi: path: /api/github/webhooksmethod: postMake sure to configure your GitHub App registration's webhook URL to <your lambda's URL>/api/github/webhooks.
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"}- example-aws-lambda-serverless - Official example application that is continuously deployed to AWS Lambda
Add yours!
| 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 |
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) |