📘
【GitHub Actions】Lambda + API Gatewayの自動デプロイを実装
はじめに
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マネジメントコンソールで確認してみて下さい。
参考記事
Discussion