Skip to content

Configure serverless applications for multi-cloud deployments

License

Notifications You must be signed in to change notification settings

MNahad/cloud-seed

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cloud Seed

Configure serverless applications for multi-cloud deployments 🚀 ☁️

What is it?

Do you want to deploy serverless applications to the public cloud, but are worried about vendor lock-in?

Do you want to use Terraform to manage event-based multi-cloud applications, but do not want the overhead of writing and maintaining platform-specific config?

With Cloud Seed you only need to define minimal cloud-agnostic config once, and the cloud-specific Terraform IaC is generated for you.

Write once, and target multi-cloud.

How does it work?

Cloud Seed wraps around and executes CDKTF, letting you use Hashicorp's ecosystem and tooling in your downstream stages.

Cloud Seed ingests opinionated config in the form of files which are kept close to your source code, and generates the HCL JSON-based IaC required to implement the desired cloud platform deployments.

CDKTF Constructs generated by Cloud Seed can also be modified at the attribute-level by adding custom arguments as part of the config.

Prerequisites

Direct (build time)

Direct (run time)

  • A working build or CICD environment where the binary will run, and has the source code which needs to be deployed
  • Node.js (tested on 18.x Hydrogen)
    • Needs to be enabled in the build environment
    • This is a CDKTF dependency

Indirect

  • Working target cloud environment(s)
  • A means to process the HCL JSON-formatted IaC (e.g. CDKTF or Terraform CLI) with the appropriate access to, and permissions on, the target cloud environment(s)

Quickstart

Build the binary (one-time step)

go build
# e.g.
# GOOS=linux GOARCH=amd64 go build -o cloudseed
# GOOS=darwin GOARCH=arm64 go build -o cloudseed

Add the quickstart project config file

Add a project config file at the root of your source code called cloudseed.json.

Refer to the quickstart cloudseed.json for an example. Make sure to update the config values as required.

Add the quickstart source code

Refer to the quickstart source directory for an example. Make sure to update the config values as required.

Run the build command

Run the command in the build / CICD environment.

chmod +x cloudseed
./cloudseed build

Examples

Refer to the examples for sample patterns.

API and File Specification

Current status

  • Cloud support
    • GCP
    • AWS
  • Services support
    • Compute Services
      • FaaS
        • GCP Cloud Functions (2nd Gen)
        • AWS Lambda
      • Container PaaS
        • GCP Cloud Run
        • AWS Fargate
    • Event Sources
      • Event Buses
        • GCP Eventarc
        • Amazon EventBridge
      • Publish/Subscribe Topics
        • GCP Pub/Sub
        • Amazon SNS
      • Queues
        • GCP Cloud Tasks
        • Amazon SQS
      • Schedules
        • GCP Cloud Scheduler
        • Amazon EventBridge
    • Networking Services
      • Ingress
        • GCP API Gateway
        • Amazon API Gateway
      • Egress
        • GCP Cloud NAT
        • Amazon NAT gateway
    • Security Services
      • IAM
        • GCP Service Accounts
        • AWS IAM execution roles
      • Secrets
        • GCP Secret Manager
        • AWS Secrets Manager
    • Orchestration Services
      • GCP Workflows
      • AWS Step Functions
  • Terraform Backend support
    • GCP Cloud Storage
    • Amazon S3
    • Local

TODO

  • Add support for AWS
  • Swap GCP Preview features in favour of GA ones (API Gateway)
  • If targeting GCP Cloud Run, the resulting IaC includes gcloud CLI commands to submit an image build. Implement an alternative that does not depend on this CLI.

Notices

This software uses the following modules whose distribution and usage is governed by the terms of the MPL-2.0 licence:

About

Configure serverless applications for multi-cloud deployments

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages