在本练习中,你将了解如何将前面练习中讨论的 Microsoft Graph 和 ACS 函数部署到 Azure Functions。 你还将生成容器映像并将其部署到 Azure 容器应用。
部署到 Azure Functions
注释
本部分使用 Visual Studio 将 C# 函数发布到 Azure。 如果想要使用 Visual Studio Code,可以按照 使用 Visual Studio Code 在 Azure 中创建 C# 函数 快速入门中的说明进行操作。
在 Visual Studio 中打开
samples/acs-video-to-teams-meeting/server/csharp/GraphACSFunctions.sln
项目。右键单击
GraphACSFunctions
项目,然后选择“ 发布”。在目标部分中选择 Azure ,然后单击“ 下一步”。
选择 Azure Function App (Windows),然后单击“ 下一步”。
选择订阅,然后选择“ + 新建”。
输入以下信息:
- 函数名称:需要全局唯一的名称。 示例: acsFunctions<YOUR_LAST_NAME>。
- 订阅:选择您的订阅。
- 资源组:选择在本教程前面创建的资源组,也可以创建新的资源组。
- 托管计划:消耗计划。
- 位置:选择要部署到的区域。
- Azure 存储:创建新的存储。 (还可以选择现有的存储帐户。
- Azure Insights:创建一个新的。 (还可以选择现有的存储帐户。
注释
需要全局唯一名称。 可以通过向名称末尾添加数字或姓氏来使名称更加唯一。
创建 Azure Function App 后,会看到确认屏幕。 确保已选择“ 从包运行 ”选项,然后选择“ 完成”。
选择 “发布 ”以将函数部署到 Azure。
将函数部署到 Azure 后,转到 Azure 门户并选择创建的 Function App。
复制所部署函数的 URL。 你将在本练习后续部分使用此值。
选择“设置”-->左侧菜单中的配置。
选择 “+ 新建应用程序设置 ”按钮,并在 应用程序设置中添加以下键和值。 可以从
local.settings.json
中的GraphACSFunctions
项目中检索这些值。# Retrieve these values from local.settings.json TENANT_ID: <YOUR_VALUE> CLIENT_ID: <YOUR_VALUE> CLIENT_SECRET: <YOUR_VALUE> USER_ID: <YOUR_VALUE> ACS_CONNECTION_STRING: <YOUR_VALUE>
选择“ 保存 ”按钮以保存设置。
最后,需要为函数应用启用 CORS(跨域资源共享),使函数应用的 API 可从域外部访问。 选择“设置”-->左侧菜单中的 CORS。
在
*
”文本框中输入(可从任何域访问),然后选择“保存”按钮。
部署到 Azure 容器应用
要执行的第一项任务是创建新的 Azure 容器注册表(ACR) 资源。 创建注册表后,你将生成映像并将其推送到注册表。
打开命令窗口并运行以下命令以登录到 Azure 订阅:
az login
根据需要添加以下 shell 变量,替换占位符的值。 将你的<GITHUB_USERNAME>添加为小写值,并将你的 Azure Functions 域替换为<AZURE_FUNCTIONS_DOMAIN>值(包括
https://
在域值中)。GITHUB_USERNAME="<YOUR_GITHUB_USERNAME>" RESOURCE_GROUP="<YOUR_RESOURCE_GROUP_NAME>" ACR_NAME="aca"$GITHUB_USERNAME AZURE_FUNCTIONS_DOMAIN="<YOUR_AZURE_FUNCTIONS_URL>"
运行以下命令创建新的 Azure 容器注册表 资源:
az acr create \ --resource-group $RESOURCE_GROUP \ --name $ACR_NAME \ --sku Basic \ --admin-enabled true
在编辑器中打开 客户端/react/Dockerfile 文件,并注意到已执行以下任务:
- React 应用程序已构建并分配到 build 阶段。
- 配置好 nginx 服务器后,将 生成阶段 的输出复制到 nginx 服务器映像中。
通过从 客户端/react 文件夹的根目录运行以下命令,在 Azure 中生成容器映像。 将YOUR_FUNCTIONS_DOMAIN<替换为>本练习前面复制到本地文件的 Azure Functions 域。
az acr build --registry $ACR_NAME --image acs-to-teams-meeting \ --build-arg REACT_APP_ACS_USER_FUNCTION=$AZURE_FUNCTIONS_DOMAIN/api/httpTriggerAcsToken \ --build-arg REACT_APP_TEAMS_MEETING_FUNCTION=$AZURE_FUNCTIONS_DOMAIN/api/httpTriggerTeamsUrl .
运行以下命令列出注册表中的映像。 应该看到你的新图像已列出。
az acr repository list --name $ACR_NAME --output table
部署映像后,需要创建可以运行容器的 Azure 容器应用。
在浏览器中访问 Azure 门户 并登录。
在顶部搜索栏中键入 容器应用 ,然后从显示的选项中选择 “容器应用 ”。
在工具栏中选择“ 创建 ”。
注释
虽然使用的是 Azure 门户,但也可以使用 Azure CLI 创建容器应用。 有关详细信息,请参阅 快速入门:部署第一个容器应用。 你将看到一个示例,说明如何在本练习结束时使用 Azure CLI。
执行以下任务:
- 选择订阅。
- 选择要使用的资源组(根据需要创建新资源组)。 如果需要,可以使用用于 ACS 资源的同一资源组。 将资源组名称复制到存储 Azure Functions 域的同一本地文件。
- 输入 acs-to-teams-meeting 的容器应用名称。
- 选择区域。
- 在“容器应用环境”部分选择“新建”。
- 输入 acs-to-teams-meeting-env的环境名称。
- 选择“创建”按钮。
- 选择 “下一步:应用设置 >”。
在 “创建容器应用” 屏幕中输入以下值:
- 取消选中使用快速入门映像复选框。
- 名称: acs-to-teams-meeting
- 映像源: Azure 容器注册表
- 注册表:<YOUR_ACR_REGISTRY_NAME.azurecr.io>
- 图像: acs-to-teams-meeting
- 图像标记: 最新
- CPU 和内存: 0.25 个 CPU 核心,-.5 Gi 内存
在 “应用程序入口设置 ”部分中,执行以下作:
- 选中“已启用”复选框。
- 选择“接受来自任意位置的流量”单选按钮。
这将为 React 应用程序创建入口点(入口),并允许从任何位置调用它。 Azure 容器应用将所有流量重定向到 HTTPS。
- 目标端口: 80
选择“查看 + 创建”。 验证通过后,选择“创建”按钮。
如果收到错误,则可能是因为容器应用环境长时间处于非活动状态。 最简单的解决方案是完成再次创建容器应用的过程。 或者,可以运行以下命令,使用 Azure CLI 创建容器应用:
az containerapp create --name acs-to-teams-meeting --resource-group $RESOURCE_GROUP \ --location westus --image acs-to-teams-meeting \ --cpu 0.25 --memory 0.5 --environment-name acs-to-teams-meeting-env \ --ingress-enabled true --ingress-target-port 80 --ingress-type External \ --ingress-protocol Https --ingress-traffic Anywhere
容器应用部署完成后,请在 Azure 门户中导航到该应用程序,在概述屏幕上点击应用程序 URL,即可查看在 nginx 容器中运行的应用程序!