This library provides constructs for Golang (Go 1.11 and 1.12 because of go modules) Lambda functions.
In Typescript:
npm i aws-lambda-golang --save # or using yarn yarn add aws-lambda-golangIn .NET:
dotnet add package rwilinski.GolangFunction --version 0.1.0In Python using Pip:
pip install rwilinski.aws-lambda-golangIn Java using Maven, add this to pom.xml:
<dependency> <groupId>com.rwilinski</groupId> <artifactId>aws-lambda-golang</artifactId> <version>0.1.1</version> </dependency>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) }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.
Contributions, issues and feature requests are welcome!
Feel free to check issues page.
Project sponsored by Dynobase