Move to azure

Preview:

DESCRIPTION

 

Citation preview

Move to Azure!FREE MICROSOFT AZURE INFORMATIONAL SESSION

PAUL IRWIN, LEAD SOFTWARE ENGINEER @ FEATURE[23]

About Me

Paul Irwin

Lead Software Engineer at feature[23]

Past experience as lead engineer on Fanatics’ ecommerce platform

Microsoft Certified Solutions Developer: Web Applications

Co-founder of Code on the Beach and Code on the Sea

pirwin@feature23.com

@paulirwin

Code on the Beach

The Beachside Software Engineering Conference

www.codeonthebeach.com

@CodeOnTheBeach

August 8 – 10, 2014

Registration open now at $250

Charles Petzold, Greg Young, and John Papa

World class resort hotel

Beach games and events

Excellent networking

Code on the Sea

The Software Engineering Cruise

www.codeonthesea.com

@CodeOnTheSea

February 28 – March 5, 2015

Registration starting at $650

5 Day Cruise to Bahamas from Jacksonville

Carnival Fascination

Family friendly

Our greatest hospitality conference

Why move to Microsoft Azure?WHAT’S IN IT FOR ME?

Why move to Microsoft Azure?

Per-minute billing: pay only for what you use

Instant provisioning

Insanely scalable

Save on Windows Server, SQL Server, etc. licenses

Less infrastructure maintenance costs

No need to deal with hardware failures

Geographically-distributed High Availability / Disaster Recovery

Tons of built-in APIs and services

Windows Azure Facilities

Inside a Facility

Inside a Container

Moving to Microsoft Azure

Covered today: ASP.NET Apps (WebForms, MVC, Web API, etc.)

Not covered today: PHP, Python, Node.js, Ruby, Java, etc.

Simple apps can usually be moved as-is

Complex apps need architecture thought

Platform-as-a-Service vs Infrastructure-as-a-Service

PaaS vs IaaS

Platform-as-a-Service (PaaS) Pros

Easy to scale

Can be cheaper than IaaS

Feature-rich cloud APIs

No software licenses needed

Cons

Can necessitate re-architecting

Less control

Infrastructure-as-a-Service (IaaS) Pros

Full control

Run any software unmodified

BYO or Per-minute Licenses

Cons

Usually more expensive

Must scale the “old way” or create custom scripts

You still need licenses

Scenario

Employment ASP.NET MVC Web Application in Web Farm

SQL Server database

ASP.NET State Server for Session State

Facebook and Google OAuth sign-in

Lots of CSS, JS, and image content

Windows Scheduled Tasks to inform applicants of new opportunities

MSMQ queue where job applications are received for processing

Job application processor Windows Service

DR datacenter across country

Step 1: Move the SQL Database

Step 1: Move the SQL Database

SQL Server in an Azure Virtual Machine (IaaS solution) Pros

Ultimate power and flexibility

Full feature set

SSIS, SSAS, SSRS, SQL Agent

RDP into the VM for management

No new training required

Easy to set up AlwaysOn/mirroring HA

Option to pay per-minute with SQL Server license included

Cons EXTREMELY expensive if license included and running 24/7

Not as performant as high-end on-prem hardware

Manage updates/service packs manually

Step 1: Move the SQL Database

Azure SQL Database (PaaS solution) Pros

Very affordable (starting at $5/mo)

Scales easily

Built-in High Availability

Auto-management of updates/service packs

No need for Windows Server / SQL Server licenses

Cons

Limited feature set

Limited control over instances

Azure SQL Database Missing Features

• Integration Services

• Analysis Services

• Reporting Services

• SQL Agent

• SQL CLR

• Msdb, model databases

• Traditional Backup/Restore/Attach

• Distributed transactions

• Unlimited DB size

• Windows Authentication

• Extended Events

• FILESTREAM

• File Groups (i.e. ON PRIMARY)

• File management

• Full-text search

• Replication / Mirroring

• Service Broker

• XML Indexing

