GitHub Actionsを使用してLambda自動デプロイ
自動デプロイ
特定のブランチにマージされたタイミングでLambdaを自動でデプロイしたい。
ルートディレクトリに.github/workflowsディレクトリを作成
├ .github/
│ └ workflows/
│ └ ファイル.yaml
├ lambda/
│ ├ lambda_1/
│ └ lambda_function.py
│ ├ lambda_2/
│ └ lambda_function.py
.github/workflows配下にyamlファイル作成(ファイル名はなんでも可)
.github/workflows配下のyamlファイルは複数あっても問題ない。
書き方
name: AWS Lambda Deploy
on: # トリガーとなるイベント
push:
branches:
- main
jobs:
deploy: # job名
runs-on: ubuntu-latest # 実行環境
steps: # ステップ
- name: Hello # アクション名
run: echo "Hello" # 実行する内容
onは起動するトリガーとなるイベント
今回はmainブランチにpushされたら起動
jobは実行する環境
jobごとに仮想環境が動くので、job間でデータの受け渡しは不可
jobの名前はなんでもいい(今回はdeploy)
stepは実際の動作(アクション)のまとまり
アクションごとに-
で書いていく
アクションは実際の動作
ブランチの切り替えやディレクトリの移動とか
今回はHelloと出力
よく使われるアクションはあらかじめ用意されています
リポジトリをチェックアウトする場合はactions/checkout
があります
出来上がり
name: AWS Lambda Deploy
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@main
with:
aws-region: ${{ secrets.AWS_REGION }}
role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
role-session-name: NAME
- name: get-caller-identity is allowed to run on role.
run: aws sts get-caller-identity
- name: setup-python
uses: actions/setup-python@v3
with:
python-version: '3.9'
- name: lambda update
run: |
pip3 install awscli
cd ./lambda/lambda_1 && zip -r lambda_1.zip ./*
aws lambda update-function-code --function-name lambda_1 --zip-file fileb://lambda_1.zip --publish
cd ../../lambda/lambda_2 && zip -r lambda_2.zip ./*
aws lambda update-function-code --function-name lambda_2 --zip-file fileb://lambda_2.zip --publish
トリガーmainブランチにpushされた場合に実行
アクションたち
・リポジトリをチェックアウト
・awsを使用するのでcredentialの設定
あらかじめIAMで設定しおく。
作成したKEYたちはGitHub上のSettings → Secretsで登録しておく
今回はAWS_REGIONとAWS_ROLE_ARNという名前で登録
呼び出す場合は{{ secrets.登録時の名前 }}
で呼び出せる
大切な情報を直接書かなくてすむので設定しておく
・pythonのインストール
・lambdaの更新
awscliをインストール
lambda_1のディレクトリに移動してzip化
zip化したものをLambda関数名を指定して更新
lambda_2のディレクトリに移動して同様のことを繰り返す
感想
今回2つのLambdaなので直接関数名を指定してるが、複数あった場合ループさせてzip化して、それぞれの関数を更新する必要がありそう。
Lambdaが増える度に書いてたらキリないので。
あと更新されたLambdaファイルのみアップデートしたい場合はどうすればいいのか。。
変更があったファイルみたいなのって取得できるのかな。?
下記が大変わかりやすかったです。
ありがとうございます。
Discussion