Contents
AWS Lambdaの自動デプロイをGitHub Actionsで実現する意義と概要
クラウド開発において、継続的インテグレーション(CI)と継続的デリバリー(CD)は効率的な開発フローの根幹です。特にAWS Lambdaのような無サーバーアーキテクチャでは、コード変更を即座に環境に反映する必要があります。この記事では、GitHub Actionsを使用してAWS Lambda関数を自動デプロイする最新手法を解説し、セキュリティと運用性の両面で最適な実装方法を紹介します。
OIDC(OpenID Connect)ベースの認証は、従来のアクセスキーを使用せずにAWSリソースへの安全なアクセスを可能にします。これにより、秘匿情報の漏洩リスクを最小限に抑えつつ、自動化されたデプロイフローを構築できるという利点があります。以下では、具体的な初期設定からワークフロー作成までをステップバイステップで説明します。
AWS CLIとIAMロールの初期設定手順
GitHub Actions環境からAWS Lambdaに安全にアクセスするには、適切なIAMロールと認証設定が不可欠です。以下では、OIDC連携によるアクセスキー不要なデプロイを実現するための準備手順を解説します。
AWS CLIのインストールと構成
AWS CLIはクラウドリソース操作の基本ツールであり、GitHub Actionsのワークフローで使用されます。以下の手順でインストール・設定してください。
-
AWS CLIをインストール
bash
curl "https://awscli.amazonaws.com/awscliv2.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install -
プロファイル設定(ローカル環境での確認用)
bash
aws configure set aws_access_key_id <YOUR_ACCESS_KEY>
aws configure set aws_secret_access_key <YOUR_SECRET_KEY>
aws configure set region ap-northeast-1
注意: GitHub Actionsではアクセスキーを直接使用せず、OIDC連携による認証を推奨します。
OIDCベースのIAMロール作成
AWSコンソールでGitHubリポジトリに紐づけたIAMロールを作成します。このロールは、ワークフロー実行時に自動的に認証される仕組みです。
IDプロバイダの登録
- IAM → IDプロバイダ → プロバイダを追加
- 「AWS管理」を選択し、GitHubのOIDC設定情報を入力
信頼ポリシーの作成
- 以下のJSONテンプレートでロールに信頼関係を設定
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::<ACCOUNT_ID>:oidc-provider/token.actions.githubusercontent.com" }, "Condition": { "StringEquals": { "token.actions.githubusercontent.com:sub": "repo:<OWNER>/<REPO>:*" } }, "Action": "sts:AssumeRoleWithWebIdentity" } ] } |
ロールにポリシーをアタッチ
AWSLambda_FullAccessなどは避けて、必要最小限の権限(例:AWSLambda_AuthorizedExecution)を選択
ポイント: IAMロールの権限は「最小権限」に設定することで、セキュリティリスクを抑えることが可能です。
GitHub Actionsワークフロー(YAML)ファイルの作成方法
GitHub ActionsでLambda関数をデプロイするには、YAML形式のワークフロー定義が必要です。以下では基本構造とベストプラクティスについて解説します。
ワークフロー構造の基本設計
ワークフローは.github/workflows/deploy-lambda.ymlに記述され、以下の主なセクションを備えます。
1. name(ワークフローアクション名)
2. on(実行トリガー:push、scheduleなど)
3. jobs(タスク定義:build、deployなど)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
name: Deploy Lambda Function on: push: branches: [main] jobs: build-and-deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Setup AWS CLI uses: aws-actions/configure-aws-credentials@v1 with: role-to-assume: arn:aws:iam::<ACCOUNT_ID>:role/<ROLE_NAME> aws-region: ap-northeast-1 |
ポイント:
configure-aws-credentialsアクションでOIDCベースの認証を実現します。
AWSリソースデプロイ時のベストプラクティス
Lambda関数のパッケージングとデプロイには、以下の手順が推奨されます。
-
Lambdaコードの圧縮
bash
zip -r9 lambda_function.zip . -
CloudFormationやAWS CLIでリソースをアップロード
bash
aws lambda update-function-code --function-name <FUNCTION_NAME> --zip-file fileb://lambda_function.zip
補足: エラー発生時は
aws cloudwatch logs get-log-eventsでログを確認し、原因特定を進めましょう。
Lambda関数のバージョン管理とリーリング手法
Lambda関数はバージョニング機能により、変更履歴を自動保存できます。これにより、プロダクション環境への段階的なリリースが可能になります。
変更履歴の自動保存
Lambda関数にはデフォルトでバージョン番号が付与され、各変更ごとに新しいバージョンとして管理されます。
| 手順 | 説明 |
|---|---|
| 1. 関数にバージョンを追加 | aws lambda publish-version --function-name <FUNCTION_NAME> |
| 2. バージョンリストの確認 | aws lambda list-versions-by-function |
例:
v1,v2といったバージョン番号が自動生成されます。
エイリアスによるリリース戦略
エイリアスは特定バージョンにポインターを設定する仕組みです。これにより、プロダクション環境のトラフィックを段階的に新しいバージョンに切り替えることが可能です。
-
エイリアスを作成
bash
aws lambda create-alias --function-name <FUNCTION_NAME> --name production --function-version v2 -
トラフィック配分の設定(オプション)
- バージョンごとのトラフィック割合を指定することで、A/Bテストが可能
セキュリティ強化と監視設定
自動デプロイ環境ではセキュリティ設定が最も重要です。最小権限のIAMロールやログ収集による異常検知体制を構築しましょう。
最小権限のIAMポリシー設計
ロールに付与するIAMポリシーは、必要最低限のみ選択します。以下のような最小権限の例です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:UpdateFunctionCode" ], "Resource": [ "arn:aws:lambda:<REGION>:<ACCOUNT_ID>:function:<FUNCTION_NAME>" ] } ] } |
注意:
AWSLambda_FullAccessなどの権限過剰なロールは絶対に使用しないでください。
ログ収集とアラーム設定
CloudWatch LogsにはLambdaの実行ログが保存され、異常検知に活用できます。
- CloudWatch Logsの設定
-
aws logs describe-log-streamsでロギングを確認 -
CloudWatch Alarmsの作成
- 実行エラーやリソース使用量の上限を超えた場合にアラームを発信
ポイント: エラーが検出された際には、SNS通知やSlackへの連携で即時対応を実現します。
- 本記事ではAWS Lambda関数をGitHub Actionsで自動デプロイする具体的な手順とセキュリティ強化の方法をご案内しました。
- キーポイントは以下の通りです:
- OIDCを使用したアクセスキー不要な認証構成
- IAMロールへの最小権限ポリシーの適用
- バージョン管理とエイリアスによる段階的なリリース戦略
- CloudWatchによるログ監視と異常検知体制の整備
これらの手法を導入することで、安全性と運用効率の両立が可能です。実装にあたっては公式ドキュメントも併せて参照してください。