What is the AWESOME Azure Bicep ? πŸ’ͺ

Hello Cloud Marathoners!

I have been getting many questions on how to start an Azure Bicep journey – in a special and AWESOME way πŸ˜€ – which brought an idea to create the AWESOME Azure Bicep GitHub repo for the community πŸŽ‰

Long story short, this has been on ideation for few days and is life now, as of Jan 18, 2022 ! 😍

Now, I have started gradually adding important official and community resources to help new #Azure learnersΒ and #cloudmarathoners!

AWESOME Azure Bicep repo

Please, share ⭐ and fork 🍴 this repo and make your contributions.

I really ask you πŸ™ŒπŸ™ to make your contributions and help maintain and grow this repo going forward.

Thank you for all your πŸ‘¨β€πŸ‘©β€πŸ‘§β€πŸ‘¦ continued support!

 267 Reads

Happy to join the #OpenHack Containers coaches club πŸŽ‰

Hello Cloud Marathoners!

Few weeks ago, I participated in the Microsoft OpenHack Containers event. This was an awesome event where I had a chance to coach a team of professionals to tackle containerization challenges.

What is Microsoft OpenHack

Microsoft OpenHack is a developer-focusedβ€―engagement that connects development teams (Open)β€―with experts to tackle a seriesβ€―of real-world challenges through hands-onβ€―experimentationβ€―(Hack) in person or online (Virtual).

What was in the challenge?

We started with good old docker tooling for containers and ended up migrating those several containers and dependencies to the Azure Kubernetes Services. However, the most interesting part was applying best practices and security configurations to the migrated workloads.

Due to participation disclosure agreement, I would not be able to detail each team challenge (about 7-8). However, this was real teamwork that required learning and experimenting for all the team members.

My team went throughΒ ups and downs while trying to complete the necessary number of challenges to earn the badge. I am very happy that my team was able to complete the required challenges, learn important hands-on skills, and get theirΒ well deserved badges.

I was very pleased to help my team along their containerization journey. At the end, I feel very honored and appreciated to receive an OpenHack Containers Coach badge.

OpenHack: Containers Coach

Interested to get started with containers in Azure ?

Check out the following #free resources to start your own containerization learning path in Azure:

Thank you ʹ٪Πfor reading this post and checking the learning resources above.

Please, feel free to share your experience with the #cloudmarathoner community.
I will be happy to share your experience and tips here as well. πŸŽ‰

I am planning to keep this post up to date with your valuable contributions going forward!

 823 Reads

What are the good options to manage sensitive info in Azure Bicep?

Hello Cloud Marathoners,

Every seasoned IT professional knows that sensitive information should not be exposed as a clear text on any code. This is especially true for infrastructure-as-code (aka, IaC) scenarios where passwords and keys are part of the deployment.

One way to stay compliant in accomplishing this goal is the integration of an Azure Key Vault service into your deployment code. This Azure security service is primarily intended to store sensitive information like password, keys, certificates, connections, etc.

In this post, we will look into two different ways how we could integrate Azure Key Vault services in our Azure Bicep code.


Option – 1: Using getSecret() function

Our first option is to delegate this important work to a getSecret() function. This option could be used with an existing Azure Key Vault resource that is declared in your Azure Bicep code.

Let’s look into an example where an existing Azure Key Vault service is referenced to provide administrative password for SQL server deployment.

Deploying Azure SQL instance with Azure Key Vault

This sample Bicep code is using sqldb.bicep file as a module, where parameters; such as sqlServerName and adminLogin are passed through with a secret name of ExamplePassword.

The ExamplePassword secret name should be already set and ready in the referenced Key Vault service above. Here is the view of this secret on Azure portal.

Azure Key Vault with secretes in portal

Let’s have a quick view into the sqldb.bicep file, as it is referenced in the main Bicep file.

sqldb.bicep file

Now, let’s deploy these resources with a secret value from Key Vault resource that has a secret name ExamplePassword.

What happened? I am getting an error on my first deployment execution πŸ™

Error on deploying Bicep code with SQL server provisioning

Upon carefully analyzing error, I see the following reason for this error:

