# Creating Automated Microsoft Bicep Application Infrastructure from GitHub in the Azure Cloud
## 2 Background and Related Work
### Azure Bicep Overview  
Within the Azure ecosystem, Bicep represents a modern approach to declaratively defining cloud infrastructure. Introduced by Microsoft as an evolution of Azure Resource Manager (ARM) templates, Bicep addresses many of the pain points associated with traditional ARM JSON files. While ARM templates are powerful and widely used, they are often criticized for their verbosity, complexity, and poor readability, especially in large-scale deployments.  
Azure Bicep is a domain-specific language (DSL) explicitly designed to simplify Azure resource provisioning. It compiles transparently to ARM JSON templates, meaning all existing Azure features are supported without sacrificing compatibility. Unlike JSON, Bicep offers a more concise and human-friendly syntax that reduces boilerplate and improves maintainability. This makes it easier for teams to adopt infrastructure as code practices without requiring extensive training or wrestling with cumbersome syntax [7; 9].  
One of the key advantages of Bicep over ARM templates is its support for modularity. With Bicep, teams can define reusable modules for different infrastructure components, promoting code reuse and more precise separation of concerns. Parameters and variables are more intuitive, while tools such as Visual Studio Code extensions provide rich IntelliSense, type checking, and validation features that reduce errors during authoring.  
For example, defining a storage account in ARM JSON requires numerous nested properties and brackets, meaning it can quickly become unwieldy, even for simple resources. In Bicep, the exact definition is reduced to a clear, concise block with improved readability. This clarity is crucial for teams managing large infrastructures or multiple environments, where maintainability and ease of understanding are critical [9; 10].  
```
{ \"Sschema\": \"[[https://schema.management.azure.com/schemas/2019-04-01](https://schema.management.azure.com/schemas/2019-04-01) deploymentTemplate.json#]([https://schema.management.azure.com/schemas/2019-04-01](https://schema.management.azure.com/schemas/2019-04-01) deploymentTemplate.json#)\", \"contentVersion\": \"1.0.0.0\", \"resources\": [ {  \"type\": \"Microsoft.Storage/storageAccounts\", \"apiVersion\": \"2022-09-01\", \"name\": \"[parameters('storageAccountName')]\", \"location\": \"[resourceGroup().location]\", \"sku\": {  \"name\": \"Standard_LRS\" }, \"kind\": \"StorageV2\", \"properties\": {} } } } } }
```  
```
{ \"parameters\": {  \"storageAccountName\": {  \"type\": \"string\" } } }
```  
BICEP:  
```
param storageAccountName string  resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {  name: storageAccountName  location: resourceGroup().location  sku: {  name: 'Standard_LRS' } } kind: 'StorageV2' }
```  
Importantly, Bicep retains full compatibility with Azure's deployment engine. Bicep files compile to ARM templates, meaning all existing deployment mechanisms, policies, and tooling continue to work seamlessly. This ensures that teams adopting Bicep can do so incrementally, without risking compatibility with existing workflows. Bicep represents a significant improvement in authoring experience for Azure infrastructure as code. By emphasizing readability, modularity, and native Azure integration, it lowers the barrier to adopting automated infrastructure provisioning while enabling sophisticated, production-grade deployments [11; 12; 13].