bicep-ptn-aiml-landing-zone Agent工作流 是 AI Skill Hub 本期精选Agent工作流之一。综合评分 8.0 分,整体质量较高。我们强烈推荐将其纳入你的 AI 工具库,帮助提升工作效率。
bicep-ptn-aiml-landing-zone Agent工作流 是一套完整的 AI Agent 自动化工作流方案。通过可视化的节点编排,将复杂的多步骤任务拆解为清晰的自动化流程,实现全程无人值守的智能处理。支持与数百种外部服务和 API 无缝集成,适合构建数据处理管线、业务自动化和 AI 辅助决策系统。
bicep-ptn-aiml-landing-zone Agent工作流 是一套完整的 AI Agent 自动化工作流方案。通过可视化的节点编排,将复杂的多步骤任务拆解为清晰的自动化流程,实现全程无人值守的智能处理。支持与数百种外部服务和 API 无缝集成,适合构建数据处理管线、业务自动化和 AI 辅助决策系统。
# 克隆仓库 git clone https://github.com/Azure/bicep-ptn-aiml-landing-zone cd bicep-ptn-aiml-landing-zone # 查看安装说明 cat README.md # 按 README 完成环境依赖安装后即可使用
# 查看帮助 bicep-ptn-aiml-landing-zone --help # 基本运行 bicep-ptn-aiml-landing-zone [options] <input> # 详细使用说明请查阅文档 # https://github.com/Azure/bicep-ptn-aiml-landing-zone
# bicep-ptn-aiml-landing-zone 配置说明 # 查看配置选项 bicep-ptn-aiml-landing-zone --config-example > config.yml # 常见配置项 # output_dir: ./output # log_level: info # workers: 4 # 环境变量(覆盖配置文件) export BICEP_PTN_AIML_LANDING_ZONE_CONFIG="/path/to/config.yml"
The Azure AI Landing Zone is an enterprise-scale, production-ready reference architecture designed to deploy secure and resilient AI applications and agents on Azure. This repository contains the Bicep implementation, the Terraform implementations are available in separate repositories.

