Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mthenw/serverless-go-plugin
⚡️ Serverless Framework plugin that compiles Go functions on the fly. Sponsored by https://cloudash.dev
https://github.com/mthenw/serverless-go-plugin
aws-lambda go golang serverless serverless-framework
Last synced: 1 day ago
JSON representation
⚡️ Serverless Framework plugin that compiles Go functions on the fly. Sponsored by https://cloudash.dev
- Host: GitHub
- URL: https://github.com/mthenw/serverless-go-plugin
- Owner: mthenw
- License: mit
- Created: 2019-07-23T20:20:58.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2024-07-30T22:03:29.000Z (7 months ago)
- Last Synced: 2025-02-03T00:33:24.511Z (9 days ago)
- Topics: aws-lambda, go, golang, serverless, serverless-framework
- Language: JavaScript
- Homepage: https://cloudash.dev
- Size: 244 KB
- Stars: 105
- Watchers: 6
- Forks: 17
- Open Issues: 13
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# ⚡️Serverless Framework Go Plugin
[![serverless](http://public.serverless.com/badges/v3.svg)](http://www.serverless.com)
[![npm](https://img.shields.io/npm/v/serverless-go-plugin)](https://www.npmjs.com/package/serverless-go-plugin)
[![codecov](https://codecov.io/gh/mthenw/serverless-go-plugin/branch/master/graph/badge.svg)](https://codecov.io/gh/mthenw/serverless-go-plugin)`serverless-go-plugin` is a Serverless Framework plugin that compiles Go functions on the fly. You don't need to do it manually before `serverless deploy`. Once the plugin is installed it will happen automatically. *The plugin works with Serverless Framework version 1.52 and above.*
### [dev.to: A better way of deploying Go services with Serverless Framework](https://dev.to/mthenw/a-better-way-of-deploying-go-services-with-serverless-framework-41c4)
![output](https://user-images.githubusercontent.com/455261/73918022-fb952e00-48c0-11ea-9120-a7f34ad1ae55.gif)
## Features
- Concurrent compilation happens across all CPU cores.
- Support for both `serverless deploy` and `serverless deploy function` commands.
- Support for `serverless invoke local` command.
- Additional command `serverless go build`.## Install
1. Install the plugin
```
npm i --save-dev serverless-go-plugin
```1. Add it to your `serverless.yaml`
```
plugins:
- serverless-go-plugin
```1. Replace every Go function's `handler` with `*.go` file path or a package path. E.g.
```
functions:
example:
runtime: go1.x
handler: functions/example/main.go # or just functions/example
```## Configuration
Default values:
```
custom:
go:
baseDir: . # folder where go.mod file lives, if set `handler` property should be set relatively to that folder
binDir: .bin # target folder for binary files
cgo: 0 # CGO_ENABLED flag
cmd: 'GOOS=linux go build -ldflags="-s -w"' # compile command
monorepo: false # if enabled, builds function every directory (useful for monorepo where go.mod is managed by each function
supportedRuntimes: ["go1.x"] # the plugin compiles a function only if runtime is declared here (either on function or provider level)
buildProvidedRuntimeAsBootstrap: false # if enabled, builds and archive function with only single "bootstrap" binary (useful for runtimes like provided.al2)
```## How does it work?
The plugin compiles every Go function defined in `serverless.yaml` into `.bin` directory. After that it internally changes `handler` so that the Serverless Framework will deploy the compiled file not the source file.
For every matched function it also overrides `package` parameter to
```
individually: true
exclude:
- `./**`
include:
- ``
```## How to run Golang Lambda on ARM?
1. Add `provided.al2` to `supportedRuntimes` and enable `buildProvidedRuntimeAsBootstrap` in plugin config
2. Append `GOARCH=arm64` to your compile command (`cmd` line)
3. Change architecture and runtime in global config:
```yaml
provider:
architecture: arm64
runtime: provided.al2
```**Warning!** First deploy may result in small downtime (~few seconds) of lambda, use some deployment strategy like canary for safer rollout.