Use of generators under metadata in ARM Templates - azure

What is the use of the highlighted part in the Azure ARM Templates' JSON structure? Where does the resource use it?

Resource manager ignores the metadata at the time of deployment. This is just for you to share the more information about the template and its resources with other developers.
From this link:
You can add a metadata object almost anywhere in your template.
Resource Manager ignores the object, but your JSON editor may warn you
that the property isn't valid. In the object, define the properties
you need.
A caveat here is when you define metadata with description property for your template parameters. When you deploy the template through Azure Portal, the description is shown as a tool tip for that parameter.

Related

Define Azure APIM Definitions in Bicep

For a project I'm working on, I need to define an entire Azure APIM in Bicep.
Now I want to define the request/response definitions for the developer portal, see the attached screenhot.
I've tried looking through the Azure documentation but found nothing to define these using Bicep. I have also tried exporting the APIM to ARM JSON, converting it to Bicep using az bicep decompile --file template.json, and reverse-engineering the definitions but the contents of the field Schema aren't included in the export output.
Does anyone know how to define the definitions in Bicep?
First define an schema sub-resource as defined here: https://learn.microsoft.com/en-us/azure/templates/microsoft.apimanagement/service/apis/schemas then use the schema’s resourceID in operations’ schemaId property.

Concat arguments

I have a couple of questions in the following line ARM template code
"variables": {
"apiVersion": "2016-06-01",
"SharedTemplateSAS": "[concat('?',split(deployment().properties.templateLink.uri,'?')[1])]",
What is the argument '?' going to be ?
Is the properties.templateLink.uri dependent on the TemplateLink URI? (I want to use templatespec and refer to linked templates by relative path)
Finally, what is the line doing exactly?
"SharedTemplateSAS":
"[concat('?',split(deployment().properties.templateLink.uri,'?')1)]",
What is the argument '?' going to be ? Is the
properties.templateLink.uri dependent on the TemplateLink URI? (I want
to use templatespec and refer to linked templates by relative path)
Looking at the sample examples in the git Hub for linked templates, the template link uri property is used in the linked templates inorder to get the uri of the childtemplate which contains the information about the resources that are going to be deployed using those linked templates.
Based on the Azure documentation, the SharedTemplateSAS variable parameters will be below format
uri": "[concat(uri(deployment().properties.templateLink.uri, 'helloworld.json'), parameters('containerSasToken'))]",
Wherein helloworld.json is the linked template which is stored in the storage account inorder to avoid the public access to that template.
if you are working with Template spec securely,template spec stores the main template and its linked templates as a resource in your Azure subscription. You use Azure RBAC to grant access to users who need to deploy the template.
You can refer this documentation, if you want to create a template spec with link template & to deploy template spec as linked template.

Does ARM template overwrite existing resource created by script?

I have a consomosDB in my azure account created by a script, I want to create an ARM template to manage the resource deployment by ARM template going forward, how can I make sure that ARM template doesn't recreate/overwrite the resource as it is the first time going to be deployed using ARM template?
ARM template willnot recreate/overwrite the existing resource, if the resource is specified in the template. It will update the resource if the property values for a resource are changed. See below extract from the official document.
Resource Manager tries to create all resources specified in the template. If the resource already exists in the resource group and its settings are unchanged, no operation is taken for that resource. If you change the property values for a resource, the resource is updated with those new values. If you try to update the location or type of an existing resource, the deployment fails with an error. Instead, deploy a new resource with the location or type that you need.
In complete mode, Resource Manager deletes resources that exist in the resource group but aren't specified in the template
If you don't specify certain properties, Resource Manager interprets the deployment as overwriting those values. Properties that aren't included in the template are reset to the default values. Specify all non-default values for the resource, not just the ones you're updating
So if you want the existing resource remain intact, you can export the resource template from Azure Portal to make sure all the properties are specified and not changed.
You can also lock the resource, set the lock level to CanNotDelete or ReadOnly to keep the resource from deleted or modified. Check document Lock resources to prevent unexpected changes for more information.
To modify existing resources using ARM templates, export the template for the resource from within the Azure Portal. Then download it locally. You can then modify it to update settings for Cosmos resources. ARM templates have api-versions. This will coincide with the underlying version in PS or CLI that you used to create the Cosmos account. When modifying the ARM template you will need to note the api-version and then refer to that version Cosmos DB schema reference to ensure the properties match the api-version in the template you deployed.

How do i export an ARM template correctly from Azure?

I have already installed my azure environment with a VM, a storage account and a data base server, and it works fine, but now i want to export the ARM template in order to automate the whole proccess to my customers. The problem is that when exporting this message shows up:
error
So the question is how do i export an ARM template correctly from Azure with all my resources without having to do much fixing my final template?
that is expected. some resource types cannot be exported. you'd have to take a look at the api definition and use that to export those (say at resources.azure.com)
Simple: use bicep. Azure Resource Manager's transpiler (it's a sweeter syntax that solves your needs)
In Bicep the directive you're looking for in your Azure Resource Manager "ARM" template is keyword "existing"
https://github.com/Azure/bicep/blob/main/docs/tutorial/05-loops-conditions-existing.md
keyword "existing" lets you reference a resource without a complete definition.
Otherwise you need to provide the entire ARM definition for the object.
Export failures per resource type occur when a given resource types schema is not available. We are looking into how we can autogenerate schemas for Azure resource providers and onboarding them to this new process, improving the overall success of the Export Template API.

Azure Resource Manager Template parameters

I am trying my hands on over Azure Resource manager templates.
So for making any new resource I am trying to find out which all parameters are required and if they are mandatory or optional. But couldn't get any documentation for same.
I am looking for documentation which is somewhat similar to AWS. To get better in sites about the resources.
Thanks in advance!!
EDIT
I am not looking for parameters in general which are passed to the template. What I want is the resources parameters. The parameters which are given under the properties tag of every resource
Example-
In the below resource "virtualNetworks" there are resource parameters like addressSpace, subnets.
virtualNetworks
This should help you.
It is the schema for deployment templates. Within it, there are schemas for every type of resource that can be put into an arm template. For example, if we look at the schema for Virtual Machines, it contains all the available properties, profiles, extensions, what is required or not, etc.
However, it shouldn't be necessary for you to really look at this and learn it. When you are creating your arm template in visual studio, intellisense should kick in and show you whether what you are putting in the template is valid or not. For example, here I am editing the properties of a public IP, and it shows me what the available properties to add are.
you are right, there is a lack of documentation for resources and required parameters.
My advice is:
Check the Azure-Quickstart Templates, more than enough examples: Quickstart Templates
Since some days you can export ARM Templates from the Azure Portal. So create your resource in portal and export the Templates & Parameters: Microsoft Blog
Check the resource Explorer: Resource Explorer

Resources