8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GitHub Actionsを使ってAWS Lambdaへ自動デプロイ

Last updated at Posted at 2019-09-01

前置き

ソースコードの管理を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はホストの環境変数から取得します。

serverless.yml
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_IDAWS_SECRET_ACCESS_KEYSLACK_WEBHOOKです。これらが設定されていないと失敗するので注意が必要です。わざと失敗させてみるのもいいですが...

..github/workflows/deploy.yml
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へ飛んできます。

スクリーンショット 2019-09-01 14.34.27.png

Job結果

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

スクリーンショット 2019-09-01 14.37.58.png

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

8
6
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
8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?