在 Azure 中创建你的第一个 Python 函数(预览版)

Note

用于 Azure Functions 的 Python 当前为预览版。 若要接收重要更新,请订阅 GitHub 上的 Azure 应用服务公告存储库。

本快速入门文章指导你使用 Azure CLI 创建你的第一个在 Linux 上运行的无服务器 Python 函数应用。 函数代码在本地创建,然后使用 Azure Functions Core Tools 部署到 Azure。 若要了解有关在 Linux 上运行函数应用的预览版注意事项的更多信息,请参阅此 Linux 上的 Functions 文章

支持在 Mac、Windows 或 Linux 计算机上执行以下步骤。

先决条件

若要在本地进行构建和测试,你需要:

若要在 Azure 中发布和运行:

  • 安装 Azure CLI 版本 2.x 或更高版本。

  • 需要一个活动 Azure 订阅。 如果没有 Azure 订阅,可在开始前创建一个试用帐户

创建并激活虚拟环境

若要创建 Functions 项目,你需要在 Python 3.6 虚拟环境中工作。 运行以下命令来创建并激活一个名为 .env 的虚拟环境。

# In Bash
python3.6 -m venv .env
source .env/bin/activate

# In PowerShell
py -3.6 -m venv .env
.env\scripts\activate

创建本地 Functions 项目

现在可以创建一个本地 Functions 项目。 此目录相当于 Azure 中的一个函数应用。 它可以包含共享同一本地和托管配置的多个函数。

在终端窗口中或从命令提示符下,运行以下命令:

func init MyFunctionProj

选取 python 作为所需的运行时。

Select a worker runtime:
1. dotnet
2. node
3. python

可以看到类似于以下输出的内容。

Installing wheel package
Installing azure-functions package
Installing azure-functions-worker package
Running pip freeze
Writing .gitignore
Writing host.json
Writing local.settings.json
Writing /MyFunctionProj/.vscode/extensions.json

创建了一个名为 MyFunctionProj 的新文件夹。 若要继续,将目录更改到此文件夹。

cd MyFunctionProj

创建函数

若要创建函数,请运行以下命令:

func new

选择 HTTP Trigger 作为模板并提供 HttpTrigger 作为函数名称

Select a template:
1. Blob trigger
2. Cosmos DB trigger
4. Event Hub trigger
5. HTTP trigger
6. Queue trigger
7. Service Bus Queue trigger
8. Service Bus Topic trigger
9. Timer trigger

Choose option: 5
Function name: HttpTrigger

可以看到类似于以下输出的内容。

Writing /MyFunctionProj/HttpTrigger/sample.dat
Writing /MyFunctionProj/HttpTrigger/__init__.py
Writing /MyFunctionProj/HttpTrigger/function.json
The function "HttpTrigger" was created successfully from the "HTTP trigger" template.

创建了一个名为 HttpTrigger 的子文件夹。 其中包含 __init__.py(这是主脚本文件)和 function.json 文件(它描述了函数使用的触发器和绑定)。 若要详细了解编程模型,可以参考 Azure Functions Python 开发人员指南

在本地运行函数

使用以下命令在本地运行 Functions 主机。

func host start

当 Functions 主机启动时,它会输出 HTTP 触发的函数的 URL。 (请注意,为了提高可读性,已截断了整个输出。)


                  %%%%%%
                 %%%%%%
            @   %%%%%%    @
          @@   %%%%%%      @@
       @@@    %%%%%%%%%%%    @@@
     @@      %%%%%%%%%%        @@
       @@         %%%%       @@
         @@      %%%       @@
           @@    %%      @@
                %%
                %
...
Now listening on: http://0.0.0.0:7071
Application started. Press Ctrl+C to shut down.
...

Http Functions:

        HttpTrigger: http://localhost:7071/api/HttpTrigger

从输出中复制函数的 URL,将其粘贴到浏览器的地址栏中。 将查询字符串 ?name=<yourname> 追加到此 URL 并执行请求。

http://localhost:7071/api/HttpTrigger?name=<yourname>

下面的屏幕截图显示了当从浏览器触发该函数时来自函数的响应:

测试

现在,可以创建函数应用以及发布到 Azure 时所需的其他资源了。

创建资源组

使用 az group create 创建资源组。 Azure 资源组是在其中部署和管理 Azure 资源(例如函数应用、数据库和存储帐户)的逻辑容器。

