将应用部署到 Azure Functions 和 Azure 容器应用

重要

除了 本教程列出的先决条件之外,还需要在计算机上安装以下工具才能完成本练习。

在本练习中,你将了解如何将前面练习中讨论的 Microsoft Graph 和 ACS 函数部署到 Azure Functions。 你还将生成容器映像并将其部署到 Azure 容器应用。

Azure 容器应用

部署到 Azure Functions

注释

本部分使用 Visual Studio 将 C# 函数发布到 Azure。 如果想要使用 Visual Studio Code,可以按照 使用 Visual Studio Code 在 Azure 中创建 C# 函数 快速入门中的说明进行操作。

  1. 在 Visual Studio 中打开samples/acs-video-to-teams-meeting/server/csharp/GraphACSFunctions.sln项目。

  2. 右键单击 GraphACSFunctions 项目,然后选择“ 发布”。

  3. 在目标部分中选择 Azure ,然后单击“ 下一步”。

  4. 选择 Azure Function App (Windows),然后单击“ 下一步”。

  5. 选择订阅,然后选择“ + 新建”。

  6. 输入以下信息:

    • 函数名称:需要全局唯一的名称。 示例: acsFunctions<YOUR_LAST_NAME>
    • 订阅:选择您的订阅。
    • 资源组:选择在本教程前面创建的资源组,也可以创建新的资源组。
    • 托管计划:消耗计划。
    • 位置:选择要部署到的区域。
    • Azure 存储:创建新的存储。 (还可以选择现有的存储帐户。
    • Azure Insights:创建一个新的。 (还可以选择现有的存储帐户。

    注释

    需要全局唯一名称。 可以通过向名称末尾添加数字或姓氏来使名称更加唯一。

  7. 创建 Azure Function App 后,会看到确认屏幕。 确保已选择“ 从包运行 ”选项,然后选择“ 完成”。

  8. 选择 “发布 ”以将函数部署到 Azure。

  9. 将函数部署到 Azure 后,转到 Azure 门户并选择创建的 Function App。

  10. 复制所部署函数的 URL。 你将在本练习后续部分使用此值。

  11. 选择“设置”-->左侧菜单中的配置。

  12. 选择 “+ 新建应用程序设置 ”按钮,并在 应用程序设置中添加以下键和值。 可以从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>
    
  13. 选择“ 保存 ”按钮以保存设置。

  14. 最后,需要为函数应用启用 CORS(跨域资源共享),使函数应用的 API 可从域外部访问。 选择“设置”-->左侧菜单中的 CORS。

  15. *”文本框中输入(可从任何域访问),然后选择“保存”按钮。

部署到 Azure 容器应用

  1. 要执行的第一项任务是创建新的 Azure 容器注册表(ACR) 资源。 创建注册表后,你将生成映像并将其推送到注册表。

  2. 打开命令窗口并运行以下命令以登录到 Azure 订阅:

    az login
    
  3. 根据需要添加以下 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>"
    
  4. 运行以下命令创建新的 Azure 容器注册表 资源:

    az acr create \
        --resource-group $RESOURCE_GROUP \
        --name $ACR_NAME \
        --sku Basic \
        --admin-enabled true
    
  5. 在编辑器中打开 客户端/react/Dockerfile 文件,并注意到已执行以下任务:

    • React 应用程序已构建并分配到 build 阶段。
    • 配置好 nginx 服务器后,将 生成阶段 的输出复制到 nginx 服务器映像中。
  6. 通过从 客户端/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 .
    
  7. 运行以下命令列出注册表中的映像。 应该看到你的新图像已列出。

    az acr repository list --name $ACR_NAME --output table
    
  8. 部署映像后,需要创建可以运行容器的 Azure 容器应用。

  9. 在浏览器中访问 Azure 门户 并登录。

  10. 在顶部搜索栏中键入 容器应用 ,然后从显示的选项中选择 “容器应用 ”。

  11. 在工具栏中选择“ 创建 ”。

    注释

    虽然使用的是 Azure 门户,但也可以使用 Azure CLI 创建容器应用。 有关详细信息,请参阅 快速入门:部署第一个容器应用。 你将看到一个示例,说明如何在本练习结束时使用 Azure CLI。

  12. 执行以下任务:

    • 选择订阅。
    • 选择要使用的资源组(根据需要创建新资源组)。 如果需要,可以使用用于 ACS 资源的同一资源组。 将资源组名称复制到存储 Azure Functions 域的同一本地文件。
    • 输入 acs-to-teams-meeting 的容器应用名称。
    • 选择区域。
    • “容器应用环境”部分选择“新建”。
    • 输入 acs-to-teams-meeting-env的环境名称
    • 选择“创建”按钮。
    • 选择 “下一步:应用设置 >”。
  13. “创建容器应用” 屏幕中输入以下值:

    • 取消选中使用快速入门映像复选框。
    • 名称: acs-to-teams-meeting
    • 映像源: Azure 容器注册表
    • 注册表:<YOUR_ACR_REGISTRY_NAME.azurecr.io>
    • 图像: acs-to-teams-meeting
    • 图像标记: 最新
    • CPU 和内存: 0.25 个 CPU 核心,-.5 Gi 内存
  14. “应用程序入口设置 ”部分中,执行以下作:

    • 选中“已启用”复选框。
    • 选择“接受来自任意位置的流量”单选按钮。

    这将为 React 应用程序创建入口点(入口),并允许从任何位置调用它。 Azure 容器应用将所有流量重定向到 HTTPS。

    • 目标端口: 80
  15. 选择“查看 + 创建”。 验证通过后,选择“创建”按钮。

    如果收到错误,则可能是因为容器应用环境长时间处于非活动状态。 最简单的解决方案是完成再次创建容器应用的过程。 或者,可以运行以下命令,使用 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
    
  16. 容器应用部署完成后,请在 Azure 门户中导航到该应用程序,在概述屏幕上点击应用程序 URL,即可查看在 nginx 容器中运行的应用程序!

下一步

恭喜!