8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS Lambda】AWS公式のGitHub ActionsでLambda関数をデプロイしてみた

Last updated at Posted at 2025-08-27

こんにちは、ネットワークエンジニアの原です。

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ロールを利用できるようになります。

image.png

プロバイダの追加を押下して

image.png

  • プロバイダタイプ:OpenID Connect
  • プロバイダのURL:https://token.actions.githubusercontent.com
  • 対象者:sts.amazonaws.com

以上を入力してプロバイダを追加します。

OpenID Connectについては以下のページをご覧ください。

GitHub Actionsのワークフローを実装

GitHub Actionsのワークフローを実装していきます。
.github/workflows配下に実装することで、GitHub Actionsを利用できるようになります。

.github/workflows/deploy.yaml
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-dirhandlerなど複数のパラメータを指定することもできます。

GitHubで環境変数を設定

今回はyamlファイル内でシークレットを使用しているため、GitHubリポジトリにシークレットの環境変数を設定します。
AWS_LAMBDA_DEPLOY_ROLEAWS_LAMBDA_EXECUTION_ROLEをそれぞれ設定します。

image.png

GitHubにPushしてLambda関数をデプロイ

ここまで設定できたら、GitHubにソースコードをPushします。
Pushすると自動でGitHub Actionsが走り、Lambda関数が作成されました。

image.png

ソースコードをZipに固めて自動でアップロードしてくれるので、とても便利ですね。

image.png

実際にやってみて

今回、初めてLambda関数の自動デプロイを試してみました。

公式のGitHub Actionsを利用することで、数行のワークフローで自動デプロイを実現することができました。
AWSの他サービスも含めた自動デプロイを実現する場合はSAMを利用する形なりそうですが、Lambda関数のみのデプロイであれば公式のGitHub Actionsは一つ目の選択肢になりそうです。
ぜひ使ってみてください。

(ついでにOpenID Connectの存在を知ることができたのも良かったです。)

8
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?