Azure Web SItes - Things they don't teach kids in school - Multi-Mania

Preview:

DESCRIPTION

Microsoft has a cloud platform which runs .NET, NodeJS and PHP. All 101 talks out there will show you the same: it’s easy to deploy, it scales out on demand and it runs WordPress. Great! But what about doing real things? In this session, we’ll explore the things they don’t teach kids in school. How about trying to find out the architecture of this platform? What about the different deployment options for Windows Azure Web Sites, the development flow and some awesome things you can do with the command line tools? Did you know you can modify the automated build process? Join me in this exploration of some lesser known techniques of the platform.

Citation preview

Azure Web SitesThings they don’t teach kids in schoolMaarten Balliauw@maartenballiauw

Who am I?

Maarten Balliauw Antwerp, Belgium Technical Evangelist, JetBrains Founder, MyGet AZUG Focus on web ASP.NET MVC, Azure, SignalR, ... MVP Azure & ASPInsider

Big passion: Azure http://blog.maartenballiauw.be @maartenballiauw Shameless self promotion: Pro NuGet - http://amzn.to/pronuget2

Agenda Azure Web Sites

Architecture

Project Kudu

Kudu kung-fu Application log streaming Managing settings Staging and Production Multi-tier deployments Customizing deployments Running “jobs” (batch files / background processes) Visual Studio Online

Alt+Shift+Up

Azure Web Sites

Start Simplestart free, scale up and out as you go, friction-free and without the headaches

Your waywith asp.net, php or node.js, develop on Windows, OSX or Linux

Go Livedeploy live in seconds,

easily monitor performance, rapidly diagnose and fix issuesonline IDE

Web Sites in Seconds

dem

o

Azure Web Sites

Architecture

Azure Web Sites use Azure Cloud Services + load balancer Load-balanced Layer 7 reverse proxy Actual infrastructure

Blob storage Your web site is on here (GRS)

SQL Azure Your web site config + metering is on here

Web Sites are not always in IIS. They only are when requests come!

Azure LB

Runtime DB

Storage Controller

IIS ARR(LB)

Web Worker

Other databases

1

2

3

4

5

5

5

5

1st request (cold site)

Storage Controller

IIS ARR(LB)

Web Worker

Other database

s

1 2

3

3

3

3

xth request (hot site)

Azure LB

Runtime DB

Azure LB

Storage Controller

IIS ARR(LB)

Web Worker

X-DriveDeployment Server

Other databa

ses

SQL Azure

Blob storage

Azure Worker Role

Provisioning / API Frontend

Metering

DWAS

Site (W3WP.exe)Site (W3WP.exe)

Site (W3WP.exe)

The full picture

Need some proof?Windows Azure Pack(http://www.microsoft.com/en-us/server-cloud/windows-azure-pack.aspx)

Or:

http://blog.maartenballiauw.be/post/2012/07/24/Hands-on-Windows-Azure-Services-for-Windows.aspx

Project Kudu

Project Kudu “The engine behind git deployments on Windows Azure”

Open source (www.github.com/projectkudu/kudu)

Provides git deployments

Provides builds

Provides sandboxing

Provides hosting

dem

o

Project Kudu

dem

o

Project Kuduon Azure Web Sites

Kudu kung-fu

Let’s be agile... Demos Application log streaming Managing settings Staging and Production Multi-tier deployments Customizing deployments Running “jobs” (batch files / background processes) Visual Studio Online

Alt+Shift+Up

dem

o

Application log streaming

Log streaming All logs from the LogFiles/Application folder

Or configure it when querying: azure log tail <site> -p http

Settings DIAGNOSTICS_LASTRESORTFILE -> file to log to when diagnostics

go wrong DIAGNOSTICS_LOGGINGSETTINGSFILE -> settings file (json) DIAGNOSTICS_TEXTTRACELOGDIRECTORY -> default folder DIAGNOSTICS_TEXTTRACEMAXLOGFILESIZEBYTES-> log rotation

(bytes) DIAGNOSTICS_TEXTTRACEMAXLOGFOLDERSIZEBYTES -> max log

size (bytes)

dem

o

Managing settingsand secrets!

dem

o

Staging and production(there are more ways to do this)

dem

o

Multi-tierDeploying a specific project file

Multi-tier remarks… One .deployment file per branch [config]project=MultiTier.WebApi/MultiTier.WebApi.csproj

How do I deploy all tiers in a separate website? .deployment file per branch and every tier in a branch or customize the build

or add an environment variable

How do I deploy all tiers in the same website? No .deployment file, just use virtual directories

Customizing the build process Check https://github.com/projectkudu/kudu/wiki/Deployment-hooks

.deployment file [config]command=<whatever command>

Write in batch file, bash script, PHP, JavaScript, …

What can I do in scripts? A lot :-) (but not too much… there’s a sandbox)

Environment variables: DEPLOYMENT_SOURCE DEPLOYMENT_TARGET DEPLOYMENT_TEMP WEBROOT_PATH MSBUILD_PATH KUDU_SYNC_CMD + everything you feed it through the management portal

dem

o

Customizing deploymentsSample deployment script

Great… but why? Deploy an advanced multi-tier scenario

We can download stuff (NuGet package restore, pull in external Git repos before build)

We can run stuff (msbuild, nuget.exe, curl, php, node, …)

dem

o

Customizing deploymentsWhat about running unit tests?

Post-Deployment scripts https://github.com/projectkudu/kudu/wiki/Post-Deployment-Action-Hooks

Deploy to other regions once the first succeeds

Send an e-mail notification

Update database

Send a Tweet

dem

oRunning Web Jobs(background processes)

Web Jobs There is lots more! http://www.asp.net/aspnet/overview/developing-apps-with-windows-azure/azure-webjobs-recommended-resources

Web Jobs SDK - react to what happens in blob, table, queue

Run jobs continuously Run jobs scheduled Run jobs at interval Run jobs on demand (manual /

API)

class Program {    static void Main(string[] args) {        JobHost host = new JobHost();        host.RunAndBlock();    }

    public static void SquishNewlyUploadedPNGs(        [BlobInput("input/{name}")] Stream input,        [BlobOutput("output/{name}")] Stream output) {        var quantizer = new WuQuantizer();        using (var bitmap = new Bitmap(input)) {            using (var quantized = quantizer.QuantizeImage(bitmap)) {                quantized.Save(output, ImageFormat.Png);            }        }    }}

dem

o

Visual Studio Online

Conclusion

Key takeaways Azure Web Sites are hosted on Azure, high density

Based on Project Kudu

Kudu kung-fu Application log streaming Managing settings Staging and Production Multi-tier deployments Customizing deployments Running “jobs” (batch files / background processes) Visual Studio Online

Thank you!http://blog.maartenballiauw.be@maartenballiauwhttp://amzn.to/pronuget