Tuesday, July 30, 2019

ComosDB - MongoAPI - Document does not contain shard key
This issue comes in picture when we forget to put value for Shard Key while inserting values in document. It means once we have declared Shard key for document it should be part of model which is inserting. Kindly refer an images below:
ShardKey of CosmosDB collection
ShardKey in CosmosDB collection's document :

ShardKey in CosmosDB within collection

I Hope it will help you to resolve your problem.
#CosmosDB #Azure

Tuesday, July 23, 2019

Create Linux Virtual Machine using ARM Templates (IaC) in Azure

There are various ways to create virtual machine in azure , Few of them are very well known as shown below:
           1    Azure Portal
2      Azure PowerShell
     Azure CLI
4      Create a json template and deploy json template through power shell
5       Create and deploy virtual machine through visual studio console.

In this article I will explain how to create it with Infrastructure as a code or using azure ARM templates.
Practical Scenario : There can be a practical use case while you work in a certain project and gets a requirement to create a virtual machine from an existing infrastructure. There can be various ways though the quickest one is through Azure templates.
Azure templates can be downloaded from the resource already hosted. Now
What ARM templates perform : An ARM templates keeps an entire contents of resource group or it can contain more than one resource. While deployment it can be “Complete or Incremental”.

Whenever you perform any operation through Azure ARM portal, Azure PowerShell ,Azure CLI or Rest API’s the Azure ARM API handles your individual request, because each request handled by the same API.
All the capabilities exists in Azure Resource Manager Portal are easily available through PowerShell, CLI and client SDK as well as RestAPI’s.

You can refer an image below to understand how does all tools interact with ARM API. Refer arm-image

The API transmit request to Azure resource manager service ,which further validates the requests and it further routes the requests to appropriate service.

Now login into https://portal.azure.com and search for existing resource if exists (e.g. Virtual Machine).Open that in portal as shown below in image virtual-machine-linux 

Search templates , it should show export templates in that. Click on that.Kindly refer an image export-template.

Once you click on the export template option shown in last step , it  shows you the following screen ,from there you can download the templates . You should be able to some other options also like CLI, PowerShell, .NET, Ruby. Refer download-template

Once you downloaded the files unzip that ,it has the following structure which contains all  pertinent information about the various ways to deploy you resource to ARM. For our purpose parameters and template.json files are essentials to proceed further. Refer template-structure

