Deploying a Golang Application to AWS Lambda with GitHub Actions: A Step-by-Step Guide


Deploying a Golang application to AWS Lambda can be streamlined using GitHub Actions, enabling continuous integration and delivery (CI/CD) automation. This guide outlines how to set up a robust deployment pipeline for a Golang app using GitHub Actions, ensuring seamless serverless deployment on AWS Lambda.

Prerequisites

Before proceeding, ensure the following:

  • A Golang application ready for deployment

  • An AWS account with Lambda permissions

  • A GitHub repository for source code management

  • AWS CLI and necessary IAM credentials configured

Step 1: Set Up AWS Lambda for Golang

  1. Create an AWS Lambda Function:

    • Navigate to AWS Lambda and create a new function.

    • Choose “Author from Scratch” and select “Go” as the runtime.

    • Configure IAM roles with permissions to execute the Lambda function.

  2. Prepare the Golang Application:

    • Structure the application to support AWS Lambda’s execution model.

    • Use github.com/aws/aws-lambda-go package for Lambda compatibility.

Build the application as a Linux executable using:

 sh
GOOS=linux GOARCH=amd64 go build -o main main.go


Zip the executable for Lambda deployment:

 sh
zip deployment.zip main


Step 2: Configure GitHub Actions for CI/CD

  1. Create a Workflow File:

    • Inside the repository, navigate to .github/workflows/ and create a new YAML file (e.g., deploy.yml).

  2. Define the Workflow Steps:

Set up a GitHub Actions workflow with the following stages:

yaml
name: Deploy Golang App to AWS Lambda


on:

  push:

    branches:

      - main


jobs:

  deploy:

    runs-on: ubuntu-latest

    steps:

      - name: Checkout Code

        uses: actions/checkout@v3


      - name: Set Up Go

        uses: actions/setup-go@v4

        with:

          go-version: 1.18


      - name: Build Application

        run: |

          GOOS=linux GOARCH=amd64 go build -o main main.go

          zip deployment.zip main


      - name: Deploy to AWS Lambda

        uses: aws-actions/aws-lambda-deploy@v1

        with:

          aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}

          aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

          function_name: "your_lambda_function"

          zip_file: "deployment.zip"


  1. Commit and Push Changes:

    • Once the workflow file is created, commit and push changes to the repository.

    • GitHub Actions will automatically build the application and deploy it to AWS Lambda when code is pushed to the main branch.

Step 3: Test the Deployed Lambda Function

  • Verify deployment in the AWS Lambda console.

Test the function using the AWS CLI:

 sh
aws lambda invoke --function-name your_lambda_function --payload '{}' response.json

  • Monitor logs via Amazon CloudWatch for debugging.


Conclusion

Automating Golang application deployment to AWS Lambda using GitHub Actions enhances CI/CD workflows, reducing manual effort and improving deployment efficiency. By integrating GitHub Actions, developers can ensure continuous and reliable serverless deployments with AWS Lambda.

Comments

YouTube Channel

Follow us on X