通过添加 Azure 服务来扩展 azd 模板

在生成新的Azure开发人员 CLI (azd) 模板或从现有模板开始后,可以随着需求的变化来扩展和发展其应用程序和基础结构。 本教程演示如何在不依赖模板提供的模块的情况下向模板添加新的Azure服务。

你将从 hello-azd 模板 开始,创建一个用于定义 Azure 翻译器资源的 Bicep 模块,从模板的基础设施入口点引用该模块,并将其输出公开为 azd 环境值。 本教程重点介绍如何扩展基础结构,不会修改应用程序代码。

Note

可以直接进行以下更改,也可以通过 AI 编码助手提供帮助。 无论创作方法如何,在部署前查看生成的文件并验证模板。

Prerequisites

若要完成本教程,需要:

初始化模板

在空目录中打开终端,然后初始化该目录中的 hello-azd 模板:

azd init --template hello-azd .

模板包括:

  • 一个 C# 应用程序,作为 azure.yaml 中的 aca 服务部署到 Azure 容器应用。
  • 应用程序的用户分配的托管标识。
  • 具有 Blob 容器和表的 Azure 存储帐户。
  • Azure 容器注册表和Azure 容器应用环境。
  • infra/core 下的可重用 Bicep 模块

有关在初始化之前选择和查看模板的指导,请参阅 从现有模板开始。

创建翻译器模块

手动创建一个名为 的文件,或在 AI 编码助手的帮助下创建。 此新模块是自包含的,不依赖于起始模板中的模块:

@description('Name of the Azure Translator resource.')
param name string

@description('Azure region for the resource.')
param location string

@description('Tags to apply to the resource.')
param tags object = {}

@description('Pricing tier for Azure Translator.')
@allowed([
  'F0'
  'S1'
])
param sku string = 'F0'

resource translator 'Microsoft.CognitiveServices/accounts@2023-05-01' = {
  name: name
  location: location
  kind: 'TextTranslation'
  sku: {
    name: sku
  }
  properties: {
    customSubDomainName: name
    disableLocalAuth: true
    publicNetworkAccess: 'Enabled'
  }
  tags: tags
}

output name string = translator.name
output endpoint string = translator.properties.endpoint

该模块使用 TextTranslation 资源类型并禁用本地密钥身份验证。 该 F0 层可用于评估,但每个订阅只允许一个免费的 Translator 资源。 如果订阅已包含F0资源,或者项目需要付费层,请使用S1。

Important

此介绍性示例启用公共终结点,以便无需添加网络基础结构即可预配资源。 在生产环境中使用此模式之前,请评估专用终结点、网络访问控制、监视和组织的安全要求。

从 引用模块

hello-azd 模板在infra/main.bicep中定义了 rg 资源组以及 location、tags 和 resourceToken 值。 可以手动进行此编辑,或提示 AI 助手添加它。 在 rg 资源声明之后添加以下模块:

module translator './translator.bicep' = {
  name: 'translator'
  scope: rg
  params: {
    name: 'translator-${resourceToken}'
    location: location
    tags: tags
  }
}

该 scope 属性将模块部署到模板创建的资源组中。 resourceToken现有值使翻译器资源名称对于每个环境都不同。

导出翻译器输出

在 infra/main.bicep 的末尾添加以下输出:

output AZURE_TRANSLATOR_NAME string = translator.outputs.name
output AZURE_TRANSLATOR_ENDPOINT string = translator.outputs.endpoint

完成预配后,azd 会在当前环境中捕获这些非机密输出。 稍后的应用程序代码更改可以使用这些值来查找 Translator 资源。

预配和验证基础结构

预配模板的基础结构,而无需部署其应用程序代码:

azd provision

运行 azd env get-values 并确认输出包括 AZURE_TRANSLATOR_NAME 和 AZURE_TRANSLATOR_ENDPOINT。 在Azure门户中,验证资源组是否包含Azure 翻译器资源。

此时,模板会预配 AI 服务,但不会将示例应用程序连接到它。 若要完成该集成,请为应用程序的托管标识配置最低特权访问权限,将终结点传递给应用程序,并将 Translator 客户端添加到应用程序代码。 有关详细信息,请参阅Azure 翻译器文档。

清理资源

不再需要资源时,请将其删除以避免持续收费:

azd down --purge

请求帮助

有关如何提交 bug、请求帮助或为 Azure 开发人员 CLI 提出新功能的信息,请访问 troubleshooting and support 页。