stelligent / mu Goto Github PK
View Code? Open in Web Editor NEWA full-stack DevOps on AWS framework
Home Page: https://getmu.io
License: MIT License
A full-stack DevOps on AWS framework
Home Page: https://getmu.io
License: MIT License
Is there a clear example of the pain people suffer without Mu? Is there a way to describe the cost/pain/suffering/errors one suffers when one has to work in a world without Mu? If we have that it would go a long to way to motivate and encourage support.
What are all the commands we expect this tool to offer?
As a developer, I want to be able to terminate an environment with mu so that I can discard unused resources.
AC:
mu env term <env_name>
will teardown the cluster stackAs a developer, I want to be able to view the pipeline status for a service to understand the current configuration and utilization of a pipeline.
AC:
mu svc show
, mu will list the pipeline stage status for the service along with the following: stage, action, revision, status, last updateAs a developer, I want to be able to show the details of an environment so that I can understand it's current configuration and utilization.
AC:
mu env show <env_name>
will display the stack names for the Cluster and VPC stacksNeed to have access in codebuild to the commit id from codepipeline to tag the image properly. Currently this isn't exposed...not sure how to address? One option is to use CODEBUILD_* env variables to find the current codepipeline execution and then run aws cli to query details of the pipeline execution and get revisionId from there.
Document how to contribute to the project
Aggregate container logs to CloudWatch logs. Create log group for each service and log stream for each container
As a mu developer, i want to be able to pin my dependencies to specific version so that I can have deterministic and repeatable builds.
AC:
Consider: https://github.com/Masterminds/glide
When running mu svc build
you'll see logs repeating from the docker daemon
hostedzone
in mu.yml to have a resource record added to that zone for the ALBname
in the mu.ymlcertificate
in mu.yml to be the ARN of the cert to reference from the ELB. will create ELB listeners for 443 if defined.As a developer, I want to be able to terminate a pipeline with mu so that I can discard unused resources.
AC:
mu pipeline term
will teardown the pipelineAs a microservice developer, i want to be able to create a pipeline for my service to i can continuously deliver my service into production.
AC:
mu pipeline up
with a mu file to have a pipeline created-t <token
Run CodeBuild to execute tests in test stage of pipeline
As a developer, I want to be able to view the list of services running in an environment to understand the current configuration and utilization of an environment.
AC:
mu env show <env_name>
, mu will list the services deployed to the cluster along with the following: docker image repo, status, last update, mu versionLanguage - TBD. Need to determine the language to use for developing the tool. Options in order of preference include Go, Node.js, Python.
Why do we need plugins?
What are example plugins?
What capabilities will plugins be able to provide?
Would we need to prescribe the standard pipeline or could we support their multi-variant stage pipelines?
How opinionated do we anticipate this to be?
Would they want or would we want to support different types of build, orchestration, and other tools?
Do we need to know anything about their source provider?
As a developer, i want to be able to create with mu, so that i can run my application.
AC:
mu service push
imageRepository
in mu.yml. If set, ECR repo won't be createdmu.yml
is in, can be overridden in mu.yml
-t
flagmu service deploy <env_name>
As a developer, I want to be able to undeploy a service from an environment so that I can remove services that aren't needed anymore
AC:
mu service undeploy <env_name>
the service will be removed from the provided environmentPreview CFN changeset for the change
Review the IAM policies and lock down. For sure the service roles for CodeBuild and CodePipeline are too loose at the moment.
As a developer, i want to be able to create my environment with mu, so that i can run my application.
AC:
mu env up <env_name>
mu env up <env_name>
vpcTarget
is specifiedvpcTarget
is specified, then the ECS cluster and ALB will be created in the referenced VPCAs a developer, I want to be able to list the environments in my account/region so that I can know which environments are currently defined.
AC:
mu env ls
will display the following for each environment: environment name, CFN stack name, status, last update, and the version of mu
used to create/update stackCreate a subcommand mu pipeline logs [-f]
to view the logs for the recent build and -f
to follow the logs.
As a developer, I want to be able to list the pipelines in my account/region so that I can know which pipelines are currently defined.
AC:
mu pipeline ls
will display the following for each environment: service name, CFN stack name, status, last update, and the version of mu
used to create/update stackAs a developer, i want to be able to show the details of a service so that I can know which version is deployed in which environments.
AC:
mu svc show <svc_name>
will display the list of which environments the service is currently running inAs a mu user, I want to be able to define my service and environments for mu in a YAML file so that I can have a simple definition of my application infrastructure in a file that I can commit with my app to source code.
AC:
-c
flag---
### Region to utilize
region: us-west-2
### Define a list of environments
environments:
# The unique name of the environment (required)
- name: dev
### Attributes for the ECS container instances
cluster:
imageId: ami-xxxxxx # The AMI to use for the ECS container instances (default: latest ECS optimized AMI)
instanceTenancy: default # Whether to use default or dedicated tenancy (default: default)
desiredCapacity: 1 # Desired number of ECS container instances (default 1)
maxSize: 2 # Max size to scale the ECS ASG to (default: 2)
keyName: my-keypair # name of EC2 keypair to associate with ECS container instances (default: none)
sshAllow: 0.0.0.0/0 # CIDR block to allow SSH access from (default: 0.0.0.0/0)
scaleOutThreshold: 80 # Threshold for % memory utilization to scale out ECS container instances (default: 80)
scaleInThreshold: 30 # Threshold for % memory utilization to scale in ECS container instances (default: 30)
### attributes for the VPC to target. If not defined, a VPC will be created. (default: none)
vpcTarget:
vpcId: vpc-xxxxx # The id of the VPC to launch ECS container instances into
publicSubnetIds: # The list of subnets to use for ECS container instances
- sg-xxxxx
- sg-xxxxy
- sg-xxxxz
### Define the service for this repo
service:
name: my-service # The unique name of the service (default: the name of the directory that mu.yml was in)
desiredCount: 4 # The desired number of tasks to run for the service (default: 2)
dockerfile: ./Dockerfile # The relative path to the Dockerfile to build images (default: ./Dockerfile)
imageRepository: tutum/hello-world # The repository to push images to and deploy services from. Leave unset to have mu manage an ECR repository (default: none)
port: 80 # The port to expose from the container (default: 8080)
healthEndpoint: /health # The endpoint inside the container to determine if the task is healthy (default: /health)
cpu: 20 # The number of CPU units to allocate to each task (default: 10)
memory: 400 # The amount of memory in MiB to allocate to each task (default: 300)
# The paths to match on in the ALB and route to this service. Leave blank to not create an ALB target group for this service (default: none)
pathPatterns:
- /bananas
- /apples
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.