template.Json files keeps an entire structure of the resource you want to deploy while parameters contains runtime parameters required in template.Json file.
Parameters.json contains the information like “virtualMachineName”, virtualMachineRG, osDiskType, virtualMachineSize and diagnosticsStorageAccountName.  Parameters.json has the following structure.
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
    "contentVersion": "",
    "parameters": {
        "location": {
            "value": "centralus"
        "networkInterfaceName": {
            "value": "master675"
        "networkSecurityGroupName": {
            "value": "master-nsg"
        "networkSecurityGroupRules": {
            "value": [
                    "name": "SSH",
                    "properties": {
                        "priority": 300,
                        "protocol": "TCP",
                        "access": "Allow",
                        "direction": "Inbound",
                        "sourceAddressPrefix": "*",
                        "sourcePortRange": "*",
                        "destinationAddressPrefix": "*",
                        "destinationPortRange": "22"
        "subnetName": {
            "value": "default"
        "virtualNetworkName": {
            "value": "kubeRG-vnet"
        "addressPrefixes": {
            "value": [
        "subnets": {
            "value": [
                    "name": "default",
                    "properties": {
                        "addressPrefix": ""
        "publicIpAddressName": {
            "value": "node3-ip"
        "publicIpAddressType": {
            "value": "Dynamic"
        "publicIpAddressSku": {
            "value": "Basic"
        "virtualMachineName": {
            "value": "node3"
        "virtualMachineRG": {
            "value": "kubeRG"
        "osDiskType": {
            "value": "Premium_LRS"
        "virtualMachineSize": {
            "value": "Standard_D2s_v3"
        "adminUsername": {
            "value": "sachin"
        "adminPublicKey": {
            "value": null
        "diagnosticsStorageAccountName": {
            "value": "kubergdiag642"
        "diagnosticsStorageAccountId": {
            "value": "Microsoft.Storage/storageAccounts/kubergdiag642"
        "diagnosticsStorageAccountType": {
            "value": "Standard_LRS"
        "diagnosticsStorageAccountKind": {
            "value": "Storage"
        "autoShutdownStatus": {
            "value": "Enabled"
        "autoShutdownTime": {
            "value": "19:00"
        "autoShutdownTimeZone": {
            "value": "UTC"
        "autoShutdownNotificationStatus": {
            "value": "Disabled"
        "autoShutdownNotificationLocale": {
            "value": "en"

So far we are done and good to go. Open you PowerShell window and type az login to get into your subscription.
Once you succeeded with  that type the following command to deploy your resource.

az group deployment create -n "sachinDeployment" -g "kubeRG" --template-file 'C:\Learning\LinuxVM\VM\template.json' --parameters 'C:\Learning\LinuxVM\VM\parameters.json' --parameters "adminPublicKey=ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAgQzk/MYIUMhMDpJgjgku6QdhLY0zagTdqFYWkJuTnz9tsBE7eRyFuzW9lK6PSTTSYHCbTPpWALJWGlwrEmWmXL62nss0ppa2IcuD9TMA3VkeFKE6EnOpiRF6lM6fBXyh+KtRFrzHIu6OUfeLbAy6UpPm1kRPcRtMX9nRX0hzpRKGLYdIh/gnwNYJsOHX/5wAvFiDfPSlIblYbL9HhWaw1Mm/b1r6vpV+WREhJ09q2Fh4uQwi75/XuUj9C+2c5NOM5HwKxILdiwad3FcTfNrGO0otHaXdAT0buAbZ7wL4QNKqLtcTelje2BGc6uunpyrYywQkn/VLBETC+LY21S4aBw== rsa-key-20190723"
refer : power-shell-command                 

Note: in my case I’ve passed adminPublicKey as runtime parameter which I have created with help of Agent Putty.
Yeeee , You are done. Go to azure portal and choose virtual machine there.
You should get you virtual machine details there as in my case it has created Node3.

Hope it helps you while you create VM using ARM templates (Infrastructure as Code)

Friday, July 19, 2019

Azure DevOps – New Era – Create New Build Pipeline

Ref : microsoft.com

In my Previous article I shared about “how to start with AzureDevOps and how to create new organization”. https://www.dotnetpiper.com/2019/07/azure-devops-new-era.html AZURE DEVOPS – A NEW ERA Here in this we will proceed further where we left and will create New Build pipeline with the impressive User interface.
Here I have a small application which has the following structure shown below as screen shot app-structure

I have already placed in Azure GitHub , To push your code from VS code you can refer this url :
I’m assume so far you would have pushed your code there and we are ready to go.
Create a new project and follow the following steps
Step1: Refer image create-project-first ,create-project-two and create-project-success

Go to pipeline -> Builds-> New Pipeline and click . refer an image new-pipeline

As soon as you create new pipeline it reaches to the windows from there you would be able to select the classic editor as shown below in screen shot:
So choose Use the classic editor to create a pipeline without YAML.

After completing this you will reach on the page where you will have to select code repository
These repository are as follows:
  1. ·         Azure Repose Git
  2. ·         GitHub
  3. ·         GitHub Enterprise Server
  4. ·         Subversion
  5. ·         Bitbucket Cloud
  6. ·         Other Git

For my purpose I’ve selected Azure Repos Git , which we have already created above.
Kindly refer a screen shot for reference and click on Continue. Refer image Azure-repose-git


As soon as you go with above steps it takes you on the page where you have to choose one of the templates which you can consider as ‘Configuration as Code’. For my purpose I will select Empty job as shown top right of screen. Refer image Empty-job

After selecting Empty Job you will be redirecting to next level ,where you should be able to see the Pipeline details as well as Agent Job details on the right side of screen. The entire screen will be divided into two parts.

Kindly fill the desire details like Display Name and AgentPools . Agent Pools is defined as follows
When you queue a build, it executes on an agent from the selected pool. You can select a Microsoft-hosted pool, or a self-hosted pool that you manage.

To reach up to this level you have to click on the (+) icon right to the Agent Job 1 and you will get the screen just on the right side.

Step 1: Firstly, click on the (+) icon to proceed , As soon as you click on the + icon you will have a window appears on the right side . Search for “Copy Files” from and fill the required details. Please follow the screen shots Copy-Files.jpg

Once you select this please fill the essentials details in the page appears. Kindly follow the upcoming screen shots copy-files and target-folder

Target folder is the place where we keep our code base at pipeline level and further we will use this for publishing it.
NOTE: You can understand this in such a way that the local path on the agent where any artifacts(e.g. layman) are copied to before being pushed to their destination. For example: c:\agent_work\1\a 

A typical way to use this folder is to publish your build artifacts with the 
Copy files and Publish build artifacts tasks. Reference Microsoft

Note: This directory is purged before each new build, so you don't have to clean it up yourself.
Click on the (+) button next to  Agent Job 1  and choose the publish build artifact. At this level we have to give the path of the folder which we want to publish. As we remember in last step we copied the artifacts in : $(Build.ArtifactStagingDirectory). The same folder  or file path to publish. This can be a fully-qualified path or a path relative to the root of the repository. Wildcards are not supported. Variables  are supported. Example: $(Build.ArtifactStagingDirectory).

There are 4 properties which we will consider in our scenario .

1.     1. Display name :  Name can be anything as per your choice like Publish Artifact: drop
2. Path to publish : The folder or file path to publish. This can be a fully-qualified path or a path relative to the root of the        repository
3.  Artifact name: The name of the artifact to create in the publish location.
4.  Artifact publish location : Choose whether to store the artifact in Azure Pipelines, or to copy it to a file share that must be accessible from the build agent.

Refer and image publish-artifact as shown below:

Step3: Click on the (+) button next to  Agent Job 1  and choose the publish build artifact. Here we will be managing ARM templates for CI-CD pipeline because we are creating resources with help of ARM templates or azure automation . Fill the required details on the page .Please refer an image arm-templates-publish-build-artifacts as shown below:

If you notice, Templates folder is there  in “path to publish”  property. You can get that after clicking on the “…” button right to this. Once you click on this it prompts you a pop-up to choose the path for templates from azure repos as shown in image arm-templates-files. This is mush needed to create our resources on the fly, we will be utilizing this in azure release pipeline further.

Note: I’ll write a separate article on Azure templates also.

Once you are done with all above required steps than choose save & queue option from dropdown 

appears top in the tabs section , as you save , it triggers the build .Kindly find one of the screeb=n shot as 
depicted in image save-and-queue .

You can also trigger it manually from the user interface from the Build pipeline once you have saved your pipeline .There should be a QUEUE button on top right corner , click on Queue button window should appear to run the pipeline . Choose Hosted VS 2017 and choose branch we desire to build against. Once it is completed you should be able to see the green tick mark on the right side.
 Refer build-pipeline image show below:

Thursday, July 18, 2019

Azure DevOps – A New Era

Azure DevOps – A New Era

Azure DevOps : A very well know VSTS Visual Studio Team Services has become Azure DevOps with new features , icons ,Repos and Test plans along with plenty of rich feature an excerpt from Microsoft Site as shown below:

The single service that was Visual Studio Team Services (VSTS) is now becoming a new set of Azure DevOps services. Throughout our documentation and websites, and in the product, you'll start to notice new icons and names for Azure DevOps and each of the services within it:
·         Azure Pipelines to continuously build, test, and deploy to any platform and cloud.
·         Azure Boards for powerful work management.
·         Azure Artifacts for Maven, npm, and NuGet package feeds.
·         Azure Repos for unlimited cloud-hosted private Git repos.
·         Azure Test Plans for planned and exploratory testing.
Now a days I’m exploring Azure Devops and will share enough practical based articles and blogs pertinent to Azure PaaS e.g. Azure Devops and Azure CDN etc.
In this article will share you about the how does it look like and how can you explore this.
Step1. Copy and paste the following url https://dev.azure.com, it will open the screen to ask for your credentials .
The following screen (img1)  will appear if you open it for the first time as depicted below:

You can choose either to go with start free or sign in to Azure Devops ,I have my own account to I’m ready to go. Azure devops provides some out-of-ox feature which you can implement as shown below in screen shot (img2) as well.

You can also visit this link for more in depth details about Azure DevOps. https://azure.microsoft.com/en-in/blog/introducing-azure-devops/
Step2:  Once you have logged in AzureDevOps site, it should be look like this though I’ve already created few of my projects as shown below in screen shot(img3).



To create a new project you should have new organization

·         You must have an organization created in Azure DevOps. If you don't have one, do that now.
·         As an organization owner, you can create projects. If you're not the owner, then you must be a member of the Project Collection Administrators Group or have your Create new projects permission set to Allow.

Kindly refer an image above and find (+New Organization) button at marked yellow must be at bottom left on screen. As soon as you click on “New Organization” button the following screens will appear . Please accept terms and conditions and proceed further.Img4

Img5 :

Once you are done with creating your organization than you will be eligible to create new project. Refer img6 as shown below:

To achieve this you can also go to home page and click on the create project button at top right corner of the screen, as soon as you click on that it appears with the following screen which you have to fill to proceed further. Refer img 7.

Once you are done with this , you are good to go and will see the detailed information on the screen. Reference AzureDevOps
Select one of the following tasks to get started:
·         Invite to begin adding others to your project. Note, if this is your first project, then you must first invite users to your organization.
·         Boards to begin adding work items.
·         Repos to open Repos>Files page where you can clone or import a repository, or initialize a README file for your project summary page.
·         Pipelines to start defining a pipeline.
·         Test Plans to start defining test plans and test suites.
·         Manage your services to disable the visibility of one or more services.

After this you can have a glimpse of each section to get familiar with this. In the next article I will be exchanging my learning about to create Build Pipeline for Azure CDN in AzureDevOps and will follow with Release pipeline and other pertinent stuff.

Stay Tuned : #AzureDevOps

Wednesday, July 3, 2019

Push code to azure repos using vs code

Push code to azure repos using vs code
While creating and pushing code to azure repo in Azure devops , for the first time I have to push code

>git init
>git add .
>git commit -am "Add function app"
>git remote add origin
> git push -u origin --all
Note : In case if you confront an error “Fatal : Remote origin already exists.” while pushing code to Azure Repos
please use this command before “add origin” git remote rm  origin

Please refer below images for references

After pushing code to Azure devops ,Jump to Repos in order to see the content you pushed. Please refer below image for reference.

Hope it will help you sometime while start work with Azure DevOps :)