At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/DeployOperations for usage details.”,”details”:[{“code”:”RegionDoesNotAllowProvisioning”,”message”:”Location ‘East US 2’ is not accepting creation of new Windows Azure SQL Database servers at this time.

Azure deployment error

Based on the error message, we change the location to eastus and re-run the script. Now, we got the following positive result in console and portal:

Deployment results in Azure Portal RG

Next, we will attempt to login into a SQL Server instance.
A successful login will look like the following screen:

Successful login into the SQL instance

Important Note:

If you are getting an error during the login then try to check the following steps:

  • adminLogin name is entered correctly
  • your IP address is added to the SQL server firewall rules
  • grab a cup of coffee and check back in 5 minutes

Description of a typical login error into a SQL server instance is provided below. I checked the firewall rules and made a cup of coffee => before getting a successful log-in πŸ™‚

Requires your location IP activation

Option -2: Referencing as a secretName in parameter

The second option is pretty straightforward, if you have already used it on ARM template deployments.

Note: Please check out the following post – Four parameterization options for your Azure Bicep deployments for detailed information on available options.

We just need to reference Azure Key Vault secret like in the following example:

Using a parameter file and referencing the Key Vault secretName will do the trick in extracting the value and provisioning your resource.

Let’s run the bicep file that deploys multiple RGs and an Azure VM that uses VMPassword secret.

Running deployment with Bicep parameter file

A successful deployment provisions following RG with the VM resources:

Next, we should smoke test our deployment by locating the resource group “rg-demo-vm-1116” and using deployment parameters to RDP into Windows server:

Finally, we are able to see that secret and admin user name pair worked as expected

Azure VM deployed using Key Vault secret

Summary

In this post, we looked into two available options that harden our infrastructure code by removing hard-coded sensitive information and replacing it with Azure Key Vault reference. Thus, avoiding any potential leaks of passwords, secrets, etc.

IMHO, first option is better than the later one, because it does not expose subscription id and other small details.

What will be your choice? Please, share on LinkedIn post comments section.

Thank you for your interest my #cloudmarathoner friends!
Please, check other Azure Bicep posts and let me know your feedback.

What is next?

All code samples and presented Bicep files are placed in “Learn-Bicep” GitHub repo πŸ‘‰ https://lnkd.in/ds-h9VQx

Please, join me to learn more about Azure Bicep πŸ’ͺ on an Omaha Azure User Group meetup scheduled to happen on November 17th.

 3,496 Reads

Azure Bicep presentation for Omaha Azure User Group

Hello friends,

I am very excited to see you all in the next Omaha Azure User Group meetup. This time we will speak about the latest advancements and use cases you could apply in your Azure resource authoring toolkit.

This meeting will take place on November 17th, starting at 6 PM CST. Details of the event are posted here: https://lnkd.in/gzh_sF8e and on my LinkedIn post.

Please, make your registration at the meetup website here.


Support & Subscribe toΒ #cloudmarathonerΒ LinkedInΒ tagΒ πŸ‘πŸ‘€
Stay tuned for more Azure, Automation & Security related posts.

Fᴏʟʟᴏᴑ ᴍᴇ 🎯 α΄€Ι΄α΄… become α΄€Β #cloudmarathonerΒ β›…πŸƒβ€β™‚οΈπŸƒβ€β™€οΈ – 𝐋𝐄𝐓’𝐒 π‚πŽπππ„π‚π“ πŸ‘

 1,382 Reads

Festive Tech Calendar 2021 event

Hi Cloud Marathoners,

As you may know, it is that time of a year when great content will be coming to the town! You could enjoy and learn throughout the month of December, as people behind the #festivetechcalendar will be bringing you lots of new content from different communities and people around the globe.

https://festivetechcalendar.com/

This year, I have submitted two sessions and have been nicely surprised yesterday. Both sessions have been accepted and I am looking forward to deliver following sessions for the community:

Session # 1: What you need to know about Azure AD security defaults?

Accepted session – “What you need to know about Azure AD security defaults?


In this session above, we will discuss about how to get started with Azure security on right foot and its challenges. We will focus on importance of a strong Identity and Access in any cloud solution that we are creating for our customers. One simple way to get started is review and adjustment of security default options in Azure AD. We will also look into the set of practices to get you started with Azure AD setup and learn about the benefits of Azure Security Benchmark.

Session # 2: All you need to know about Azure Bicep configurations

Accepted session -“All you need to know about Azure Bicep configurations”

In the second session, we will talk about Azure Bicep – a new language that aims to ease Azure resource authoring and management. This new language comes with a powerful VS Code extension and config file options.
In this session, we will unveil dozens of powerful features in our config file to suit your style of coding on VS Code and cheer up our productivity skills. We will apply our fresh skills by creating several Bicep demos in the process. 

Conclusion

I sincerely hope that these sessions will spark your interest and I am looking forward to see you all during this event. But most importantly, I hope you could have lots of fun during this festive month.

Stay tuned for more Azure AD, Automation & Security related posts.

Fᴏʟʟᴏᴑ ᴍᴇ 🎯 α΄€Ι΄α΄… become α΄€ #cloudmarathoner β›…πŸƒβ€β™‚οΈπŸƒβ€β™€οΈ – 𝐋𝐄𝐓’𝐒 π‚πŽπππ„π‚π“ πŸ‘

 939 Reads

Four parameterization options for your Azure Bicep deployments

Hello Cloud Marathoners,

In my last posts, I wrote about Azure CL and a Bicep language. The Azure Bicep language, helps to author and manage Azure resources more cleanly and easily on your Azure subscription.


The parameterization of infrastructure deployment files is an important skill where true power of automation and code reuse comes forward.
Let’s learn about different parameterization options that you could use in your Azure Bicep deployments. As an example, we will examine the following parameterization options on an Azure Bicep web app deployment file.

βœ”οΈ Using Bicep file as is

βœ”οΈ Using default parameters on your bicep file

βœ”οΈ Simply adding parameters into your command line

βœ”οΈ Using a separate file for parameters, per environment

Option 1: Using Bicep file as is

This first option is the most straightforward way to declare your parameters. However, you would have to enter each parameter name, every time you are deploying the Azure resources.

Following screenshot is a default Bicep web app declaration with parameters. Check the Learn Bicep repo here πŸ‘


Now, let’s declare an Azure CLI command that will deploy our Azure Bicep file into a Resource group.

# Create a rg-test-deploy RG
az group create -l eastus -g 'rg-test-deploy'

# Option-1: Run deployment file as is
az deployment group create -g 'rg-test-deploy' -f .\param-files\webapp-service-w-param.bicep

# List all webapps in the subscription
az webapp list --query [].name -o table

Option 2: Using default parameters on your bicep files

The second option will allow us to deploy our Bicep file without entering the default values each time. However, it would require an update on file each time you want to change parameter values 😒

Now, we can take the previous webapp-service Bicep file, and add its default values. The updated Bicep file will look like the following screenshot:


Our Azure CLI deployment script would just get a new file name

# Option-2: Run deployment with default values
az deployment group create -g 'rg-test-deploy' -f .\param-files\webapp-service-default-param.bicep

# You could also add preflight check with "-c" at the end of each deployment script

Option 3: Simply adding parameters into your command line script

If you would prefer to type parameters and values on a terminal then third option can deliver it for you. That script will look like the following sample:

# Option-3: Run deployment with inline parameters
az deployment group create -g 'rg-test-deploy' -f .\param-files\webapp-service-w-param.bicep -p location='eastus' appServiceAppName='param-demoapp18' appServicePlanName='asp-param-demo'

Option 4: Using a separate file for parameters, per environment

The last option has multiple advantages over prior options. As you could create separate environment parameters in their own dedicated files and manage them accordingly.
For example: You can create a separate param file for “Dev” environment deployments; like in the following screenshot.

Note: parameter files for Bicep language are using a JSON notation, similar to the way how ARM JSON declares parameter files with a following schema.

"https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#"

And our deployment script will look like the following sample:

# Option-4: Run deployment with a separate parameter file
az deployment group create -g 'rg-test-deploy' -f .\param-files\webapp-service-w-param.bicep -p .\param-files\webapp-service-parameters-dev.json

# List all webapps in the subscription
az webapp list --query [].name -o table

# Clean all resources from RG
az group delete -n 'rg-test-deploy' --yes

Summary

Thank you πŸ™ for reading this post and learning about four different options to deploy your Azure Bicep files using Azure CLI.

Please check out the Learn Bicep GitHub repo, and follow it.
Thanks πŸ™ πŸ™Œ !

Stay tuned for more Azure automation & Azure Bicep posts.

Fᴏʟʟᴏᴑ ᴍᴇ 🎯 α΄€Ι΄α΄… become α΄€ #cloudmarathoner β›…πŸƒβ€β™‚οΈπŸƒβ€β™€οΈ – 𝐋𝐄𝐓’𝐒 π‚πŽπππ„π‚π“ πŸ‘

 2,982 Reads

August month updates from Azure Bicep

Hi friends,

This month we have awesome updates from Azure bicep team that I am happy to share with all of you (Azure community, Deployment Automation, Resource management and Governance geeks πŸ™‚

The following list are August month updates:

  • Bicep Linter, Snippets, Scaffolding
  • Right click build
  • Deployment Stack updates
  • Bicep roadmap plans (v0.5 and eventually v1.0)
  • Bicep registry
  • OCI Artifact standardizations
  • Module registry functionality
  • Module Reference Syntax
  • Parameter Improvement options

Bicep Linter updates

The yellow squiggly lines indicate the Linter violations and complains where best practices are violated. Like, password param should not be checked into the code repository. Another one is using string concat function instead of string interpolation.

Right click build

The right click build on bicep file is a new convince feature that was also added on new build.

You can also use a shortcut keys Ctrl+Shift+B as an alternative way to build your JSON files from bicep files.

Scaffolding feature

This feature also arrived on a v0.4.6 build that provides required-properties to be auto populated to speed up your Azure resource coding. It is derived from a resources swagger spec and auto-populated for you. Yay!

New Code Snippets

You will love to discover that bunch of new snippets has been added.

Just type res- and you will scroll over all those starter boilplet code. Just imagine how much time you will be saving. It is Huge!!!

Bicep Roadmap annoncements

Well, Bicep team annonced that next build will bring the v0.5 and they do target v1.0 by th end of the year. What does it mean is – there will be no API level breaking changes starting from the version v1.0.

What is Next?

Keep tuned for upcoming v0.5 version. The Module registry updates and syntax updates on OCI Artifacts are going to be next Huge things, as they will add into the maturity of this AWESOME tool in Azure!

Check out for more @ GitHub – Azure/bicep: Bicep is a declarative language for describing and deploying Azure resources

Stay tuned for more Azure automation & Security related posts.

Fᴏʟʟᴏᴑ ᴍᴇ 🎯 α΄€Ι΄α΄… become α΄€ #cloudmarathoner β›…πŸƒβ€β™‚οΈπŸƒβ€β™€οΈ – 𝐋𝐄𝐓’𝐒 π‚πŽπππ„π‚π“ πŸ‘

 2,582 Reads

What is new in Azure Bicep v0.4?

Hello Cloud Marathoners,

I hope everyone getting a chance to enjoy the summer and spend some time with loved once.

That said – Azure Bicep team does not seem slowing down, and I love it!
New features and capabilities have been added to Azure Bicep product v0.4 version, and we will review those innovations on this post.

What is Azure Bicep?

Azure Bicep is a domain-specific language (DSL) that significantly simplifies the Azure resource authoring. It makes representation of your Azure digital estate concise with clean syntax by adding reliable type safety and code-reuse.

A typical Azure Bicep language code for an Azure storage account declaration will look as simple as the following code below – which basically explains why Bicep is called a DSL.

Why would you need it?

There are number of benefits in using Infrastructure-as-Code approach. Azure Bicep might be the right tool for you to use for Azure deployments, especially if you are trying to modernize and simplify the Azure deployment process.

Let’s look into scenarious where Bicep is the right tool to use:

βœ”οΈ Want to use language native to Azure?
βœ”οΈ Looking for fully integrated templates withing Azure platform?
βœ”οΈ Looking for fully supported product with Microsoft?
βœ”οΈ Don’t want to keep or worry about your resource state information
βœ”οΈ Looking to modernize and easy transition from JSON

Well, if your response is YES for above statements/questions then Bicep will be right tool for your solution.

New additions to Azure Bicep in version 0.4

There are numbers of enhancement and features has been added from this release. Let’s look at main Highlights of these features below:

βœ… Linter MVP – The Bicep linter will inspect your code and catch a customizable set of authoring best practices.Β 
βœ… Deprecated parameter modifiers removed – Strip out deprecated parameter modifier syntax
βœ… New code snippets – Suggestion with new code snippets added
βœ… Bug fixes – Number of bug fixes added, thanks to community support
βœ… Bicep Playground fixes – Playground doesn’t load after breaking change.
βœ… Documentation and examples update
βœ… Support for List method call on Azure resource references
βœ… Support for JSON literal string conversion
βœ… Support for using local json templates as modules
βœ… Support for object body completion snippets

What is next?

There are still number of milestones in-front of Bicep team, as the versioning # of Bicep project indicates. That said, starting from Bicep version 0.3 you can get an official Microsoft support.

Below is the sneak-pick preview on what is cooking for v0.5 – which is expected to be out sometimes around August month this year.

Here is an official reference to next milestone on Azure Bicep v0.5.

Thank you for reading till this point. Stay tuned for more Azure Cloud automation and Bicep related posts.

Fᴏʟʟᴏᴑ ᴍᴇ 🎯 α΄€Ι΄α΄… become α΄€ #cloudmarathoner β›…πŸƒβ€β™‚οΈπŸƒβ€β™€οΈ – 𝐋𝐄𝐓’𝐒 π‚πŽπππ„π‚π“ πŸ‘

#microsoftazure
#Bicep
#AzureBicep
#infrastructureascode
#bestpractices
#continuouslearning

 2,023 Reads

Resolving error on Bicep module – on Azure CLI (2.22.0) for Windows 10

If you are seeing “fromisoformat” error while running az bicep version or any other az bicep command – you are not alone πŸ™‚

Check this open issue reported on GitHub by community member – https://github.com/Azure/azure-cli/issues/17718


After updating to the latest Azure CLI (2.22.0) for Windows 10, I am now seeing the same error as others have reported:

Any command such as “az bicep version” is producing the following error:

The command failed with an unexpected error.
Here is the traceback and detailed error:
type object 'datetime.datetime' has no attribute 'fromisoformat'
Traceback (most recent call last):
File "D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\knack/cli.py", line 231, in invoke
File "D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/init.py", line 657, in execute
File "D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/init.py", line 720, in _run_jobs_serially
File "D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/init.py", line 691, in _run_job
File "D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/init.py", line 328, in call
File "D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/init.py", line 807, in default_command_handler
File "D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/command_modules/resource/custom.py", line 3294, in build_bicep_file
File "D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/command_modules/resource/_bicep.py", line 63, in run_bicep_command
File "D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/command_modules/resource/_bicep.py", line 152, in _load_bicep_version_check_result_from_cache
AttributeError: type object 'datetime.datetime' has no attribute 'fromisoformat'

Is there a temp workaround?

One of the workarounds is to uninstalled Azure CLI 2.22.0 , and then install the prior version 2.21.0. You could confirm 2.21.0 version is working for you by running the same command.

Hope this will be helpful for you, as i faced with this issue hours before my demo to #GlobalAzure 2021 😐

 1,411 Reads

Are you ready to start your Bicep transformation journey in Azure?

Hello friends,

I am getting ready bits and pieces of the presentation and demo code for the #GlobalAzure 2021 event.

This is going to be my second year in a row, presenting at this global event, and I am pumped to contribute with two new sessions this year.

Feel free to check out the details of each session and links here .

Session banner for upcoming presentation on Global Azure 2021

WHY bother to transfrom your exising Azure ARM templates into Bicep?

  • Easy to understand and maintain code for your Azure infrastructure
  • Day zero support for all resource types & API versions
  • Nice transparent abstractionΒ for the underlying platform
  • Awesome Tooling – VS Code extension for Bicep
  • Deep integration with other Azure Services
  • Preflight validation – both Bicep/ARM does preflight validation on entire template
  • Provides high level of confidence that your code is ‘syntactically valid’ before deploying
  • Support – starting from v.03, Bicep is 100% supported by Microsoft Support Plans

This time, I am looking forward to share level 200 talk and demos, where we will ALL deep dive into challenges of transforming exisiting ARM templates into Azure Bicep.

We will inspect the ARM JSON decompiler, which comes with Azure Bicep and how to make it work your way.

Stay tunes, i hope to see you all during the event!

 1,717 Reads