• “USE [database]” / Cross-DB queries

• Hekaton – In-Memory OLTP (SQL Svr 2014)

Azure SQL Database Features

Just about everything else Tables, indexes, FKs, views, stored procedures, functions, triggers, CTEs,

custom types, TVPs, temp tables, logins/users, etc.

Built-in High Availability Your database synced to multiple nodes with auto failover – for FREE!

Click-to-scale

Latest T-SQL Features i.e. OFFSET/FETCH in SQL Server 2012

REST API for managing databases

CHEAP

Connect to it from elsewhere Via SSMS, SSIS, SSAS, SSRS, SQL Agent, bcp, etc.

SQL Server VM IaaS Pricing

Size CPUs Memory BYO License

Web Edition

Standard Edition

Enterprise Edition

Small 1 1.75GB $66.96 $100.44 $476.16 $1,629.36

Medium 2 3.5GB $133.92 $167.40 $543.12 $1,696.32

Large 4 7GB $267.84 $301.32 $677.04 $1,830.24

X-Large 8 14GB $535.68 $602.64 $1,354.08 $3,660.48

A5 (HM) 2 14GB $297.60 $331.08 $706.80 $1,860.00

A6 (HM) 4 28GB $595.20 $628.68 $1,004.40 $2,157.60

A7 (HM) 8 56GB $1,190.40 $1,257.36 $2,008.80 $4,315.20

Azure SQL Database PaaS Pricing

Database Size Monthly Price

20 MB FREE

100 MB $5.00

1 GB $9.99

5 GB $25.98

10 GB $45.96

50 GB $125.88

100 GB $175.83

150 GB $225.78

> 150 GB * Premium Instance Pricing *

The Amazing NEW Button

Creating a New Azure SQL DB

Subscriptions and Directories

Highest level: Directories Equivalent to Active Directory directories

One is created for you automatically

Can contain multiple Subscriptions

Should be organization-level

Next level: Subscriptions Now must belong to a Directory

Contain multiple Services

Tied to a credit card

Should be used for keeping billing separate

Lowest level: Services Must belong to a Subscription

Changing the Subscription later is not fun

SQL Azure Firewall Rules

Move Your Data/Schema to SQL Azure

1. Entity Framework Migrations

2. “Generate Scripts” from SSMS

3. BCP.exe

4. BACPAC to Blob Storage

5. RedGate SQL Compare and SQL Data Compare

Entity Framework Migrations

Schema and seeded data only

Update-Database -ConnectionStringName ProdForMigrations

Database.SetInitializer(new MigrateDatabaseToLatestVersion(…))

“Generate Scripts” for SQL Azure

BCP.exe to SQL Azure

bcp AdventureWorks2012.Sales.Customer in C:\Users\user\Documents\MoveDataToSQLAzure.txt -c -U username@servername -S tcp:servername.database.windows.net -P password

http://tinyurl.com/azuresqlbcp

BACPAC to Blob Storage

In SSMS: Tasks / Export Data-tier Application / Save to Windows Azure

Save to Blob Storage

Will throw errors on any Azure-incompatible objects

Load BACPAC from Blob Storage into NEW database

http://tinyurl.com/azuresqlbacpac

RedGate Tools

SQL Compare to compare schema

SQL Data Compare to compare table records

Beware of long-connection timeouts!

$495 from www.redgate.com

Step 2: Move the ASP.NET App

Options for Web Hosting in Azure

Azure Web Sites

• PaaS• Cheaper to get started• Supports ASP.NET,

Node.js, PHP, etc.• Simpler to deploy• Less powerful

Azure Cloud Services

• PaaS• Cheaper to scale• Only ASP.NET• Staging/Production VIP

Swap Deployments• Very powerful• RDP into instance(s)• Auto-updated

IIS in a Windows

Server VM• IaaS• Expensive• Full IIS/Windows

Features• Need to manage

Windows Updates, etc.

Azure Cloud Service Web Roles

