MCW-OSS-PaaS-and-DevOps/Whiteboard design session/WDS trainer guide - OSS Paa...

55 KiB

Microsoft Cloud Workshops

OSS PaaS and DevOps
Whiteboard design session trainer guide
June 2020

Information in this document, including URL and other Internet Web site references, is subject to change without notice. Unless otherwise noted, the example companies, organizations, products, domain names, e-mail addresses, logos, people, places, and events depicted herein are fictitious, and no association with any real company, organization, product, domain name, e-mail address, logo, person, place or event is intended or should be inferred. Complying with all applicable copyright laws is the responsibility of the user. Without limiting the rights under copyright, no part of this document may be reproduced, stored in or introduced into a retrieval system, or transmitted in any form or by any means (electronic, mechanical, photocopying, recording, or otherwise), or for any purpose, without the express written permission of Microsoft Corporation.

Microsoft may have patents, patent applications, trademarks, copyrights, or other intellectual property rights covering subject matter in this document. Except as expressly provided in any written license agreement from Microsoft, the furnishing of this document does not give you any license to these patents, trademarks, copyrights, or other intellectual property.

The names of manufacturers, products, or URLs are provided for informational purposes only and Microsoft makes no representations and warranties, either expressed, implied, or statutory, regarding these manufacturers or the use of the products with any Microsoft technologies. The inclusion of a manufacturer or product does not imply endorsement of Microsoft of the manufacturer or product. Links may be provided to third party sites. Such sites are not under the control of Microsoft and Microsoft is not responsible for the contents of any linked site or any link contained in a linked site, or any changes or updates to such sites. Microsoft is not responsible for webcasting or any other form of transmission received from any linked site. Microsoft is providing these links to you only as a convenience, and the inclusion of any link does not imply endorsement of Microsoft of the site or the products contained therein.

© 2020 Microsoft Corporation. All rights reserved.

Microsoft and the trademarks listed at https://www.microsoft.com/en-us/legal/intellectualproperty/Trademarks/Usage/General.aspx are trademarks of the Microsoft group of companies. All other trademarks are property of their respective owners.

Contents

Trainer information

Thank you for taking time to support the whiteboard design sessions as a trainer!

Role of the trainer

An amazing trainer:

  • Creates a safe environment in which learning can take place.

  • Stimulates the participant's thinking.

  • Involves the participant in the learning process.

  • Manages the learning process (on time, on topic, and adjusting to benefit participants).

  • Ensures individual participant accountability.

  • Ties it all together for the participant.

  • Provides insight and experience to the learning process.

  • Effectively leads the whiteboard design session discussion.

  • Monitors quality and appropriateness of participant deliverables.

  • Effectively leads the feedback process.

Whiteboard design session flow

Each whiteboard design session uses the following flow:

Step 1: Review the customer case study (15 minutes)

Outcome

Analyze your customer's needs.

  • Customer's background, situation, needs and technical requirements

  • Current customer infrastructure and architecture

  • Potential issues, objectives and blockers

Step 2: Design a proof of concept solution (60 minutes)

Outcome

Design a solution and prepare to present the solution to the target customer audience in a 15-minute chalk-talk format.

  • Determine your target customer audience.

  • Determine customer's business needs to address your solution.

  • Design and diagram your solution.

  • Prepare to present your solution.

Step 3: Present the solution (30 minutes)

Outcome

Present solution to your customer:

  • Present solution

  • Respond to customer objections

  • Receive feedback

Wrap-up (15 minutes)

  • Review preferred solution

Before the whiteboard design session: How to prepare

Before conducting your first whiteboard design session:

  • Read the Student guide (including the case study) and Trainer guide.

  • Become familiar with all key points and activities.

  • Plan the point you want to stress, which questions you want to drive, transitions, and be ready to answer questions.

  • Prior to the whiteboard design session, discuss the case study to pick up more ideas.

  • Make notes for later.

During the whiteboard design session: Tips for an effective whiteboard design session

Refer to the Trainer guide to stay on track and observe the timings.

Do not expect to memorize every detail of the whiteboard design session.

When participants are doing activities, you can look ahead to refresh your memory.

  • Adjust activity and whiteboard design session pace as needed to allow time for presenting, feedback, and sharing.

  • Add examples, points, and stories from your own experience. Think about stories you can share that help you make your points clearly and effectively.

  • Consider creating a "parking lot" to record issues or questions raised that are outside the scope of the whiteboard design session or can be answered later. Decide how you will address these issues, so you can acknowledge them without being derailed by them.

Have fun! Encourage participants to have fun and share!

Involve your participants. Talk and share your knowledge but always involve your participants, even while you are the one speaking.

Ask questions and get them to share to fully involve your group in the learning process.

Ask first, whenever possible. Before launching into a topic, learn your audience's opinions about it and experiences with it. Asking first enables you to assess their level of knowledge and experience, and leaves them more open to what you are presenting.

Wait for responses. If you ask a question such as, "What's your experience with (fill in the blank)?" then wait. Do not be afraid of a little silence. If you leap into the silence, your participants will feel you are not serious about involving them and will become passive. Give participants a chance to think, and if no one answers, patiently ask again. You will usually get a response.

