I'm working on a project that includes an ASP.NET Web API site to be consumed by an Android and iOS app. The API is connected to a SQL Server database. I'm at a point where I want to publish my project to the Azure Cloud, but am trying to figure out what would be the best configuration.
The configuration needs to be scalable and reliable as the plans for this product will be accessed by many at the consumer level.
API Hosting
What do I use within Azure to host the API? Do I go with the Azure Web Site service? Or the Cloud service? or something else? I know I don't want to go Virtual Machine as I don't want to have a lot of maintenance.
One thing I should add here, I plan on having a Test/Qual environment as well as a Production environment in Azure.
SQL Database
This one seems easy for me, I will need to utilize the SQL Database service through Azure.
Scheduler
I have one final need of various jobs that need to run at night on some form of schedule. Would you agree that utilizing the Azure Scheduler service would be much cheaper than having either a Cloud service or Virtual Machine running scheduled tasks? Instead I could use Scheduler to utilize various web services at set times?
While Azure Web sites and Azure Web roles (cloud services) are very similar, the below are the most notable differences in my opinion:
Web Roles are cheaper than Web sites. There is a free offering for websites, but it has significant drawbacks.
Web sites are easier to manage and operate
You can deploy web sites from git.
You can use remote desktop to connect to Web roles.
You can use Worker Roles for background tasks from Web roles. Recently Websites introduced web roles which lessens the need for worker roles, note that this is as of today still in beta.
Related
I've got a console application, with logging, scheduling, etc., running on a VM. It works with Entity Framework, Azure SQL Server, Azure blob storage and a bunch of external APIs.
I'd like to turn it into a service.
I understand that this can be done with worker roles, but looking at various tutorials for worker roles, it seems like it would be a ton of work to rewrite the whole thing.
If I just publish it as a web job, will this be secure, assuming I don't have any exposed endpoints? I need to make sure that nobody outside our active directory can access it.
Is there a way that I can create a dummy app service which will have no endpoints and publish it there?
If I just publish it as a web job, will this be secure, assuming I don't have any exposed endpoints? I need to make sure that nobody outside our active directory can access it.
As Peter Bons said, if it does not expose an API or endpoint, nobody can access it.
Is there a way that I can create a dummy app service which will have no endpoints and publish it there?
Normally we run WebJobs in a Azure App Service web app, and that Azure App Service web app can be accessed/browsed via URL. If you want to prevent users from browsing to that Azure App Service web app, you can add a rewrite rule to site’s web.config to block web access.
<rule name="Block unauthorized traffic to staging sites" stopProcessing="true">
<match url=".*" />
<conditions>
<!-- Enter your site host name here as the pattern-->
<add input="{HTTP_HOST}" pattern="^sitehostname\." />
<!-- Enter your white listed IP addresses -->
<add input="{REMOTE_ADDR}" pattern="123\.123\.123\.1" negate="true"/>
<!-- Add the white listed IP addresses with a new condition as seen below -->
<!-- <add input="{REMOTE_ADDR}" pattern="123\.123\.123\.2" negate="true"/> -->
</conditions>
<action type="CustomResponse" statusCode="403" statusReason="Forbidden"
statusDescription="Site is not accessible" />
</rule>
what exactly your exe is? will someone invoke it and scheduled to run on a regular intervals?
we have couple of options here, if the processing logic is not a complex one you can go for Azure functions which uses WebJobs SDK itself but doesn't require an App Service to be configured for it.
or you can go for Azure Scheduler which can take your executable and run at a scheduled intervals.
I have hosted my website in microsoft azure web role. My website works like application and service. Each time user approaches the site, request goes to the service, finishes its database related queries and return backs to application part. Since it has two ways, i have used web roles for both application and service.
If the number of users reaches maximum, an instance is created in web role, what would happen to my service side since it involves database related things.
Everytime when the instance is created, would database be created along with that?
In my case, i would like to see everytime instance is created, no duplicate database should be created. Is it possible? If its possible, do deadlock occurs in that case?
Is it possible to host a application and service both in same web role. If so, i would like to see only database should be created each instance is created.
Please provide a clear solution on this.
Assuming that the application and service are running under two separate cloud services:
Your Application and Service roles are configured to scale independently.
Assuming your are using an Azure SQL Database, it would also be scaled independently of the cloud service.
No duplicate database would be created - Azure SQL databases would again be scaled independently of the cloud services.
If your Application is, say, an ASP.NET MVC application, and your service is a WebAPI, they could both be hosted under the same cloud service (they'd be in the same web application)
How your Service application would behave in a scaled scenario will really depend on how it's been implemented.
I think you have a misunderstanding about how scaling works with Azure.
Check here for some additional detail: How to Scale a Cloud Service
As an aside, you may want to consider Azure Web App instead of a Cloud Service. Whilst they offer less control that a cloud service, unless you are doing something specific that an Azure Web App can't offer, they are easier to deal with.
I wanted to host my WebApi project on azure. But I am not getting sure which way should i use to run it on azure. Like there are Websites, Cloud Services that contain Web role and Worker role. Then which one should i choose. If cloud service is the option then which one out of Web role and worker role is good?
Any help is appreciated.
For hosting a simple web API (that you can scale according to usage, etc.) you'll want to use Websites. Assuming you're not looking for more complex / heavy-weight features (network configuration, more complex architectures e.g. offloading background processing different instances via queueing mechanisms, RDP into the host machine, etc.), then Websites are becoming the de-facto way to host websites on Azure.
The following page from the Azure documentation will give you a full feature comparison between the two:
http://azure.microsoft.com/en-us/documentation/articles/choose-web-site-cloud-service-vm/, but in short, if you simply have a web API project in VS that you want to host in Azure without worrying about the underlying infrastructure, then use Websites.
If you only want to host a Headless (No Web Interface) Web API, I recommend you using Azure Web Service - Web Role.
For Worker Role, it is like a console application that you want to use it to process background task. Normally, we use it to process from Message Queue (Azure Service Bus - Queue).
Azure create a Optimize VM to run those two type of Roles with no unnecessary junks. So you will get the most of it.
However, I still suggest you to read more detail document from azure website to see what environment which is best fit for your long term plan.
You need to login in Azure (https://manage.windowsazure.com) -> Web Sites -> Create New
After that you will find the Name of the Web Site Under the Web Sites.
Click Web Sites -> Select New Created Web Site -> Go TO -> Deployement
In Deployement -> Find -> Integrate source control
Select Appropriate Option i.e GitHub or Dropbox etc..
Using Dropbox => Now Publish your WebApi Project and Paste that Data into Dropbox Folder With the same name of your New Created Web Site in Azure
After Upload Go To -> Azure -> Select Web Site -> Deployement -> Sync.
It will take all the data from Dropbox and You can run your WebApi Project From Azure
More Details Link, Link2, Link3
i have azure role hosted as cloud service, i am trying to install the application initialization as suggested in below link:
http://fabriccontroller.net/blog/posts/iis-8-0-application-initialization-module-in-a-windows-azure-web-role
but how will all my sites in this single WebRole will remain warmed up?
I have followed up the steps told in above link. But not sure how it will managed with multiple websites in single role.
I have code that parses 100 to 200 html webpages using HtmlAgilityPack every hour. I am collecting the parsed data and I am making an xml file which would then be consumed by users.
Now I want to move this code to Azure. Would it be possible to parse websites on Windows azure? If so: what kind of service provided by Azure should I use?
I am not familiar with Azure. Any hints would be appreciated. Thanks.
Azure offers you a couple of solutions:
IaaS
IaaS or Infrastructure as a Service. This means that you get the infrastructure from Azure and that you can host your own virtual machine on it. This does require you to maintain the server yourself but you get full flexibility.
PaaS or Platform as a Service. This not only gives you a VM to run your code on but also an operating system that is automatically maintained for you. This is what Azure is really about and what you should aim for.
When creating a PaaS application you can choose for a regular website or for a cloud service. A cloud service contains roles, web roles and worker roles. Web roles are regular IIS hosted websites. Worker roles are the Azure equivalent of a Windows service.
In your case I would look at worker roles. They can run continually and are ideal for exeucting scheduled operations. From your worker role you can access Azure Blob storage to store the XML files that you create. Those files can be exposed to external users in a secure way.
Windows Azure is a hosting environment. According to what kind of project you created, you may be looking for a Cloud Service, where you can just host any code you've written.