📘

【GitHub Actions】Lambda + API Gatewayの自動デプロイを実装

2023/11/12に公開

はじめに

AWS上にLambdaとAPI Gatewayを、GitHub Actionsで自動デプロイするように実装します。

前提

以下条件のIAMロールは、AWSで作成済みとします。

  • ウェブアイデンティティプロバイダー
    token.actions.githubusercontent.com

  • ポリシーのサービス
    S3
    CloudFormation
    Lambda
    API Gateway

ディレクトリ構成

.
|-- lambda_function.py
|-- requirements.txt
`-- template.production.yaml

template.production.yamlファイルにはデプロイするLambdaとAPI Gatewayを定義しています。

template.production.yaml
template.production.yaml
Transform: AWS::Serverless-2016-10-31
Resources:
  SampleLambda: # Lambda
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: sample_lambda
      CodeUri: ./
      Handler: lambda_function.lambda_handler
      Runtime: python3.9
      Timeout: 30
      MemorySize: 256
      Events:
        GetApi:
          Type: Api
          Properties:
            Path: /api
            Method: GET
            RestApiId:
              Ref: SampleAPI

  SampleAPI: # API Gateway
    Type: AWS::Serverless::Api
    Properties:
      Name: sample_api
      StageName: production
      EndpointConfiguration: REGIONAL

自動デプロイを実装

作業ブランチを作成&移動

$ git checkout -b github_actions

S3作成

デプロイ時、コード等をアップロードするためのS3を作成します。

aws s3 mb s3://sample_bucket

ワークフロー作成

GitHub Actionsのワークフローファイルを作成します。

$ mkdir -p .github/workflows
$ touch .github/workflows/deploy.yml

deploy.ymlファイルには、AWS上へ自動デプロイするために必要な定義を記述します。

deploy.yml
name: production

on: # 自動デプロイ確認のため、作業ブランチを指定しています
  push:
    branches:
      - github_actions

permissions:
  id-token: write
  contents: read

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup python
        uses: actions/setup-python@v3
        with:
          python-version: '3.9'

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

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          aws-region: ap-northeast-1
          role-to-assume: ${{ secrets.IAM_ROLE_ARN }}

      - name: Build
        run: sam build --template-file template.production.yaml

      - name: Deploy
        run: |
          sam deploy \
              --template-file .aws-sam/build/template.yaml \
              --stack-name ${{ secrets.CFN_STACK_NAME }} \
              --s3-bucket ${{ secrets.S3_BUCKET_NAME }} \
              --no-fail-on-empty-changeset

GitHubに環境変数設定

リポジトリのSettings > Secrets and variables > Actionsより、GitHub Actionsで使用する環境変数を設定します。

New repository secretボタンを押下し、deploy.ymlファイルで使用している環境変数を以下のように設定します。

以上で実装終了です。
github_actionsブランチの変更内容をGitHubにpushすると、GitHub Actionsが実行されます。
ワークフローの実行内容はActionsから確認でき、StatusがSuccess✅になると、自動デプロイ完了です🎉
LambdaとAPI Gatewayが正常にデプロイされているかは、AWSマネジメントコンソールで確認してみて下さい。

参考記事

https://github.com/aws-actions/setup-sam

Discussion