go microservices, powered by AWS Lambda
EOL
Times have changed since I started this work. I no longer have the resources to adequately maintain this project. Additionally, there now also exist several other options, including SAM, around which lively communities have formed. With v3, all CloudFormation API changes have been migrated to go-formation and all AWS API SDK calls moved to AWS v2. This likely marks the end of my active development on Sparta.
If this project has been helpful to you and you're interested in becoming a shepherd, please open an issue. Thanks all for your feedback, support, and recommendations over the years.
Keep on serverlessing!
Sparta v3
This is v3 of Sparta which is not backward compatible with v1 or v2 versions.
Sparta
Visit gosparta.io for complete documentation.
Version Info
This is the breaking v2
version of Sparta. The previous version is available at at the /v1
branch.
Overview
Sparta takes a set of golang functions and automatically provisions them in AWS Lambda as a logical unit.
AWS Lambda functions are defined using the standard AWS Lambda signatures:
func()
func() error
func(TIn) error
func() (TOut, error)
func(context.Context) error
func(context.Context, TIn) error
func(context.Context) (TOut, error)
func(context.Context, TIn) (TOut, error)
The TIn and TOut parameters represent encoding/json un/marshallable types.
For instance:
// Standard AWS λ function func helloWorld(ctx context.Context) (string, error) { ... }
where
ctx
: The request context that includes both the AWS Context as well as Sparta specific values
Consumers define a set of lambda functions and provide them to Sparta to create a self-documenting, self-deploying AWS Lambda binary:
lambdaFn, _ := sparta.NewAWSLambda("Hello World", helloWorld, sparta.IAMRoleDefinition{})var lambdaFunctions []*sparta.LambdaAWSInfo lambdaFunctions = append(lambdaFunctions, lambdaFn)
err := sparta.Main("HelloWorldStack", "My Hello World stack", lambdaFunctions, nil, nil)
Visit gosparta.io for complete documentation.
Contributing
Sparta contributions are most welcome. Please consult the latest issues for open issues.
Building
Locally building or testing Sparta itself is typically only needed to make package changes. Sparta is more often used as a required import of another application. Building is done via mage.
To get started building and verifying local changes:
go get -u -d github.com/magefile/mage
mage -l
to list the current targets:\$ mage -l Targets: build the application ciBuild is the task to build in the context of CI pipeline clean the working directory compareAgainstMasterBranch is a convenience function to show the comparisons of the current pushed branch against the master branch describe runs theTestDescribe
test to generate a describe HTML output file at graph.html docsBuild builds the public documentation site in the /docs folder docsCommit builds and commits the current documentation with an autogenerated comment docsEdit starts a Hugo server and hot reloads the documentation at http://localhost:1313 docsInstallRequirements installs the required Hugo version ensureAllPreconditions ensures that the source passes ALL staticensure*
precondition steps ensureCIBuildEnvironment is the command that sets up the CI environment to run the build. ensureCleanTree ensures that the git tree is clean ensureFormatted ensures that the source code is formatted with goimports ensureGoFmt ensures that the source isgofmt -s
is empty ensureLint ensures that the source isgolint
ed ensureMarkdownSpelling ensures that all *.MD files are checked for common spelling mistakes ensurePrealloc ensures that slices that could be preallocated are enforced ensureSpelling ensures that there are no misspellings in the source ensureStaticChecks ensures that the source code passes static code checks ensureVet ensures that the source has beengo vet
ted fetchCloudFormationSchema we have the latest CloudFormation schema as part of generating constants. generateAutomaticCode is the handler that runs the codegen part of things generateBuildInfo creates the automatic buildinfo.go file so that we can stamp the SHA into the binaries we build... generateConstants runs the set of commands that update the embedded CONSTANTS for both local and AWS Lambda execution logCodeMetrics ensures that the source code is formatted with goimports publish the latest source test runs the Sparta tests testCover runs the test and opens up the resulting report unitTest only runs the unit tests
Confirm tests are passing on HEAD
by first running mage -v test
.
As you periodically make local changes, run mage -v test
to confirm backward compatibility.
Tests
When possible, please include a test case that verifies the local change and ensures compatibility.
Contributors
Thanks to all Sparta contributors (alphabetical):
Twice a month we will interview people behind open source businesses. We will talk about how they are building a business on top of open source projects.
We'll never share your email with anyone else.