The v2 line adds two things that matter most for everyday use:
1. A topology switch — set deploymentMode to one of: - standalone — the AI Landing Zone provisions everything it needs (VNet, private endpoints, Bastion, jumpbox, NAT Gateway, observability). Best for sandboxes, evaluations, and teams without a corporate hub. - ailz-integrated — the AI Landing Zone deploys only the spoke (VNet + private endpoints + AI services) and peers into a hub VNet you already operate, reusing the hub's Firewall, Bastion, Private DNS zones, and Log Analytics workspace. Best for production inside an existing Azure Landing Zone. 2. Granular reuse of existing resources — every platform service can be brought from the outside via an existing*ResourceId parameter (cross-subscription IDs are accepted): Log Analytics, Application Insights, Private DNS zones (per zone, 15 available), hub VNet, jumpbox, Bastion, NAT Gateway, route table.
A handful of other quality-of-life additions:
allowedIpRanges — let named CIDRs reach the data plane of Storage, Key Vault, Cosmos DB, AI Search, ACR, AI Foundry, and App Configuration without disabling private endpoints. Use this when developers need to query the workload from their laptops without routing through Bastion.deployJumpbox, deployBastion, and deployNatGateway are now independent flags. No more all-or-nothing deployVM.hubIntegration.hubVnetResourceId creates the spoke→hub peering for you; hubIntegration.egressNextHopIp routes spoke egress through your hub firewall / NVA.scripts/Invoke-PreflightChecks.ps1 runs automatically as an azd preprovision hook and catches the usual mistakes (CIDR overlap, undersized subnets, missing BYO resource IDs, conflicting flags) before they reach ARM. Bypass with PREFLIGHT_SKIP=true.Pick a runbook to deploy:
If you're upgrading from v1.x, see the migration guide — it shows what changed in v2 and the parameters you may need to update.
Required Permissions:
Required Tools:
Azure CLI is included as a prerequisite for future pre/post provisioning hooks that may depend on it.
Choose your preferred deployment method based on project requirements and environment constraints.
Quick setup for demos without network isolation.
Initialize the project
azd init -t azure/bicep-ptn-aiml-landing-zone
Sign in to Azure
az login
azd auth login
Add--tenantforazor--tenant-idforazdif you want a specific tenant.
Provision Infrastructure
azd provision > Optional: You can change parameter values in main.parameters.json or set them using azd env set before running azd provision. The latter applies only to parameters that support environment variable substitution.
For deployments that require network isolation.
Before Provisioning
Enable network isolation in your environment:
azd env set NETWORK_ISOLATION true
Optional: Update other parameters inmain.parameters.jsonor viaazd env setbefore provisioning.
Make sure you're signed in with your Azure user account:
az login
azd auth login
Add--tenantforazor--tenant-idforazdif you want a specific tenant.
Provision Infrastructure
azd provision
Using the Jumpbox VM
testvmuserThe default install.ps1 bootstrap clones this repository to C:\github\ai-lz and walks manifest.json#components for additional repos. Downstream solution accelerators that consume this landing zone as a Bicep module / git submodule and need their own application repository present on the jumpbox (for private-network data-plane post-provisioning — Cosmos seeding, AI Search index creation, sample data loading, etc.) declare those repos in their overlay manifest.json:
{
"tag": "v1.0.0",
"ailz_tag": "v1.1.1",
"components": [
{
"name": "voice-app",
"repo": "https://github.com/Contoso/voice-app.git",
"tag": "v0.3.0"
}
]
}
main.bicep derives the URLs/tags/names from _manifest.components at compile time and forwards them to install.ps1 over the CSE commandToExecute. Each entry is cloned into C:\github\<name> on the jumpbox. tag defaults to main; name defaults to the repo URL basename without .git. There are no per-deployment Bicep parameters to wire — manifest.json is the single source of truth, the same one consumers already use to pin their ailz_tag release.
When networkIsolation=true, the Container Registry is deployed as Premium with publicNetworkAccess=Disabled and is only reachable via its private endpoint. az acr build against the shared Microsoft-managed builder will fail. This landing zone therefore provisions an ACR Tasks agent pool attached to the devops-build-agents-subnet so image builds run inside the VNet and push to the registry over its private endpoint. No Docker client is required (and the jumpbox has no Docker installed by design — see issue #14).
Build and push from the jumpbox (or any client that can reach ARM):
$acr = (azd env get-values | Select-String '^AZURE_CONTAINER_REGISTRY_ENDPOINT').Line.Split('=')[1].Trim('"').Split('.')[0]
$pool = (azd env get-values | Select-String '^ACR_TASK_AGENT_POOL').Line.Split('=')[1].Trim('"')
az acr build `
-r $acr `
--agent-pool $pool `
-t myapp:latest `
-f Dockerfile `
.
Pause billing between builds (default tier S1 is billed per hour whether idle or not):
az acr agentpool update -r <acr> -n <pool> --count 0
Resume before the next build:
az acr agentpool update -r <acr> -n <pool> --count 1
The agent pool can be disabled entirely with deployAcrTaskAgentPool=false if builds are handled by a central CI/CD runner that already reaches the registry's private endpoint.
When networkIsolation=true, egress from the jumpbox and workload subnets is forced through the default Azure Firewall. The landing zone codifies the FQDNs required by the default install.ps1 bootstrap and by the ACR Tasks agent pool. The set is split by purpose so you can audit or trim it:
*.azurecr.io, *.data.azurecr.io, and Azure Storage queue/blob/table FQDNs.packages.microsoft.com for Microsoft-supported Linux packages such as msodbcsql18.If your application build needs additional HTTPS endpoints, add them to the additionalAcrTaskBuildFqdns array parameter. The values are appended to the ACR Tasks HTTPS runtime rule only when networkIsolation, deployAzureFirewall, deployAcrTaskAgentPool, and extendFirewallForAcrTaskBuilds are all enabled, and are scoped to the devops-build-agents-subnet.
| Rule | Source subnet | FQDN group | Used by |
|---|---|---|---|
AllowMicrosoftContainerRegistry | * | mcr.microsoft.com, *.data.mcr.microsoft.com | ACA/agents/ACR Tasks pulling Microsoft base images |
AllowEntraIdAuth | * | login.microsoftonline.com, login.windows.net, management.azure.com, graph.microsoft.com, *.applicationinsights.azure.com | Entra ID auth, ARM control plane, App Insights telemetry |
AllowGitHub | * | github.com, *.github.com, raw.githubusercontent.com, codeload.github.com, objects.githubusercontent.com, *.githubusercontent.com | Repo clones, release downloads |
AllowJumpboxBootstrap | jumpboxSubnetPrefix | Chocolatey, NuGet, VS Installer, download.microsoft.com, aka.ms, go.microsoft.com, *.core.windows.net, *.azureedge.net | choco install, VS Code/PowerShell Core/Azure CLI/AZD MSIs (Python is installed from python.org embeddable zip — see AllowJumpboxDevRuntimes) |
AllowJumpboxDevRuntimes | jumpboxSubnetPrefix | *.python.org, *.pypi.org, *.pythonhosted.org, *.pypa.io, *.npmjs.org | pip install, npm install, jumpbox Python embeddable-zip install + get-pip.py bootstrap |
AllowJumpboxEditors | jumpboxSubnetPrefix | update.code.visualstudio.com, *.vo.msecnd.net, *.vscode-cdn.net | VS Code updates |
AllowJumpboxAcme | jumpboxSubnetPrefix | api.github.com, acme-v02.api.letsencrypt.org | win-acme release discovery + ACME v2 issuance/renewal from jumpbox |
AllowAcrTasks | devopsBuildAgentsSubnetPrefix | *.azurecr.io, *.data.azurecr.io | ACR Tasks agent pool talking to its registry |
Set extendFirewallForJumpboxBootstrap=false to skip the jumpbox-scoped rules when egress is managed centrally by another policy.
Issue #49. The landing zone provisions the Container Apps environment in internal mode under network isolation, so its apps are unreachable from the public Internet by default. Some workloads need a controlled, audited public entry point (a tester, a partner integration, a public demo). The optional publicIngress feature deploys an Application Gateway WAF v2 in front of the internal ACA environment without changing any of the existing internal topology.
⚠️ Cost warning. Enabling this feature deploys WAF_v2 + a Standard Public IP, which incur hourly charges even when idle (~USD 240/month for the gateway alone, region-dependent). KeeppublicIngress.enabled = falseunless actively needed and tear the stack down withazd down(or delete the resources manually) when the access window ends. SettingpublicIngress.enabledback tofalseafter a deploy will NOT delete the resources —azd/ARM incremental deployments only stop managing them.
Default state: disabled. No public-ingress resources are provisioned.
Parameter contract (publicIngressType exported from main.bicep):
publicIngress: {
enabled: bool // master toggle, default false
backendAppIndex: int? // index into containerAppsList; default 0
frontendHostName: string? // e.g., 'app.contoso.com' — required to activate HTTPS
sslCertSecretId: string? // versionless Key Vault secret URI — required to activate HTTPS
allowedSourceAddressPrefixes: string[]? // CIDRs allowed to reach :443; empty list = deny-all
wafMode: ('Prevention' | 'Detection')? // default 'Prevention'
wafCustomRules: object[]? // merged with OWASP CRS 3.2 managed ruleset
capacity: object? // default { minCapacity: 0, maxCapacity: 2 }
sslPolicy: object? // default Azure baseline
}
Resources deployed when enabled = true (only effective with networkIsolation, deployContainerEnv, and at least one entry in containerAppsList):
| Resource | Purpose |
|---|---|
Microsoft.Network/networkSecurityGroups (nsg-<vnet>-AppGatewaySubnet) | Deny-all inbound except GatewayManager (65200-65535) and AzureLoadBalancer. Adds an AllowHttpsFromAllowedSources rule on TCP/443 only when allowedSourceAddressPrefixes is non-empty. **Port 80 is never opened from the Internet.** |
Microsoft.Network/publicIPAddresses | Standard SKU, Static, zone-redundant when useZoneRedundancy=true. |
Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies | OWASP CRS 3.2, mode Prevention (or Detection), wafCustomRules merged in. |
Microsoft.ManagedIdentity/userAssignedIdentities | Dedicated UAI for the gateway. |
Microsoft.Authorization/roleAssignments (Key Vault Secrets User) | Granted to the AGW UAI on the landing-zone Key Vault when deployKeyVault=true. External Key Vaults must be granted manually. |
Microsoft.Network/applicationGateways | WAF_v2 SKU, autoscale 0..2, zone-redundant, attached to the existing AppGatewaySubnet (192.168.3.0/27). Backend pool targets the Container App's internal FQDN over HTTPS:443 with pickHostNameFromBackendAddress=true. |
| Diagnostic settings | Streamed to the existing Log Analytics workspace (allLogs + AllMetrics). |
Two operational states:
1. Skeleton mode (enabled=true and either sslCertSecretId or frontendHostName empty) - Gateway exists with a single HTTP:80 listener routed to the backend. - NSG denies all Internet inbound (port 80 is never opened by the NSG). - The skeleton is inert: no client can reach it from the Internet until the operator transitions to live mode.
2. Live mode (enabled=true with both sslCertSecretId and frontendHostName set, plus allowedSourceAddressPrefixes non-empty) - HTTPS:443 listener using the Key Vault certificate (the AGW UAI reads it via Key Vault Secrets User). - HTTP:80 becomes a permanent HTTP→HTTPS redirect. - NSG allows TCP/443 from the supplied source CIDRs only.
Post-deploy runbook (provider-agnostic DNS + jumpbox ACME):
1. Workstation (DNS provider side): choose your DNS provider/registrar and prepare your hostname (example: app.contoso.com). No provider-specific integration is required in this landing zone. 2. Jumpbox (certificate issuance/import side): use the built-in ACME client installed by install.ps1 at C:\tools\win-acme\wacs.exe (DNS-01 flow), then import the resulting certificate into the landing-zone Key Vault. The jumpbox MI has Key Vault Certificates Officer for this workflow. 3. Workstation (DNS provider side): create/update the public DNS A record for the hostname pointing at PUBLIC_INGRESS_PUBLIC_IP (deployment output). 4. Capture the versionless Key Vault secret URI for the certificate (https://<kv>.vault.azure.net/secrets/<name>), then set operator parameters in main.parameters.json (or via azd env set followed by an edit since publicIngress is an aggregate object):
"publicIngress": {
"value": {
"enabled": true,
"frontendHostName": "app.contoso.com",
"sslCertSecretId": "https://<kv>.vault.azure.net/secrets/<name>",
"allowedSourceAddressPrefixes": ["203.0.113.0/24"]
}
}
5. Run azd provision again. The HTTPS listener, redirect rule, and NSG allow rule are now in place. 6. Validate end-to-end: curl -v https://app.contoso.com/ should return the Container App's response; curl -v http://app.contoso.com/ should redirect to HTTPS.
Teardown: run azd down to remove the entire deployment, or delete the gateway/PIP/WAF policy/NSG/UAI manually. As stated above, flipping enabled back to false and re-provisioning will not delete the resources due to ARM incremental deployment semantics.
Outputs surfaced by main.bicep:
| Output | Description |
|---|---|
PUBLIC_INGRESS_ENABLED | Whether the stack was effectively deployed (also requires networkIsolation + deployContainerEnv + non-empty containerAppsList). |
PUBLIC_INGRESS_PUBLIC_IP | The gateway's public IPv4 address (point your DNS A record at this). |
PUBLIC_INGRESS_GATEWAY_RESOURCE_ID | Application Gateway resource ID. |
PUBLIC_INGRESS_NSG_RESOURCE_ID | NSG attached to the AGW subnet. |
PUBLIC_INGRESS_WAF_POLICY_RESOURCE_ID | WAF policy resource ID (for adding custom rules outside the template). |
PUBLIC_INGRESS_IDENTITY_PRINCIPAL_ID | Principal ID of the AGW UAI (use to grant access to external Key Vaults). |
PUBLIC_INGRESS_LIVE | true only when both sslCertSecretId and frontendHostName are set (live mode). |
In addition, the landing zone now surfaces a small set of outputs that consumers (and this module) depend on: APP_GATEWAY_SUBNET_RESOURCE_ID, VNET_RESOURCE_ID, KEY_VAULT_RESOURCE_ID, KEY_VAULT_NAME, LOG_ANALYTICS_RESOURCE_ID, and CONTAINER_APP_INTERNAL_FQDN.
高质量的AI工作流项目
AI Skill Hub 为第三方内容聚合平台,本页面信息基于公开数据整理,不对工具功能和质量作任何法律背书。
建议在沙箱或测试环境中充分验证后,再部署至生产环境,并做好必要的安全评估。
✅ MIT 协议 — 最宽松的开源协议之一,可自由商用、修改、分发,仅需保留版权声明。
经综合评估,bicep-ptn-aiml-landing-zone Agent工作流 在Agent工作流赛道中表现稳健,质量优秀。如果你已有明确的使用需求,可以直接上手体验;如果还在评估阶段,建议对比同类工具后再做决策。
| 原始名称 | bicep-ptn-aiml-landing-zone |
| 原始描述 | 开源AI工作流:AI Landing Zone Bicep templates for deploying a secure, modular baseline for AI 。⭐9 · Bicep |
| Topics | AIBicepLanding Zone |
| GitHub | https://github.com/Azure/bicep-ptn-aiml-landing-zone |
| License | MIT |
| 语言 | Bicep |
收录时间:2026-05-30 · 更新时间:2026-05-30 · License:MIT · AI Skill Hub 不对第三方内容的准确性作法律背书。
选择 Agent 类型,复制安装指令后粘贴到对应客户端