Giter Site home page Giter Site logo

mcw-app-modernization's Introduction

App modernization

This workshop is archived and no longer being maintained. Content is read-only.

Parts Unlimited is an online auto parts store. Founded in Spokane, WA, in 2008, they are providing both genuine OEM and aftermarket parts for cars, sport utility vehicles, vans, and trucks, including new and remanufactured complex parts, maintenance items, and accessories. Their mission is to make buying vehicle replacement parts easy for consumers and professionals. Parts Unlimited has 185 stores in the US, with plans to scale to Mexico and Brazil.

Parts Unlimited has a hosted web application on its internal infrastructure and using a Windows Server, Internet Information Services (IIS), and Microsoft SQL Server to host the solution. Beyond the initial effort and costs, these applications incur ongoing maintenance costs in hardware, operating system updates, and licensing fees. These maintenance costs make Microsoft Azure App Service an attractive alternative. Their team is looking to migrate Microsoft ASP.NET/ Core applications and any SQL Server databases to Azure App Service and Azure SQL Database. However, they are worried that their application might not be supported. They want to know ahead of time the amount of work required to migrate to Azure. They have a project they want to start with to understand the migration process. They wonder if they can move to the cloud now and migrate their application later. What are the options?

Additionally, Parts Unlimited has plans to increase its marketing investment, currently on hold because of scaling issues. The company is stuck and can't grow without increasing its infrastructure footprint. Their CEO wants to finalize their cloud vs. on-premises decision based on the current migration effort's success. The engineering team is worried about their order processing subsystem. Currently, they have a strongly coupled order processing system that runs synchronously during checkout. When moved to the cloud, they don't want to be worried about their order processing system's scalability. They are looking for a modern approach with the least migration effort possible.

Finally, Parts Unlimited is looking to invest in DevOps practices to decrease human error in deployments. They are looking for options to have a staging environment to test functionality before shipping to production. However, their team does not have any experience in building CI/CD pipelines. They are not sure if this goal is achievable in the short term, and they do not want it to hold up their migration to the cloud.

October 2021

Target audience

  • Application developer

Abstracts

Workshop

In this workshop, you gain a better understanding of the steps involved in modernizing legacy on-premises applications and infrastructure by leveraging cloud services. You see how applications can be assessed and migrate to Azure thanks to Azure Migrate and complimented with modern concepts such as Serverless.

At the end of this workshop, your ability to design and implement a modernization plan for organizations looking to move services from on-premises to the cloud will be improved.

Whiteboard design session

In this whiteboard design session, you work with a group to analyze and design a solution for moving legacy on-premises applications and infrastructure to cloud services. As part of the modernization effort, you will discuss modern concepts such as Serverless.

At the end of this workshop, your ability to design and implement a modernization plan for organizations looking to move services from on-premises to the cloud will be improved.

Hands-on lab

In this hands-on lab, you implement the steps to move a legacy on-premises application to Azure, including upgrading and migrating the database to Azure and updating the application to take advantage of serverless and cloud services.

At the end of this hands-on lab, your ability to build solutions for modernizing legacy on-premises applications and infrastructure using cloud services will be improved.

Azure services and related products

  • App Services
  • Azure Database Migration Service
  • Azure Functions
  • Azure Key Vault
  • Azure Migrate
  • Azure Redis
  • Azure SQL Database
  • Azure Storage
  • Azure Virtual Machines
  • Visual Studio Code

Related references

Help & Support

We welcome feedback and comments from Microsoft SMEs & learning partners who deliver MCWs.

Having trouble?

  • First, verify you have followed all written lab instructions (including the Before the Hands-on lab document).
  • Next, submit an issue with a detailed description of the problem.
  • Do not submit pull requests. Our content authors will make all changes and submit pull requests for approval.

If you are planning to present a workshop, review and test the materials early! We recommend at least two weeks prior.

mcw-app-modernization's People

Contributors

codingbandit avatar danajay avatar daronyondem avatar dawnmariedesjardins avatar ddesjardins2 avatar dzaremba90 avatar emilysaeli avatar givenscj avatar hkamel avatar hopero929 avatar js2lo avatar jstulo avatar kylebunting avatar microsoftopensource avatar msftgits avatar mwasham avatar nilaanl avatar ronnelsantiago avatar sam-rowe avatar timahenning avatar timfrigge avatar waltermyersiii avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mcw-app-modernization's Issues

Access Denied when retrieving policy documents

