aws-lambda-golang-cdk

Higher level CDK construct for Golang Lambda functions

Downloads
56
Stars
25
Committers
3

Amazon Lambda Golang Construct

This library provides constructs for Golang (Go 1.11 and 1.12 because of go modules) Lambda functions.

Why? Read this blogpost

Installing

In Typescript:

npm i aws-lambda-golang --save
# or using yarn
yarn add aws-lambda-golang

In .NET:

dotnet add package rwilinski.GolangFunction --version 0.1.0

In Python using Pip:

pip install rwilinski.aws-lambda-golang

In Java using Maven, add this to pom.xml:

<dependency>
  <groupId>com.rwilinski</groupId>
  <artifactId>aws-lambda-golang</artifactId>
  <version>0.1.1</version>
</dependency>

Usage

In Typescript:

import * as golang from 'aws-lambda-golang'; // Import aws-lambda-golang module
import * as cdk from '@aws-cdk/core';
import * as apigateway from '@aws-cdk/aws-apigateway';

export class TestStackStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // Define function. Source code should be located in ./test-function/main.go
    const backend = new golang.GolangFunction(this, 'test-function');
    const api = new apigateway.LambdaRestApi(this, 'myapi', {
      handler: backend,
      proxy: false,
    });

    const items = api.root.addResource('items');
    items.addMethod('GET');
  }
}

By default, the construct will use the name of the defining file and the construct's id to look up the entry file:

.
 stack.ts # defines a 'GolangFunction' with 'my-handler' as id
 stack/my-handler/main.go 
 stack/my-handler/go.mod 
 stack/my-handler/go.sum 

The simplest Golang function (stack/my-handler/main.go):

package main

import (
	"fmt"
	"net/http"
	"github.com/aws/aws-lambda-go/events"
	"github.com/aws/aws-lambda-go/lambda"
)

func handler(req events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
	fmt.Println("Received body: ", req.Body)

	return events.APIGatewayProxyResponse{
        StatusCode: http.StatusOK,
        Body:       "Hello from CDK GolangFunction!",
    }, nil
}

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

Configuring build

The GolangFunction construct exposes some options via properties: buildCmd, buildDir, entry and handler, extraEnv.

By default, your Golang code is compiled using go build -ldflags="-s -w" command with GOOS=linux env variable.

Contributing

Contributions, issues and feature requests are welcome!Feel free to check issues page.

Project sponsored by Dynobase

Package Rankings
Top 24.51% on Pypi.org
Top 11.59% on Npmjs.org
Badges
Extracted from project README's
GitHub version npm version NuGet version PyPI version
Related Projects