{"id":4314,"date":"2026-06-12T10:46:32","date_gmt":"2026-06-12T10:46:32","guid":{"rendered":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/2026\/06\/12\/using-bicep-modules-to-build-enterprise-grade-azure-infrastructure\/"},"modified":"2026-06-12T10:46:32","modified_gmt":"2026-06-12T10:46:32","slug":"using-bicep-modules-to-build-enterprise-grade-azure-infrastructure","status":"publish","type":"post","link":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/2026\/06\/12\/using-bicep-modules-to-build-enterprise-grade-azure-infrastructure\/","title":{"rendered":"Using Bicep Modules to Build Enterprise-Grade Azure Infrastructure\u00a0"},"content":{"rendered":"<div><img data-opt-id=473738631  fetchpriority=\"high\" decoding=\"async\" width=\"768\" height=\"330\" src=\"https:\/\/devops.com\/wp-content\/uploads\/2020\/10\/infrastructure.jpg\" class=\"attachment-large size-large wp-post-image\" alt=\"infrastructure, Terraform, IaC immutable infrastructure Pulumi GitOps\" \/><\/div>\n<p><img data-opt-id=649700627  fetchpriority=\"high\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/devops.com\/wp-content\/uploads\/2020\/10\/infrastructure-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail wp-post-image\" alt=\"infrastructure, Terraform, IaC immutable infrastructure Pulumi GitOps\" \/><\/p>\n<p><span data-contrast=\"auto\"><a href=\"https:\/\/devops.com\/infrastructure-as-code-iac-the-key-to-agile-and-automated-cloud-deployments\/\" target=\"_blank\" rel=\"noopener\">Infrastructure as\u00a0code\u00a0(IaC) is no longer optional<\/a> in modern Azure environments. Teams need repeatable deployments, secure defaults, predictable architecture and strong governance. Azure Bicep has become the preferred\u00a0IaC\u00a0language for Azure because it\u2019s declarative, simple, modular and deeply integrated with the Azure platform.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">This article breaks down\u00a0<\/span><i><span data-contrast=\"auto\">how to design Bicep modules the right way<\/span><\/i><span data-contrast=\"auto\">\u00a0for enterprise deployments. These patterns come from real-world use cases such as banking, fintech, multitenant SaaS and regulated workloads.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<h3><span data-contrast=\"none\">Why Bicep\u00a0is\u00a0the Standard for Azure\u00a0IaC<\/span><span data-ccp-props='{\"134245418\":true,\"134245529\":true,\"335559738\":160,\"335559739\":80}'>\u00a0<\/span><\/h3>\n<p><span data-contrast=\"auto\">Teams that move from ARM and Terraform to Bicep typically do so because Bicep offers:<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"14\" data-list-defn-props='{\"335552541\":1,\"335559685\":720,\"335559991\":360,\"469769226\":\"Symbol\",\"469769242\":[8226],\"469777803\":\"left\",\"469777804\":\"\uf0b7\",\"469777815\":\"hybridMultilevel\"}' data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Cleaner\u00a0Syntax:\u00a0No more massive JSON ARM templates.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"14\" data-list-defn-props='{\"335552541\":1,\"335559685\":720,\"335559991\":360,\"469769226\":\"Symbol\",\"469769242\":[8226],\"469777803\":\"left\",\"469777804\":\"\uf0b7\",\"469777815\":\"hybridMultilevel\"}' data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">Native Azure\u00a0Integration<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"15\" data-list-defn-props='{\"335552541\":1,\"335559685\":1440,\"335559991\":360,\"469769226\":\"Courier New\",\"469769242\":[9675],\"469777803\":\"left\",\"469777804\":\"o\",\"469777815\":\"hybridMultilevel\"}' data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">IntelliSense<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"15\" data-list-defn-props='{\"335552541\":1,\"335559685\":1440,\"335559991\":360,\"469769226\":\"Courier New\",\"469769242\":[9675],\"469777803\":\"left\",\"469777804\":\"o\",\"469777815\":\"hybridMultilevel\"}' data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">Type-checking<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"15\" data-list-defn-props='{\"335552541\":1,\"335559685\":1440,\"335559991\":360,\"469769226\":\"Courier New\",\"469769242\":[9675],\"469777803\":\"left\",\"469777804\":\"o\",\"469777815\":\"hybridMultilevel\"}' data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"auto\">Automatic API version updates<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"16\" data-list-defn-props='{\"335552541\":1,\"335559685\":720,\"335559991\":360,\"469769226\":\"Symbol\",\"469769242\":[8226],\"469777803\":\"left\",\"469777804\":\"\uf0b7\",\"469777815\":\"hybridMultilevel\"}' data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">First-Class Modularity:\u00a0Modules can describe reusable components like:<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"17\" data-list-defn-props='{\"335552541\":1,\"335559685\":1440,\"335559991\":360,\"469769226\":\"Courier New\",\"469769242\":[9675],\"469777803\":\"left\",\"469777804\":\"o\",\"469777815\":\"hybridMultilevel\"}' data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">App Services<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"17\" data-list-defn-props='{\"335552541\":1,\"335559685\":1440,\"335559991\":360,\"469769226\":\"Courier New\",\"469769242\":[9675],\"469777803\":\"left\",\"469777804\":\"o\",\"469777815\":\"hybridMultilevel\"}' data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">AKS\u00a0clusters<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"17\" data-list-defn-props='{\"335552541\":1,\"335559685\":1440,\"335559991\":360,\"469769226\":\"Courier New\",\"469769242\":[9675],\"469777803\":\"left\",\"469777804\":\"o\",\"469777815\":\"hybridMultilevel\"}' data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"auto\">Front\u00a0Door Premium<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"17\" data-list-defn-props='{\"335552541\":1,\"335559685\":1440,\"335559991\":360,\"469769226\":\"Courier New\",\"469769242\":[9675],\"469777803\":\"left\",\"469777804\":\"o\",\"469777815\":\"hybridMultilevel\"}' data-aria-posinset=\"4\" data-aria-level=\"1\"><span data-contrast=\"auto\">Key\u00a0Vault<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"17\" data-list-defn-props='{\"335552541\":1,\"335559685\":1440,\"335559991\":360,\"469769226\":\"Courier New\",\"469769242\":[9675],\"469777803\":\"left\",\"469777804\":\"o\",\"469777815\":\"hybridMultilevel\"}' data-aria-posinset=\"5\" data-aria-level=\"1\"><span data-contrast=\"auto\">VNet\u00a0+\u00a0subnets<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"17\" data-list-defn-props='{\"335552541\":1,\"335559685\":1440,\"335559991\":360,\"469769226\":\"Courier New\",\"469769242\":[9675],\"469777803\":\"left\",\"469777804\":\"o\",\"469777815\":\"hybridMultilevel\"}' data-aria-posinset=\"6\" data-aria-level=\"1\"><span data-contrast=\"auto\">WAF\u00a0policies<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"17\" data-list-defn-props='{\"335552541\":1,\"335559685\":1440,\"335559991\":360,\"469769226\":\"Courier New\",\"469769242\":[9675],\"469777803\":\"left\",\"469777804\":\"o\",\"469777815\":\"hybridMultilevel\"}' data-aria-posinset=\"7\" data-aria-level=\"1\"><span data-contrast=\"auto\">Private\u00a0endpoints<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"16\" data-list-defn-props='{\"335552541\":1,\"335559685\":720,\"335559991\":360,\"469769226\":\"Symbol\",\"469769242\":[8226],\"469777803\":\"left\",\"469777804\":\"\uf0b7\",\"469777815\":\"hybridMultilevel\"}' data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">Better CI\/CD experience:\u00a0Easier validation,\u00a0what-if deployment\u00a0and GitHub Actions integration.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<h3><span data-contrast=\"none\">How to Structure Bicep Code for Large Azure Environments<\/span><span data-ccp-props='{\"134245418\":true,\"134245529\":true,\"335559738\":160,\"335559739\":80}'>\u00a0<\/span><\/h3>\n<p><span data-contrast=\"auto\">A typical enterprise Bicep structure looks like this:<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\/bicep<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f\u00a0<\/span><span data-contrast=\"none\">\/modules<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f\u00a0<\/span><span data-contrast=\"none\">aks\/<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f \u202f \u202f<\/span><span data-contrast=\"none\">main.bicep<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f\u00a0<\/span><span data-contrast=\"none\">appservice\/<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f \u202f \u202f<\/span><span data-contrast=\"none\">main.bicep<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f\u00a0<\/span><span data-contrast=\"none\">frontdoor\/<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f \u202f \u202f<\/span><span data-contrast=\"none\">main.bicep<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f\u00a0<\/span><span data-contrast=\"none\">keyvault\/<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f \u202f \u202f<\/span><span data-contrast=\"none\">main.bicep<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f\u00a0<\/span><span data-contrast=\"none\">network\/<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f \u202f \u202f<\/span><span data-contrast=\"none\">vnet.bicep<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f \u202f \u202f<\/span><span data-contrast=\"none\">subnet.bicep<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f\u00a0<\/span><span data-contrast=\"none\">storage\/<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f \u202f \u202f<\/span><span data-contrast=\"none\">main.bicep<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f\u00a0<\/span><span data-contrast=\"none\">\/environment<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f\u00a0<\/span><span data-contrast=\"none\">dev\/<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f \u202f \u202f<\/span><span data-contrast=\"none\">main.bicep<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f \u202f \u202f<\/span><span data-contrast=\"none\">params.json<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f\u00a0<\/span><span data-contrast=\"none\">qa\/<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f \u202f \u202f<\/span><span data-contrast=\"none\">main.bicep<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f \u202f \u202f<\/span><span data-contrast=\"none\">params.json<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f\u00a0<\/span><span data-contrast=\"none\">prod\/<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f \u202f \u202f<\/span><span data-contrast=\"none\">main.bicep<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f \u202f \u202f<\/span><span data-contrast=\"none\">params.json<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<h3><span data-contrast=\"none\">Key\u00a0Points<\/span><span data-ccp-props='{\"134245418\":true,\"134245529\":true,\"335559738\":160,\"335559739\":80}'>\u00a0<\/span><\/h3>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"16\" data-list-defn-props='{\"335552541\":1,\"335559685\":720,\"335559991\":360,\"469769226\":\"Symbol\",\"469769242\":[8226],\"469777803\":\"left\",\"469777804\":\"\uf0b7\",\"469777815\":\"hybridMultilevel\"}' data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"auto\">Modules live separately and never store environment-specific values.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"16\" data-list-defn-props='{\"335552541\":1,\"335559685\":720,\"335559991\":360,\"469769226\":\"Symbol\",\"469769242\":[8226],\"469777803\":\"left\",\"469777804\":\"\uf0b7\",\"469777815\":\"hybridMultilevel\"}' data-aria-posinset=\"4\" data-aria-level=\"1\"><span data-contrast=\"auto\">Environment folders contain:<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"3\" data-list-defn-props='{\"335552541\":1,\"335559685\":1440,\"335559991\":360,\"469769226\":\"Courier New\",\"469769242\":[9675],\"469777803\":\"left\",\"469777804\":\"o\",\"469777815\":\"multilevel\"}' data-aria-posinset=\"1\" data-aria-level=\"2\"><span data-contrast=\"auto\">main.bicep\u00a0(composition file)<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"3\" data-list-defn-props='{\"335552541\":1,\"335559685\":1440,\"335559991\":360,\"469769226\":\"Courier New\",\"469769242\":[9675],\"469777803\":\"left\",\"469777804\":\"o\",\"469777815\":\"multilevel\"}' data-aria-posinset=\"2\" data-aria-level=\"2\"><span data-contrast=\"auto\">params.json\u00a0(per-environment values)<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">This ensures consistency across dev \u2192\u00a0qa\u00a0\u2192 prod.\u00a0<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<h3><span data-contrast=\"none\">Designing a Bicep Module Correctly<\/span><span data-ccp-props='{\"134245418\":true,\"134245529\":true,\"335559738\":160,\"335559739\":80}'>\u00a0<\/span><\/h3>\n<p><span data-contrast=\"auto\">A module should follow five rules:<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><strong>1. It should deploy one resource (or a tightly-related set).\u00a0<\/strong><\/p>\n<p><span data-contrast=\"auto\">Examples:<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"4\" data-list-defn-props='{\"335552541\":1,\"335559685\":720,\"335559991\":360,\"469769226\":\"Symbol\",\"469769242\":[8226],\"469777803\":\"left\",\"469777804\":\"\uf0b7\",\"469777815\":\"multilevel\"}' data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">A single App\u00a0Service<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"4\" data-list-defn-props='{\"335552541\":1,\"335559685\":720,\"335559991\":360,\"469769226\":\"Symbol\",\"469769242\":[8226],\"469777803\":\"left\",\"469777804\":\"\uf0b7\",\"469777815\":\"multilevel\"}' data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">A single AKS\u00a0cluster<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"4\" data-list-defn-props='{\"335552541\":1,\"335559685\":720,\"335559991\":360,\"469769226\":\"Symbol\",\"469769242\":[8226],\"469777803\":\"left\",\"469777804\":\"\uf0b7\",\"469777815\":\"multilevel\"}' data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"auto\">A\u00a0VNet\u00a0with\u00a0subnets<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><strong>2. It must <i>not<\/i>\u00a0contain environment-specific values.\u00a0<\/strong><\/p>\n<p><span data-contrast=\"auto\">These belong in parameter files.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><strong>3. It should expose outputs.\u00a0<\/strong><\/p>\n<p><span data-contrast=\"auto\">Useful for chaining modules:<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">output\u00a0appServiceId\u00a0string = appService.id<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">output\u00a0principalId\u00a0string =\u00a0appService.identity.principalId<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p>\u00a0<\/p>\n<p><strong>4. It must include secure parameter types.\u00a0<\/strong><\/p>\n<p><span data-contrast=\"none\">@<\/span><span data-contrast=\"none\">secure()<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">param\u00a0adminPassword\u00a0string<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p>\u00a0<\/p>\n<p><strong>5. It should include defaults but allow overrides.\u00a0<\/strong><\/p>\n<p><span data-contrast=\"none\">param\u00a0sku\u00a0string = \u2018P1v3\u2019<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">param\u00a0httpsOnly\u00a0bool = true<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<h3><span data-contrast=\"none\">Example of an Enterprise Bicep Module (App Service + Custom Domain)<\/span><span data-ccp-props='{\"134245418\":true,\"134245529\":true,\"335559738\":160,\"335559739\":80}'>\u00a0<\/span><\/h3>\n<p><span data-contrast=\"auto\">Here is a production-ready example you can reuse.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">modules\/appservice\/main.bicep<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">param name string<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">param location string<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">param\u00a0skuName\u00a0string = \u2018P1v3\u2019<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">param\u00a0httpsOnly\u00a0bool = true<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">param\u00a0customDomain\u00a0string<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">param\u00a0certificateThumbprint\u00a0string<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">resource\u00a0appService\u00a0\u2018Microsoft.Web\/sites@2023-01-01\u2019 = {<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f\u00a0<\/span><span data-contrast=\"none\">name<\/span><span data-contrast=\"none\">:\u00a0<\/span><span data-contrast=\"none\">name<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f\u00a0<\/span><span data-contrast=\"none\">location<\/span><span data-contrast=\"none\">:\u00a0<\/span><span data-contrast=\"none\">location<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f\u00a0<\/span><span data-contrast=\"none\">properties<\/span><span data-contrast=\"none\">: {<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f\u00a0<\/span><span data-contrast=\"none\">httpsOnly<\/span><span data-contrast=\"none\">:\u00a0<\/span><span data-contrast=\"none\">httpsOnly<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f }<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f\u00a0<\/span><span data-contrast=\"none\">sku<\/span><span data-contrast=\"none\">: {<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f\u00a0<\/span><span data-contrast=\"none\">name<\/span><span data-contrast=\"none\">:\u00a0<\/span><span data-contrast=\"none\">skuName<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f\u00a0<\/span><span data-contrast=\"none\">tier<\/span><span data-contrast=\"none\">:\u00a0<\/span><span data-contrast=\"none\">\u2018PremiumV3\u2019<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f }<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">}<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">resource binding \u2018Microsoft.Web\/sites\/hostNameBindings@2023-01-01\u2019 = {<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f\u00a0<\/span><span data-contrast=\"none\">name<\/span><span data-contrast=\"none\">:\u00a0<\/span><span data-contrast=\"none\">\u2018${name}\/${customDomain}\u2019<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f\u00a0<\/span><span data-contrast=\"none\">properties<\/span><span data-contrast=\"none\">: {<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f\u00a0<\/span><span data-contrast=\"none\">customHostNameDnsRecordType<\/span><span data-contrast=\"none\">:\u00a0<\/span><span data-contrast=\"none\">\u2018CName\u2019<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f\u00a0<\/span><span data-contrast=\"none\">sslState<\/span><span data-contrast=\"none\">:\u00a0<\/span><span data-contrast=\"none\">\u2018SniEnabled\u2019<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f\u00a0<\/span><span data-contrast=\"none\">thumbprint<\/span><span data-contrast=\"none\">:\u00a0<\/span><span data-contrast=\"none\">certificateThumbprint<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f }<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">}<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">output id string = appService.id<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">output\u00a0defaultHostname\u00a0string =\u00a0appService.properties.defaultHostName<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">This module:<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" data-list-defn-props='{\"335552541\":1,\"335559685\":720,\"335559991\":360,\"469769226\":\"Symbol\",\"469769242\":[8226],\"469777803\":\"left\",\"469777804\":\"\uf0b7\",\"469777815\":\"multilevel\"}' data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Deploys a premium\u00a0App Service<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" data-list-defn-props='{\"335552541\":1,\"335559685\":720,\"335559991\":360,\"469769226\":\"Symbol\",\"469769242\":[8226],\"469777803\":\"left\",\"469777804\":\"\uf0b7\",\"469777815\":\"multilevel\"}' data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">Enforces HTTPS<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" data-list-defn-props='{\"335552541\":1,\"335559685\":720,\"335559991\":360,\"469769226\":\"Symbol\",\"469769242\":[8226],\"469777803\":\"left\",\"469777804\":\"\uf0b7\",\"469777815\":\"multilevel\"}' data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"auto\">Adds custom domain with SNI certificate binding<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" data-list-defn-props='{\"335552541\":1,\"335559685\":720,\"335559991\":360,\"469769226\":\"Symbol\",\"469769242\":[8226],\"469777803\":\"left\",\"469777804\":\"\uf0b7\",\"469777815\":\"multilevel\"}' data-aria-posinset=\"4\" data-aria-level=\"1\"><span data-contrast=\"auto\">Exports outputs for Front Door or API Management<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<h3><span data-contrast=\"none\">Composing Multiple Modules\u00a0With an Environment File<\/span><span data-ccp-props='{\"134245418\":true,\"134245529\":true,\"335559738\":160,\"335559739\":80}'>\u00a0<\/span><\/h3>\n<p><span data-contrast=\"auto\">Example: prod\/main.bicep<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">param location string = \u2018westeurope\u2019<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">param\u00a0appName\u00a0string = \u2018prod-myapp\u2019<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">param domain string = \u2018api.company.com\u2019<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">param\u00a0certThumbprint\u00a0string<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">module\u00a0appService\u00a0\u2018.\/modules\/appservice\/main.bicep\u2019 = {<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f\u00a0<\/span><span data-contrast=\"none\">name<\/span><span data-contrast=\"none\">:\u00a0<\/span><span data-contrast=\"none\">\u2018prodAppService\u2019<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f\u00a0<\/span><span data-contrast=\"none\">params<\/span><span data-contrast=\"none\">: {<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f\u00a0<\/span><span data-contrast=\"none\">name<\/span><span data-contrast=\"none\">:\u00a0<\/span><span data-contrast=\"none\">appName<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f\u00a0<\/span><span data-contrast=\"none\">location<\/span><span data-contrast=\"none\">:\u00a0<\/span><span data-contrast=\"none\">location<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f\u00a0<\/span><span data-contrast=\"none\">skuName<\/span><span data-contrast=\"none\">:\u00a0<\/span><span data-contrast=\"none\">\u2018P2v3\u2019<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f\u00a0<\/span><span data-contrast=\"none\">customDomain<\/span><span data-contrast=\"none\">:\u00a0<\/span><span data-contrast=\"none\">domain<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f\u00a0<\/span><span data-contrast=\"none\">certificateThumbprint<\/span><span data-contrast=\"none\">:\u00a0<\/span><span data-contrast=\"none\">certThumbprint<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f }<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">}<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">module\u00a0frontdoor\u00a0\u2018.\/modules\/frontdoor\/main.bicep\u2019 = {<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f\u00a0<\/span><span data-contrast=\"none\">name<\/span><span data-contrast=\"none\">:\u00a0<\/span><span data-contrast=\"none\">\u2018prodFrontDoor\u2019<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f\u00a0<\/span><span data-contrast=\"none\">params<\/span><span data-contrast=\"none\">: {<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f\u00a0<\/span><span data-contrast=\"none\">backendHostname<\/span><span data-contrast=\"none\">:\u00a0<\/span><span data-contrast=\"none\">appService.outputs.defaultHostname<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f\u00a0<\/span><span data-contrast=\"none\">backendId<\/span><span data-contrast=\"none\">:\u00a0<\/span><span data-contrast=\"none\">appService.outputs.id<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f }<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">}<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Why this matters:<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"6\" data-list-defn-props='{\"335552541\":1,\"335559685\":720,\"335559991\":360,\"469769226\":\"Symbol\",\"469769242\":[8226],\"469777803\":\"left\",\"469777804\":\"\uf0b7\",\"469777815\":\"multilevel\"}' data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Front Door depends on App Service output<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"6\" data-list-defn-props='{\"335552541\":1,\"335559685\":720,\"335559991\":360,\"469769226\":\"Symbol\",\"469769242\":[8226],\"469777803\":\"left\",\"469777804\":\"\uf0b7\",\"469777815\":\"multilevel\"}' data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">Environment parameters flow through modules cleanly<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"6\" data-list-defn-props='{\"335552541\":1,\"335559685\":720,\"335559991\":360,\"469769226\":\"Symbol\",\"469769242\":[8226],\"469777803\":\"left\",\"469777804\":\"\uf0b7\",\"469777815\":\"multilevel\"}' data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"auto\">No duplication of logic<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"6\" data-list-defn-props='{\"335552541\":1,\"335559685\":720,\"335559991\":360,\"469769226\":\"Symbol\",\"469769242\":[8226],\"469777803\":\"left\",\"469777804\":\"\uf0b7\",\"469777815\":\"multilevel\"}' data-aria-posinset=\"4\" data-aria-level=\"1\"><span data-contrast=\"auto\">Clear separation of concerns<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<h3><span data-contrast=\"none\">Adding CI\/CD\u00a0With GitHub Actions<\/span><span data-ccp-props='{\"134245418\":true,\"134245529\":true,\"335559738\":160,\"335559739\":80}'>\u00a0<\/span><\/h3>\n<p><span data-contrast=\"auto\">A recommended pipeline:\u00a0<\/span><i><span data-contrast=\"auto\">Validate \u2192 what-if \u2192 deploy<\/span><\/i><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">name<\/span><span data-contrast=\"none\">:\u00a0<\/span><span data-contrast=\"none\">Deploy Bicep<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">on<\/span><span data-contrast=\"none\">:<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f\u00a0<\/span><span data-contrast=\"none\">push<\/span><span data-contrast=\"none\">:<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f\u00a0<\/span><span data-contrast=\"none\">branches<\/span><span data-contrast=\"none\">:<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f \u2013\u00a0<\/span><span data-contrast=\"none\">main<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">jobs<\/span><span data-contrast=\"none\">:<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f\u00a0<\/span><span data-contrast=\"none\">deploy<\/span><span data-contrast=\"none\">:<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f\u00a0<\/span><span data-contrast=\"none\">runs-on<\/span><span data-contrast=\"none\">:\u00a0<\/span><span data-contrast=\"none\">ubuntu-latest<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f\u00a0<\/span><span data-contrast=\"none\">steps<\/span><span data-contrast=\"none\">:<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u2013\u00a0<\/span><span data-contrast=\"none\">uses<\/span><span data-contrast=\"none\">:\u00a0<\/span><span data-contrast=\"none\">actions\/checkout@v4<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f\u00a0<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u2013\u00a0<\/span><span data-contrast=\"none\">uses<\/span><span data-contrast=\"none\">:\u00a0<\/span><span data-contrast=\"none\">azure\/login@v1<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f\u00a0<\/span><span data-contrast=\"none\">with<\/span><span data-contrast=\"none\">:<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f \u202f\u00a0<\/span><span data-contrast=\"none\">client-id<\/span><span data-contrast=\"none\">:\u00a0<\/span><span data-contrast=\"none\">${{\u00a0secrets.AZURE_CLIENT_ID\u00a0}}<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f \u202f\u00a0<\/span><span data-contrast=\"none\">tenant-id<\/span><span data-contrast=\"none\">:\u00a0<\/span><span data-contrast=\"none\">${{\u00a0secrets.AZURE_TENANT_ID\u00a0}}<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f \u202f\u00a0<\/span><span data-contrast=\"none\">subscription-id<\/span><span data-contrast=\"none\">:\u00a0<\/span><span data-contrast=\"none\">${{\u00a0secrets.AZURE_SUBSCRIPTION_ID\u00a0}}<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u2013\u00a0<\/span><span data-contrast=\"none\">name<\/span><span data-contrast=\"none\">:\u00a0<\/span><span data-contrast=\"none\">Validate<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f\u00a0<\/span><span data-contrast=\"none\">run<\/span><span data-contrast=\"none\">:\u00a0<\/span><span data-contrast=\"none\">|<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f \u202f\u00a0az\u00a0deployment sub validate <\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f \u202f \u202f \u2013template-file environment\/prod\/main.bicep<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u2013\u00a0<\/span><span data-contrast=\"none\">name<\/span><span data-contrast=\"none\">:\u00a0<\/span><span data-contrast=\"none\">What-If<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f\u00a0<\/span><span data-contrast=\"none\">run<\/span><span data-contrast=\"none\">:\u00a0<\/span><span data-contrast=\"none\">|<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f \u202f\u00a0az\u00a0deployment sub what-if <\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f \u202f \u202f \u2013template-file environment\/prod\/main.bicep<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u2013\u00a0<\/span><span data-contrast=\"none\">name<\/span><span data-contrast=\"none\">:\u00a0<\/span><span data-contrast=\"none\">Deploy<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f\u00a0<\/span><span data-contrast=\"none\">run<\/span><span data-contrast=\"none\">:\u00a0<\/span><span data-contrast=\"none\">|<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f \u202f\u00a0az\u00a0deployment sub create <\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u202f \u202f \u202f \u202f \u202f \u2013template-file environment\/prod\/main.bicep<\/span><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-ccp-props='{\"201341983\":2,\"335557856\":2039583,\"335559739\":0,\"335559740\":285}'>\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">This gives:<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"7\" data-list-defn-props='{\"335552541\":1,\"335559685\":720,\"335559991\":360,\"469769226\":\"Symbol\",\"469769242\":[8226],\"469777803\":\"left\",\"469777804\":\"\uf0b7\",\"469777815\":\"multilevel\"}' data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Predictable deployments<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"7\" data-list-defn-props='{\"335552541\":1,\"335559685\":720,\"335559991\":360,\"469769226\":\"Symbol\",\"469769242\":[8226],\"469777803\":\"left\",\"469777804\":\"\uf0b7\",\"469777815\":\"multilevel\"}' data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">No manual approvals<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"7\" data-list-defn-props='{\"335552541\":1,\"335559685\":720,\"335559991\":360,\"469769226\":\"Symbol\",\"469769242\":[8226],\"469777803\":\"left\",\"469777804\":\"\uf0b7\",\"469777815\":\"multilevel\"}' data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"auto\">Auditability<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"7\" data-list-defn-props='{\"335552541\":1,\"335559685\":720,\"335559991\":360,\"469769226\":\"Symbol\",\"469769242\":[8226],\"469777803\":\"left\",\"469777804\":\"\uf0b7\",\"469777815\":\"multilevel\"}' data-aria-posinset=\"4\" data-aria-level=\"1\"><span data-contrast=\"auto\">Cloud-native authentication via OIDC (no secrets)<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<h3><span data-contrast=\"none\">Governance and Enforcement Using Azure Policy<\/span><span data-ccp-props='{\"134245418\":true,\"134245529\":true,\"335559738\":160,\"335559739\":80}'>\u00a0<\/span><\/h3>\n<p><span data-contrast=\"auto\">Azure Policy can enforce\u00a0IaC\u00a0best practices, for example:<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"8\" data-list-defn-props='{\"335552541\":1,\"335559685\":720,\"335559991\":360,\"469769226\":\"Symbol\",\"469769242\":[8226],\"469777803\":\"left\",\"469777804\":\"\uf0b7\",\"469777815\":\"multilevel\"}' data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Allow only\u00a0Bicep deployments\u00a0(tagging rules)<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"8\" data-list-defn-props='{\"335552541\":1,\"335559685\":720,\"335559991\":360,\"469769226\":\"Symbol\",\"469769242\":[8226],\"469777803\":\"left\",\"469777804\":\"\uf0b7\",\"469777815\":\"multilevel\"}' data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">Enforce HTTPS-only App Services<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"8\" data-list-defn-props='{\"335552541\":1,\"335559685\":720,\"335559991\":360,\"469769226\":\"Symbol\",\"469769242\":[8226],\"469777803\":\"left\",\"469777804\":\"\uf0b7\",\"469777815\":\"multilevel\"}' data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"auto\">Enforce diagnostic logs<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"8\" data-list-defn-props='{\"335552541\":1,\"335559685\":720,\"335559991\":360,\"469769226\":\"Symbol\",\"469769242\":[8226],\"469777803\":\"left\",\"469777804\":\"\uf0b7\",\"469777815\":\"multilevel\"}' data-aria-posinset=\"4\" data-aria-level=\"1\"><span data-contrast=\"auto\">Prevent public IP creation<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"8\" data-list-defn-props='{\"335552541\":1,\"335559685\":720,\"335559991\":360,\"469769226\":\"Symbol\",\"469769242\":[8226],\"469777803\":\"left\",\"469777804\":\"\uf0b7\",\"469777815\":\"multilevel\"}' data-aria-posinset=\"5\" data-aria-level=\"1\"><span data-contrast=\"auto\">Require private endpoints<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">These policies make sure all deployments\u00a0\u2014\u00a0Bicep or otherwise\u00a0\u2014\u00a0follow standards.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<h3><span data-contrast=\"none\">Final Thoughts<\/span><span data-ccp-props='{\"134245418\":true,\"134245529\":true,\"335559738\":160,\"335559739\":80}'>\u00a0<\/span><\/h3>\n<p><span data-contrast=\"auto\">Bicep is ideal for building large Azure environments when done correctly. By using a module-based approach, separating environment values, integrating CI\/CD and combining everything with Azure Policy, you get:<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"9\" data-list-defn-props='{\"335552541\":1,\"335559685\":720,\"335559991\":360,\"469769226\":\"Symbol\",\"469769242\":[8226],\"469777803\":\"left\",\"469777804\":\"\uf0b7\",\"469777815\":\"multilevel\"}' data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Standardized deployments<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"9\" data-list-defn-props='{\"335552541\":1,\"335559685\":720,\"335559991\":360,\"469769226\":\"Symbol\",\"469769242\":[8226],\"469777803\":\"left\",\"469777804\":\"\uf0b7\",\"469777815\":\"multilevel\"}' data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">Reusable patterns<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"9\" data-list-defn-props='{\"335552541\":1,\"335559685\":720,\"335559991\":360,\"469769226\":\"Symbol\",\"469769242\":[8226],\"469777803\":\"left\",\"469777804\":\"\uf0b7\",\"469777815\":\"multilevel\"}' data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"auto\">Lower operational overhead<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"9\" data-list-defn-props='{\"335552541\":1,\"335559685\":720,\"335559991\":360,\"469769226\":\"Symbol\",\"469769242\":[8226],\"469777803\":\"left\",\"469777804\":\"\uf0b7\",\"469777815\":\"multilevel\"}' data-aria-posinset=\"4\" data-aria-level=\"1\"><span data-contrast=\"auto\">Strong governance<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"9\" data-list-defn-props='{\"335552541\":1,\"335559685\":720,\"335559991\":360,\"469769226\":\"Symbol\",\"469769242\":[8226],\"469777803\":\"left\",\"469777804\":\"\uf0b7\",\"469777815\":\"multilevel\"}' data-aria-posinset=\"5\" data-aria-level=\"1\"><span data-contrast=\"auto\">Easier AKS, App Service and\u00a0Front Door\u00a0automation<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">These practices are exactly what senior-level architects and MVP reviewers look for, because they demonstrate real-world engineering maturity.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><a href=\"https:\/\/devops.com\/using-bicep-modules-to-build-enterprise-grade-azure-infrastructure\/\" target=\"_blank\" class=\"feedzy-rss-link-icon\">Read More<\/a><\/p>\n<p>\u200b<\/p>","protected":false},"excerpt":{"rendered":"<p>Infrastructure as\u00a0code\u00a0(IaC) is no longer optional in modern Azure environments. Teams need repeatable deployments, secure defaults, predictable architecture and strong [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":4315,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[5],"tags":[],"class_list":["post-4314","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devops"],"_links":{"self":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts\/4314","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/comments?post=4314"}],"version-history":[{"count":0,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts\/4314\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/media\/4315"}],"wp:attachment":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/media?parent=4314"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/categories?post=4314"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/tags?post=4314"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}