Contents
GitHub ActionsでAWS Lambdaを自動デプロイする手順
GitHub Actionsを使用してAWS Lambda関数を自動デプロイするには、開発環境の準備からワークフロー設定まで一連のステップが必要です。特にAWS CLIの資格証明設定やLambda関数のパッケージングがポイントとなるため、ここでは具体的な手順を解説します。
準備する環境と前提条件
GitHub ActionsでLambda自動デプロイを実現するには、以下の準備が必要です。
必要な環境リスト
- AWS CLIの導入:最新バージョンをインストールし、資格証明情報を設定済みであること
- Lambda実行環境:Node.jsやPythonなどのランタイムが導入されていること
- GitHubアカウント:リポジトリを作成・管理できる権限があること
AWS CLIのバージョン確認は、以下のコマンドで行うことができます。
|
1 2 |
aws --version |
注意: 公開リポジトリでは資格情報を直接配置しないこと。GitHub Secretsを使用して暗号化した方が安全です。
AWS CLI公式設定ガイド
AWS CLIの資格証明設定
AWS CLIを使用してリソース操作を行うには、AWSアカウントに所属するユーザーまたはロールの認証情報を登録する必要があります。このステップが無ければ、デプロイ時にアクセス権限エラーが発生します。
設定手順
-
以下のコマンドでInteractiveモードを起動します。
bash
aws configure -
プロンプトに応じて、AWS Access Key ID、Secret Access Key、リージョン(例:
ap-northeast-1)、出力形式(デフォルトはjson)を入力します。
注意: 公開リポジトリでは資格情報を直接配置しないこと。GitHub Secretsを使用して暗号化した方が安全です。
AWS CLI公式設定ガイド
IAMロールの作成とアクセス許可設定
Lambda関数がAWSリソースにアクセスできるようにするには、IAMロールを作成し、適切な権限を割り当てます。
必要な権限の一例
| 権限名 | 説明 | 公式ドキュメント |
|---|---|---|
| AWSLambda_FullAccess | Lambda関数の作成・編集に必要 | AWS公式 |
| IAMReadOnlyAccess | IAMロール管理に必要 | AWS公式 |
| AWSCloudFormationFullAccess | CloudFormationを使用する場合に必要 | AWS公式 |
ロールを作成後、Lambda関数の実行時にアタッチします。
ワークフローのディレクトリ構成とYAMLファイルの作成
GitHub Actionsでワークフローを設定するには、.github/workflows/ディレクトリにYAMLファイルを作成します。このディレクトリ構成は、リポジトリのCI/CDパイプラインの基盤となるため、確実な配置が重要です。
.github/workflows/ディレクトリの基本構造
.github/workflows/配下には、ワークフローを定義するYAMLファイル(例: lambda-deploy.yml)を配置します。
| ファイル名 | 説明 |
|---|---|
lambda-deploy.yml |
Lambda関数のデプロイに特化したワークフロー |
ディレクトリ構成は以下のようになります。
|
1 2 3 4 5 6 7 8 |
<リポジトリルート> ├── .github │ └── workflows │ └── lambda-deploy.yml └── src/ ├── lambda_function.py └── requirements.txt |
GitHub Actions用YAMLファイルのテンプレート
以下は、AWS公式アクションを使用したワークフローYAMLの例です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
name: Deploy Lambda Function on: push: branches: - main jobs: deploy-lambda: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Set up AWS CLI uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: ap-northeast-1 - name: Install dependencies run: | python3 -m venv venv source venv/bin/activate pip install -r requirements.txt - name: Package Lambda function run: | zip -r9 lambda_function.zip src/ - name: Deploy Lambda Function uses: aws-actions/deploy-lambda@v1 with: function-name: my-lambda-function region: ap-northeast-1 runtime: python3.10 handler: src.lambda_function.handler role: arn:aws:iam::123456789012:role/lambda-role |
このYAMLファイルは、プッシュイベントが発生した際にLambda関数を自動デプロイします。
注意: 本例のARN(
arn:aws:iam::123456789012:role/lambda-role)はプレースホルダーです。実際には自分のAWSアカウントIDを使用してください。
AWS IAMロール作成ガイド
Lambda関数のパッケージングとZIPファイルの作成
AWS Lambdaで実行するコードは、ZIP形式にパッケージングしてアップロードする必要があります。特にPythonやNode.jsなどのランタイムごとに手順が異なるため、注意が必要です。
依存ライブラリのインストール手順(Pythonの場合)
|
1 2 3 4 |
python3 -m venv venv source venv/bin/activate pip install -r requirements.txt |
ZIP形式への変換コマンド例
Lambda関数を含むディレクトリをZIPファイルに圧縮するには、以下のコマンドを使用します。
|
1 2 |
zip -r9 lambda_function.zip src/ |
この作業は、GitHub Actionsワークフローでも同様のコマンドで実行可能です。
ヒント:AWS SAM CLIやServerless Frameworkを使うと、パッケージングがさらに簡略化されます。
AWS SAM CLI公式ページ
AWS公式アクションでのLambda関数のデプロイ
AWS公式アクションaws-actions/deploy-lambdaを使用すると、Lambda関数のデプロイ手順をYAMLで宣言的に記述できるため、管理が簡単になります。
Deploy Lambda Functionアクションの使用例
ワークフローYAML内のstepsセクションに以下のように記述します。
|
1 2 3 4 5 6 7 8 9 |
- name: Deploy Lambda Function uses: aws-actions/deploy-lambda@v1 with: function-name: my-lambda-function region: ap-northeast-1 runtime: python3.10 handler: src.lambda_function.handler role: arn:aws:iam::123456789012:role/lambda-role |
このアクションは、指定した関数名とパラメータに従ってLambda関数を更新します。
環境変数の設定方法
環境変数は、GitHub Secretsから取得して設定できます。
|
1 2 3 4 5 6 7 8 9 10 11 |
- name: Deploy Lambda Function with environment variables uses: aws-actions/deploy-lambda@v1 with: function-name: my-lambda-function region: ap-northeast-1 runtime: python3.10 handler: src.lambda_function.handler role: arn:aws:iam::123456789012:role/lambda-role environment-variables: API_KEY: ${{ secrets.API_KEY }} |
ワークフローのテストとトラブルシューティング
ワークフローを実行する前には、ローカルでのテストとエラー対応を確認することが重要です。
GitHub Actionsでの実行手順
- リポジトリに変更をプッシュします(例:
mainブランチへのコミット) - GitHub Actionsのワークフロー実行履歴で、ステップごとのログを確認します
- エラーが発生した場合、ログから原因を特定し修正します
トラブルシューティング例
- AWS CLIの資格証明に失敗 → GitHub Secretsの環境変数を再確認する
- ZIPファイル作成エラー →
zipコマンドが正しく実行されているか確認する - ロール権限不足 → IAMロールに適切なポリシーをアタッチする
まとめ
- 準備環境:AWS CLI、Lambdaランタイム環境、GitHubアカウントが必要
- ワークフロー構成:
.github/workflows/ディレクトリにYAMLファイルを作成し、ステップを宣言的に記述 - パッケージング:依存ライブラリと関数コードをZIP形式に圧縮
- デプロイアクション:AWS公式アクションを使用して簡潔に設定可能
- テスト対応:ローカルでの確認やエラーログのチェックで安定性向上
GitHub Actions × AWS Lambdaによる自動デプロイ環境構築は、DevOpsエンジニアにとって必須スキルです。記事の手順を参考に、本日の実装を始めてみてください。