
AWS Lambda + JavaScriptをGitHub Actionsでデプロイする方法
投稿日:2025.12.21
更新日:2025.12.23
はじめに
JavaScriptで作ったLambda関数をGitHub Actionsでデプロイする方法について紹介します。
加えて、node_modulesのパッケージも含めてデプロイします。
サンプルコード
mizuyi/practice-build-aws-lambda | GitHub
github.com
ディレクトリ構成
.
├── .github/
│ └── workflows/
│ └── deploy.yml
└── src/
├── index.js
├── package.json
└── package-lock.json
実装
deploy.yml
deploy.yml
name: "Deploy AWS Lambda"
on:
workflow_dispatch:
permissions:
id-token: write
contents: read
env:
AWS_DEPLOY_ROLE_ARN: ${{ secrets.AWS_DEPLOY_ROLE_ARN }}
AWS_LAMBDA_ROLE_ARN: ${{ secrets.AWS_LAMBDA_ROLE_ARN }}
AWS_REGION: ap-northeast-1
LAMBDA_FUNCTION_NAME: lambda-function
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '24'
- name: Install dependencies
run: npm install
working-directory: src
- name: Login
uses: aws-actions/configure-aws-credentials@v5
with:
role-to-assume: ${{ env.AWS_DEPLOY_ROLE_ARN }}
aws-region: ${{ env.AWS_REGION }}
- name: Deploy to Lambda
uses: aws-actions/aws-lambda-deploy@v1
with:
function-name: ${{ env.LAMBDA_FUNCTION_NAME }}
code-artifacts-dir: src
runtime: nodejs24.x
handler: index.handler
role: ${{ env.AWS_LAMBDA_ROLE_ARN }}
ROLE_ARNについて
AWS_DEPLOY_ROLE_ARN: OIDCプロバイダ + Lambdaの作成ポリシーAWS_LAMBDA_ROLE_ARN: Lambdaの実行ポリシー
AWS_DEPLOY_ROLE_ARN 作成
- IAMでGitHub Actions用のロール(OIDCプロバイダ)を作成
- 以下のインラインポリシーを追加
lambda:CreateFunction: Lambda関数の作成lambda:UpdateFunctionCode: 関数コードの更新lambda:UpdateFunctionConfiguration: 関数設定の更新lambda:GetFunctionConfiguration: 関数設定の取得lambda:PublishVersion: バージョンの公開iam:PassRole: Lambda実行ロールの割り当て
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"lambda:CreateFunction",
"lambda:UpdateFunctionCode",
"lambda:PassCapacityProvider",
"iam:PassRole",
"lambda:UpdateFunctionConfiguration",
"lambda:GetFunctionConfiguration",
"lambda:PublishVersion"
],
"Resource": "*"
}
]
}
AWS_LAMBDA_ROLE_ARN 作成
- Lambda実行用のロールを作成
- マネージドポリシー
AWSLambdaBasicExecutionRoleをアタッチ
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sts:AssumeRole"
],
"Principal": {
"Service": [
"lambda.amazonaws.com"
]
}
}
]
}
JSの依存関係をインストール
Lambda関数で使用するnode_modulesをインストール
- working-directory: src
./srcで依存関係をインストール
- name: Install dependencies
run: npm install
working-directory: src
インストール後
.
├── .github/
│ └── workflows/
│ └── deploy.yml
└── src/
├── index.js
├── package.json
├── package-lock.json
+ └── node_modules/
AWSにログイン
OIDCプロバイダでログイン
OIDCプロバイダのロールにはLambda関数を作成するためのポリシーが必要です。
- name: Login
uses: aws-actions/configure-aws-credentials@v5
with:
role-to-assume: ${{ env.AWS_DEPLOY_ROLE_ARN }}
aws-region: ${{ env.AWS_REGION }}
Lambda関数をデプロイ
srcディレクトリのソースをLambda関数としてデプロイ
aws-actions/aws-lambda-deployを使用することでzip化の処理の記載を省略できます。
aws-actions/aws-lambda-deploy@v1
function-name: Lambda関数の名前code-artifacts-dir: デプロイするコードのディレクトリruntime: Lambda関数の実行環境handler: 実行する関数のエントリーポイント(ファイル名.関数名)role: Lambdaの実行ロールのarn
- name: Deploy to Lambda
uses: aws-actions/aws-lambda-deploy@v1
with:
function-name: ${{ env.LAMBDA_FUNCTION_NAME }}
code-artifacts-dir: src
runtime: nodejs24.x
handler: index.handler
role: ${{ env.AWS_LAMBDA_ROLE_ARN }}
handlerについて
handlerには実行するLambda関数の ファイル名.関数名 を指定
例1
以下の場合はindex.handlerになります
index.js
// ファイル名: index.js
// 関数名: handler
export const handler = async (event) => ({ statusCode: 200 });
例2
以下の場合はapp.mainになります
app.js
// ファイル名: app.js
// 関数名: main
export const main = async (event) => ({ statusCode: 200 });
参考
AWSからLambda関数デプロイ用のGitHub Actionがリリースされました | DevelopersIO
dev.classmethod.jp
aws-actions/aws-lambda-deploy: Deploys a Lambda function.
github.com