Deploy a Golang Lambda
Tags: aws, lambda, go
Published: 2022-08-06 18:18:20

---
title: Deploy a Golang Lambda
published: true
description: A quick example showing how to deploy a Golang HelloWorld Lambda
tags: aws, lambda, golang
cover_image: https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nbb0pmnv6rhzzzcoc2l8.jpg
canonical_url: https://rhuaridh.co.uk/blog/deploy-golang-lambda-example.html
---

## The Problem

Quite often we just want a simple way to build and deploy a Golang Lambda in AWS without using SAM or Serverless.

We will look at using the CLI to deploy a simple Golang lambda. This example will give us the building blocks to integrate this into a CI/CD pipeline later.

## Video Walkthrough

The written instructions are below, but here is a quick video walkthrough showing how to deploy the Golang Lambda.

{% youtube jktC__3LAYk %}

## The Solution

### 1) Prerequisites

This article assumes you have these installed already:

 * Golang
 * AWS CLI
 * The jq package for parsing json
 * IAM permissions required to deploy the lambda

### 2) Create main.go file

Create a file called **main.go** in the root directory.

Here is a quick hello world script.

```
package main

import (
    "log"

    "context"

    "github.com/aws/aws-lambda-go/events"
    "github.com/aws/aws-lambda-go/lambda"
)

func handler(ctx context.Context, request events.APIGatewayProxyRequest) error {
    log.Println("HelloWorld from Golang Lambda")

    return nil
}

func main() {
    lambda.Start(handler)
}
```

### 3) Create Makefile

Create a file called **Makefile** in the root directory.

Please edit the parameters for **function name** and **region**

```
export GOOS=linux
export GOARCH=amd64
export CGO_ENABLED=0
.DEFAULT_GOAL := deploy

deploy:
	go build -o hello
	zip -r function.zip hello
	aws lambda update-function-code --function-name "BlogHelloWorldExample" --zip-file fileb://function.zip --region="eu-west-1" | jq .    
```

**Note:** If you receive the error `Makefile:6: *** missing separator. Stop.`, make sure to replace the spaces with tabs.

### 4) Install Golang Dependencies

You only need to do this step once:

```
go mod init example.com/demo
go get github.com/aws/aws-lambda-go/events
go get github.com/aws/aws-lambda-go/lambda
```

### 5) Run Makefile

Run the following CLI command to build, zip and deploy our example Lambda

```
make deploy
```

You should now see output similar to:

```
{
  "FunctionName": "BlogHelloWorldExample",
  "FunctionArn": "arn:aws:lambda:eu-west-1:xyz:function:BlogHelloWorldExample",
  "Runtime": "go1.x",
  "Role": "arn:aws:iam::xyz:role/service-role/BlogHelloWorldExample-role-xyz",
  "Handler": "hello",
  "CodeSize": xyz,
  "Description": "",
  "Timeout": 15,
  "MemorySize": 512,
  "LastModified": "2022-06-07T11:09:28.000+0000",
  "CodeSha256": "xyz",
  "Version": "$LATEST",
  "TracingConfig": {
    "Mode": "PassThrough"
  },
  "RevisionId": "xyz",
  "State": "Active",
  "LastUpdateStatus": "InProgress",
  "LastUpdateStatusReason": "The function is being created.",
  "LastUpdateStatusReasonCode": "Creating"
}
```

## Summary

That's it! Your lambda should now be deployed. Hopefully this gives you a quick starting point for building your pipeline.