• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
C fowler azure-dojo
 

C fowler azure-dojo

on

  • 975 views

Migrating an Application to Windows Azure

Migrating an Application to Windows Azure

Statistics

Views

Total Views
975
Views on SlideShare
975
Embed Views
0

Actions

Likes
0
Downloads
1
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    C fowler azure-dojo C fowler azure-dojo Presentation Transcript

    • Migrating an Application toWindows AzureCloud Dojo
    • I’m all in.Cory FowlerConsultant, ObjectSharpMicrosoft MVP, Windows Azure@SyntaxC4http://blog.syntaxc4.net gettag.mobi
    • Starter Site: Nerd Dinner ASP.NET MVC SQL Server Entity Framework IIS
    • Resulting Site: Nerd Dinner ASP.NET MVC SQL AzureEntity Framework Windows AzureWindows Identity Foundation
    • A Quick word on Tools
    • Alright, Let’s do this…
    • Windows Azure!!!
    • Windows Azure Compute JIT Knowledge
    • A Hosted Service is a container for an Application. An Application must consist of at least one Role. A Role is Scalable to meet the demand of traffic.
    • Role Role Role Web Worker VM ASP.NET Long Running Windows Server WCF Process 2008 R2 Fast CGI Emulates Windows Customized Guest OS Services Emulates IIS
    • Application Roles Web Site Web Site Back-End Web SiteWeb Site Admin Site Services [Web Role] [Worker Role] [VM Role]
    • Convert your Web Application To a Web Role
    • Add Cloud Project1. Right-Click on Solution File.2. Hover over Add Menu Item.3. Click New Project.4. Select your Language of Choice.5. Select Cloud.6. Name your Project and hit OK.
    • Azurify your Web Application1. Right-Click on Web Project2. Click Manage NuGet Packages3. Filter using Azure Web Role4. Install Windows Azure Web Role Or1. Open Package Manager Console2. TypeInstall-Package WindowsAzure.WebRole-ProjectName NerdDinner PM>
    • Associate your Web & Cloud Projects 1. Right-Click on Roles Folder in Cloud Project. 2. Click Web Role Project in Solution. 3. Select the Nerd Dinner Project from the Dialog. 4. Click OK.
    • What did I just do…? JIT Knowledge
    • Cloud ConfigurationServiceDefinition.csdef[Life-Time]ServiceConfiguration.cscfg[Modifiable]
    • Service Definition<?xml version="1.0" encoding="utf-8"?><ServiceDefinition name="ExploringServiceDefinition"xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition"> <WebRole name="" vmsize="ExtraSmall" enableNativeCodeExecution="true"> <!-- ... --> </WebRole> <WorkerRole name="" vmsize="ExtraSmall"> <!-- ... --> </WorkerRole> <VirtualMachineRole name="" vmsize="ExtraSmall"> <!-- ... --> </VirtualMachineRole></ServiceDefinition>
    • Service Configuration<ServiceConfiguration serviceName="NerdDinner.Cloud" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="2" osVersion="*"> <Role name="MvcWebRole1"> <Instances count="1" /> <ConfigurationSettings> <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true" /> </ConfigurationSettings> </Role></ServiceConfiguration>
    • public class WebRole : RoleEntryPoint{ WebRole.cs // Included in Both Web and Worker Role Template public override bool OnStart() { RoleEnvironment.Changing += RoleEnvironmentChanging; return base.OnStart(); } // Included in Worker Role Template - Still available in Web Role but needs to be overridden public override void Run() { base.Run(); } // Not Included but available in Web and Worker Roles public override void OnStop() { base.OnStop(); } // Is not generated ANYWHERE but SHOULD be Implemented private static void RoleEnvironmentChanging(object sender, RoleEnvironmentChangingEventArgs e) { // If a configuration setting is changing if (e.Changes.Any(change => change is RoleEnvironmentConfigurationSettingChange)) e.Cancel = true; // Set e.Cancel to true to restart this role instance }}
    • Prepare your Database For SQL Azure
    • SQL Azure  Tables, indexes and views  Stored Procedures1GB, 5GB 10-50GB  Triggers  Constraints  Table variables, session temp tables (#t)Web Edition Business Edition  Spatial types, HierarchyId  Data Types Feature Set  XML, Sparse Columns, Filestream  Partitions  Full-text indexes  SQL-CLR
    • Attach NerdDinner Database1. Open SQL Server Management Studio (SSMS)2. Connect to .SQLExpress3. Right-Click on Databases4. Click Attach…5. Find NerdDinner.mdf in App_Data6. Click OK
    • Generate Scripts for SQL Azure 1. Right-Click Attached NerdDinner Database 2. Click Tasks 3. Click Generate Scripts… 4. Change Database Engine Type to SQL Azure 5. Click OK 6. Click Finish
    • Connect to SQL Azurehttps://<servername>.database.windows.net [SSMS]
    • Create SQL Azure DatabaseNew-SqlAzureServer -SubscriptionId 1. Sign in to Windows Azure Portal -Certificate 2. Open SQL Azure Section -AdministratorLogin 3. Create Server -AdministratorLoginPassword a) Select Region -Location b) Create Administration Credentials c) Add Firewall Rules 4. Create Database a) Enter Database name b) Click OK 5. Copy Connection String from Properties Powershell for Firewall Rules: http://bit.ly/qCvdpN
    • Run the NerdDinner Scripts1. Open [ File | Script ] NerdDinner.sql2. Execute Script
    • Cloud Aware Configuration web.config ConnectionStringResolver .Create() .WithCloudConnectionStringName ("NerdDinnerEntities") .WithLocalConnectionStringName ("NerdDinnerEntities") Cloud .ConnectionStringService .cscfg Get it on GitHub: http://bit.ly/r7Hvj0
    • A Quick Note on Data MigrationToolsDTS Wizard (SSIS)http://bit.ly/gzLsl9BCP Utilityhttp://bit.ly/bQdAInImport/Export[Blog on Import/Export CTP] SQL Azure Data Sync
    • What About AuthN?SQL Azure Windows Azure Storage Claims Based
    • SQL Membership ApproachPM> Install-Package System.Web.Providers Remember aspnet_regsql?Download the Updated SQL Azure supported Scripts http://bit.ly/gB5DIt
    • Windows Azure Storagehttp[s]://account.*.core.windows.net Account Container Item images BLOB Storage NerdDinner Blobs videos locations TABLE Storage NerdDinner Entities dinners rsvp QUEUE[S] Storage NerdDinner Messages resize
    • ** Experimental ** Windows Azure Storage Membership Approach<membership defaultProvider="TableStorageMembershipProvider"> <providers> <clear /> <add name="TableStorageMembershipProvider“ type="Microsoft.Samples.ServiceHosting.AspProviders.TableStorageMembershipProvider" description="Membership provider using table storage" applicationName="/" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" minRequiredPasswordLength="1" minRequiredNonalphanumericCharacters="0" requiresUniqueEmail="true" passwordFormat="Hashed" allowInsecureRemoteEndpoints="true" /> </providers> </membership> Download ASP.NET Samples: http://bit.ly/pEguoW
    • Claims Based Authentication Windows Azure Access Control Service ACS (v2.0) enables AuthN with:  Active Directory Federation Service [ADFS]  Facebook  Google  LiveID  Yahoo!  WS-Fed  WS-Trust
    • How Does Claims Based AuthN Work? JIT Knowledge
    • Google ID Application 0.2 No Auth 3. Send claimsCustomer Access Control Services 0.3 Redirect to provider
    • 4. Normalize identity Access Control Services 7. Consume identity Your App Claims Framework 6. Send identityCustomer Application
    • ACS Friendly AuthN ScreenChanging this… Into this…
    • Create Access Control Namespace1. Open the Windows Azure Platform Portal2. Select Service bus, Access Control & Caching from the lower left-hand menu3. Click New4. Ensure Access Control is selected 5. Provide a Namespace for your AppFabric Endpoint 6. Click Check Availability 7. Select a Region 8. Click Create Namespace 9. Click on Manage Access Control Service
    • Add an Identity Provider1. Select Identity Provider (IP) i. Google ii. Yahoo!2. Click Next3. Add path to IP Logo4. Click Save
    • Create Relying Party Application1. Enter Name2. Enter Realm [localhost is allowed]3. Enter Return URL [localhost is allowed]4. Select SAML 1.15. Select Identity providers i. Google ii. Windows Live6. Select Create new rule group7. Select Use service namespace certificate
    • Enable Claims-Based AuthN 1. In Visual Studio. Tools > Add STS Reference 2. Ensure the Web.config location is correct 3. Enter the Application UrlRequires Windows Identity Foundation SDK
    • Enable Claims-Based AuthN 4. Select Use an existing STS 5. Login to Windows Azure Portal 6. Navigate to ACS Menu 7. Select AppFabric endpoint 8. Click manage ACS Service 9. Click on Application integration 10. Select & Copy WS-Federation Metadata Url 11. Switch back to Federation Utility 12. Paste Endpoint in Textbox 13. Next through the remainder of the Tool.
    • MVC WS-Federation Fix PM> Install-Package SyntaxC4.WindowsAzure.ACSManagement.Mvc<httpRuntime requestValidationType="SyntaxC4.WindowsAzure.ACSManagement.Mvc.WsFederationRequestValidator" />
    • Include WIF in cspkgCopy Local = True isn’t enough in this caseSpecific Version must be False
    • Home Realm Discovery Wrapped Up! Home Realm Discovery is the act of retrieving a list of the Identity Providers that are available to your application. PM> Install-Package SyntaxC4.WindowsAzure.ACSManagementpublic ActionResult LogOn(){ var manager = new ACSServiceManager("nerddinnerc4", "http://127.0.0.1:81/"); IIdentityProvider[] providers = manager.GetIdentityProviders<IdentityProvider>(); return View(providers);}
    • Create a Custom Login Screen<ul class="login"> <% foreach (var ip in Model) { %> <li class="login-item"> <object data="<%: ip.ImageUrl %>" onclick="javascript:location.href=<%: ip.LoginUrl %>"> <a href="<%: ip.LoginUrl %>" class="login-item-link"> <%: ip.Name %></a> </object> </li> <% } %></ul>
    • To the Cloud!
    • Publish to Windows Azure1. Right-Click on Cloud Project2. Select Publish…3. Select <Add…> from Credentials Dropdown list a) Give Certificate a Friendly Name b) Copy Certificate Path c) Upload Certificate to Management Portal d) Paste SubscriptionId into dialog 4. Select Deployment Environment 5. Select Storage Account 6. Select Cloud Service Configuration 7. Select Release Build Configuration 8. Click Publish
    • Dinner Time!
    • Next Steps…Geo-Distributed Decrease Latency with with Phone App? Windows Azure CDNTraffic Manager
    • Cloudy Reading
    • ResourcesBlog http://blog.syntaxc4.netGitHub http://github.com/syntaxc4Windows Azure Platform Training Kit http://bit.ly/jXfyyDWindows Azure Powershell Cmdlets http://bit.ly/m75gEcWindows Azure Tools http://bit.ly/miooC4Cloud Cover Show http://bit.ly/g4nQbTEssential Resources for Windows Azure http://bit.ly/efmzGo