ASP.NET WebForms, MVC, Web API, WCF, etc.

Provisions a Windows Server VM and deploys your app to IIS

Control over version of Windows Server (IIS) Windows Server 2008 R2, 2012, or 2012 R2

No need to pay for Windows Server license

Staging/Production deployments with VIP Swap

Temporary or persisted local storage

Load balancing built-in

Click-to-scale or Auto-scale

HTTP, HTTPS, or TCP internal/external endpoints

Azure Cloud Service Pricing

Size Name Virtual Cores Memory Price Per Hour Price Per Month

Extra-Small Shared 768 MB $0.02 ~ $15

Small 1 1.75 GB $0.08 ~ $60

Medium 2 3.5 GB $0.16 ~ $120

Large 4 7 GB $0.32 ~ $239

Extra-Large 8 14 GB $0.64 ~ $477

High-Memory A5 2 14 GB $0.35 ~ $261

High-Memory A6 4 28 GB $0.71 ~ $529

High-Memory A7 8 56 GB $1.41 ~ $1,050

www.windowsazure.com/en-us/pricing/details/cloud-services/

Cloud Service Deployment

1. Create an Azure Cloud Service project in your VS sln

2. Add your ASP.NET web site to the Cloud Service project as a Web Role

3. Package your Cloud Service

4. Upload package to Azure, provisions new Staging environment

5. Test staging site at unique URL

6. VIP Swap staging into production (and vice versa)

7. Test production

8. Stop staging environment (save on billing costs)

Creating a Cloud Service

Our Existing Application

Creating a Cloud Service Project

Add Existing Project as Web Role

Choose Web Project as Web Role

Set Scale

Package Cloud Service for Deployment

Deployment Options

Upload to Azure Portal

Uploading a Package

Provisioning Staging Environment

Up and Running

Finding Staging Site URL

Testing Staging

VIP Swap into Production

Test Production

DNS Setup

Cloud Services CNAME only

i.e.: www.myapp.com is CNAME’d to myapp.cloudapp.net

Redirect from myapp.com to www.myapp.com

Web Sites CNAME or A

Must verify domain name with awverify CNAME

Can be finicky!

Delete Staging Environment

Monitoring your Cloud Service

Scaling your Cloud Service

Step 3: Handling Session State

Azure Session State Options

Table Storage

•Cheap•Slower•Scalable•HA built-in•Persisted

SQL Database

•Cheap-ish•Fast-ish•Not as scalable•HA built-in•Persisted

Cache Role

•Costly•Fast•Scalable•HA available•Feature rich•Not persisted

In-Role Cache

•No cost•Fast•Scalable•HA with scale•Feature rich•Not persisted

Enable In-Role Caching

Enable Cache Providers

Set Cache Client Settings

Step 4: Enabling ACS for OAuth

Azure Access Control Service

Provides managed identity federation

Supports Active Directory and OAuth

FREE! Like really, truly FREE!

OAuth Providers: Microsoft Account

Google

Yahoo!

Facebook

Uses Windows Identity Foundation

More info: http://msdn.microsoft.com/library/azure/hh147631.aspx

Overview

Create an ACS Namespace

Manage ACS Namespace

ACS Management Portal

Add Identity Provider(s)

Add Facebook Application

Configured Identity Providers

Add Relying Party Application

Generate Default Rules

Configure WIF

Web.config Changes

More Web.config Changes

[Authorize] Actions

Secure Page Redirect

Sign In at Identity Provider

… and we’re authenticated!

Step 5: Store the Images

Azure Storage Options

Blob•Any binary data•Cheap•Scalable•HA built-in

Table•Structured non-relational data•Cheap•Scalable•HA built-in

Queue•FIFO messages•Cheap•Scalable•HA built-in

SQL•Structured relational data•Pricey•Somewhat scalable•HA built-in

Blob Storage Overview

Any binary data: images, files, disks, backups, etc.

Block blobs: read/write entire blob at once

Page blobs: read/write pages of blob randomly

