💬

GitHub Actionsを使用してLambda自動デプロイ

2023/03/10に公開

自動デプロイ

特定のブランチにマージされたタイミングで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ファイルのみアップデートしたい場合はどうすればいいのか。。
変更があったファイルみたいなのって取得できるのかな。?

下記が大変わかりやすかったです。
ありがとうございます。
https://qiita.com/HeRo/items/935d5e268208d411ab5a

Discussion