-
1.
Windows Azure Web Sites
Things they don’t teach kids in school
Maarten Balliauw
@maartenballiauw
#comdaybe
-
2.
Who am I?
Maarten Balliauw
Technical Evangelist, JetBrains
AZUG
Focus on web
ASP.NET MVC, Windows Azure, SignalR, ...
MVP Windows Azure & ASPInsider
Big passion: Windows Azure
http://blog.maartenballiauw.be
@maartenballiauw
Shameless self promotion: Pro NuGet -
http://amzn.to/pronuget
-
3.
Agenda
Windows Azure Web Sites
Architecture
Project Kudu
Kudu kung-fu
-
4.
Windows Azure Web Sites
-
5.
Start Simple
start free, scale up and out
as you go, friction-free
and without the headaches
Your way
with asp.net, php or
node.js, develop on
Windows, OSX or
Linux
Go Live
deploy live in seconds,
easily monitor
performance, rapidly
diagnose and
fix issues
Web Sites in Seconds
-
6.
demo
Windows Azure
Web Sites
-
7.
Architecture
-
8.
Load balancer
Layers
1st layer: Windows Azure load balancer
2nd layer: IIS + ARR
ARR
“Reverse proxy”
Verifies hosting database (plans, quotas, …)
Negotiates best node to run your site on
Site not used much? Put it on a highly loaded machine
-
9.
Web servers
%SYSTEM32%inetsrvconfigapplicationHost.config is taken out of the loop
SQL Azure
No refreshing of all app pools when file is saved
Storage
“File share” hosted on other machines
Using “WA drive” on blob storage
Dynamic website activation service
Verifies runtime database (plans, quotas, …)
Site not used for a while? Remove it from the server
-
10.
Web Sites are not in IIS. They only
are when a request comes in!
-
11.
Azure
LB
Runtime
DB
Storage
Controller
IIS ARR
(LB)
Web Worker
Other
databases
1st request (cold site)
-
12.
Storage
Controller
IIS ARR
(LB)
Web Worker
Other
databases
xth request (hot site)
Azure
LB
-
13.
Your app not being used for a while?
-
14.
Provisioning, publishing, metering
Provisioning and publishing
Storage and database
!= launching a website on web farm
Metering
By web servers once a site is loaded
Reported back to runtime database
-
15.
Runtime
DB
Azure
LB
Storage
Controller
IIS ARR
(LB)
Web Worker
X-DriveDeployment
Server
Other
databas
es
SQL Azure
Blob storage
Windows Azure Worker
Role
Provisioning /
API Frontend
Metering
DWAS
Site
(W3WP.exe)Site
(W3WP.exe)
Site
(W3WP.exe)
Provisioning, publishing, metering
-
16.
demo
Let’s find some
proof…
-
17.
Need more
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
-
18.
Project Kudu
-
19.
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
-
20.
demo
Project Kudu
-
21.
Pointers from the Kudu repository
More API operations
File browser
“KuduCalf”
(A Kudu is an Antelope. Its baby is a calf. A Kudu Calf is deployed from
Kudu.)
-
22.
Kudu kung-fu
-
23.
demo
Application log
streaming
-
24.
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)
-
25.
demo
Managing settings
and secrets!
-
26.
demo
Staging and
production
-
27.
demo
Multi-tier
Deploying a specific project file
-
28.
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
-
29.
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, …
-
30.
demo
Customizing
deployments
An introduction
-
31.
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
+ everything you feed it through the management portal
-
32.
demo
Customizing
deployments
Sample deployment script
-
33.
Great… but why?
We’ve seen the 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, …)
-
34.
demo
Customizing
deployments
What about running unit tests?
-
35.
Need. Moar!
-
36.
Moar out of the box
REST API
https://github.com/projectkudu/kudu/wiki/REST-API
Creating a custom handler
http://www.windowsazure.com/en-us/develop/python/tutorials/web-sites-with-
django/
-
37.
Need. MOAR!!!
-
38.
A private Kudu build in web sites?
-
39.
Build and FTP the artifacts/debug/KuduService to your website
Add USE_PRIVATE_KUDU=1 app setting
Enjoy the ride! (but don’t call support, you’re on your own)
See http://blog.davidebbo.com/2012/06/developing-kudu-locally-and-on-azure.html
A private Kudu build in web sites?
-
40.
Conclusion
-
41.
Key takeaways
Windows Azure Web Sites are high density
Hosted on Cloud Services
Kudu is our best friend
Settings and secrets
Muliple environments
Multiple tiers
Build customization
Unit tests
Kudu-in-Kudu
-
42.
Thank you!
http://blog.maartenballiauw.
be
@maartenballiauw
http://amzn.to/pronuget
Maarten
Launch PhpStorm, create new websiteExplain command line toolsazure site create WAWSdeepdive --location "North Europe" --gitConfigure gitAdd index.php <phpphpinfo();Commit and pushDisplay in browser and go through “environment”COMPUTERNAME “RD….”NUMBER_OF_PROCESSORS -> x-large instancesAll ARR___ variables (cookies for affinity and so on)WAWebSiteSID for determining the website SIDApparently C:\\DWASFiles\\Sites\\WAWSdeepdive seems “da bomb”Browse through the portal and note:All URLS for FTP and SCM are different hostnames and thus potentially a different group of serversazure site delete WAWSdeepdive
Clone from git, run buildWhile build runs, explain what’s happening (NPM stage, …)Run Kudu.Webas administratorCreate a site, show folders, …KuduExec! – browse the filesystem and so onExplore someCd .. Until no more is possible and dir – show \\\\10,x,x,x
Show logging applicationExplain nothing special configuredEnable through portalShow stream: azure site log tailstackedlogging(other options are download)Configure verbosity
Create an application and use ConfigurationManager.AppSettings["MyKey"] tospecify a ‘dev’ variable or somethingShow environment variable printingUpdate setting in portalFTP into the system and note that the web.config is UNTOUCHED!We can use this for storing secrets
Show Hg repository in which I have created two branches: the default one and a “staging” oneConfigure one production websiteConfigure one staging websiteExplain hostnames, scaling, configuration and so on
Explain solution structure: two web projectsCreate .deployment fileAdd:[config]project = MultiTier.WebApi/MultiTier.WebApi.csproj
Create .deployment fileAdd:[config]command=deploy.cmdAdd deploy.cmd@echo offecho Comday is TEH AWESOME!echo We are deploying to %MYENV%- Set environment variable in portal
Too long for slides!Run azure site deploymentscript --basicOr azure site deploymentscript –aspWAPRun through script
Explain unit test projectDeploy with successDeploy with failure