前置き
ソースコードの管理をGitHubで行なっているのでCI/CDもGitHubに統一できたら楽だな〜と思って、GitHub Actionsを色々検証したり、実際にステージング・本番環境へデプロイするのに使ったりしています。
そこで今回はAWS Lambdaへの自動デプロイ方法を説明したいと思います。
概要
CDはタイトル通りGitHub Actionsを使い、デプロイにはServerless Frameworkを使います。ただデプロイするのは簡単なので、GitHubのSecretsからLambdaの環境変数に値をセットするのをやります。
デモ用のアプリはこちらに置いてあるのでforkしてGitHubのSecretsにAWSの認証データとSlackのIncoming Webhooks URLをセットして、何かしら編集してcommit/pushすれば自動デプロイを体験できるようにしてあります。デプロイに成功すればLambdaが実行されてLambdaからSlackへ通知がいくようになっています。
自動デプロイ方法
Serverless Framework
SlackのIncoming WebhookのURLはホストの環境変数から取得します。
service: auto-deploy-lambda
provider:
name: aws
region: ap-northeast-1
timeout: 120
environment:
SLACK_WEBHOOK: ${env:SLACK_WEBHOOK}
package:
exclude:
- Dockerfile
- docker-compose.yml
functions:
slack:
handler: src/index.post
description: "Post message to Slack"
timeout: 60
GitHub Actions
リポジトリにある定義ファイル.github/workflows/deploy.yml
は全てコメントアウトしてあるので、デモをする際はアンコメントしてから実施してください。
やるべき事として、GitHubのSecretsに3つのパラメーターの設定があります。AWS_ACCESS_KEY_ID
、AWS_SECRET_ACCESS_KEY
、SLACK_WEBHOOK
です。これらが設定されていないと失敗するので注意が必要です。わざと失敗させてみるのもいいですが...
on:
push:
branches:
- master
name: Auto Deploy to AWS Lambda
jobs:
deploy:
name: Auto Deploy
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@master
- name: Setup Node.js
uses: actions/setup-node@v1
with:
node-version: '10.x'
- name: Install Dependencies
run: |
npm install serverless -g
npm install
- name: Deploy to Lambda
run: sls deploy
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
- name: Execute Lambda
run: sls invoke -f slack
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
- name: Notify result to slack
uses: homoluctus/slatify@master
if: always()
with:
type: ${{ job.status }}
job_name: '*Deploy Lambda*'
env:
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
内容としては、Serverless Frameworkを使ってLambdaへデプロイした後にその関数を実行するようになっています。正常に実行されれば以下のような通知がLambdaからSlackへ飛んできます。

Job結果
色々ごにょごにょしたい方のためにGitHub Actions自体のJob結果を通知するjobを最後に加えています。name: Notify result to slack
から下の箇所ですね。
Jobが成功すると↓の感じの通知がSlackへきます。

何らかのjobが失敗した時にはサイドバーの色が緑色から赤色に変わります。リンクからGitHub Actionsの実行結果画面にとべるようになっているのですぐに原因を調べることができます。