From 6e73b9bbb241abbdb3ff42db04c2dc3502777fe7 Mon Sep 17 00:00:00 2001 From: Jason Date: Wed, 6 May 2015 16:03:46 -0700 Subject: [PATCH 1/2] First draft of a few docs --- CloudFormation.md | 24 +++++++++++++++++ Getting_Started.md | 42 ++++++++++++++++++++++++++++++ Git_GitHub.md | 28 ++++++++++++++++++++ Project_Onboarding.md | 60 +++++++++++++++++++++++++++++++++++++++++++ README.md | 45 ++++++++++++++++++++++++++++++-- 5 files changed, 197 insertions(+), 2 deletions(-) create mode 100644 CloudFormation.md create mode 100644 Getting_Started.md create mode 100644 Git_GitHub.md create mode 100644 Project_Onboarding.md diff --git a/CloudFormation.md b/CloudFormation.md new file mode 100644 index 0000000..a7c85ed --- /dev/null +++ b/CloudFormation.md @@ -0,0 +1,24 @@ +## Recommended practices for Cloudformation +Cloudformation is a necessary evil when working with AWS. It uses JSON which has a number of staggering limitations. You will soon learn that it is overly rigid in its formatting. Additionally it lacks commenting, which, as you know, is a rather atrocious limitation. In an effort to limit your exposure to JSON we have adopted a nested stack model. Basically you will create a stack template which will use these ready made nested stacks. For an example check out this section of the [nubis-mediawiki template](https://github.com/Nubisproject/nubis-mediawiki/blob/master/nubis/cloudformation/main.json#L70). + +### Nested Stacks +Nested stacks are in of themselves simply stacks that you include in a higher level, or container stack. We have created a number of stack templates to cover the most common use cases. You can take a look at them [here](https://github.com/Nubisproject/nubis-stacks). For each stack template we have included a README which includes usage code that you can copy into your stack template. Following the previous example from the nubis-mediawiki project you can see the EC2Stack nested stack template [here](https://github.com/Nubisproject/nubis-stacks/blob/master/ec2.template). + +### Stack Outputs +We have created a small [function](https://github.com/Nubisproject/nubis-stacks/blob/master/lambda/LookupStackOutputs/LookupStackOutputs.README.md) that runs in [Lambda](http://aws.amazon.com/lambda/) (an AWS compute service) which makes the outputs of other stacks available for reference in your template. You will find us using this function in nearly every nested stack, sometimes multiple times. While you may not find a need for this in your template it is necessary knowledge for understanding the nested stack templates. For example, in the EC2Stack example above we are calling the function as [VpcInfo](https://github.com/Nubisproject/nubis-stacks/blob/master/ec2.template#L48) and using the VpcId output of the $region-$environment-vpc stack [here](https://github.com/Nubisproject/nubis-stacks/blob/master/ec2.template#L73). + +### Parameterization +By utilizing stack outputs we are able to minimize the number of parameters (AWS name for input variables) we need. This simplifies deployments, especially when multiple developers are working on the same project. Back in the nubis-mediawiki project you will find the [parameters.json-dist file](https://github.com/Nubisproject/nubis-mediawiki/blob/master/nubis/cloudformation/parameters.json-dist) to contain only the absolute minimum[^minimum] number of parameters. These are the parameters that are necessary for every project that utilizes the Nubis project. + +| Parameter | Description | +|---------------|-------------| +|ServiceName | Name of service from [here](https://inventory.mozilla.org/en-US/core/service/) +|Environment | Sandbox or Dev or Prod +|KeyName | Name of ssh key to install on ec2 instances +|TechnicalOwner | Email address or distribution list +|AmiId | ID output from nubis-builder + +### Credentials +When deploying your stack using the [AWS cli tools](http://aws.amazon.com/cli/) you will be using an API keypair. You will need to take extra percaution to ensure that these secrets remain, well secret. This includes dressing up your .gitignore file, taking care with pastebins and the like. + +[^minimum]: Well, not really since technically environment can be discovered. \ No newline at end of file diff --git a/Getting_Started.md b/Getting_Started.md new file mode 100644 index 0000000..97e42d0 --- /dev/null +++ b/Getting_Started.md @@ -0,0 +1,42 @@ +## Getting started with the Nubis Project +Welcome to the Nubis Project. We hope you will find that it meats your requirements and is easy to use. In this document I will introduce you to the Nubis Project and give you a number of links to other documents that will help you along. + +The Nubis Project is in essence a framework for deploying applications to the cloud. At this time we support only Amazon Web Services (AWS). For an overview of our design principles I recommend you read out [manifesto](https://github.com/Nubisproject/nubis-docs/blob/master/MANIFESTO.md). + +### Familiarize yourself with the Nubis Project +Now, to get you up to speed with everything you will need to know to use the Nubis Project, I will provide for you a reading list. Not to worry, while this list looks long most of the documents are quite short. +* [Nubis Overview](WRITE_ME) Will give you an outline of the pieces of the project. +* [Git & GitHub](https://github.com/Nubisproject/nubis-docs/blob/master/Git_GitHub.md) provides some advice specific to Nubis. +* [CloudFormation](https://github.com/Nubisproject/nubis-docs/blob/master/CloudFormation.md) walks through some recomendations on structure and workflow. +* [Project Onbording](https://github.com/Nubisproject/nubis-docs/blob/master/Project_Onbording.md) will guide you through onboarding your first application. + +### Deployment +Now that you are familiar with the project and the process it is time to get coding. The first step is to assemble your deployment repository. Then it will be time to deploy into the sandbox. + +As we have seen in various examples through these documents, you will need to create a deployment repository. Take a look at the [System Overview](link) document for details. + +Once your repository is all set up the next step it to deploy into the sandbox. You can deploy bu following the procedures outlined in the [Project Onbording](https://github.com/Nubisproject/nubis-docs/blob/master/Project_Onbording.md#Application Build Out) doc. Some example commands can be found in our trusty [nubis-mediawiki](https://github.com/Nubisproject/nubis-mediawiki/blob/master/nubis/cloudformation/README.md) repository. + + +### Bugs, Contributions and more +We are super excited to have you hear. If you have stumbled into an issue there are several ways to address it. + +First, you can fix the issue yourself and file a pull request. You will find a guild in our [Contributing Doc]((https://github.com/Nubisproject/nubis-docs/blob/master/CONTRIBUTING.md). + +Next, you can file an issue. Simply navigate to the Nubis Project space on Github [here](https://github.com/Nubisproject), select the appropriate repository and click on the issues link. For example to file an issue against nubis-stacks you would go [here](https://github.com/Nubisproject/nubis-stacks/issues) + +Finally if you are looking for a new feature to be supported, simply follow the [Feature Requests](https://github.com/Nubisproject/nubis-docs/blob/master/FEATURE_REQUESTS.md) guide. + +--- +## TODO +Document these things +* set up git repo + * add nubis directory +* link to structure doc + * discuss packer and nubis-builder + * discuss packers use of puppet +* describe cloudformation template system + * link to cloudformation layout doc? +* discuss what is and is not appropritae to place in the bin directory +* walk through deployment of application +* need to link to set up for Nubis doc (set up aws, git, github, etc...) \ No newline at end of file diff --git a/Git_GitHub.md b/Git_GitHub.md new file mode 100644 index 0000000..493369d --- /dev/null +++ b/Git_GitHub.md @@ -0,0 +1,28 @@ +## Recommended Practices for Git & GitHub +This document will walk you through some best practices that we recommend for working with the Nubis project. I will not cover much about the basic operation of git or GitHub as there are a large number of tutorials online that cover these topics. Instead I will concentrate on the specifics that will help you to get the most out of the Nubis project, but most importantly will help you to avoid some pitfalls along the way. + +### Deployment Repository +Lets start with what we will call the "Deployment Repository". This is a git repository, typically available on GitHub, that contains all of the pieces necessary to deploy your Application. This includes two things, your application code and a collection of Nubis files. It is important that you follow this layout as our automation tools expect to find things in specific locations. For an example, check out the example [nubis-mediawiki](https://github.com/Nubisproject/nubis-mediawiki) repository. + +#### Application Code +Your application code can be contained within this repository or it can simply be included as a git submodule. The choice to embed your code directly in the repository simplifies your application by having everything in one location. On the other hand if you separate out your application code from your deployment repository you can have different people responsible for different aspects of your code. Additionally this allows your application code repository to remain deployment agnostic. The choice is yours, but I generally recommend you use the submodule method for clean separation of responsibility and technology. + +#### Nubis Files +The nubis files are all contained in a single folder called, not surprisingly, nubis. Typically there will be three or more folders contained within the nubis folder; puppet, builder and cloudformation. You can learn more about this layout over in the [Nubis Overview](link) document. + +### Branching +We recommend using topic (feature) branches while developing new features. This allows you to switch easily between different development work-flows without all that stashing nonsense. You can learn more about branching (and merging) [here](http://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging). + +### Issues & Pull Requests +For anything related to the Nubis Project itself, you can either file an [issue](https://guides.github.com/features/issues/) for us or submit a patch by using GtiHubs [pull request](https://help.github.com/articles/using-pull-requests/) method. Either way we will be sure to work with you to solve your issue. + +You might be interested in checking out [Hub](https://hub.github.com/), it makes working with GitHub from the command line a snap. + +### Code Reviews +For everything relating to the Nubis Project itself, we require a code review before landing anything. We do not currently have a strict process for this, however one of the core maintainers (or module owner) must review code before it is merged to any production branch. We define a production branch as any branch that can affect any running systems. For example, branches that deploy the Sandbox are considered "Production" as they affect the productivity of people using this system. + +We recommend that you adopt a code review process for all aspects of your application. This helps to reduce production downtime, helps to maintain cohesiveness and ensures code continues to follow your style guidelines. + +### TODO +* Describe versioning +* Details on directory layout may be in another doc and should be linked here. \ No newline at end of file diff --git a/Project_Onboarding.md b/Project_Onboarding.md new file mode 100644 index 0000000..126a281 --- /dev/null +++ b/Project_Onboarding.md @@ -0,0 +1,60 @@ +## Project Onboarding + +This document is hear to guide us through the process of on-boarding your application in AWS using the [Nubis](https://github.com/Nubisproject) project. + +### Checklist +The steps we will take during this process are: + 1. You [gather information](Gather Information) + 1. We [create your AWS account](Create Account) in the Sandbox + 1. You [generate your AWS API keys](Generate API Keys) + 1. Everyone [meets](Meeting Time) to discuss architectural requirements / design + 1. You [build out](Application Build Out) your application in the Sandbox + 1. You initiate the [promotion to Dev](Promote to Dev) process + 1. You initiate the [promotion to Prod](Promote to Prod) process + + +### Gather Information +We need to know a few pieces of information about your application. This is used to track resources, for troubleshooting and for billing purposes. If you do not have all of this information, do not worry, we can help you figure it out. Once you have gathered all of this information you simply fill out [this form](link to Bugzilla form) to kick off the rest of the process. + +> Link to Bugzilla form (or list here the instructions for them to send the information to us). I am suggesting we create a Bugzilla form with inputs specifically for this information. When the user fills out this form it will both initiate the on-boarding process as well as provide us with the information we need to get started. I suggest two additional Bugzilla forms later in this document. + + The information we need from you is: + 1. Name of your project (AKA the "Service Name") [found here] (https://inventory.mozilla.org/en-US/core/service/) + 1. Email address of the ["Technical Owner"](link to email address requirements) + 1. [Cost center](link to wherever we look up cost centers) (Do we need this?) + 1. List of people who should attend the (Name?) Meeting + 1. [ list more requirements here as we discover them ] + + +### Create Account +As soon as you submit the above information to us we will create your AWS account. + > Will we use the Technical Owner email address for this? If not provide details here about how we will provide the information to them. + +Once we have done that we will notify you by... +> (how?). + +### Generate API Keys +Once you are logged into your new account you will need to generate an API key pair by following the instructions [here](link to API key section of account creation document). You will use this key pair to deploy resources (such as EC2 instances) into the sandbox. You should keep in mind that these keys are [secret](link to security best practices document) and should not be shared with anyone. + +### Meeting Time +We will schedule a meeting with all the necessary folks so we can all sit down and determine how we can help you to succeed. In this meeting we will discuss; design requirements, architectural needs, best practices and so on. Not to worry, we have a presentation all set up and will try to make this as painless as possible for you and your team. + +### Application Build Out +Now that we have a design it is time to build the resources necessary to support your application. To assist you with your application build out we have prepared a number of documents. + + * First you will want to check out our [System Overview](link) document. It will give you a general sense of how all the pieces fit together. + * Then I recommend you take a peek at our [Git & GitHub](https://github.com/Nubisproject/nubis-docs/blob/master/Git_GitHub.md) doc. This will aid you in setting up your repository for deploying with the Nubis Project. + * Next you should peruse our [Nubis Builder](https://github.com/Nubisproject/nubis-builder/blob/master/README.md) document which covers building AMIs using [Packer](https://www.packer.io/) and [Puppet](https://puppetlabs.com/). + * Finally you should take a gander at out [CloudFormation](https://github.com/Nubisproject/nubis-docs/blob/master/CloudFormation.md) document which covers things like using nested stacks to simplify your CloudFormation templates. + +### Promote to Dev +The next step on the road to getting your application into production is to initiate the process to get it deployed into Dev. This should be a super simple process as long as you followed the best practices mentioned above. If so, you simply fill out [this little form](link to another Bugzilla form for promotion process) and we will do the rest. We will be setting up a Continuous Integration (CI) system to deploy your project into Dev. This CI system will deploy your application using the exact same CloudFormation templates that you use to deploy in the Sandbox. The process will go something like [this](https://mana.mozilla.org/wiki/display/EA/Environment+promotion). + +### Promote to Prod +Once your application is running in Dev it is time for you to do your User Acceptance Testing (UAT). Once you have completed your UAT and you are ready to promote your application into production, simply fill out this [form](link to Bugzilla form for production promotion). We will then set up the CI system to deploy your application into Production. We will also schedule the following meetings +> what meetings go here? make list CAB, what else? + +During these meetings we will work with you to schedule the actual go-live event. This typically includes things like coordinating with the Mozilla Operations Center (MOC) and scheduling final content sync and DNS cut-over. + +### Winning +That is all there is to it. If you have any feedback on this document, this process, or anything Nubis Project related please feel free to drop us a line. We are in #infra-aws on [irc](irc.mozilla.org) or you can shoot us an [email](mailto:infra-aws@mozilla.org). Happy clouding. \ No newline at end of file diff --git a/README.md b/README.md index cef57ad..5aa85a5 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,47 @@ This repository is a collaborative documentation area for the Mozilla Nubis project. This projects main purpose is to build the tooling necessary to migrate a large number of legacy systems from corporate datacenters to the cloud. -For a good starting place check out our [Manifesto](https://github.com/mozilla/nubis-docs/blob/master/MANIFESTO.md). Feel free to look around. We appreciate any feedback or pull requests you feel would add to this effort. +Feel free to look around. We appreciate any feedback or pull requests you feel would add to this effort. -Cheers +## Getting started with the Nubis Project +Welcome to the Nubis Project. We hope you will find that it meats your requirements and is easy to use. In this document I will introduce you to the Nubis Project and give you a number of links to other documents that will help you along. + +The Nubis Project is in essence a framework for deploying applications to the cloud. At this time we support only Amazon Web Services (AWS). For an overview of our design principles I recommend you read out [manifesto](https://github.com/Nubisproject/nubis-docs/blob/master/MANIFESTO.md). + +### Familiarize yourself with the Nubis Project +Now, to get you up to speed with everything you will need to know to use the Nubis Project, I will provide for you a reading list. Not to worry, while this list looks long most of the documents are quite short. +* [Nubis Overview](WRITE_ME) Will give you an outline of the pieces of the project. +* [Git & GitHub](https://github.com/Nubisproject/nubis-docs/blob/master/Git_GitHub.md) provides some advice specific to Nubis. +* [CloudFormation](https://github.com/Nubisproject/nubis-docs/blob/master/CloudFormation.md) walks through some recomendations on structure and workflow. +* [Project Onbording](https://github.com/Nubisproject/nubis-docs/blob/master/Project_Onbording.md) will guide you through onboarding your first application. + +### Deployment +Now that you are familiar with the project and the process it is time to get coding. The first step is to assemble your deployment repository. Then it will be time to deploy into the sandbox. + +As we have seen in various examples through these documents, you will need to create a deployment repository. Take a look at the [System Overview](link) document for details. + +Once your repository is all set up the next step it to deploy into the sandbox. You can deploy bu following the procedures outlined in the [Project Onbording](https://github.com/Nubisproject/nubis-docs/blob/master/Project_Onbording.md#Application Build Out) doc. Some example commands can be found in our trusty [nubis-mediawiki](https://github.com/Nubisproject/nubis-mediawiki/blob/master/nubis/cloudformation/README.md) repository. + + +### Bugs, Contributions and more +We are super excited to have you hear. If you have stumbled into an issue there are several ways to address it. + +First, you can fix the issue yourself and file a pull request. You will find a guild in our [Contributing Doc]((https://github.com/Nubisproject/nubis-docs/blob/master/CONTRIBUTING.md). + +Next, you can file an issue. Simply navigate to the Nubis Project space on Github [here](https://github.com/Nubisproject), select the appropriate repository and click on the issues link. For example to file an issue against nubis-stacks you would go [here](https://github.com/Nubisproject/nubis-stacks/issues) + +Finally if you are looking for a new feature to be supported, simply follow the [Feature Requests](https://github.com/Nubisproject/nubis-docs/blob/master/FEATURE_REQUESTS.md) guide. + +--- +## TODO +Document these things +* set up git repo + * add nubis directory +* link to structure doc + * discuss packer and nubis-builder + * discuss packers use of puppet +* describe cloudformation template system + * link to cloudformation layout doc? +* discuss what is and is not appropritae to place in the bin directory +* walk through deployment of application +* need to link to set up for Nubis doc (set up aws, git, github, etc...) \ No newline at end of file From 4d07a14ae0340e4066abd1fcd09380967cfd5ff8 Mon Sep 17 00:00:00 2001 From: Jason Date: Thu, 7 May 2015 12:12:22 -0700 Subject: [PATCH 2/2] More docs, remanes, updates --- CloudFormation.md => CLOUDFORMATION.md | 0 Getting_Started.md => GETTING_STARTED.md | 8 ++++---- Git_GitHub.md => GIT_GITHUB.md | 0 Project_Onboarding.md => PROJECT_ONBOARDING.md | 8 ++++---- README.md | 10 +++++----- SYSTEM_OVERVIEW.md | 10 ++++++++++ images/Nubis_Components.png | Bin 0 -> 62354 bytes images/Nubis_Components.svg | 1 + images/Nubis_Deployment_Workflow.png | Bin 0 -> 53775 bytes images/Nubis_Deployment_Workflow.svg | 1 + 10 files changed, 25 insertions(+), 13 deletions(-) rename CloudFormation.md => CLOUDFORMATION.md (100%) rename Getting_Started.md => GETTING_STARTED.md (86%) rename Git_GitHub.md => GIT_GITHUB.md (100%) rename Project_Onboarding.md => PROJECT_ONBOARDING.md (89%) create mode 100644 SYSTEM_OVERVIEW.md create mode 100644 images/Nubis_Components.png create mode 100644 images/Nubis_Components.svg create mode 100644 images/Nubis_Deployment_Workflow.png create mode 100644 images/Nubis_Deployment_Workflow.svg diff --git a/CloudFormation.md b/CLOUDFORMATION.md similarity index 100% rename from CloudFormation.md rename to CLOUDFORMATION.md diff --git a/Getting_Started.md b/GETTING_STARTED.md similarity index 86% rename from Getting_Started.md rename to GETTING_STARTED.md index 97e42d0..5eb9f58 100644 --- a/Getting_Started.md +++ b/GETTING_STARTED.md @@ -6,16 +6,16 @@ The Nubis Project is in essence a framework for deploying applications to the cl ### Familiarize yourself with the Nubis Project Now, to get you up to speed with everything you will need to know to use the Nubis Project, I will provide for you a reading list. Not to worry, while this list looks long most of the documents are quite short. * [Nubis Overview](WRITE_ME) Will give you an outline of the pieces of the project. -* [Git & GitHub](https://github.com/Nubisproject/nubis-docs/blob/master/Git_GitHub.md) provides some advice specific to Nubis. -* [CloudFormation](https://github.com/Nubisproject/nubis-docs/blob/master/CloudFormation.md) walks through some recomendations on structure and workflow. -* [Project Onbording](https://github.com/Nubisproject/nubis-docs/blob/master/Project_Onbording.md) will guide you through onboarding your first application. +* [Git & GitHub](https://github.com/Nubisproject/nubis-docs/blob/master/GIT_GITHUB.md) provides some advice specific to Nubis. +* [CloudFormation](https://github.com/Nubisproject/nubis-docs/blob/master/CLOUDFORMATION.md) walks through some recomendations on structure and workflow. +* [Project Onbording](https://github.com/Nubisproject/nubis-docs/blob/master/PROJECT_ONBOARDING.md) will guide you through onboarding your first application. ### Deployment Now that you are familiar with the project and the process it is time to get coding. The first step is to assemble your deployment repository. Then it will be time to deploy into the sandbox. As we have seen in various examples through these documents, you will need to create a deployment repository. Take a look at the [System Overview](link) document for details. -Once your repository is all set up the next step it to deploy into the sandbox. You can deploy bu following the procedures outlined in the [Project Onbording](https://github.com/Nubisproject/nubis-docs/blob/master/Project_Onbording.md#Application Build Out) doc. Some example commands can be found in our trusty [nubis-mediawiki](https://github.com/Nubisproject/nubis-mediawiki/blob/master/nubis/cloudformation/README.md) repository. +Once your repository is all set up the next step it to deploy into the sandbox. You can deploy bu following the procedures outlined in the [Project Onbording](https://github.com/Nubisproject/nubis-docs/blob/master/PROJECT_ONBOARDING.md#Application Build Out) doc. Some example commands can be found in our trusty [nubis-mediawiki](https://github.com/Nubisproject/nubis-mediawiki/blob/master/nubis/cloudformation/README.md) repository. ### Bugs, Contributions and more diff --git a/Git_GitHub.md b/GIT_GITHUB.md similarity index 100% rename from Git_GitHub.md rename to GIT_GITHUB.md diff --git a/Project_Onboarding.md b/PROJECT_ONBOARDING.md similarity index 89% rename from Project_Onboarding.md rename to PROJECT_ONBOARDING.md index 126a281..ce8a3a1 100644 --- a/Project_Onboarding.md +++ b/PROJECT_ONBOARDING.md @@ -34,7 +34,7 @@ Once we have done that we will notify you by... > (how?). ### Generate API Keys -Once you are logged into your new account you will need to generate an API key pair by following the instructions [here](link to API key section of account creation document). You will use this key pair to deploy resources (such as EC2 instances) into the sandbox. You should keep in mind that these keys are [secret](link to security best practices document) and should not be shared with anyone. +Once you are logged into your new account you will need to generate an API key pair by following the instructions [here](link to API key section of account creation document). You will use this key pair to deploy resources (such as EC2 instances) into the sandbox. You should keep in mind that these keys are [secret](https://github.com/Nubisproject/nubis-docs/blob/master/SECURITY.md) and should not be shared with anyone. ### Meeting Time We will schedule a meeting with all the necessary folks so we can all sit down and determine how we can help you to succeed. In this meeting we will discuss; design requirements, architectural needs, best practices and so on. Not to worry, we have a presentation all set up and will try to make this as painless as possible for you and your team. @@ -42,10 +42,10 @@ We will schedule a meeting with all the necessary folks so we can all sit down a ### Application Build Out Now that we have a design it is time to build the resources necessary to support your application. To assist you with your application build out we have prepared a number of documents. - * First you will want to check out our [System Overview](link) document. It will give you a general sense of how all the pieces fit together. - * Then I recommend you take a peek at our [Git & GitHub](https://github.com/Nubisproject/nubis-docs/blob/master/Git_GitHub.md) doc. This will aid you in setting up your repository for deploying with the Nubis Project. + * First you will want to check out our [System Overview](https://github.com/Nubisproject/nubis-docs/blob/master/SYSTEM_OVERVIEW.md) document. It will give you a general sense of how all the pieces fit together. + * Then I recommend you take a peek at our [Git & GitHub](https://github.com/Nubisproject/nubis-docs/blob/master/GIT_GITHUB.md) doc. This will aid you in setting up your repository for deploying with the Nubis Project. * Next you should peruse our [Nubis Builder](https://github.com/Nubisproject/nubis-builder/blob/master/README.md) document which covers building AMIs using [Packer](https://www.packer.io/) and [Puppet](https://puppetlabs.com/). - * Finally you should take a gander at out [CloudFormation](https://github.com/Nubisproject/nubis-docs/blob/master/CloudFormation.md) document which covers things like using nested stacks to simplify your CloudFormation templates. + * Finally you should take a gander at out [CloudFormation](https://github.com/Nubisproject/nubis-docs/blob/master/CLOUDFORMATION.md) document which covers things like using nested stacks to simplify your CloudFormation templates. ### Promote to Dev The next step on the road to getting your application into production is to initiate the process to get it deployed into Dev. This should be a super simple process as long as you followed the best practices mentioned above. If so, you simply fill out [this little form](link to another Bugzilla form for promotion process) and we will do the rest. We will be setting up a Continuous Integration (CI) system to deploy your project into Dev. This CI system will deploy your application using the exact same CloudFormation templates that you use to deploy in the Sandbox. The process will go something like [this](https://mana.mozilla.org/wiki/display/EA/Environment+promotion). diff --git a/README.md b/README.md index 5aa85a5..a398b14 100644 --- a/README.md +++ b/README.md @@ -11,17 +11,17 @@ The Nubis Project is in essence a framework for deploying applications to the cl ### Familiarize yourself with the Nubis Project Now, to get you up to speed with everything you will need to know to use the Nubis Project, I will provide for you a reading list. Not to worry, while this list looks long most of the documents are quite short. -* [Nubis Overview](WRITE_ME) Will give you an outline of the pieces of the project. -* [Git & GitHub](https://github.com/Nubisproject/nubis-docs/blob/master/Git_GitHub.md) provides some advice specific to Nubis. -* [CloudFormation](https://github.com/Nubisproject/nubis-docs/blob/master/CloudFormation.md) walks through some recomendations on structure and workflow. -* [Project Onbording](https://github.com/Nubisproject/nubis-docs/blob/master/Project_Onbording.md) will guide you through onboarding your first application. +* [Nubis Overview](https://github.com/Nubisproject/nubis-docs/blob/master/SYSTEM_OVERVIEW.md) Will give you an outline of the pieces of the project. +* [Git & GitHub](https://github.com/Nubisproject/nubis-docs/blob/master/GIT_GITHUB.md) provides some advice specific to Nubis. +* [CloudFormation](https://github.com/Nubisproject/nubis-docs/blob/master/CLOUDFORMATION.md) walks through some recomendations on structure and workflow. +* [Project Onbording](https://github.com/Nubisproject/nubis-docs/blob/master/PROJECT_ONBOARDING.md) will guide you through onboarding your first application. ### Deployment Now that you are familiar with the project and the process it is time to get coding. The first step is to assemble your deployment repository. Then it will be time to deploy into the sandbox. As we have seen in various examples through these documents, you will need to create a deployment repository. Take a look at the [System Overview](link) document for details. -Once your repository is all set up the next step it to deploy into the sandbox. You can deploy bu following the procedures outlined in the [Project Onbording](https://github.com/Nubisproject/nubis-docs/blob/master/Project_Onbording.md#Application Build Out) doc. Some example commands can be found in our trusty [nubis-mediawiki](https://github.com/Nubisproject/nubis-mediawiki/blob/master/nubis/cloudformation/README.md) repository. +Once your repository is all set up the next step it to deploy into the sandbox. You can deploy bu following the procedures outlined in the [Project Onbording](https://github.com/Nubisproject/nubis-docs/blob/master/PROJECT_ONBOARDING.md#Application Build Out) doc. Some example commands can be found in our trusty [nubis-mediawiki](https://github.com/Nubisproject/nubis-mediawiki/blob/master/nubis/cloudformation/README.md) repository. ### Bugs, Contributions and more diff --git a/SYSTEM_OVERVIEW.md b/SYSTEM_OVERVIEW.md new file mode 100644 index 0000000..b862fa1 --- /dev/null +++ b/SYSTEM_OVERVIEW.md @@ -0,0 +1,10 @@ +## Nubis System Overview + +### System Components +![Nubis Components](images/Nubis_Components.png "Nubis Components") + +### Deployment Workflow +![Nubis Deployment Workflow](images/Nubis_Deployment_Workflow.png "Nubis Deployment Workflow") + +## TODO +Add me some text diff --git a/images/Nubis_Components.png b/images/Nubis_Components.png new file mode 100644 index 0000000000000000000000000000000000000000..9ec89e568aa92524ba230c191d8e3080853529f1 GIT binary patch literal 62354 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 literal 0 HcmV?d00001 diff --git a/images/Nubis_Components.svg b/images/Nubis_Components.svg new file mode 100644 index 0000000..aeeb07c --- /dev/null +++ b/images/Nubis_Components.svg @@ -0,0 +1 @@ +executesusesconsumesexecutesmanages1..nproducesconsumesproducesconsumesconsumesconsumesdeploysconsumesconsumesNubisBaseNubisBuilderNubisPuppet(LibrarianPuppet)PackerPuppetMasterlessNubisCI(Jenkins)NubisConsulPublicAMIBaseAMIYourapplicationcode(githubrepository)ApplicationAMIYourcompleteapplicationdeploymentNubisStacks(CFtemplates)Application-specifictemplate(CloudFormation)PuppetmodulesComponentKey:ArtifactRelationship:DefinitionsConsumes-oneentitytakesanotherentityasinput.Produces-oneentityistheoutputoftheworkofanotherentity.Executes-onecomponentdirectlyexecutesanothercomponent.Uses-onecomponentconsumesaserviceprovidedbyanothercomponent.-oneobjectcontrolsthestateofanotherobject.Manages \ No newline at end of file diff --git a/images/Nubis_Deployment_Workflow.png b/images/Nubis_Deployment_Workflow.png new file mode 100644 index 0000000000000000000000000000000000000000..f55f19dc27a7d1901df412138c18a7edbfb6080a GIT binary patch literal 53775 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

OLTB+;TSo(Qxa)<|%#5 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%0A`uU~TeY<82{&sq3F;rT7P}i9u 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 literal 0 HcmV?d00001 diff --git a/images/Nubis_Deployment_Workflow.svg b/images/Nubis_Deployment_Workflow.svg new file mode 100644 index 0000000..d0f42e7 --- /dev/null +++ b/images/Nubis_Deployment_Workflow.svg @@ -0,0 +1 @@ +Jenkins/CIcallsbuildertobuildnewapplicationimagenubis-buildergetslatestbaseAMIPackerstartsinstanceusingbaseAMIPackerrunspuppetmasterlesstoconfigureinstanceStartPackercreatesanewapplicationimageFinishTagswithservicename,buildversion,OSplatform,andparentsourceAMIGithubcommittoapplicationrepo(devonly)PushabuttoninJenkins(prodonly)Manualtrigger(Sandboxonly)Manualtrigger(sandboxonly)JenkinstriggeronsuccessfulAMIbuild(devandprodonly)CloudFormationcreatesorupdatesstackJenkinsrunstests(devandprodonly) \ No newline at end of file