OSS PaaS and DevOps whiteboard design session student guide

Abstract and learning objectives

In this whiteboard design session, you work with a group to design a solution for integrating and deploying complex open-source software (OSS) workloads into Azure PaaS. Your solution should handle the migration of an existing MERN (MongoDB, Express.js, React.js, Node.js) stack application. The application will be migrated from a hosted environment into Azure PaaS services, including migrating an existing MongoDB instance into Cosmos DB, enhancing application functionality using serverless technologies, and fully embracing modern DevOps tools.

At the end of this whiteboard design session, you will be better able to design solutions for migrating OSS applications into Azure PaaS using modern DevOps methodologies.

Step 1: Review the customer case study

Outcome

Analyze your customer's needs.

Timeframe: 15 minutes

Directions: With all participants in the session, the facilitator/SME presents an overview of the customer case study along with technical tips.

  1. Meet your table participants and trainer.

  2. Read all of the directions for steps 1-3 in the student guide.

  3. As a table team, review the following customer case study.

Customer situation

Best For You Organics Company is one of the leading online health food suppliers in North America, serving customers in Canada, Mexico, and the United States. They launched their highly-successful e-commerce website, which sells subscriptions to their meal service, in 2016, and have been steadily increasing their subscriber-base since. Their service caters to working professionals, who want convenient, reliable access to healthy meal choices, and pre-packaged recipes, without having to spend too much time preparing the meals. Customers can choose from a variety of meal plan options (e.g., vegetarian, vegan, gluten-free, high-protein), along with several options for portion sizes and the number of meals per week. Meals are delivered weekly directly to the customer's home.

Their current meal plans include only dinner options. However, Best For You Organics Company has received feedback from many customers expressing a desire for breakfast and lunch options to be included as part of the service offering. They would like to expand their meal services to meet this demand but feel they first need to address their rising infrastructure costs and management time. They have reached a point where managing their VM and server infrastructure is becoming a real challenge. They are interested in learning more about Platform as a Service (PaaS) solutions for OSS applications that could help them focus their expenditures and efforts on their core business rather than infrastructure. "We're finding that with every upgrade, we're spending more time and money on infrastructure and less on delivering the functionality and features that matter most to our customers," says Holly Franklin, "and we need to rebalance those efforts." The development team at Best For You Organics has some experience with Docker. It is interested in what options might be available for using containers to deploy their application into a cloud environment.

Their CIO, Holly Franklin, has voiced several concerns about migrating to the cloud. First, all of their business comes through their website, so high availability and performance are critically important to them, and she would like to see an improvement in this area as they migrate to the cloud. Second, she is a big proponent of open-source software (OSS) and would like to continue to use their open-source tools. Their web application uses the MERN stack (MongoDB, Express.js, React.JS, Node.js). They host their code in a private GitHub repository. A point of pride for Best For You Organics Company has been their developers' involvement in the open-source community, with most members of the team frequently contributing to React.js on GitHub. They currently have a continuous integration workflow, triggered by each code check-in/commit in GitHub, using Jenkins.

Another feature she is interested in learning more about is identity management. Their existing web app requires users to register and log in before subscribing to a meal plan. Today, they handle this via a home-grown solution that stores usernames and passwords in the same database used for storing application information. They have experimented with other third-party solutions in the past, but found them difficult to integrate into their application, and are curious if moving their app into a cloud PaaS platform could help them integrate a better solution.

For their migration to the cloud, they have indicated that they would like to reuse as much code and architecture as possible. "We want the migration to be non-invasive. Although the existing code has its nuances and issues, we do not want to redesign the entire solution to migrate to the cloud. We want to be as efficient as possible with time and cost." Additionally, they want to continue using MongoDB APIs for data storage, to avoid having to rewrite application data access code, but don't want to worry about managing infrastructure, consistency, and replication.

The development team has also expressed that they would like to continue using GitHub as their code repository but is interested in improving upon their DevOps pipeline. They currently use Jenkins for their builds and are interested in any tools available in a cloud offering that could help with release management, or other aspects of a fully-integrated, modern DevOps pipeline. Ultimately, their goal is to automate and simplify deployments through CI/CD capabilities and deliver updates faster and more reliably.

They have also expressed interest in gaining a better understanding of how they can leverage serverless architecture to help their business grow. The development team has several processes that they are considering adding to their workflow, which they feel would be good candidates for a serverless approach, but are not sure which technologies and tools are right for the job. First, they would like to see if they can automate their daily order processing, queuing up the orders that need to go out each day, and updating their database when the orders have completed processing and shipped. Next, they would like to implement functionality to send customers an email or SMS text message when their credit card has been charged, and their weekly meal delivery has shipped.

Best For You Organics is optimistic about the benefits of moving to a PaaS solution but very concerned about the time and potential changes that might be required to accommodate the transition for an OSS application.