At the end of Exercise 8 - Task 4 it states "navigate to the Web app URL, and verify you still see data when you select one of the tabs." The information shows up on the tabs correctly. When you click on the details of a policyholder and the link to the pdf, you get the following message:
{ "statusCode": 401, "message": "Access denied due to missing subscription key. Make sure to include subscription key when making requests to an API." }

The issue is with AngularJS file located wwwroot/js/app/PolicyHolderController.js. On line 31 the code looks to be setting all get requests with the API Management Subscription key in the header. That is not happening. Using the browser's developer tools, I see the request and the Ocp-Apim-Subscription-Key is missing. Using fiddler, I confirmed that adding the key-value to the header does work as expected.

Need to update the code to send the Subscription key so that the website functions as expected.

HTTP error 502.5 - Process Failure

We have a Partner who is currently conducting App Moderniztion Workshop https://github.com/Microsoft/MCW-App-Modernization and it has been noticed that there are issues which are reported we are currently unable to get through this issue.

https://github.com/microsoft/MCW-App-modernization/blob/master/Hands-on%20lab/HOL%20step-by-step%20-%20App%20modernization.md#task-5-deploy-the-api-to-azure

Exercise4: Task 5: Step 8

Could you please check on this issue and have this fixed or let us know a workaround on this issue?

HTTP error

Exercise 1 Task 1 - Script has 'N' where not allowed

In front of every single string value within the SQL script to prepare the database for Assessment and Migration, there is a capital N. When copying and pasting, this will cause all kinds of errors and is not easy to recognize if this is your first time running through the Lab.

Please remove each one from the Guide.

Thanks,
Brian

Trial subscriptions

Hi

I'm going to be running this workshop in March. I've seen the hands on lab section says:

Microsoft Azure subscription must be pay-as-you-go or MSDN.
Trial subscriptions will not work.

I was planning on getting Azure Passes for the attendees. I'm not too sure if they fall under trial subscriptions or have the same limitations. Do you know what part of the lab wont work in trial subscriptions, so that I can test that part first with an Azure Pass.

ARM Template Failure on DMS

Upon ARM Template deployment, a single resource failed, contoso-dms. The service does appear in my resource group, but it is not started and the Start Service option is grayed out. I manually deleted the service and installed it following Appendix A, Task 5.

The Raw Error appears below. FWIW, I am using a personal MPN-MSDN subscription.

{
  "code": "DeploymentFailed",
  "message": "At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/arm-debug for usage details.",
  "details": [
    {
      "code": "Conflict",
      "message": "{\r\n  \"status\": \"Failed\",\r\n  \"error\": {\r\n    \"code\": \"ResourceDeploymentFailure\",\r\n    \"message\": \"The resource operation completed with terminal provisioning state 'Failed'.\",\r\n    \"details\": [\r\n      {\r\n        \"code\": \"CustomScriptExtensionFailed\",\r\n        \"message\": \"The provisioning of deployment vm_gexq7z2b74zutv4cjqcusm3s for service /subscriptions/<redacted>/resourceGroups/workshop-day1/providers/Microsoft.DataMigration/services/contoso-dms failed. The Azure Database Migration Service could not be provisioned. An error occured while initializing the service.\\r\\nState was Failed. VM-gexq7z2b74zutv4cjqcusm3s/CustomScriptExtension (Microsoft.Compute/virtualMachines/extensions): VMExtensionProvisioningError - VM has reported a failure when processing extension 'CustomScriptExtension'. Error message: \\\"Finished executing command\\\". Template output evaluation skipped: at least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/arm-debug for usage details.\",\r\n        \"details\": [\r\n          {\r\n            \"code\": \"DeploymentFailed\",\r\n            \"message\": \"The provisioning of deployment vm_gexq7z2b74zutv4cjqcusm3s for service /subscriptions/<redacted>/resourceGroups/workshop-day1/providers/Microsoft.DataMigration/services/contoso-dms failed. State was Failed. VM-gexq7z2b74zutv4cjqcusm3s/CustomScriptExtension (Microsoft.Compute/virtualMachines/extensions): VMExtensionProvisioningError - VM has reported a failure when processing extension 'CustomScriptExtension'. Error message: \\\"Finished executing command\\\". Template output evaluation skipped: at least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/arm-debug for usage details.\"\r\n          }\r\n        ]\r\n      }\r\n    ]\r\n  }\r\n}"
    }
  ]
}

ReadMe page

ReadMe page needs to be updated to new format please.

Add database restoration on SQL 2008 to deployment script

Exercise 1: Task 1: Restore and configure the ContosoInsurance database on the SqlServer2008 VM.

Request from @karlrissland:
Would like this to be automated. Can't see a reason to have someone do this.

