我们有一个项目需要多个azure功能。第一个计划是使用消费计划将所有功能托管在同一功能应用程序上。从微软文档中,我了解到同一功能应用程序上的功能共享相同的执行过程,这意味着它们需要使用相同的包版本,对吗?
我看到了 .NET 函数作为独立函数运行的选项,但这对于 Python 运行时是不可能的。
对于不同需求版本的功能,唯一的解决方案是将它们分成不同的功能应用程序吗?
我还想知道,由于同一功能应用程序中的功能共享相同的执行过程,是否值得在同一应用程序中托管多个功能。原因是,由于使用相同的进程,一旦一个函数被触发,所有其他函数代码都会被编译并存储在内存中,即使它们没有被触发,这使得成本比将函数拆分到不同的应用程序中更高。
非常感谢您的反馈
对于不同需求版本的功能,唯一的解决方案是将它们分成不同的功能应用程序吗?
是的,当多个函数托管在同一个Azure Function App中时,它们共享相同的执行环境,它可以限制不同的函数需要不同的包版本,
particularly since Python doesn't support isolated process execution in Azure Functions
。
如果存在名为function_a和function_b的函数 他们有不同的包需要运行该功能。 功能_a:
import azure.functions as func
import pandas as pd
from azure.functions import HttpRequest, HttpResponse
from azure.functions.decorators import FunctionApp, http_trigger
app = FunctionApp()
@app.function_name(name="FunctionB")
@app.route(route="FunctionB")
def main(req: HttpRequest) -> HttpResponse:
data = {'Column1': [4, 5, 6]}
df = pd.DataFrame(data)
return HttpResponse(f"Dataframe in Function B:\n{df}")
需求.txt:
pandas==1.1.5
azure-functions
函数_b:
import azure.functions as func
import pandas as pd
from azure.functions import HttpRequest, HttpResponse
from azure.functions.decorators import FunctionApp, http_trigger
app = FunctionApp()
@app.function_name(name="FunctionB")
@app.route(route="FunctionB")
def main(req: HttpRequest) -> HttpResponse:
data = {'Column1': [4, 5, 6]}
df = pd.DataFrame(data)
return HttpResponse(f"Dataframe in Function B:\n{df}")
需求.txt:
pandas==1.3.3
azure-functions
使用命令
pip install -r requirements.txt
安装需求。
将每个功能部署到 Azure 门户中单独的功能应用程序中。
如果我在单功能应用程序中部署这两个功能,则会导致包版本不匹配。
每个Function App都会独立处理其依赖关系,不同版本之间不存在冲突
pandas
。