Customer needs

  1. Best For You Organics wants to migrate as much of their infrastructure as possible to the cloud to make it easier to take advantage of the scalability, reliability, and performance of a PaaS solution, and reduce the burden of building out and managing hardware and software.

  2. They would like to reuse as much of their existing code and architecture as possible.

    • They want the migration to be non-invasive. Although the existing code has its nuances and issues, we do not want to redesign the entire solution to migrate to the cloud.
    • The would like to continue using MongoDB APIs for data storage, to avoid having to rewrite application data access code, but don't want to worry about managing infrastructure, consistency, replication, etc.
  3. They want to continue to use their GitHub repository for source control, and Jenkins for their builds. However, they are interested in any value-added functionality available in Azure that might improve their ability to rapidly build, test, and deploy application updates through automated and simplified deployments using continuous integration/continuous delivery (CI/CD) capabilities.

  4. Want to maintain a dedication to open source technologies, and maintain those same technologies within the cloud solution, while taking advantage of integrations with the cloud environment, where possible.

  5. Looking for opportunities to integrate automated, serverless processes, specifically around their order processing and SMS notifications to customers.

  6. Desire a replacement solution for safeguarding and managing user identities.

  7. Best For You Organics offers thousands of different meal options, but currently doesn't have an easy way for customers to search for specific meals or types of meals. They would like to add search capabilities to their application, providing the ability for customers to more easily find meals or options.

Customer objections

  1. Microsoft isn't known for supporting open source. Is Azure really an appropriate platform for hosting an OSS application using PaaS?

  2. We're interested in using containers, but we're not sure how they work in Azure. Does Azure provide reliable ways to deploy and manage containers? What is the simplest way to move containers to Azure, based on our PaaS experience, while at the same time considering our scale and growth requirements?

  3. We want to improve our current DevOps workflow. What options are available in Azure? Can we implement a CI/CD pipeline? Can we continue to use Jenkins? Does Azure offer any value-added services which we can leverage in our existing Jenkins CI pipeline?

  4. We've heard about Azure Active Directory B2C (Azure AD B2C) to manage application users, but we are not sure how that would work with our open-source application.

  5. Is Azure Cognitive Search an appropriate solution for improving the search capabilities of our OSS app?

  6. We no longer want to maintain VMs for running our MongoDB database. Does Azure offer a solution that will allow us to continue using the MongoDB APIs while benefiting from the scalability and reliability of a PaaS database platform?

  7. We would like to understand more about the benefits of a serverless architecture. In Azure, does it mean only using Azure Functions, or is there more to it?

  8. We've read that Visual Studio Code is a free, open-source code editor that can be used for OSS development. Can our developers continue to use their IDE, or do they need to switch over to using Visual Studio Code to write code destined for the Azure platform? Does Visual Studio Code offer any features or integration capabilities that would make it advantageous over a non-Microsoft code editor?

Infographic for common scenarios

This data flow diagram illustrates how to build highly scalable e-commerce websites with catalog, checkout, analysis, and forecasting. Fifteen components in this diagram interact with each other between end-users and the enterprise, and the components are organized in three tiers: the internet tier, the services tier, and the data tier.

Step 2: Design a proof of concept solution

Outcome

Design a solution and prepare to present the solution to the target customer audience in a 15-minute chalk-talk format.

Timeframe: 60 minutes

Business needs

Directions: With all participants at your table, answer the following questions and list the answers on a flip chart:

  1. Who should you present this solution to? Who is your target customer audience? Who are the decision makers?

  2. What customer business needs do you need to address with your solution?

Design

Directions: With all participants at your table, respond to the following questions on a flip chart:

High-level architecture

  1. Without getting into the details (the following sections address the particulars), diagram your initial vision for handling the top-level requirements for the OSS app and migration, serverless architecture integration, search integration, Azure AD B2C implementation, and DevOps pipeline. You will refine this diagram as you proceed.

PaaS solution

  1. What PaaS solution would you propose to Best For You Organics Company for moving their application into Azure? Will this solution minimize the number of application code changes required to migrate the application? How will container orchestration be handled?

  2. Describe the scalability, high-availability, and performance options that are open to Best For Your Organics Company with the PaaS solution you proposed above.

  3. What options does the customer have for a Docker image registry? Which options would you recommend?

Database migration

  1. What service would you recommend for hosting the customer's MongoDB in Azure, and ensuring they can continue to use the MongoDB API for accessing their data?

  2. What application changes need to be made to accommodate using a Cosmos DB database with MongoDB API? Be specific about the impact of the change on their application code.

  3. How would you handle importing their existing data into Azure Cosmos DB? What factors do you need to consider when doing the import?

Serverless architecture

  1. What serverless technologies would you recommend Best For You Organics Company use for automating their order processing?

  2. How would you recommend the customer handle notifying customers that their order has been processed? Are there specific Azure services that can be used?

Identity management

  1. How would you recommend Best For You Organics Company implement identity management in their customer-facing application? Be specific about both the implementation and process you would use to gain Best For You Organics Company's acceptance of the proposed solution.

Search integration

  1. How could Azure Cognitive Search be integrated into the OSS application?

DevOps workflows

  1. How can Jenkins be used to help the customer create a full CI/CD pipeline?

Prepare

Directions: With all participants at your table:

  1. Identify any customer needs that are not addressed with the proposed solution.

  2. Identify the benefits of your solution.

  3. Determine how you will respond to the customer's objections.

Prepare a 15-minute chalk-talk style presentation to the customer.

Step 3: Present the solution

Outcome

Present a solution to the target customer audience in a 15-minute chalk-talk format.

Timeframe: 30 minutes

Presentation

Directions:

  1. Pair with another table.

  2. One table is the Microsoft team and the other table is the customer.

  3. The Microsoft team presents their proposed solution to the customer.

  4. The customer makes one of the objections from the list of objections.

  5. The Microsoft team responds to the objection.

  6. The customer team gives feedback to the Microsoft team.

  7. Tables switch roles and repeat Steps 2-6.

Wrap-up

Timeframe: 15 minutes

Directions: Tables reconvene with the larger group to hear the facilitator/SME share the preferred solution for the case study.

Additional references

Description Links
Azure Cosmos DB API for MongoDB https://docs.microsoft.com/azure/cosmos-db/mongodb-introduction/
Migrate MongoDB to Azure Cosmos DB's API for MongoDB online using DMS https://docs.microsoft.com/azure/dms/tutorial-mongodb-cosmos-db-online
Migrate MongoDB to Azure Cosmos DB's API for MongoDB offline using DMS https://docs.microsoft.com/azure/dms/tutorial-mongodb-cosmos-db?toc=/azure/cosmos-db/toc.json
Azure Container Registry https://azure.microsoft.comservices/container-registry
Azure functions https://docs.microsoft.com/azure/azure-functions
Logic Apps https://docs.microsoft.com/azure/logic-apps/logic-apps-what-are-logic-apps
Azure AD B2C https://docs.microsoft.com/azure/active-directory-b2c/active-directory-b2c-overview
Cosmos DB https://docs.microsoft.com/azure/cosmos-db
Deploy to Azure App Service using Jenkins plugin https://docs.microsoft.com/azure/jenkins/deploy-jenkins-app-service-plugin
Create Jenkins server in Azure https://docs.microsoft.com/en-us/azure/jenkins/install-jenkins-solution-template
Azure Cognitive Search in Node.js https://docs.microsoft.com/azure/search/search-get-started-nodejs
Visual Studio (VS) Code for OSS https://code.visualstudio.com/docs/nodejs/reactjs-tutorial
Web App for containers https://azure.microsoft.com/blog/webapp-for-containers-overview/

OSS PaaS and DevOps whiteboard design session trainer guide

Step 1: Review the customer case study

  • Check in with your table participants to introduce yourself as the trainer.

  • Ask, "What questions do you have about the customer case study?"

  • Briefly review the steps and timeframes of the whiteboard design session.

  • Ready, set, go! Let the table participants begin.

Step 2: Design a proof of concept solution

  • Check in with your tables to ensure that they are transitioning from step to step on time.

  • Provide some feedback on their responses to the business needs and design.

    • Try asking questions first that will lead the participants to discover the answers on their own.
  • Provide feedback for their responses to the customer's objections.

    • Try asking questions first that will lead the participants to discover the answers on their own.

Step 3: Present the solution

  • Determine which table will be paired with your table before Step 3 begins.

  • For the first round, assign one table as the presenting team and the other table as the customer.

  • Have the presenting team present their solution to the customer team.

    • Have the customer team provide one objection for the presenting team to respond to.

    • The presentation, objections, and feedback should take no longer than 15 minutes.

    • If needed, the trainer may also provide feedback.

Wrap-up

  • Have the table participants reconvene with the larger session group to hear the facilitator/SME share the following preferred solution.

Preferred target audience

Holly Franklin, CIO of Best For You Organics Company

The primary audience is business and technology decision-makers. Usually, we talk to the infrastructure managers who report to the chief information officer (CIO), or to application sponsors (i.e., VP-line of business [LOB], chief marketing officer [CMO]), business unit IT personnel, or developers that report to application sponsors.

Preferred solution

After reviewing the available options for transitioning their applications to a cloud offering that integrates with open-source software (OSS), Holly Franklin and the Best For You Organics engineering team found that Microsoft Azure was the best choice. Many cloud options do not offer the infrastructure to support OSS systems, but Azure's support for and integration with most open source solutions made the company's plan not only possible but also easy. Once implemented, with open-source software and the fixed cost of Azure, cost planning would become more straightforward, which means business forecasting would become easier and much more accurate.