以下示例创建名为 myResourceGroup 的资源组。

az cloud set -n AzureChinaCloud
az login
az group create --name myResourceGroup --location chinanorth

通常在附近的区域中创建资源组和资源。 若要查看应用服务计划的所有支持位置,请运行 az appservice list-locations 命令。

创建 Azure 存储帐户

Functions 使用通用帐户在 Azure 存储中保留状态以及有关函数的其他信息。 使用 az storage account create 命令在创建的资源组中创建通用存储帐户。

在以下命令中,请将 <storage_name> 占位符替换成全局唯一存储帐户名。 存储帐户名称必须为 3 到 24 个字符,并且只能包含数字和小写字母。

az storage account create --name <storage_name> --location chinanorth --resource-group myResourceGroup --sku Standard_LRS

创建存储帐户后,Azure CLI 会显示类似于以下示例的信息:

{
  "creationTime": "2017-04-15T17:14:39.320307+00:00",
  "id": "/subscriptions/bbbef702-e769-477b-9f16-bc4d3aa97387/resourceGroups/myresourcegroup/...",
  "kind": "Storage",
  "location": "chinanorth",
  "name": "myfunctionappstorage",
  "primaryEndpoints": {
    "blob": "https://myfunctionappstorage.blob.core.chinacloudapi.cn/",
    "file": "https://myfunctionappstorage.file.core.chinacloudapi.cn/",
    "queue": "https://myfunctionappstorage.queue.core.chinacloudapi.cn/",
    "table": "https://myfunctionappstorage.table.core.chinacloudapi.cn/"
  },
     ....
    // Remaining output has been truncated for readability.
}

在 Azure 中创建 Linux 函数应用

函数应用提供了用于执行函数代码的环境。 可以使用它将函数分组为一个逻辑单元,以便更轻松地管理、部署和共享资源。 使用 az functionapp create 命令创建在 Linux 上运行的 Python 函数应用

运行以下命令,并使用唯一的函数应用名称替换 <app_name> 占位符,使用存储帐户名称替换 <storage_name><app_name> 也是函数应用的默认 DNS 域。 此名称在 Azure 的所有应用中必须独一无二。

az functionapp create `
--name <app_name> `
--storage-account  <storage_name> `
--resource-group myResourceGroup `
--plan <plan_name> `
--os-type Linux `
--runtime python

Note

不能在同一资源组中托管 Windows 和 Linux 应用。

现在,可以将本地函数项目发布到 Azure 中的函数应用了。

将函数应用项目部署到 Azure

使用 Azure Functions Core Tools,运行以下命令。 将 <app_name> 替换为上一步中你的应用的名称。

func azure functionapp publish <app_name>

你将看到如下输出,为了提高可读性,已经截断了这些输出。

Getting site publishing info...

...

Preparing archive...
Uploading content...
Upload completed successfully.
Deployment completed successfully.
Syncing triggers...

测试函数

在 Mac 或 Linux 计算机上使用 cURL 或者在 Windows 上使用 Powershell 测试已部署的函数。 执行以下 cURL 命令(请将 <app_name> 占位符替换为 Function App 的名称)。 在 URL 的后面附加查询字符串 &name=<yourname>

Invoke-WebRequest -Uri "https://<app_name>.chinacloudsites.cn/api/MyHttpTrigger?name=<yourname>"
curl https://<app_name>.chinacloudsites.cn/api/MyHttpTrigger?name=<yourname>

函数响应会显示在浏览器中。

如果无法在命令行中使用 cURLInvoke-WebRequest,请在 Web 浏览器的地址栏中输入相同的 URL。 同样,请将 <app_name> 占位符替换为 Function App 的名称,在 URL 的后面附加查询字符串 &name=<yourname>,然后执行请求。

https://<app_name>.chinacloudsites.cn/api/MyHttpTrigger?name=<yourname>

函数响应会显示在浏览器中。

清理资源

本教程系列中的其他快速入门教程是在本文的基础上制作的。 如果打算继续学习后续的快速入门或相关教程,请不要清除在本快速入门中创建的资源。 如果不打算继续学习,请使用以下命令删除通过本快速入门创建的所有资源:

az group delete --name myResourceGroup

出现提示时请键入 y

后续步骤

详细了解如何使用 Python 开发 Azure 函数。