Giter Club home page Giter Club logo

cdf's Introduction

OpenFABR Cloud Development Framework (CDF)

The IaC framework to build cloud infrastructure faster

Because it is React for Infrastructure-as-Code - see why

developed and sponsored by FABR

OpenFABR CDK header

AWS CDK Terraform CDK cdk8s Pulumi
AWS CDK Terraform CDK cdk8s Pulumi

Framework(s):

  • TypeScript NPM
  • Coming Soon: Python | Java | Go (vote)

Packages as reference implementations:

  • TypeScript AWS CDK: NPM
  • TypeScript Terraform CDK: NPM
  • TypeScript Pulumi: NPM

Sample projects using the packages above:

Introduction

OpenFABR CDF aims to offer a brand new way of building cloud infrastructure, based on our view that the future of DevOps is MODULAR + CUSTOM.

CDF: MODULAR + CUSTOM

We envisage a future where application developers (in product engineering) and DevOps/Cloud engineers (in platform engineering) collaborate by code in a true Infrastructure-as-Code manner. OpenFABR CDF is the missing piece, the glue, that brings the entire tool chain together from IaC runtimes like CDK, to imperative languages like TypeScript, testing frameworks like Jest, and artefact repositories like NPM.

MODULAR: Reusable, High-level Packages

Ad-hoc, bespoke infra build project after project should be a thing of past. There are common patterns emerging that can be encapsulated into reusable modules, or L2/L3 constructs as AWS would call them. Bigger engineering organisations with platform engineering function also tend to have their own opinions about how their internal cloud operations can be constructed by high-level components, which in turn can be offered to the product engineering counterpart in the same organisation.

CUSTOM: Project-specific Code Blocks

Abstraction (via packages mentioned above) is hard, and almost impossible to work without an escape hatch, because every infra project could have its own quirks, e.g. special permissions, external dependencies, or even different domain names. OpenFABR CDF fully acknowledges it by offering an inversion-of-control based custom code block feature for application developers to access all underlying cloud resources fully, for customisation.

The Framework

For application developers, OpenFABR CDF is the framework that pieces together a cloud infra package with local custom code to deliver a cloud infra project extremely quickly.

  • From 0 to 95%: With the help of a selected package, an infra baseline can be assembled using a simple, schema-aware JSON configuration file. This can be done in minutes or hours, instead of days or weeks.
  • From 95% to 100%: Every project is different, the framework allows detailed customisation to every underlying infra resources being created by the modular approach earlier. This can be done in hours or days, certainly not weeks.

For DevOps/Cloud/Platform engineers, adopting OpenFABR CDF means following a separation-of-concern approach by implementing modular, reusable packages from day one.

Best of all, OpenFABR CDF does not have any opinions about what IaC runtime (AWS CDK and Terraform CDK; Pulumi and others coming soon) and language (Typescript; Python, Java, C# and Golang coming soon) one should use. It allows engineering organisations to pick their favourite runtime and language. It forms the foundation of an internal cloud platform and leaves the opinions about how to implement cloud infrastructure to package authors and application developers.

CDF Stack Overview

Use

Follow the Getting Started to experience the workflow yourself.

To dive deep, the User Guide covers the context as well as detailed manuals for both application developers and package authors.

Support

Click on the badge to join our server:

Discord Support Channel

Contribute

License and Contribution Agreement

Same as other OpenFABR projects, it is dual-licensed under

Before accepting your contribution, please e-sign the Contributor License Agreement (coming soon) which is a common practice in open source. Once signed, your GitHub username will then be registered on the project's contributor list which safeguards the contributions to the project.

Development

The monorepo is structured in a way that different build tools are used for different CDF language implementation. See below for details about how to develop for CDF in a particular language:

Tools and libraries in use include:

cdf's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

cdf's Issues

cdf-cli: `projects init` command

cdf-cli projects init <name> --package-manifest=<manifest file path>

Generates a AWS CDK or CDK TF project scaffolding based on a package by providing a package manifest. Sample config is also generated based on the package schema.

note: cdf-cli is the name of the executable.

cdf-cli: `packages init` command

cdf-cli packages init <name> --language=<lang> --runtime=<awscdk | cdktf > --cicd=<github>

Generates scaffolding for a package from a template. Initially we'll only support TypeScript. Includes custom module template files and build and deploy config (only actions supported initially). Template TBD (probably base off the sample package with some adjustments).

note: cdf-cli is the name of the executable.

docs: add user guide and reference for CDF CLI

The CDF CLI isn't discoverable easily. It's part of the CDF mono repo.

There's basic docs in the readme. Should add as an item in the left nav of the main docs site.

  • add copy of the readme content as a reference.
  • add more context around when/why use the schema gen functionality.

feat: support custom modules for Pulumi

Is your feature request related to a problem? Please describe.
The current API for custom modules is not compatible with Pulumi because of differences between CDK and Pulumi. Unlike CDK, Pulumi doesn't support changing or adding the config of ComponentResources via properties. There's method that can be called on instances either. AFAIK the only way is through the args param through the constructor.

Describe the solution you'd like
TBD how to change the API. But the outcome is to support custom modules for Pulumi.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
The sample Pulumi project (currently on a branch) has the outline of a custom module. So a good starting point to understand the situation.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.