Recently, I was working on a visual studio Database project and trying to publish to Azure SQL. But there is no option for selecting Azure SQL Database V12 in Target platform Database dropdown. Microsoft Azure SQL Database is the only option.
In order to fix that issue just open the database project file(.sqlproj) in the XML editor and manually update the DSP tag with the following.
Recently I was facing a issue with request time out in a web app in azure app services. It was a synchronous file upload which take more than 4 seconds. (Yes, off-course, synchronous way is not the optimum solution)
I investigated this issue and I found that Azure App services (Web app) has default 230 seconds of timeout. If a request take more than this time it will be a 500 Error. But still this request is allowed to continue in the background in server.
So we should keep this in mind and we should design our applications in a reactive way.
So if you are getting a request timeout in Azure web app this could be the issue.
I found my self in a situation where I needed to deploy Azure storage account with a blob container and generate connection string with SAS token and update one of the web app’s settings with generated connection strings.
For this purpose, I used linked ARM template and created Storage account and blob container and generated the connection string with SAS token and output from that template so that master template can use this value.
We need to Craft ARM template as below for our requirement.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
We can find more details about parameters specified herein above Microsoft documentation.
Generate connection string with storage account key
We can generate connection string which has full access to storage account with Storage account access keys. We can use listKeys ARM function for this.
Azure provides a helpful number of functions which can be used in ARM templates. It makes our life easier.
We can see the complete list of Azure ARM function here
Apart from that in some situations, you may find your self where you need to implement custom function inside ARM templates. So we can reuse it. So it is DRY.
Typically, we use complicated logic inside the function that we don’t want to duplicate in the ARM template.
So is it possible in ARM template? Yes, ARM templates give us the opportunity to implement custom functions. 🙂
Keep in mind. There are some restrictions when we use functions as below.
The function can’t access variables.
The function can only use parameters that are defined in the function. When you use the parameters function within a user-defined function, you’re restricted to the parameters for that function.
The function can’t call other user-defined functions.
Parameters for the function can’t have default values
The custom function should be declared inside functions property in an ARM template.
Following is a sample function which accepts the container name as a parameter and appends resource group location to container name.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Following snippet shows actual usage of this function.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Service principle are non-interactive Azure accounts. Applications use Azure services should always have restricted permissions. Azure offers Service principals allow applications to login with restricted permission Instead having full privilege in non-interactive way.
Using Service Principal we can control which resources can be accessed.
For Security reason, it’s always recommended to use service principal with automated tools rather than allowing them to log in with user identity
Create a Service Principal with PowerShell.
Note: For this demo we are using Azure RM PowerShell module. Azure has introduced new PowerShell module called AZ. Create AD App
Create AD app
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This service principal is valid for one year from the created date and it has Contributor Role assigned. Further using this Service principal application can access resource under given subscription. We can scope to resources as we wish by passing resource id as a parameter for Scope.
View created AD app in Portal
1. Log in Portal
Go to Azure Active Direcoty -> App Registrations
We can find the created app as below
Once we click the app we will see app details as below
We need this information when we need to login through Service principal
Login using Service Principal with Powershell
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Once we run the script we can successfully log in to Azure using Service Principal
Full code: 🙂
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters