こんにちはますのです。
先日よりAWS LambdaでPythonを実行するコードを作成しております。
せっかくなのでGithubで管理したいですよね。
コード更新した時に自動デプロイしてほしいですよね。
ということでGithubActionsでAWS Lambdaへ自動デプロイが出来ないかやってみました。
Github Actions:設定方法
思いのほか簡単に出来ました。
実現したいことはこちらです。
- 「lambda_function.py」を更新する
- EventBridgeのcron設定をコード上で変更可能とする
データ配置
- (リポジトリ)
- .github/workflows/deploy.yml
- lambda/lambda_function.py
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 * * ? *)'
Lambdaへイベントとして設定をしたい場合は別途CLIを組む必要があります。
今回はコードの管理が出来るところまでにて妥協します。
参考情報
Github ActionsでAWS Lambdaにdeployする
AWS CLI Command Reference:Lambda(update-function-code)
AWS CLI Command Reference:EventBridge(put-rule)