こんにちは、ネットワークエンジニアの原です。
2025/8/7に、AWSから以下のアップデート情報が発表されました。
AWS公式のGitHub Actionsを利用することで、Lambda関数の自動デプロイを簡単に実装できるようになったということで、早速試してみました。
本記事は、AWSのリポジトリにあるサンプルを参考に実装しています。
概要
以下の手順で実装しています。
- Lambda関数デプロイ用のIAMロールの設定
- IDプロバイダの追加
- GitHubで環境変数を設定
- GitHub Actionsのワークフローを実装
- GitHubにpushしてLambda関数をデプロイ
フォルダ構成は以下のとおりです。
.
├── .github
│ └── workflows
│ └── deploy.yml
└── src
└── lambda_function.py
Lambda関数デプロイ用のIAMロールの設定
はじめに、GitHub ActionsでLambda関数をデプロイするときに利用するIAMロールを作成します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"lambda:UpdateFunctionCode",
"lambda:GetFunction",
"lambda:PublishVersion",
"lambda:GetFunctionConfiguration",
"lambda:CreateFunction",
"lambda:UpdateFunctionConfiguration"
],
"Resource": "arn:aws:lambda:*:<your-account-id>:function:*"
},
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::<your-account-id>:role/*",
"Condition": {
"StringEquals": {
"iam:PassedToService": "lambda.amazonaws.com"
}
}
}
]
}
信頼関係は以下のように設定します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::<your-account-id>:oidc-provider/token.actions.githubusercontent.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"token.actions.githubusercontent.com:aud": "sts.amazonaws.com"
},
"StringLike": {
"token.actions.githubusercontent.com:sub": "repo:<your-github-account-name>/*"
}
}
}
]
}
token.actions.githubusercontent.com:subは、GitHubのリポジトリを特定します。
今回はrepo:<your-github-account-name>/*と私の全てのリポジトリを対象としましたが、リポジトリ名やブランチ名を指定することもできます。
IDプロバイダの追加
次に、IDプロバイダの追加をします。
IDプロバイダを追加することで、アクセスキーを発行しなくても、GitHub Actions内でLambda関数デプロイ用のIAMロールを利用できるようになります。
プロバイダの追加を押下して
- プロバイダタイプ:OpenID Connect
- プロバイダのURL:
https://token.actions.githubusercontent.com - 対象者:
sts.amazonaws.com
以上を入力してプロバイダを追加します。
OpenID Connectについては以下のページをご覧ください。
GitHub Actionsのワークフローを実装
GitHub Actionsのワークフローを実装していきます。
.github/workflows配下に実装することで、GitHub Actionsを利用できるようになります。
name: Deploy to AWS Lambda
on:
push:
branches: [ "main" ]
permissions:
id-token: write # This is required for OIDC authentication
contents: read # This is required to checkout the repository
jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest
environment: production
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ secrets.AWS_LAMBDA_DEPLOY_ROLE }}
aws-region: ap-northeast-1
- name: Deploy Lambda Function
uses: aws-actions/aws-lambda-deploy@v1
with:
function-name: github_actions_test
code-artifacts-dir: src
handler: lambda_function.lambda_handler
runtime: python3.13
role: ${{ secrets.AWS_LAMBDA_EXECUTION_ROLE }}
yamlファイル内で、以下のシークレットを設定しています。
-
AWS_LAMBDA_DEPLOY_ROLE: Lambda関数をデプロイするためにGitHub Actionsが利用するIAMロールのARN -
AWS_LAMBDA_EXECUTION_ROLE: Lambda関数を実行するときに利用するIAMロールのARN
code-artifacts-dirやhandlerなど複数のパラメータを指定することもできます。
GitHubで環境変数を設定
今回はyamlファイル内でシークレットを使用しているため、GitHubリポジトリにシークレットの環境変数を設定します。
AWS_LAMBDA_DEPLOY_ROLEとAWS_LAMBDA_EXECUTION_ROLEをそれぞれ設定します。
GitHubにPushしてLambda関数をデプロイ
ここまで設定できたら、GitHubにソースコードをPushします。
Pushすると自動でGitHub Actionsが走り、Lambda関数が作成されました。
ソースコードをZipに固めて自動でアップロードしてくれるので、とても便利ですね。
実際にやってみて
今回、初めてLambda関数の自動デプロイを試してみました。
公式のGitHub Actionsを利用することで、数行のワークフローで自動デプロイを実現することができました。
AWSの他サービスも含めた自動デプロイを実現する場合はSAMを利用する形なりそうですが、Lambda関数のみのデプロイであれば公式のGitHub Actionsは一つ目の選択肢になりそうです。
ぜひ使ってみてください。
(ついでにOpenID Connectの存在を知ることができたのも良かったです。)