LRS: Locally-redundant Storage – 3 copies in same facility

GRS: Geographically-redundant Storage – 6 copies in 2 regions

LRS Pricing: 5 to 6.8 cents per GB per month or less

GRS Pricing: 8.5 to 9.5 cents per GB per month or less

New ZRS (Zone-redundant Storage) to match Amazon

Blob Storage Developer Workflow

1. Connection string: UseDevelopmentStorage=true

2. Start debugging, starts storage emulator

3. Test app

4. When ready to deploy, transform connection string

Setting up Blob Storage

Storage Dashboard

Manage Access Keys

Setup Connection Strings

Create a Blob

List Blobs

Get Blob Data

Step 6: Azure CDN for static content

When to use the Azure CDN

Content Delivery Networks efficiently cache static content at edge nodes close to your site viewers

Great for JavaScript, CSS, images, etc.

Well suited for content that doesn’t change often

Helps your app scale

Frees up your web server to do other things

Azure CDN Requirements

Blob Storage CDN Blob container must be publicly available

Blob container must allow anonymous access

Items should be less than 10 GB in size

Cloud Service CDN Content must be under /cdn folder

Cloud Service must be a Production deployment

Content must be available on port 80

Content should be static

Azure CDN Pricing

1 cent per month for every 100k transactions

12 cents per GB transferred per month For North America and Europe; other zones more expensive

Price drops per GB after 10 TB transferred per month

Create New CDN Endpoint

CDN Endpoint Details

Replace Content URLs

Blob storage URL: http://f23azuredemo.blob.core.windows.net/images/Microsoft.png

Equivalent CDN URL: http://az590111.vo.msecnd.net/images/Microsoft.png

Alternatively, create a CNAME DNS entry for your CDN hostname

Step 7: Scheduled Tasks

Azure Scheduler

Allows you to schedule HTTP requests to invoke your code Or post a message to a storage Queue

Scheduled tasks are “jobs”

Jobs are organized into Job Collections

Azure Scheduler Pricing

Free Tier FREE

1 job collection

Up to 5 jobs

Max hourly frequency

Up to 3,600 executions per month

Standard Tier $10/mo

Up to 10 job collections

Up to 50 jobs per collection

Max every minute frequency

Unlimited executions per month

Creating a Job Collection

Creating a Job Collection

Create New HTTP Job

Create New Queue Job

Define a Schedule

Step 8: Move the MSMQ Queue

Scenario

MSMQ queue

Each message is a job application

Service picks up job applications for processing

User

Job Application

MSMQ

Processing Servi

ce

Azure Queue Offerings

Azure Storage Queue 0.5 cents per 100k transactions

7 cents per GB (LRS)

Simple REST API

Max 64KB message size

Leasing to handle service failures

Transaction logging

7-day limit

Batched receive only

Azure Service Bus 1 cent per 10k messages

WCF Integration

Duplicate detection

Transaction support

Can exceed 7 days

Messages should be < 64KB

256 KB message size limit

Guaranteed FIFO

Batched send & receive

Azure Storage Queue Workflow

Posting Messages

1. Create Queue Client

2. Create new CloudQueueMessage

3. Call AddMessageAsync

Receiving Messages

1. Create Queue Client

2. Call GetMessageAsync

3. If null, return or wait to try again

4. Process message however you like

5. Call DeleteMessageAsync

Add Message to Storage Queue

Get Message from Queue

Azure Service Bus Workflow

Prerequisite: Create SB namespace and queue, get credentials

Posting Messages

1. Create Service Bus QueueClient

2. Create new BrokeredMessage

3. Call SendAsync

Receiving Messages

1. Create Service Bus QueueClient

2. Call ReceiveAsync

3. If null, return or wait to try again

4. Process message however you would like

5. Call CompleteAsync on success, or Abandon on failure

Creating a Service Bus Queue

Creating a Service Bus Queue

Configure Service Bus Queue

Add Message to SB Queue

Receive Message from SB Queue

