LoginSignup
2
1

More than 3 years have passed since last update.

自作 Github Apps を AWS Lambda で動かす

Last updated at Posted at 2019-05-17

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はメインの処理が終わると他の処理を待たずに終わってしまうので。
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1