Proton is an opinionated, 'self-service' application CI/CD workflow built on top of CloudFormation (for now, however it appears intentionally designed for future expansion).
The service defines separate workflows for two distinct teams in an organization, the 'Platform Team' and 'Developers'.
The Platform Team publishes two types of 'Template Bundles' ('Environment' and 'Service') for self-service usage by Developers:
- 'Template bundles' consist of a stack template (CloudFormation yaml that gets passed through a Jinja template filter), a schema file (defining inputs and outputs), and a manifest (metadata specifying the template language [CFn] and rendering engine [Jinja], intended for future expansion).
- 'Environment' templates define the set of shared resources and policies that Services are deployed into (e.g., VPCs, clusters, and shared load balancers or API Gateways);
- 'Service' templates define the AWS resources specific to the service (e.g., Lambda functions, ECS tasks, associated IAM roles, etc), Service bundles also include a separate 'Pipeline' template which defines a separate set of resources (e.g., CodeBuild Projects + CodePipeline Pipelines) used for building/testing/deploying instances of the service.
Developers then consume these template bundles for self-service deployment of CI/CD pipelines for their applications. First they create an Environment from a published Environment template, then create Services (containing one or more Service Instances) in an Environment from published Service templates. When a Developer creates a Service they connect it to their code repository, so new commits trigger the service pipeline to build+deploy the application code.
Finally, the Platform Team maintains its template bundles over time by publishing new minor/major revisions, and Developers manually opt-in to these version updates for their deployed Environments/Services.
The service also provides some curated template bundles (for Lambda and Fargate-based services), which is helpful because there's a ton of boilerplate in wiring up all of these parts together.
Overall, Proton seems to occupy a similar space as Service Catalog (admin-curated CloudFormation stack templates for self-service deployment by developers), but it provides a more managed, opinionated workflow with a shared Environment stack and separate CI/CD pipeline stack for each Service. Seems like an interesting attempt to standardize a bunch of these elements that go into a common use-case of CloudFormation-managed CI/CD pipelines for self-service application development.