😶‍🌫️

AWS初心者がGitHub Actionsからsamを使ってlambdaへデプロイする

2024/05/02に公開

0. はじめに

前回、localからlambdaへデプロイしました。
今回はGitHub Actionsを使ってlambdaへデプロイします。

1. IAM Identity プロバイダを登録する

こちらが参考になります。

2. IAMロールを登録

こちらが参考になります。
ただし、割り当てるロールは前回のIAMユーザーに割り当てたロールになります。ここで登録したロールのARMは使うのでコピーしておいてください。
https://zenn.dev/auagcu/articles/8cefeb17913e0f#3.-samで使うiamユーザーの作成

3. GitHub Actionsにシークレットを登録する。

これも(ry
https://zenn.dev/auagcu/articles/529bfbf6d3d9ad#github-actionsでシークレットを登録

4. deploy.ymlを作成

.github/workflows/の下にdeploy.ymlを作成します。
ブランチやディレクトリの設定は適宜変更してください。

name: AWS Lambda Deploy 
on:
  push:
    branches:
      - main
jobs:
  deploy:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: read

    steps:
      - name: checkout
        uses: actions/checkout@v3

      - name: configure-aws-credentials
        uses: aws-actions/configure-aws-credentials@master
        with:
          aws-region: ${{ secrets.AWS_REGION }}
          role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
          role-session-name: GitHubActions

      - name: get-caller-identity is allowed to run on role.
        run: aws sts get-caller-identity

      - name: Setup aws-sam
        uses: aws-actions/setup-sam@v2

      - name: build & deploy
        run: |
          cd sam-app
          sam build
          sam deploy

5. samconfig.tomlの修正

そのままの設定だと、GitHub Actions実行中に確認画面(y/nか入力されるやつ)が発生して失敗するのでその設定をOFFにします。

# More information about the configuration file can be found here:
# https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-config.html
version = 0.1

[default]
[default.global.parameters]
stack_name = "sam-app"

[default.build.parameters]
cached = true
parallel = true

[default.validate.parameters]
lint = true

[default.deploy.parameters]
capabilities = "CAPABILITY_IAM"
- confirm_changeset = true
+ confirm_changeset = false
resolve_s3 = true
s3_prefix = "sam-app"
region = "ap-northeast-1"
disable_rollback = true
image_repositories = []

[default.package.parameters]
resolve_s3 = true

[default.sync.parameters]
watch = true

[default.local_start_api.parameters]
warm_containers = "EAGER"

[default.local_start_lambda.parameters]
warm_containers = "EAGER"

これでmainにマージした時にLambdaへデプロイされるようになりました。

Discussion