gordon

λ Gordon is a tool to create, wire and deploy AWS Lambdas using CloudFormation

https://github.com/jorgebastida/gordon

Science Score: 10.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
  • .zenodo.json file
  • DOI references
  • Academic publication links
  • Committers with academic emails
    1 of 36 committers (2.8%) from academic institutions
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (10.8%) to scientific vocabulary

Keywords from Contributors

apps templates views
Last synced: 11 months ago · JSON representation

Repository

λ Gordon is a tool to create, wire and deploy AWS Lambdas using CloudFormation

Basic Info
  • Host: GitHub
  • Owner: jorgebastida
  • License: other
  • Language: Python
  • Default Branch: master
  • Homepage:
  • Size: 4.95 MB
Statistics
  • Stars: 2,034
  • Watchers: 52
  • Forks: 137
  • Open Issues: 66
  • Releases: 0
Created almost 11 years ago · Last pushed over 7 years ago
Metadata Files
Readme Changelog License

README.md

gordon

GitHub license Python Versions Beta PyPI version Travis Build Join the chat at https://gitter.im/jorgebastida/gordon

Gordon is a tool to create, wire and deploy AWS Lambdas using CloudFormation

Documentation: https://gordon.readthedocs.io/en/latest/

Features

  • 100% CloudFormation resource creation
  • 100% Boilerplate free
  • 100% isolated and dead-simple multi-stage and multi region deployments
  • Python/Javascript/Java/Golang/Scala... runtimes supported.
  • Run Lambdas locally (Python/Javascript/Java/Golang/Scala...)
  • Simple yml configuration
  • Seamless integration with (pip,npm, gradle, ...)
  • 100% Customizable lambda build process. Use Docker, Makefile or... a simple shell script.
  • Supported integrations
    • APIGateway
    • Scheduled CloudWatch Events (cron)
    • CloudWatch Events
    • Dynamodb Streams
    • Kinesis Streams
    • S3
  • AWS Lambda Versions and Aliases
  • VPC support
  • Dynamic stage parametrization including:
    • Environment variables
    • Jinja2 values
    • ARN translation helpers
  • Extensive Documentation
  • Good test suite
  • Love ❤️

Example Projects

We think documentation and examples are an important pillar... so here you have a nice list of things you can play with!

Why should you use this project?

Because this project doesn't introduce anything new. Gordon is just a thin layer of sugar around AWS services and few conventions, which makes deploying and wiring Lambdas really easy.

Under the hood, gordon just generates self-contained CloudFormation templates... which is great!

Why introduce yet-another framework when you can build lambdas using AWS services and tools you already know how to use (pip, npm, grunt, gulp, gradle, Makefile...)

Keep it simple! 😀

Isolation between stages?

Yes, we believe that there must be 100% isolation between your application stages (dev, staging, prod...). That means that resources which (for example) serve a development purpose must not be related to the ones which are serving production load.

One example of this is that it is an AWS best practice to use different AWS accounts between stages. Although this is not required, it makes evident that mixing resources between stages is a bad idea.

This completely clashes with the suggested approach for services such as apigateway, where they emphasize to have several "stages" for the same apigateway resource. We disagree and completely ignore that functionality because we believe is the wrong approach.

Gordon keeps reproducibility and isolation at it's core. When you apply gordon projects in different stages or regions, you'll deploy completely isolated Cloudformation stacks which will contain an exact and isolated copy of all the resources you have defined.

Why CloudFormation?

One of the best advantages of using AWS is the fact that reproducibility is at it's core and their ecosystem is full of services which encourage it. Their flagship is CloudFormation.

Then... why not just use CloudFormation? Well, there are three reasons:

  1. Complexity: CloudFormation stacks are defined using JSON templates which are a nightmare to write and maintain. And remember... Friends don't let friends write JSON files.
  2. Glue: There is a lot of glue to put in between a "normal user" and the reality-check of deploying and wiring a Lambda into AWS.
  3. APIs: Not all AWS APIs are released when services are announced... ain't frameworks (boto3), nor integrations with CloudFormation.