Review during next update for adding database restoration to the deployment script for the SQL Server 2008 VM.

Update HTML

Only need the before the lab HTML re-run. I added the MCW header after Michael ran the April/May update HTML script. Thanks

Azure Bastion Service

Azure Bastion Service can be a nice addition to this workshop. As you know Port 3389 blocked by default on most of the corporate networks.

Exercise 3: Task 4: Assign the service principal access to Key Vault - failing with the given command

Exercise 3: Task 4: Step 3:
As per the lab guide, user is asked to run the following command by replacing their key vault name only:
az keyvault set-policy -n --spn http://contoso-apps --secret-permissions get list

But this command gives error if executed by just giving the key vault name. Therefore, we have to replace "http://contoso-apps" with the Application id of the given Service Principal.
This way the command gives desired results.

@timahenning Please look into this as we have Workshop Delivery on 09/12.
Thank You,
Seerat

Bulk Upload using AzCopy

Exercise 6 - Task 3 upload files to Blob Container using AZCopy command line, but steps are incorrect.

AzCopy implementation changed, now implementing new command mode and proposed CLI does not works.

image

January 2020 - content update

This workshop is scheduled for a January 2020 content update. Please review the workshop and provide recommended changes for SME review.

Cognitive Search

Exercise 8 - Task 2 Cognitive Search Indexer fails

Azure Error
Indexing was stopped because the free skillset execution quota has been reached. When no cognitive services subscription is attached to a skillset, only 20 documents can be enriched at a time. To index more documents, attach a cognitive services subscription to your skillset. See https://aka.ms/cog-srch-attach for more information.

Need updated HTML files please

Hey Michael,
I finished editing App modernization. Can you please run the HTML script real quick so I can sent the labs to a partner who's been waiting for it? They're delivering it Monday and need the files ASAP.
Thanks,
Dawnmaire

Exercise 1: Task 1: Step 16 - Configure Firewall for Remote Debugging

Upon selecting Execute from the SSMS toolbar, a "Configure Firewall for Remote Debugging" dialog appears (Figure 1).

I selected the option "Cancel remote debugging". This did not cancel debugging, but I was able to proceed by selecting the Continue option in the Debug menu. I suggest that the instructions make the user aware of the dialog and how to work around the problem.

Figure 1
image

Task 8: Zip file contains paths that are too long

If we follow the instructions to unzip the contents of the file into C:\ContosoInsurance, the extract will fail due to paths being too long. To be honest, it looks like we should maybe cleanup the contents of the zip because the particular file(s) that cause the issue are temp-generated files and don't really need to be part of the solution. (they'll get regenerated on build).
task8
PS - It's also not possible to unzip into the root of C:\ :(

Project does not build

Errors - Contoso.FunctionApp

PolicyDocsFunction.cs - no steps in the HOL for TODO 3 and TODO 4
so this file has errors

Please advise. Urgent.

Thanks

Need update for below steps

  1. In exercise 3 , in lab guide it's mentioned that we have to use user email for key vault access policies but it was not working so i had to use application id to create access policy.
  2. In exercise 9 task 3 , option for profile section is changed
    issues
    issues2

Exercise 7, Task 8: Exception while executing function: PolicyDocs

While the PolicyDocsFunction works on my LabVM, I am experiencing a problem with "Exercise 7, Task 8: Test document retrieval from web app". Please review my notes below and let me know if you have any suggestions. Thanks

In App Insights Live Metrics Stream I see a positive trace:

Trace: PolicyDocs Function received a request for document 'Daugherty-DAU2RFUEF4KR.pdf'.

However this is followed by failures:

Trace: Executed 'PolicyDocs' (Failed, Id=4363d6d8-99ab-4b38-bd0b-671c9263fa0d)
Exception: Exception while executing function: PolicyDocs <--- Invalid URI: The format of the URI could not be determined.

The detailed error stack is shown below. While remote debugging, I can't see values for containerUri, sasToken and uri due to "Cannot obtain value of the local variable or argument because it is not available at this instruction pointer, possibly because it has been optimized away."