High-level architecture

  1. Without getting into the details, (the following sections will address them), diagram your initial vision for handling the top-level requirements for the OSS app migration, serverless architecture integration, search integration, Azure AD B2C implementation, and DevOps pipeline. You will refine this diagram as you proceed.

    This diagram consists of icons that are connected by arrows. On the left, the Developer icon (VS Code) points in a linear fashion to GitHub Repo and Jenkins icons. The previous two icons are enclosed in a box labeled CI/CD Pipeline. Jenkins points to Web App for Containers on the right. Various arrows point from Web App for Containers to Azure Container Registry (a linear arrow points from Azure Container Registry to Web App for Containers), Logic Apps (a linear arrow that points from Logic Apps to a mobile device/computer, which points to Azure AD B2C (a double-sided arrow), which points back to Web App for Containers (a double-sided arrow); Azure Cognitive Search (a linear arrow); and Azure Cosmos DB (a double-sided arrow). Azure Cosmos DB points at Azure Functions (a double-sided arrow), which points at 3rd Party Gateway (a linear arrow).

    From a high level, developers package the entire OSS application inside a custom Docker container using VS Code or another editor. The container image is pushed to an Azure Container Registry as part of a continuous integration process using GitHub and Jenkins. This Docker image is then be deployed to a Web App for Containers instance, as part of their continuous delivery process using Jenkins with the Azure App Service Jenkins plugin.

    The MongoDB database is migrated to Azure Cosmos DB using Azure Database Migration Service to perform an online (minimal downtime) or offline (one-time) migration of the database from the on-premises instance of MongoDB to Azure Cosmos DB's API for MongoDB. Another option for smaller databases, is to use mongoimport or mongorestore. Access to the database from the application continues to use the MongoDB APIs. Database connection strings in the application are updated to point to the new Cosmos DB.

    Serverless architecture is applied to order processing and customer notifications. Azure Functions are used to automate the processing of orders, billing credit cards, and updating the database as order processing is completed. Logic Apps are applied to send SMS notifications via a Twilio connector to customers, informing them that their order has been processed and shipped. Azure Search is integrated into the application to provide enhanced search functionality.

    Identity management for the application is handled via Azure Active Directory B2C. AAD B2C is used for both sign-up and sign in actions, and to secure access to the containerized web app.

PaaS solution

  1. What PaaS solution would you propose to Best For You Organics Company for moving their application into Azure? Will this solution minimize the number of application code changes required to migrate the application? How with container orchestration be handled?

    Azure App Service on Linux and Web App for Containers would be possible options for Best For You Organics Company. Both were designed to support OSS workloads inside Azure App Service. Azure App Service on Linux provides multiple built-in images, catering to developers who want to use FTP or GIT, deploy .NET Core, Node, PHP, or Ruby applications to Azure App Service running on Linux. Web App for Containers provides developers more control over the packages, runtime frameworks, and tooling using custom Docker images.

    Considering Best For You Organics' desire to reuse as much code and architecture as possible, along with their previous experience with Docker, Web App for Containers would provide the best approach to quickly and easily migrating their application to Azure. Using Web App for Containers would enable Best For You Organics' to reuse most, if not all, of their existing code and architecture. The development team only needs to create a custom Docker image for their application and upload that to their registry.

    Web App for Containers was designed leveraging years of Microsoft's Azure App Service PaaS innovations, and it allows developers to focus on composing their containers without worrying about managing and maintaining an underlying container orchestrator. Container orchestration is obfuscated away from developers and handled as part of the managed services.

  2. Describe the scalability, high-availability, and performance options that are open to Best For Your Organics Company with the PaaS solution you proposed above.

    By using Azure Web Apps in multiple North American regions, we can meet the high-availability needs of Best For You Organics Company. They could deploy Web Apps into several paired regions to ensure failover capabilities. Also, this approach provides web front-ends close to current and future customers.

    Configuring web apps to scale is simple using Azure App Services. A set of criteria is easy to define, and then Azure handles the hard work of ensuring that the web app is always responsive. Administrators can easily complete this set of steps based on a few different metrics, such as CPU or memory.

    Using an Azure CDN Standard or Premium from Verizon, we can pre-load files into nodes that are located closer to customers. This ensures that the load times for static content will be less than if they were served directly by the web application. All static content will be preloaded, including images and PDFs, among other items on the site.

  3. What options does the customer have for a Docker image registry? Which option would you recommend?

    The image registry is core to the CI/CD workflow. It must be a production-worthy implementation, as it is the source of container images, versioning, deployment, upgrade, and rollback strategies. Registry images can also be used for cross-environment promotion (between development, test, staging, and production, for example).

    The two most feasible options for the customer's container registry are Azure Container Registry (ACR) or a private Docker Hub. You could also deploy and manage your own Docker Registry in an Azure VM, but given customer's desire to move away from managing infrastructure, this would not be recommended.

    We recommend the use of Azure Container Registry, where possible, for Azure solutions.

    Using Azure container registry provides the following advantages over DockerHub:

    • Network-close deployment: Network-close deployment is one of the primary reasons for using a private container registry. By creating your container registry in the same Azure region in which you deploy containers, you can help lower both network latency and egress fees.

    • Geo-replication: Azure Container Registry's geo-replication feature can be used if deploying containers to multiple regions. Using this feature, you can simplify registry management and minimize latency.

    • Repository namespaces: By leveraging repository namespaces, you can allow sharing a single registry across multiple groups within your organization.

Database migration

  1. What service would you recommend for hosting Best For You Organics Company's MongoDB in Azure, and ensuring they can continue to use the MongoDB API for accessing their data?

    Azure Cosmos DB databases can be used as the data store for apps written for MongoDB. This functionality means that by using existing drivers, your application written for MongoDB can now communicate with Azure Cosmos DB and use Azure Cosmos DB databases instead of MongoDB databases. Using this functionality, you can easily build and run MongoDB database applications in the Azure cloud with Azure Cosmos DB's global distribution and comprehensive industry-leading SLAs, while continuing to use familiar skills and tools for MongoDB.

  2. What application changes need to be made to accommodate using a Cosmos DB database with MongoDB API? Be specific about the impact of the change on their application code.

    In many cases, you can switch from using MongoDB to Azure Cosmos DB by simply changing a connection string. You can use your existing MongoDB expertise, application code, and tooling as Azure Cosmos DB implements the MongoDB 3.4 (version 5) wire protocol and supports the MongoDB aggregation pipeline. You can develop applications using MongoDB, and deploy them to production using the fully managed, and globally distributed Azure Cosmos DB service. In other words, your application only knows that it's connecting to a database using MongoDB APIs. It is transparent to the application that the data is stored in Azure Cosmos DB.

  3. How would you handle importing their existing data into Azure Cosmos DB? What factors do you need to consider when doing the import?

    The MongoDB database can be migrated to Azure Cosmos DB using Azure Database Migration Service (DMS). DMS allows for both online (minimal downtime) and offline (one-time) migration of the database.

    Another option that could be used for smaller databases is to import data from MongoDB into Azure Cosmos DB using either mongoimport.exe or mongorestore.exe, both available from the MongoDB Download Center. With either, you will need to retrieve your Cosmos DB connection string information (host, port, username, and password) to complete the import.

    Things to consider:

    • Throughput: The duration of your data migration depends on the amount of throughput you set up for your collections. For larger data migrations, you should increase the container throughput in Cosmos DB to speed up the process. After the migration is complete, you can decrease the throughput to save costs.

    • SSL: Azure Cosmos DB has strict security requirements and standards. Be sure to enable SSL when you interact with your account.

Serverless architecture

  1. What serverless technologies would you recommend Best For You Organics Company use for automating their order processing?

    They should use Azure Functions for automating their order processing.

    A Function with an Azure Cosmos DB trigger could be used to queue up new orders for processing as they are received. A second Function could handle processing the items in the queue and ensuring the orders are updated when processing is completed.

    Azure Storage Queues should be used as the queueing technology. Given the customers need to process orders daily, the lifetime of the messages in the queue will be less than a day; should the queue fail, a subsequent worker can continue from where the prior worker left off. They do not require some of the more advanced queueing features offered by Service Bus.

    Arrows that point right connect four icons, which are labeled Change feed stream from Azure Cosmos DB, Azure Cosmos DB trigger, Azure Function, and Output.

  2. How would you recommend Best For You Organics Company handle notifying customers that their order has been processed? Are there specific Azure services that can be used?

    Logic Apps can be used to send SMS messages via Twilio to customers.

    Best For You Organics Company can implement a Logic App to notify customers of their order status. The logic app would include an Azure Queue trigger linked to the notification queue populated by one of their Azure Functions, which would trigger whenever an order is finished processing, and a notification queue item is added.

    A Twilio connector could act as the action to perform, which sends an SMS message when the trigger fires. The Best For You Organics Company would sign up for a Twilio account to get an API key, and would then provision a Twilio connector within the logic app, and add the credentials. Next, they would select a Send Message action using data provided in the queue message, specifically the customer's phone number and first name to include in the message, such as "Hello Steve, your Best For Your Organics weekly order has shipped!"

    Arrows that point right connect three icons, which are labeled Trigger, Azure Function, and Output. Two arrows point to and from the Azure Function icon and the Azure Cosmos DB input binding icon below.

Identity management

  1. How would you recommend Best For You Organics Company implement identity management in their customer-facing application?

    Best For You Organics Company could leverage Azure Active Directory Business to Consumer (B2C) to manage their customer's usernames and passwords. They would need to provision an Azure Active Directory B2C instance within their Azure subscription. AAD B2C provides a highly available, global identity management service for customer-facing applications, which can be easily integrated into mobile and web platforms.

    For web apps (including .NET, PHP, Java, Ruby, Python, and Node.js) that are hosted on a server or in a container, and accessed through a browser, Azure AD B2C supports OpenID Connect for all user experiences. This includes sign-in, sign-up, and profile management. In the Azure AD B2C implementation of OpenID Connect, your web app initiates these user experiences by issuing authentication requests to Azure AD.

Search integration

  1. How could Azure Cognitive Search be integrated into the OSS application?

    The search index would be built on the meal option data stored in Cosmos DB. The Best For You Organics team could then create a Node.js API App, secured by Azure AD B2C, which wraps the Azure Cognitive Search API. To perform a search, a browser loads the web page on a device and makes a cross-origin XmlHttpRequest to the API app. Meals and plan options matching the search terms are returned, with HTML and CSS formatting embedded, so the text that matches the search query is highlighted in the displayed results.

DevOps workflows

  1. How can Jenkins be used to help the customer create a full CI/CD pipeline?

    Web Apps for Containers not only adds the power of Microsoft Azure to your application, such as security, load balancing, auto-scaling, and automated management, but also allows you to take advantage of its DevOps capabilities, such as continuous deployment from Jenkins, GitHub, Docker Hub, and other sources, package management, staging environments, custom domain, and SSL certificates.

    Using the Azure App Service Jenkins plugin, you can automate your deployments so that you can deliver your apps/services easily and often. You can set up a CI/CD process all in Azure DevOps. However, if you already have a CI pipeline with a third-party tool, such as Jenkins, you can continue to use those tools to implement your CI/CD pipeline.

    Using the customer's existing Jenkins server and build pipeline, they could add a post-build action to publish an Azure Web App. Using the Azure App Service plugin for Jenkins, you can build and deploy a docker container to the App Service underlying the Web App for Containers in Azure.

Checklist of preferred objection handling

  1. Is Azure an appropriate platform for hosting an OSS application using PaaS?

    Yes. If you're an OSS developer, Azure offers more than you might expect, from virtual machines to managed services, functions, and containers. With Azure, you get full-stack capabilities, including:

    • Integration with popular, and free, open-source tools such as Visual Studio Code.
    • Monitoring services with Application Insights to catch bugs, optimize apps, and stay on top of their status.
    • Comprehensive managed database support with Cosmos DB (compatible with MongoDB), MySQL, and PostgreSQL.
    • Support for a variety of platforms and frameworks to help with both new microservices-based apps and existing apps.
    • Global, trusted cloud infrastructure.
  2. We're interested in using containers but not sure how they work in Azure. Does Azure provide reliable ways to deploy and manage containers? If so, what is the simplest way to move them to Azure based on our PaaS experience, while at the same time considering our scale and growth requirements?

    Microsoft Azure provides integrated tools for developing and managing containerized applications faster. Deploy containers using widely adopted orchestrators or choose a fully-managed container platform. Take advantage of Visual Studio Tools for Docker to easily develop, run, and debug multi-container applications, and store images in Docker Hub or Azure Container Registry and deploy to your preferred targets.

    Azure Container Registry (ACR) is a private registry for hosting container images. Using the Azure Container Registry, you can store Docker-formatted images for all types of container deployments. Azure Container Registry integrates well with orchestrators hosted in Azure Container Service, including Docker Swarm, DC/OS, and Kubernetes. You don't have to learn new APIs or commands. Because Azure Container Registry is compatible with the open-source Docker Registry v2, you can use the same open-source Docker CLI tools you already know and the skills you have to interact with the registry efficiently.

    Microsoft designed Web App for Containers specifically for customers interested in bringing their Docker formatted containers to the Azure App Service platform. Web App for Containers provides an ideal environment for running OSS web apps that do not require extensive infrastructure control, allowing customers to use their containers, and deploy them to App Service as a web app running on Linux. Like the Web App solution, this eliminates time-consuming infrastructure management tasks during container deployment, updating, and scaling to help developers focus on coding and getting their apps in front of more end-users faster. This also provides integrated CI/CD capabilities with DockerHub, Azure Container Registry, and Azure DevOps, as well as built-in staging, rollback, testing-in-production, monitoring, and performance testing capabilities to boost developer productivity.

    This solution also allows organizations to take advantage of built-in auto-scaling and load balancing. Automatically scale vertically and horizontally based on application needs. Granular scaling rules are available to handle peaks in workload automatically while minimizing costs during off-peak times. Deploy data and host services across multiple locations with just a few mouse clicks.

  3. We would like to improve our current DevOps processes. What options are available in Azure? Can we implement a CI/CD pipeline? Can we continue to use Jenkins? Does Azure offer any value-added services which we can leverage in our Jenkins CI/CD pipeline?

    Jenkins integrates seamlessly with Azure DevOps and other Azure services, making it easy to use Jenkins and Azure DevOps to create a full CI/CD pipeline. Using the Jenkins Team Foundation Server (TFS) plugin, we can configure a project to pull from GitHub, build in Jenkins, and deploy with Azure DevOps. For teams already using Jenkins, the Azure App Service Jenkins plugin can be used to deploy directly to Azure App Service.

    Using Web App for Containers, you can streamline CI/CD with Docker Hub, Azure Container Registry, and GitHub. Automate and simplify your container image deployments through continuous integration/continuous deployment (CI/CD) capabilities with Docker Hub, Azure Container Registry, and Azure DevOps. App Service creates an association with the selected repository, so your apps are updated each time your source code changes. Schedule performance and quality tests in staging environment, and use deployment slots to swap staging to production in seconds, or roll back to previous versions without downtime.

  4. We've heard about Azure Active Directory B2C to manage application users, but we are not sure how that would work with our open-source application.

    Azure AD B2C is a highly available, global identity management service for customer-facing applications that scales to hundreds of millions of identities. It can be easily integrated across mobile and web platforms. Your customers can log on to all your applications through fully customizable experiences by using their existing social accounts or by creating new credentials.

    • Protect your consumer's identities
    • Login with social media accounts
    • Customizable user experiences
    • Pay only for what you use

    For web apps (including .NET, PHP, Java, Ruby, Python, and Node.js) that are hosted on a server or in a container, and accessed through a browser, Azure AD B2C supports OpenID Connect for all user experiences. This includes sign-in, sign-up, and profile management. In the Azure AD B2C implementation of OpenID Connect, your web app initiates these user experiences by issuing authentication requests to Azure AD.

  5. Is Azure Cognitive Search an appropriate solution for improving the search capabilities of our OSS app?

    Yes. Microsoft Azure Cognitive Search is capable of integration into OSS applications. Azure Cognitive Search is a search-as-a-service solution that allows developers to embed a sophisticated search experience into web and mobile applications without having to worry about the complexities of full-text search and without having to deploy, maintain or manage any infrastructure. With Azure Cognitive Search, you can surface the power of searching data in your application, reduce the complexity around managing and tuning a search index, and boost development speed using familiar tools and a consistent platform.

    Azure Search Features:

    • Powerful, reliable performance.
    • Connect business goals to the application.
    • Scale-out easily.
    • Sophisticated search functionality.
    • Fast time to market.
    • Simplify search index management.
    • AI-enabled enrichments.
  6. We no longer want to maintain VMs for running our MongoDB database. Does Azure offer a solution that will allow us to continue using the MongoDB APIs while benefiting from the scalability and reliability of a PaaS database platform?

    You can use your existing MongoDB expertise, application code, and tooling as Azure Cosmos DB implements the MongoDB 3.4 (version 5) wire protocol and supports the MongoDB aggregation pipeline. You can develop applications using MongoDB, and deploy them to production using the fully managed, and globally distributed Azure Cosmos DB service. In other words, your application only knows that it's connecting to a database using MongoDB APIs. It is transparent to the application that the data is stored in Azure Cosmos DB.

    By using Azure Cosmos DB for MongoDB applications, you get the following benefits:

    • Elastically scalable throughput and storage: Azure Cosmos DB supports MongoDB collections that can scale to virtually unlimited storage sizes and provisioned throughput. You can elastically scale Azure Cosmos DB with predictable performance seamlessly as your application grows.
    • Multi-region replication: Azure Cosmos DB transparently replicates your data to all regions you've associated with your MongoDB account. This enables you to develop applications that require global access to data while providing trade-offs between consistency, availability, and performance, all with corresponding guarantees. Azure Cosmos DB provides transparent regional failover with multi-homing APIs, and the ability to scale throughput and storage across the globe elastically.
    • No server management: You don't have to manage and scale your MongoDB databases. Azure Cosmos DB is a fully managed service, which means you do not have to manage any infrastructure or Virtual Machines yourself.
    • Tunable consistency levels: Select from five well-defined consistency levels to achieve the optimal trade-off between consistency and performance.
    • Automatic indexing: By default, Azure Cosmos DB automatically indexes all the properties within documents in your MongoDB database, and does not expect or require any schema or creation of secondary indices.
    • Enterprise-grade: Azure Cosmos DB supports multiple local replicas to deliver 99.99% availability and data protection in the face of local and regional failures. Azure Cosmos DB has enterprise-grade compliance certifications and security features.
  7. We would like to understand more about the benefits of a serverless architecture. In Azure, does it mean only using Azure Functions, or is there more to it?

    A Serverless Architecture, as the name implies, aims to provide a solution architecture where concern for individual servers is minimized. While the term "Serverless" has varying interpretations, it typically includes the following characteristics:

    • Extensive use of ephemeral services, including and especially the processing capability (e.g., it can be started nearly instantaneously without pre-provisioning on your part)

    • Focus entirely on scaling the capabilities that support the business logic

    • Capability is scaled transparently at a very granular level (e.g., scaling occurs on a per request or function invocation basis and not on an all-up server load basis)

    • Cost is typically associated with time spent supporting business logic computation, not on the time server resources are available to handle requests

    In Azure, Functions are a prime component of a serverless architecture, but not the only service that may be utilized in one. Other Azure Services that, by this definition, can be composed into a serverless architecture include Logic Apps, Azure Storage Blobs, Tables and Queues, Azure Data Lake Store, API Management, CDN, Media Services, Notification Hubs, IoT Hub, and Service Bus.

  8. We've read that Visual Studio Code is a free, open-source code editor that can be used for OSS development. Can our developers continue to use their IDE, or do they need to switch over to using VS Code to write code destined for the Azure platform? Does VS Code offer any features or integration capabilities that would make it advantageous over a non-Microsoft code editor?

    Development teams that prefer to use their existing tools for building Azure applications can continue to do so. Popular code editors, like WebMatrix and IntelliJ, offer integration with Microsoft Azure and Azure DevOps, allowing developers to easily create, develop, test, and deploy Azure applications.

    Visual Studio Code is a lightweight open-source code editor that runs on your desktop and is available for Windows, macOS, and Linux. At its heart, VS Code features a lightning-fast source code editor with support for hundreds of languages. VS Code helps developer productivity with syntax highlighting, bracket-matching, auto-indentation, box-selection, snippets, and more.

    For serious coding, you'll often benefit from tools with more code understanding than just blocks of text. Visual Studio Code includes built-in support for IntelliSense code completion, rich semantic code understanding and navigation, and code refactoring. It also includes an interactive debugger, so you can step through source code, inspect variables, view call stacks, and execute commands in the console.

    VS Code features rich integration with build and scripting tools to perform common tasks making everyday workflows faster, including an integrated terminal, which allows developers to stay within the development environment to perform quick command-line tasks. The VS Code Extension Marketplace lets you add languages, debuggers, and tools to your installation to support your development workflow, allowing VS Code to be tailored to your specific development needs and preferences.

Customer quote (to be read back to the attendees at the end)

"The successful and seamless transition of our OSS application to Microsoft Azure demonstrates the flexibility and range of Azure's capabilities. Without being tied to a sunk cost in an enterprise system, this open-source on Azure model provides us with the flexibility to address future business needs."

Holly Franklin, CIO of Best For You Organics Company