GithubActionsを使ってAWS Lambdaへ自動デプロイする

AWS

こんにちはますのです。
先日よりAWS LambdaでPythonを実行するコードを作成しております。

【Python3】地震情報の取得&通知を定期的にSlackへ送る仕組みを作ってみた(コード公開)

せっかくなのでGithubで管理したいですよね。
コード更新した時に自動デプロイしてほしいですよね。

ということでGithubActionsでAWS Lambdaへ自動デプロイが出来ないかやってみました。

Github Actions:設定方法

思いのほか簡単に出来ました。
実現したいことはこちらです。

  • 「lambda_function.py」を更新する
  • EventBridgeのcron設定をコード上で変更可能とする

データ配置

  • (リポジトリ)
    • .github/workflows/deploy.yml
    • lambda/lambda_function.py
フォルダ名「lambda」は任意です。
lambdaフォルダ内のデータをzip化してAWS Lambdaにアップロードするようになります。

.github/workflows/deploy.yml

実際のデプロイコードはこちら。
ランタイムはPythonを指定するのでデプロイ時もとりあえずPythonでやっておこうというお気持ち。
「setup-python」を利用したけど、デプロイするだけならnode.jsでも良い?とこのあたりは不勉強…。

name: Deploy to AWS Lambda
on:
  push:
    branches:
      - main
jobs:
  deploy:
    runs-on: ubuntu-latest
    
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ${{ secrets.AWS_REGION }}

      - name: Python Setup
        uses: actions/setup-python@v3
        with:
          python-version: '3.x'

      - name: Lambda Build & Update
        run: |
          pip3 install awscli
          cd lambda && zip -r package.zip ./*
          aws lambda update-function-code --function-name (Lambda関数名) --zip-file fileb://package.zip --publish
          
      - name: EventBridge Settings cron
        run: |
          aws events put-rule --name (EventBridgeルール名) --schedule-expression 'cron(00 0/1 * * ? *)'

各種設定の備忘録

Configure AWS credentials

今回はAWSの認証にIAMアクセスキーを利用します。
(本当はIAMを利用しない方法を試したいですが時間の関係で割愛)

GithubActionsの「Settings>Secrets>Actions」に登録した変数を読み出します。

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ${{ secrets.AWS_REGION }}

Python Setup

続いてPythonのセットアップです。
https://github.com/marketplace/actions/setup-python

      - name: Python Setup
        uses: actions/setup-python@v3
        with:
          python-version: '3.x'

Lambda Build & Update

こちらが実際にLambdaへアップロードする処理になります。

  • AWS CLIをインストール
  • アップロードするpyファイルをzip化
  • AWS CLIコマンドでzip化したファイルを指定Lambda関数へアップロード
      - name: Lambda Build & Update
        run: |
          pip3 install awscli
          cd lambda && zip -r package.zip ./*
          aws lambda update-function-code --function-name (Lambda関数名) --zip-file fileb://package.zip --publish

EventBridge Settings cron

おまけです。
今回のLambdaはトリガーに「EventBridge」を設定していました。

設定した内容を管理する時にAWS管理画面から見るのも面倒だと思ったので、GithubActions上から更新出来るようにします。

      - name: EventBridge Settings cron
        run: |
          aws events put-rule --name (EventBridgeルール名) --schedule-expression 'cron(00 0/1 * * ? *)'

あくまでもEventBridgeの設定を変更しているのみとなります。
Lambdaへイベントとして設定をしたい場合は別途CLIを組む必要があります。
AWS Lambdaのレイヤー追加やトリガーの設定などもやってみたかったのですが割愛します。
今回はコードの管理が出来るところまでにて妥協します。
CLIを覚えた未来の自分に更新を託したい思いです。

参考情報

AWS Lambda Update Action

Githubマーケットプレイス:setup-python

Github:actions/setup-python

Github ActionsでAWS Lambdaにdeployする

AWS CLI Command Reference:Lambda(update-function-code)

AWS CLI Command Reference:EventBridge(put-rule)

 

最新情報をチェックしよう!