probot で開発をした Github Apps を AWS Lambda で動かすまでの備忘録
環境
- OS : AmazonLinux2
- node : 8.15.0
Githu Apps を作成
ここは省略 参考リンク
AWSにデプロイするための準備
Github Apps の準備
probotが公式でLambdaで動かすためのライブラリを紹介しているので、リポジトリ直下で以下のコマンドを実行し、ライブラリを追加
npm install @probot/serverless-lambda
./handler.js
を追加
const { serverless } = require('@probot/serverless-lambda')
const appFn = require('./')
module.exports.probot = serverless(appFn)
Serverless Framework用の設定ファイル
./serverless.yml
を追加
service: your-serverless-app-name
provider:
memorySize: 128
name: aws
runtime: nodejs8.10
region: ap-northeast-1
stage: v1
functions:
notify:
handler: handler.probot
environment:
APP_ID: XXXX(開発時の.envと同様の値)
WEBHOOK_SECRET: XXXX(開発時の.envと同様の値)
LOG_LEVEL: error
PRIVATE_KEY: XXX(GithubAppsから取得したPrivateKeyをBase64エンコードした値)
events:
- http:
path: /endpoint
method: post
デプロイ
Serverless Framework のデプロイコマンドで簡単デプロイ
sls deploy
デプロイが終了するとAPI Gatewayのエンドポイントが出力される
そのURLを GithubApps の Homepage URL, Webhook URL に設定
これで開発したGithub AppsがLambda上で動作する
引っかかりポイント
ローカルの開発時は動いていたのに、Lambdaでは動かない!ってときは、とりあえず以下あたりをチェック
- Lambdaのクラウドウォッチログを確認
- Github側で必要なアクションをしているのにそもそもログがない時 ⇒ GithubAppsの Webhoos URL にAPI Gatewayのエンドポイントが設定されていない
- ログはあるけどエラーが出てる ⇒ serverless.yml の environment の値の不備の可能性が高い
- ログはある、エラーはない、動いてない ⇒ 非同期処理の対応が出来ていない可能性が高い。外部へのPOSTやGETをしている場合は async/await でしっかりと制御を。Lambdaはメインの処理が終わると他の処理を待たずに終わってしまうので。