Step 9: Application Processing Service

Scenario

Job Application Processing Service

Windows Service

Takes applications from MSMQ – now Service Bus or Storage Queue

Sends emails to employers, stores data in SQL

Azure Worker Roles

Similar to Cloud Service Web Roles Same instance sizing and pricing

Same scaling options

Same deployment model

Same benefits/tradeoffs

Designed for: WCF services

WF services

while (true) { … }

Add New Worker Role Project

Create New Worker Role Project

Project Structure

Worker Role Lifecycle

bool OnStart() Called when role is started

Load initial state, set options

void Run() This is where your main work happens

while (true) { … }

void OnStop() Called when role is stopping

This can be a manual stop or Windows Updates

Clean up after your service

Max 5 minutes, then terminated

Worker Role RunAsync

Process Queue Messages

Step 10: High Availability and Disaster Recovery

HA and DR: SQL Database

HA Built-in 3 nodes in same facility

One Primary and Two Secondary nodes

Transient failure retry logic required

DR options BACPAC to another data center

Sync data with SSIS (from another server/VM)

RedGate Cloud Services – cloudservices.redgate.com

Backup SQL Database to Blob Storage or Amazon S3

Transactionally-consistent

Set custom retention policy

RedGate Cloud Services Pricing

Backup Frequency Monthly Price

Weekly $2.50

Daily $10.00

2x Daily (12 hrs) $20.00

4x Daily (6 hrs) $40.00

Does not include storage, transaction, or bandwidth costs.

DON’T HAVE A BACKUP STRATEGY!

HA and DR: Azure Storage

HA Built-in LRS: 3 copies of data in same facility

ZRS: 3 copies of data in different facilities, same region

GRS: 6 copies of data, 3 each in 2 regions

DR Options Rely on ZRS or GRS

RedGate Cloud Services – cloudservices.redgate.com

Backup blobs or tables to another blob storage region or Amazon S3

Table backups are compressed JSON

Same pricing as SQL backup

HA and DR: Cloud Services

HA Available Should use at least 2 instances of each web/worker role

99.95% SLA if at least 2 instances

Update domains maintain uptime

DR Options Azure Traffic Manager

Cloud service running in multiple regions

Failover to other region, or load balance (costly)

BYO Traffic Manager

F5, Juniper, etc.

HA and DR: Service Bus Queues

HA Built-in 99.9% monthly SLA

DR Options Persist queue messages elsewhere as backup (blob, table, sql, etc)

Multiple SB namespaces/queues in different regions

Sync queues

Restore queue messages from backup in other region (if needed)

Summary

Summary

The Old Way ASP.NET Web Application

SQL Server Database

ASP.NET State Server

Manual OAuth Wire-up

CSS, JS, Image content in IIS

Windows Scheduled Tasks

MSMQ queue for job applications

Windows service

DR datacenter across country

The Azure Way Cloud Service Web Role

Azure SQL Database

In-Role Distributed Caching

Azure Access Control Service

Azure CDN, Blob Storage

Azure Scheduler

Azure Storage Queue / Service Bus

Cloud Service Worker Role

HA by default, easy DR options

Code Changes

Use only SQL Database features available

Add transient failure retry logic for ADO.NET queries

Add HrdClient for Azure Access Control Service

Rewrite URLs for Azure CDN

Code to read/write images from Blob Storage

Code to handle HTTP or queue message from scheduled task

Handle Storage Queue or Service Bus Queue messages

Move Windows Service code to Worker Role

Azure Features Not Covered

Table Storage

Web Sites

Virtual Machines

Mobile Services

Mobile Push Notifications

HDInsight – Hadoop on Azure

Media Services – Olympics

Service Bus Topics

Service Bus Relays

Service Bus Notification Hubs

Cache Roles

BizTalk Services

Recovery Services

Virtual Networks

Management Alerts

Azure Active Directory

Multi-factor Authentication

Rights management

Add-ons

… and other features added since I made this presentation

Q&A

Recommended