This project tries to solve these three issues by:

  1. Creating a really thin layer of conventions on top of easy to maintain YAML files.
  2. Making everything work out of the box as well trying to make people not shoot themselves in the foot.
  3. Working around the lack of CloudFormation/Framework APIs (keeping in mind they will eventually happen).

Does gordon use gordon to deploy gordon?

Yes, we eat our own dog food; We use gordon to create gordon. The idea is that, (unlike many other projects) we don't think streaming API commands to AWS is a nice solution, so instead, we fill the gaps with custom CloudFormation resources.

Those Custom CloudFormation resources are implemented using Lambdas (deployed by gordon)... crazy uh?!

Why all this madness? Again... because reproducibility. If you manage some resources using CloudFormation, and some others streaming API commands, if/when you try to reproduce or decommission your environment... you are pretty much f***.

Feedback

We would love to hear as much feedback as possible! If you have any comment, please drop me an email to me@jorgebastida.com

Owner

  • Name: Jorge Bastida
  • Login: jorgebastida
  • Kind: user
  • Location: San Sebastian, Spain
  • Company: Infinite Fork SL

GitHub Events

Total
  • Issues event: 1
  • Watch event: 2
Last Year
  • Issues event: 1
  • Watch event: 2

Committers

Last synced: about 1 year ago

All Time
  • Total Commits: 394
  • Total Committers: 36
  • Avg Commits per committer: 10.944
  • Development Distribution Score (DDS): 0.15
Past Year
  • Commits: 0
  • Committers: 0
  • Avg Commits per committer: 0.0
  • Development Distribution Score (DDS): 0.0
Top Committers
Name Email Commits
Jorge Bastida me@j****m 335
Jorge Bastida n****1@g****m 12
Ed Lewis e****s@g****m 4
Ben b****n@u****m 3
Brian Candler b****r@c****m 3
Pelle Almquist p****t@g****m 3
Damian Mazurkiewicz d****n@m****o 3
Tom Saleeba t****a@g****m 2
Paweł Sternal s****k@g****m 2
Adam H. Leventhal a****l@a****u 1
Alasdair Nicol a****r@t****t 1
DaveKlotz d****z@c****m 1
Julien Bouquillon c****t@r****m 1
Ryan Walker r****r@r****m 1
ausmith a****h@c****m 1
gingerlime y****v@g****m 1
Chuck Logan Lim c****m@x****m 1
Adam Chainz a****m@a****u 1
Heri Sim h****6@g****m 1
Joshua Barratt j****t@s****t 1
Juan Riaza g****b@j****m 1
Kerry Hatcher k****r@g****m 1
Luke Melia l****e@l****m 1
Stoph c****i@g****m 1
Tina Huang t****a@m****e 1
chesterm8 c****v@g****m 1
dshivak-twist d****k@t****m 1
elkelk d****n@g****m 1
gipsy86147 g****i@g****m 1
washt w****3@g****m 1
and 6 more...

Issues and Pull Requests

Last synced: 11 months ago

All Time
  • Total issues: 65
  • Total pull requests: 35
  • Average time to close issues: 9 months
  • Average time to close pull requests: 4 months
  • Total issue authors: 49
  • Total pull request authors: 29
  • Average comments per issue: 1.78
  • Average comments per pull request: 2.11
  • Merged pull requests: 22
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 0
  • Pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Issue authors: 0
  • Pull request authors: 0
  • Average comments per issue: 0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • candlerb (5)
  • ahl (4)
  • ericblade (3)
  • AlJohri (2)
  • peralmq (2)
  • lukemelia (2)
  • karloscodes (2)
  • ninjabear (2)
  • mparaz (2)
  • JDFagan (2)
  • StripedMoose (1)
  • dmitryax (1)
  • sdementen (1)
  • oseibonsu (1)
  • dshivak (1)
Pull Request Authors
  • ahl (3)
  • candlerb (3)
  • kmonkeyjam (2)
  • bmcniel (2)
  • tomsaleeba (1)
  • ryandub (1)
  • glaurungg (1)
  • derhamjauspost (1)
  • ericblade (1)
  • tdi (1)
  • valgreens (1)
  • ausmith (1)
  • jorgebastida (1)
  • agonzalezro (1)
  • alasdairnicol (1)
