练习 - 使用 Core Tools 将函数发布到 Azure
在此练习中,你将在 Azure 中创建一个函数应用并发布项目。
创建函数应用
重要
此单元中的过程取决于在第 3 单元中完成的工作。 此模块的沙盒必须处于活动状态。 通过沙盒,你可暂时免费访问 Azure 和 Azure CLI。
Azure Cloud Shell 应已登录到你的帐户且已进行配置。 如果沙盒处于非活动状态,则表示你已失去所需的访问权限、资源和输出。 请返回并完成第 3 单元。
在使用 Core Tools 将代码发布到函数应用之前,需要使用 Cloud Shell 中的 Azure CLI 在 Azure 中创建应用。
若要在 Azure 中创建函数应用,请在 Azure Cloud Shell 中运行以下命令。
RESOURCEGROUP="<rgn>[sandbox resource group]</rgn>"
STORAGEACCT=learnstorage$(openssl rand -hex 5)
FUNCTIONAPP=learnfunctions$(openssl rand -hex 5)
az storage account create \
--resource-group "$RESOURCEGROUP" \
--name "$STORAGEACCT" \
--kind StorageV2 \
--location centralus
az functionapp create \
--resource-group "$RESOURCEGROUP" \
--name "$FUNCTIONAPP" \
--storage-account "$STORAGEACCT" \
--runtime node \
--consumption-plan-location centralus \
--functions-version 4
以下是这些命令的作用:
顶部前三行使用在以下命令中重复使用的值创建 shell 变量。
- 对于资源组,请指定沙盒为你创建的组。 这应当是基于你当前沙盒的正确值。
- 存储帐户和函数应用名称包括
$(openssl rand -hex 5)
,这会生成一个由五个字符构成的随机字符串,以确保名称满足全局唯一的要求和其他服务命名要求。
az storage account create
会创建函数应用使用的 Azure 存储帐户。 存储帐户是一个单独的 Azure 资源,必须先创建该资源,然后才能创建函数应用。az functionapp create
创建函数应用。 你的新应用使用node
(JavaScript) 运行时,它在消耗托管计划中运行无服务器。
注意
az functionapp create
命令还会尝试自动创建 Application Insights 实例,用于监视函数应用中的执行。 由于基于工作区的 Application Insights 资源当前无法托管在沙盒中,因此你的函数可正常工作,但执行日志不会发送到 Application Insights。
发布到 Azure
在 Azure 中创建函数应用后,可以使用 Core Tools 将项目发布到该应用。
在 Cloud Shell 中运行以下命令以进行发布。 首先运行 cd
,以确保在发布之前你仍位于函数项目文件夹中。
cd ~/loan-wizard
func azure functionapp publish "$FUNCTIONAPP" --force
注意
如果此命令显示错误,提示无法找到应用,请等待两分钟,然后重试。 新的函数应用创建后,需要几秒钟的时间才能被 Core Tools 发现。
此外,将 --force
追加到命令,以更新不匹配的函数应用版本。
与上一练习不同,你暂时从 Core Tools 本地托管函数,而现在你的函数是在 Web 上运行的。 在本教程的沙盒过期之前,它会保持全局可用。 由于 HTTP 终结点是使用 anonymous
授权级别定义的,因此 Web 上的任何人都可以访问它。
运行函数
函数现在已发布到 Azure,可从任意位置进行调用。 作为响应 GET 请求的 HTTP 触发函数,它可以从任何浏览器中运行。
运行以下命令以获取请求 URL:
func azure functionapp list-functions "$FUNCTIONAPP" --show-keys
将输出中的 URL 粘贴到新的浏览器选项卡中。你会看到在未提供正确的查询字符串参数的情况下本地运行函数时相同的输出。 使用
anonymous
授权级别时,输出中不包含任何密钥。将
?principal=5000&rate=.035&term=36
添加到 URL 末尾,然后选择“输入”。 请确保保留code
参数(如果存在)。 返回的结果为6300.000000000001
,与预期一样。