Microsoft.Azure.WebJobs.Host.FunctionInvocationException: Exception while executing function: PolicyDocs ---> System.UriFormatException: Invalid URI: The format of the URI could not be determined.

   at System.Uri.CreateThis(String uri, Boolean dontEscape, UriKind uriKind)

   at System.Uri..ctor(String uriString)

   at Contoso.FunctionApp.PolicyDocsFunction.GetDocumentFromStorage(String policyHolder, String policyNumber) in C:\MCW\MCW-App-modernization-master\Hands-on lab\lab-files\src\Contoso.FunctionApp\PolicyDocsFunction.cs:line 45

   at Contoso.FunctionApp.PolicyDocsFunction.Run(HttpRequest req, String policyHolder, String policyNumber, ILogger log) in C:\MCW\MCW-App-modernization-master\Hands-on lab\lab-files\src\Contoso.FunctionApp\PolicyDocsFunction.cs:line 23

   at Microsoft.Azure.WebJobs.Host.Executors.FunctionInvoker`2.InvokeAsync(Object instance, Object[] arguments) in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionInvoker.cs:line 52

   at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.InvokeAsync(IFunctionInvoker invoker, ParameterHelper parameterHelper, CancellationTokenSource timeoutTokenSource, CancellationTokenSource functionCancellationTokenSource, Boolean throwOnTimeout, TimeSpan timerInterval, IFunctionInstance instance) in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionExecutor.cs:line 585

   at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.ExecuteWithWatchersAsync(IFunctionInstanceEx instance, ParameterHelper parameterHelper, ILogger logger, CancellationTokenSource functionCancellationTokenSource) in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionExecutor.cs:line 532

   at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.ExecuteWithLoggingAsync(IFunctionInstanceEx instance, ParameterHelper parameterHelper, IFunctionOutputDefinition outputDefinition, ILogger logger, CancellationTokenSource functionCancellationTokenSource) in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionExecutor.cs:line 468

   at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.ExecuteWithLoggingAsync(IFunctionInstanceEx instance, FunctionStartedMessage message, FunctionInstanceLogEntry instanceLogEntry, ParameterHelper parameterHelper, ILogger logger, CancellationToken cancellationToken) in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionExecutor.cs:line 278

   --- End of inner exception stack trace ---

   at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.ExecuteWithLoggingAsync(IFunctionInstanceEx instance, FunctionStartedMessage message, FunctionInstanceLogEntry instanceLogEntry, ParameterHelper parameterHelper, ILogger logger, CancellationToken cancellationToken) in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionExecutor.cs:line 322

   at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.TryExecuteAsyncCore(IFunctionInstanceEx functionInstance, CancellationToken cancellationToken) in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionExecutor.cs:line 117

Exercise 7: Task 8: Path of the Policy Document doesn't point towards Function App

Hi @DawnmarieDesJardins ,
Can you please look into this and give updates as we have a workshop scheduled soon.

Exercise 6:Task 2: We cannot generate a SAS Token by directly navigating to storage account> shared access signature>Generate SAS Token as the Generate SAS Token is greyed out and gives message on the top as shown in the image below:

image

So now for creating a SAS Token we need to go to Allowed resource type and check Service, Container and Object. Then we will be able to generate the SAS Token.

image

Exercise 7:Task 6: Step 2: To enable application insights for the function app in azure portal we need to follow the following pattern:

image

Exercise 7: Task 8: Step 5: Path of the Policy Document doesn't point towards Function App as shown below-

image

May 2019 Content Update

Hello,
This workshop is scheduled for a May 2019 update. Please review open issue #23 and give your suggested updates for SME review.

Folder Names

HOL folder needs to be Hands-on-lab
WDS folder needs to be Whiteboard design session

Two exercises have same number

Hi,

In Step-by-Step lab guide, I see two exercises have the same number.

Exercise 8: Add Cognitive Search for policy documents

  • Task 1: Add Azure Cognitive Search to Storage account
  • Task 2: Review search results

Exercise 8: Import and publish APIs into APIM

  • Task 1: Import API App
  • Task 2: Import Function App
  • Task 3: Open Developer Portal and retrieve you API key
  • Task 4: Update Web App to use API Management Endpoints

Thanks,
Amit Kumar

No VS2019 installed on the VS2019 VM Images

There's an issue when provisioning VM with VS2019 (latest) using this:

"imageReference": {
"publisher": "microsoftvisualstudio",
"offer": "visualstudio2019latest",
"sku": "vs-2019-ent-latest-ws2019",
"version": "latest"
},

For some reason, VS2019 installed installed:
image

I have submitted a ticket thru Azure Support about this issue. While it will take some time for resolution, the workaround is to use this image:

"storageProfile": {
"imageReference": {
"publisher": "microsoftvisualstudio",
"offer": "visualstudio2019",
"sku": "vs-2019-ent-ws2019",
"version": "latest"
},

I'll submit a PR for this shortly.

Verify links in HOLs

Folder and document names have been updated. Please check your HOL documents for links that use folder names in their path and make sure they are still valid and working.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.