Top Labels
Issue Labels
enhancement (4) help wanted (1) bug (1) fixed (1)
Pull Request Labels
help wanted (3) enhancement (1)

Packages

  • Total packages: 2
  • Total downloads:
    • pypi 20 last-month
  • Total dependent packages: 0
    (may contain duplicates)
  • Total dependent repositories: 3
    (may contain duplicates)
  • Total versions: 7
  • Total maintainers: 1
proxy.golang.org: github.com/jorgebastida/gordon
  • Versions: 1
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Dependent packages count: 9.4%
Average: 10.0%
Dependent repos count: 10.6%
Last synced: 12 months ago
pypi.org: gordon

Gordon is a tool to create, wire and deploy AWS Lambdas using CloudFormation

  • Versions: 6
  • Dependent Packages: 0
  • Dependent Repositories: 3
  • Downloads: 20 Last month
Rankings
Stargazers count: 1.6%
Forks count: 4.1%
Dependent repos count: 9.1%
Dependent packages count: 9.8%
Average: 12.8%
Downloads: 39.5%
Maintainers (1)
Last synced: 12 months ago

Dependencies

examples/contexts/helloworld/hellojava/build.gradle maven
  • com.amazonaws:aws-lambda-java-core 1.1.0 compile
examples/simplejava/helloworld/hellojava/build.gradle maven
  • com.amazonaws:aws-lambda-java-core 1.1.0 compile
examples/simplekotlin/helloworld/hellokotlin/build.gradle maven
  • org.jetbrains.kotlin:kotlin-stdlib $kotlin_version compile
examples/simplescala/helloworld/helloscala/build.gradle maven
  • org.scala-lang:scala-library 2.11.1 compile
gordon/defaults/app_java/helloworld/build.gradle maven
  • com.amazonaws:aws-lambda-java-core 1.1.0 compile
gordon/loaders/java/build.gradle maven
  • com.amazonaws:aws-lambda-java-core 1.1.0 compile
tests/lambdajava/0001_project/javaexample/helloworld/build.gradle maven
  • com.amazonaws:aws-lambda-java-core 1.1.0 compile
examples/docker/helloworld/hellojs/package.json npm
  • path 0.11.14
examples/modulejs/helloworld/bye/package.json npm
  • path 0.11.14
examples/simplejs-es6/helloworld/hellojs/package.json npm
  • babel-cli ^6.8.0 development
  • babel-preset-es2015 ^6.6.0 development
examples/telegram/botapp/mybot/package.json npm
  • node-telegram-bot-api 0.21.1
examples/cloudformation-custom-resources/example/mycustomresource/requirements.txt pypi
  • cfn-response *
examples/docker/helloworld/hellopy/requirements.txt pypi
  • Pillow *
examples/flask/helloworld/app/requirements.txt pypi
  • aws-wsgi *
  • flask *
examples/modulepython/helloworld/hello/requirements.txt pypi
  • requests *
examples/snowplow/exampleapp/snowplowconsumer/requirements.txt pypi
  • snowplow_analytics_sdk *
gordon/contrib/helpers/sleep/requirements.txt pypi
  • cfn-response *
gordon/contrib/lambdas/version/requirements.txt pypi
  • cfn-response *
gordon/contrib/s3/bucket_notification_configuration/requirements.txt pypi
  • cfn-response *
setup.py pypi
  • Jinja2 >=2.8,<3.0
  • PyYAML >=3,<4.0
  • boto3 >=1.2.3,<2.0
  • clint >0.5,<1.0
  • six >1.9,<2.0
  • troposphere >=1.6
test_requirements.txt pypi
  • cfn-response * test
  • coverage * test
  • envdir * test
  • flake8 * test
  • ipdb * test
  • mock >=1.0.0 test
  • nose * test
  • requests * test
tests/apigateway/0001_project/pyexample/example/requirements.txt pypi
  • requests * test
tests/lambdapython/0001_project/pyexample/example/requirements.txt pypi
  • requests * test
tests/projectupdate/0001_project/pyexample/example/requirements.txt pypi
  • requests * test
tests/projectupdate/0002_project/pyexample/example/requirements.txt pypi
  • requests * test