From 7db0cb8bc0841089cb185fa1439c6a5da60a940a Mon Sep 17 00:00:00 2001 From: Cam Soper Date: Thu, 5 Apr 2018 12:38:38 -0500 Subject: [PATCH 1/9] initial commit --- azure-lifecycle/outline.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 azure-lifecycle/outline.md diff --git a/azure-lifecycle/outline.md b/azure-lifecycle/outline.md new file mode 100644 index 000000000000..e69de29bb2d1 From bfaedb0eaa7fc24b73030151d1244cbecd090d0c Mon Sep 17 00:00:00 2001 From: Cam Soper Date: Thu, 5 Apr 2018 12:45:30 -0500 Subject: [PATCH 2/9] refactored --- azure-lifecycle/{outline.md => 00-outline.md} | 0 azure-lifecycle/01-introduction.md | 0 azure-lifecycle/02-tools-and-downloads.md | 0 azure-lifecycle/03-web-app.md | 0 azure-lifecycle/04-deployment-and-monitoring.md | 0 azure-lifecycle/05-continuous-integration.md | 0 azure-lifecycle/06-best-practices.md | 0 azure-lifecycle/07-next-steps.md | 0 8 files changed, 0 insertions(+), 0 deletions(-) rename azure-lifecycle/{outline.md => 00-outline.md} (100%) create mode 100644 azure-lifecycle/01-introduction.md create mode 100644 azure-lifecycle/02-tools-and-downloads.md create mode 100644 azure-lifecycle/03-web-app.md create mode 100644 azure-lifecycle/04-deployment-and-monitoring.md create mode 100644 azure-lifecycle/05-continuous-integration.md create mode 100644 azure-lifecycle/06-best-practices.md create mode 100644 azure-lifecycle/07-next-steps.md diff --git a/azure-lifecycle/outline.md b/azure-lifecycle/00-outline.md similarity index 100% rename from azure-lifecycle/outline.md rename to azure-lifecycle/00-outline.md diff --git a/azure-lifecycle/01-introduction.md b/azure-lifecycle/01-introduction.md new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/azure-lifecycle/02-tools-and-downloads.md b/azure-lifecycle/02-tools-and-downloads.md new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/azure-lifecycle/03-web-app.md b/azure-lifecycle/03-web-app.md new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/azure-lifecycle/04-deployment-and-monitoring.md b/azure-lifecycle/04-deployment-and-monitoring.md new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/azure-lifecycle/05-continuous-integration.md b/azure-lifecycle/05-continuous-integration.md new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/azure-lifecycle/06-best-practices.md b/azure-lifecycle/06-best-practices.md new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/azure-lifecycle/07-next-steps.md b/azure-lifecycle/07-next-steps.md new file mode 100644 index 000000000000..e69de29bb2d1 From 5e2a00dc819841ec578bb858f58dd474a61dd91d Mon Sep 17 00:00:00 2001 From: Cam Soper Date: Thu, 5 Apr 2018 12:46:29 -0500 Subject: [PATCH 3/9] forgot the content --- azure-lifecycle/00-outline.md | 40 +++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/azure-lifecycle/00-outline.md b/azure-lifecycle/00-outline.md index e69de29bb2d1..d98e58f5fc91 100644 --- a/azure-lifecycle/00-outline.md +++ b/azure-lifecycle/00-outline.md @@ -0,0 +1,40 @@ +1. Introduction/Overview + * Purpose of book + * Cloud computing/Azure - High level overview + +2. Required Tools and Downloads + * Azure subscription + * Visual Studio (and appropriate workload for VS2017) + * SDK tools/emulators (if VS2015 – VS2017 should include everything in a workload) + +3. Build a Web App that consumes an Azure service + * Walkthrough creation of a canonical example, e.g. "To-Do List" app + * Relies on an Azure-based service for data. + * Emphasize a repository pattern to facilitate later changes to data layer + * Emphasize config transforms for dev/production configs. + * Emphasize stateless design choices for scaling purposes + * Authentication + +4. Deploying the app to App Service and monitoring + * Right-click > publish scenario. + * After publishing and verifying, walk through the monitoring options + * Azure portal + * Application Insights - Point out that it's built-in! + * Make a change to the app, publish updates same way + +5. Setting up a CI/CD toolchain + * Putting the app in a local Git or GitHub repo and tying it to Azure for CI + * Use of staging environments in Web Apps + * Make a change to the app, commit it, watch it show up magically in staging, then promote staging to prod + +6. Best practices we didn’t cover (learning paths, not content) + * Keeping secrets in Key Vault + * Using Redis for caching and session state + * Using Azure CDN for content distribution + +7. Next Steps – Learning paths for additional topics + * Azure storage + * Databases + * Azure functions + * Containers + * Cognitive services From 2227a27623323d6c819d1c24efd58333d6ca5d24 Mon Sep 17 00:00:00 2001 From: Cam Soper Date: Thu, 5 Apr 2018 12:48:58 -0500 Subject: [PATCH 4/9] formatting --- azure-lifecycle/00-outline.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/azure-lifecycle/00-outline.md b/azure-lifecycle/00-outline.md index d98e58f5fc91..429856a4eadc 100644 --- a/azure-lifecycle/00-outline.md +++ b/azure-lifecycle/00-outline.md @@ -1,3 +1,9 @@ +# Azure .NET Developer Lifecycle + +The purpose of this book (or set of docs, or whatever else this project becomes) is to set the minimum bar for a complete .NET development lifecycle on Azure. We shall assume that developers are experienced ASP.NET developers (200-300 level understanding) with no cloud/Azure experience. The emphasis will be on onboarding developers to Azure, not a survey of everything available. + +## Working Outline + 1. Introduction/Overview * Purpose of book * Cloud computing/Azure - High level overview From 3624553750a223b948d0257ea93426d50c3a5c9e Mon Sep 17 00:00:00 2001 From: Cam Soper Date: Thu, 5 Apr 2018 13:06:04 -0500 Subject: [PATCH 5/9] updated title --- azure-lifecycle/00-outline.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-lifecycle/00-outline.md b/azure-lifecycle/00-outline.md index 429856a4eadc..1837b90f14d9 100644 --- a/azure-lifecycle/00-outline.md +++ b/azure-lifecycle/00-outline.md @@ -1,4 +1,4 @@ -# Azure .NET Developer Lifecycle +# Azure Developer Lifecycle for .NET Developers The purpose of this book (or set of docs, or whatever else this project becomes) is to set the minimum bar for a complete .NET development lifecycle on Azure. We shall assume that developers are experienced ASP.NET developers (200-300 level understanding) with no cloud/Azure experience. The emphasis will be on onboarding developers to Azure, not a survey of everything available. From 78ab9d32714fedd0e9804078dc4294c94853179c Mon Sep 17 00:00:00 2001 From: Cam Soper Date: Thu, 26 Apr 2018 20:04:17 -0500 Subject: [PATCH 6/9] Updated outline, wrote intro --- azure-lifecycle/00-outline.md | 29 ++++++++--------- azure-lifecycle/01-introduction.md | 50 ++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 16 deletions(-) diff --git a/azure-lifecycle/00-outline.md b/azure-lifecycle/00-outline.md index 1837b90f14d9..55713440e633 100644 --- a/azure-lifecycle/00-outline.md +++ b/azure-lifecycle/00-outline.md @@ -11,27 +11,24 @@ The purpose of this book (or set of docs, or whatever else this project becomes) 2. Required Tools and Downloads * Azure subscription * Visual Studio (and appropriate workload for VS2017) - * SDK tools/emulators (if VS2015 – VS2017 should include everything in a workload) - -3. Build a Web App that consumes an Azure service - * Walkthrough creation of a canonical example, e.g. "To-Do List" app - * Relies on an Azure-based service for data. - * Emphasize a repository pattern to facilitate later changes to data layer - * Emphasize config transforms for dev/production configs. - * Emphasize stateless design choices for scaling purposes - * Authentication - -4. Deploying the app to App Service and monitoring + +3. Deploying an app to App Service + * Downloading the sample * Right-click > publish scenario. - * After publishing and verifying, walk through the monitoring options - * Azure portal - * Application Insights - Point out that it's built-in! - * Make a change to the app, publish updates same way + * Git Push method + * FTP method -5. Setting up a CI/CD toolchain +4. DevOps and CI/CD toolchain * Putting the app in a local Git or GitHub repo and tying it to Azure for CI * Use of staging environments in Web Apps * Make a change to the app, commit it, watch it show up magically in staging, then promote staging to prod + * VSTS build server + +5. Monitoring, Logging, and Debugging + * Monitoring in the Portal + * Logging + * Debugging + * Application Insights 6. Best practices we didn’t cover (learning paths, not content) * Keeping secrets in Key Vault diff --git a/azure-lifecycle/01-introduction.md b/azure-lifecycle/01-introduction.md index e69de29bb2d1..439a6f06164b 100644 --- a/azure-lifecycle/01-introduction.md +++ b/azure-lifecycle/01-introduction.md @@ -0,0 +1,50 @@ +# Introduction + +## Welcome + +Welcome to Azure Development Lifecycle for .NET! In this guide, we'll introduce you to the basic concepts you'll need to build a development lifecycle around Azure using .NET tools and processes. After finishing this guide, you'll be able to reap the benefits of a mature CI/CD DevOps toolchain. + +### Who this guide is for + +You should be an experienced ASP.NET developer (200-300 level). You don't need to know anything about Azure, as we'll cover that in this introduction. This guide may also be useful for DevOps engineers who are more focused on operations than development. + +### What this guide doesn't cover + +This guide is focused on an end-to-end DevOps experience for .NET developers. It will not be an exhaustive guide to all things Azure, nor will it focus extensively on .NET APIs for Azure services. The emphasis is all around continuous integration, deployment, monitoring, and debugging. Near the end of the guide we will make some recommendations for next steps, which will include some suggestions for Azure platform services that will be useful for ASP.NET developers. + +## Understanding cloud computing as a developer + +In many ways, developing for the cloud is very similar to developing on-premise applications. The most obvious difference is that the application code runs somewhere else. Getting a little deeper, however, things can get very complicated very quickly. For that reason, it's important to understand the different models of cloud computing. + +%TODO% IaaS vs PaaS vs SaaS diagram like [this](https://stack247.files.wordpress.com/2015/05/azure-on-premises-vs-iaas-vs-paas-vs-saas.png) + +### Infrastructure as a Service + +The most familiar model of cloud computing for many developers is **Infrastructure as a Service**, or **IaaS**. In **IaaS** deployments, the customer is simply running a virtual machine on the service provider's hardware. While the cloud service provider is providing the physical infrastructure for network connectivity, physical storage, and a hypervisor to host the VM, the customer is responsible for the configuration and maintenance of the guest operating system within the VM, the virtual network configuration, and all the application code running within the VM. + +IaaS is an attractive option for legacy applications, as generally anything that can be run on a VM on-premise can be run in a VM in a cloud data center just as well with few, if any, modifications. + +### Platform as a Service + +A cloud computing model which might be less familiar is **Platform as a Service**, or **PaaS**. PaaS services are about providing a development platform, with very little concern to the developer with regard to the underlying infrastructure. PaaS services can be as generalized as [Azure App Service](https://docs.microsoft.com/azure/app-service/), which is a robust web hosting platform similar to Microsoft Internet Information Services, or as specialized as [Azure Service Bus Messaging](https://docs.microsoft.com/azure/service-bus-messaging/), a reliable message broker. + +Many Azure PaaS offerings are similar to Service Bus Messaging in that they are "building blocks" that can be leveraged by any application, whether they are hosted in the Azure, on-premises, or with another cloud provider. PaaS services like this can be pieced together in various combinations to support virtually any type of application. Outsourcing pieces of your application to the cloud enables you to bootstrap development of your application quickly, since the functionality of things like authentication, message queuing, blob storage, and SQL or NoSQL databases can be integrated into your application as a dependency rather than new development. + +PaaS should be given serious consideration for greenfield development of new applications, since there is a considerable value proposition in terms of development time and ongoing maintenance, as well as cost. + +The processes presented in this guide will assume the application is at least hosted in Azure App Service, but dependencies on "building block" services will be avoided. + +### Software as a Service + +Virtually everybody uses some type of **Software as a Service** (**SaaS**) application. SaaS is a subscription or ad-based model where software is run from the cloud, usually in a a browser. Office 365, Salesforce, Dropbox, Google Docs, and Gmail are all examples of SaaS. SaaS has no relevance to this guide. + +## Conclusion + +This guide will prepare you to build a continuous integration development lifecycle built around ASP.NET and Azure PaaS products. + +## Additional reading + +* [What is Cloud Computing?](https://azure.microsoft.com/overview/what-is-cloud-computing/) +* [Examples of Cloud Computing](https://azure.microsoft.com/overview/examples-of-cloud-computing/) +* [What is IaaS?](https://azure.microsoft.com/overview/what-is-iaas/) +* [What is PaaS?](https://azure.microsoft.com/overview/what-is-paas/) \ No newline at end of file From ae417e7ea1d27e13af3e44afd561a79059d6d8dc Mon Sep 17 00:00:00 2001 From: Cam Soper Date: Fri, 27 Apr 2018 11:35:00 -0500 Subject: [PATCH 7/9] added list --- azure-lifecycle/01-introduction.md | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/azure-lifecycle/01-introduction.md b/azure-lifecycle/01-introduction.md index 439a6f06164b..a5433917ba0a 100644 --- a/azure-lifecycle/01-introduction.md +++ b/azure-lifecycle/01-introduction.md @@ -28,7 +28,20 @@ IaaS is an attractive option for legacy applications, as generally anything that A cloud computing model which might be less familiar is **Platform as a Service**, or **PaaS**. PaaS services are about providing a development platform, with very little concern to the developer with regard to the underlying infrastructure. PaaS services can be as generalized as [Azure App Service](https://docs.microsoft.com/azure/app-service/), which is a robust web hosting platform similar to Microsoft Internet Information Services, or as specialized as [Azure Service Bus Messaging](https://docs.microsoft.com/azure/service-bus-messaging/), a reliable message broker. -Many Azure PaaS offerings are similar to Service Bus Messaging in that they are "building blocks" that can be leveraged by any application, whether they are hosted in the Azure, on-premises, or with another cloud provider. PaaS services like this can be pieced together in various combinations to support virtually any type of application. Outsourcing pieces of your application to the cloud enables you to bootstrap development of your application quickly, since the functionality of things like authentication, message queuing, blob storage, and SQL or NoSQL databases can be integrated into your application as a dependency rather than new development. +Many Azure PaaS offerings are similar to Service Bus Messaging in that they are "building blocks" that can be leveraged by any application, whether they are hosted in the Azure, on-premises, or with another cloud provider. PaaS services like this can be pieced together in various combinations to support virtually any type of application. Outsourcing pieces of your application to the cloud enables you to bootstrap development of your application quickly, since the functionality of things like authentication, message queuing, blob storage, and SQL or NoSQL databases can be integrated into your application as a dependency rather than new development. + +Other examples of PaaS offerings in Azure are: + +* [Azure Storage](https://docs.microsoft.com/azure/storage/) +* [Azure Search](https://docs.microsoft.com/azure/search/) +* [Notification Hubs](https://docs.microsoft.com/azure/notification-hubs/) +* [Service Fabric](https://docs.microsoft.com/azure/service-fabric/) +* [Azure Container Service](https://docs.microsoft.com/azure/aks/) +* [Azure SQL Database](https://docs.microsoft.com/azure/sql-database/) +* [Redis Cache](https://docs.microsoft.com/azure/redis-cache/) +* [Cosmos DB](https://docs.microsoft.com/azure/cosmos-db/) +* [Azure Active Directory](https://docs.microsoft.com/azure/active-directory/) +* [Azure Active Directory B2C](https://docs.microsoft.com/azure/active-directory-b2c/) PaaS should be given serious consideration for greenfield development of new applications, since there is a considerable value proposition in terms of development time and ongoing maintenance, as well as cost. @@ -36,7 +49,7 @@ The processes presented in this guide will assume the application is at least ho ### Software as a Service -Virtually everybody uses some type of **Software as a Service** (**SaaS**) application. SaaS is a subscription or ad-based model where software is run from the cloud, usually in a a browser. Office 365, Salesforce, Dropbox, Google Docs, and Gmail are all examples of SaaS. SaaS has no relevance to this guide. +Virtually everybody uses some type of **Software as a Service** (**SaaS**) application. SaaS is a subscription or ad-based model where software is run from the cloud, usually in a a browser. Office 365, Salesforce, Dropbox, Google Docs, and Gmail are all examples of SaaS. For the purposes of this guide, SaaS is only relevant insofar as Visual Studio Team Services is a SaaS offering we will use extensively. ## Conclusion From e9ab163f19e1e8b8ce3539a125627a0b91173d7a Mon Sep 17 00:00:00 2001 From: Cam Soper Date: Fri, 27 Apr 2018 13:01:17 -0500 Subject: [PATCH 8/9] changes for feedback --- azure-lifecycle/01-introduction.md | 2 +- .../{03-web-app.md => 03-deploying-to-app-service.md} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename azure-lifecycle/{03-web-app.md => 03-deploying-to-app-service.md} (100%) diff --git a/azure-lifecycle/01-introduction.md b/azure-lifecycle/01-introduction.md index a5433917ba0a..746ad01aa563 100644 --- a/azure-lifecycle/01-introduction.md +++ b/azure-lifecycle/01-introduction.md @@ -43,7 +43,7 @@ Other examples of PaaS offerings in Azure are: * [Azure Active Directory](https://docs.microsoft.com/azure/active-directory/) * [Azure Active Directory B2C](https://docs.microsoft.com/azure/active-directory-b2c/) -PaaS should be given serious consideration for greenfield development of new applications, since there is a considerable value proposition in terms of development time and ongoing maintenance, as well as cost. +PaaS should be given serious consideration for greenfield development of new applications since there is a considerable value proposition in terms of development time and ongoing maintenance, as well as cost. The processes presented in this guide will assume the application is at least hosted in Azure App Service, but dependencies on "building block" services will be avoided. diff --git a/azure-lifecycle/03-web-app.md b/azure-lifecycle/03-deploying-to-app-service.md similarity index 100% rename from azure-lifecycle/03-web-app.md rename to azure-lifecycle/03-deploying-to-app-service.md From 312208fac823f17f911f963a550deea73bf7c7e3 Mon Sep 17 00:00:00 2001 From: Cam Soper Date: Fri, 27 Apr 2018 13:06:09 -0500 Subject: [PATCH 9/9] added list --- azure-lifecycle/01-introduction.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-lifecycle/01-introduction.md b/azure-lifecycle/01-introduction.md index 746ad01aa563..f3507a66e7e1 100644 --- a/azure-lifecycle/01-introduction.md +++ b/azure-lifecycle/01-introduction.md @@ -43,7 +43,7 @@ Other examples of PaaS offerings in Azure are: * [Azure Active Directory](https://docs.microsoft.com/azure/active-directory/) * [Azure Active Directory B2C](https://docs.microsoft.com/azure/active-directory-b2c/) -PaaS should be given serious consideration for greenfield development of new applications since there is a considerable value proposition in terms of development time and ongoing maintenance, as well as cost. +PaaS should be given serious consideration for greenfield development of new applications since there is a considerable value proposition in terms of development time and ongoing maintenance, as well as cost. Additionally, when infrastructure is abstracted behind a platform, well-designed applications can scale on demand or by automated rules. The processes presented in this guide will assume the application is at least hosted in Azure App Service, but dependencies on "building block" services will be avoided.