AWS Lambdaを自動デプロイ!GitHub Actions設定ガイド

AWS

はじめに

AWS Lambdaの継続的デプロイ(CD)は、コード変更を迅速に反映させるためのプロセスです。この解説では、初心者にも分かりやすいように、サンプルコードをもとに解説します。デプロイの自動化で開発効率を向上させましょう!

この記事で学べること

  1. GitHub Actionsを使ったデプロイ
    GitHubにプッシュしたコードを自動でAWS Lambdaに反映する方法を学びます。
  2. 必要な準備
    デプロイに必要なAWSやGitHubの設定方法を解説します。
  3. サンプルコード付きで実践
    実際に使えるサンプルを示しながら、ステップごとに説明します。

必要な事前準備

以下の手順を実行しておきましょう

  1. AWS Lambda関数の作成
    AWSマネジメントコンソールでLambda関数を作成し、関数名を確認しておきます。
  2. IAMユーザーの作成とアクセスキーの取得
    AWS CLIやGitHub ActionsがLambdaにアクセスできるようにするために、適切な権限を持つIAMユーザーを作成し、アクセスキーを取得します。
  3. GitHubリポジトリのSecrets設定
    IAMユーザーのアクセスキー情報をGitHubリポジトリのSecretsに登録します。
    • AWS_ACCESS_KEY_ID: IAMユーザーのアクセスキーID
    • AWS_SECRET_ACCESS_KEY: IAMユーザーのシークレットキー

AWS Lambda関数の作成

AWSのコンソールで下記を設定し、lambda関数を作成します。

  • 関数名
    好きな関数名を設定します。
  • ランタイム
    利用する環境を選択、今回はPyhton
  • アーキテクチャ
    開発環境と同じアーキテクチャを選択します。
    今回の場合はそこまで大差がないのでx86_64を選択

実行ロールなどに関してはS3との連携等で必要になりますが、今回はサンプルなのでデフォルト設定で行きます。

IAMユーザーの作成とアクセスキーの取得

IAMにアクセスして、新規作成を行います。

  • ユーザー名
    任意のユーザー名を設定します。
  • AWS マネジメントコンソールへのユーザーアクセスを提供する
    このアカウントはコンソールへのアクセスを行わない想定なのでチェックボックスは外します。
  • 許可の設定
    今回はポリシーを直接アタッチするを選択します。
    下記を付与してください。
    • AWSLambdaFullAccess

Secretsキーが記載されているファイルを必ず保存してください。
これは秘匿情報なので第三者への公開は厳禁です。

GitHubリポジトリのSecrets設定

GituhubのSetting > secrets and variables > actionsを選択し、AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYを設定します。

Screenshot

サンプルコードの解説

以下は、Lambda関数をデプロイするためのGitHub Actionsの設定ファイルです。

YAML
name: Deploy to AWS Lambda

on:
  push:
    branches:
      - main  # mainブランチにプッシュしたときにデプロイされます

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      # 1. リポジトリのコードをチェックアウト
      - name: Checkout code
        uses: actions/checkout@v2

      # 2. Pythonのセットアップ
      - name: Set up Python
        uses: actions/setup-python@v2
        with:
          python-version: '3.9'  # Lambdaで使用するPythonのバージョンに合わせてください

      # 3. 依存関係のインストール
      - name: Install dependencies
        run: |
          pip install -r requirements.txt -t lambda/

      # 4. Lambda関数をZIPファイルに圧縮
      - name: Zip Lambda function
        run: |
          cd lambda
          zip -r ../function.zip .

      # 5. Lambdaにデプロイ
      - name: Deploy to AWS Lambda
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_REGION: ap-northeast-1  # 使用するAWSのリージョン
        run: | 
          aws lambda update-function-code \
            --function-name test \ 
            --zip-file fileb://function.zip

詳細解説

  1. on:セクション
    • mainブランチにプッシュされたときにデプロイがトリガーされます。
  2. Checkout code
    • リポジトリ内の最新コードを取得します。
  3. Set up Python
    • デプロイ先LambdaのPythonバージョン(例: 3.9)に合わせてPythonをセットアップします。
  4. Install dependencies
    • 必要なPythonパッケージをインストールし、lambda/フォルダに保存します。
  5. Zip Lambda function
    • Lambda関数用のコードをZIP形式に圧縮します。
  6. Deploy to AWS Lambda
    • AWS CLIを使用して、Lambda関数にコードをアップロードします。
    • 関数名 (--function-name) やZIPファイルのパス (--zip-file) に注意してください。

必要なフォルダ構成

プロジェクトのフォルダ構成は以下のようになります

Plaintext
project-root/
├── lambda/
│   ├── app.py               # Lambda関数のメインコード
│   ├── requirements.txt     # 依存関係リスト
├── .github/
│   └── workflows/
│       └── deploy-lambda.yml  # GitHub Actions設定ファイル

実際に試してみる

  1. Lambda関数を作成し、関数名を設定
    AWS Lambdaでtestという関数を作成します。
  2. コードをプッシュ
    上記の構成でGitHubリポジトリにコードをプッシュします。
  3. デプロイを確認
    GitHub Actionsでデプロイが成功したことを確認し、AWS Lambdaコンソールで新しいコードが反映されているかを確認します。

注意点

  1. IAMユーザーの最小権限を設定
    IAMユーザーにAWSLambda_FullAccessなどの必要な権限だけを付与します。
  2. Secretsの保護
    GitHub Secretsに登録したAWSアクセスキー情報は外部に漏れないよう管理してください。

まとめ

AWS LambdaのCDは、GitHub Actionsを使うことで簡単に構築できます。この仕組みを活用すれば、デプロイを自動化し、開発効率を大幅に向上させることができます。この記事を参考に、ぜひ挑戦してみてください!

コメント

タイトルとURLをコピーしました