本文参考:

在 Linux 上使用自定义映像创建 Azure Functions | Microsoft Docs

 

完成本文,需要先安装 Azure Functions的开发工具和Docker 相关工具,不再赘述,可参见本博客其他文章。

 

 

命令行下执行如下命令创建Azure Functions 的基础文件夹结构和 docker file等文件:

Functions-container>func init --worker-runtime dotnet --docker

 

执行如下命令,创建functions 代码:

 

func new --name FuncServiceBusTriggerDemo --template "Service Bus Topic trigger"

 

创建完成后,观察文件夹:

 

需要配置的地方:

代码中的,三个参数依次为 主题名称,订阅名称,连接字符串名称,其中连接字符串名称需要手动添加到local.settings.json中:

 

localsetting.json中的Azurewebjobstorage如果使用默认的 usedevelopmentstorage=true,则需要配置本地storage account模拟器,最新的模拟器为:使用 Azurite 模拟器进行本地 Azure 存储开发 | Microsoft Docs

如果不使用模拟器,则需要配置一个真正的云端的storage account的链接字符串。

 

完成以上步骤后,可以测试service bus trigger  Functions 容器是否正常运行,此处省略,接下来,build 容器(需要安装好docker desktop)

依次执行:

az login

//seandemoacr01 是云端 容器注册表的名称
az acr login --name seandemoacr01

// 编译容器
docker build --tag seandemoacr01.azurecr.io/seanfunctions:v1.0.0 .

//推送到云端 
docker push seandemoacr01.azurecr.io/seanfunctions:v1.0.0

 

如果直接将image 运行起来,则会出现如下错误:

主要原因是没有配置service bus的连接信息

 

使用 -e 参数传递service bus 配置:


// 参数只有service bus 连接字符串
docker run -e seandemofunc_SERVICEBUS="Endpoint=sb://sean-demo-func.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=5aF2OeGsD7sgopCUVwi/TJlHH6g4LMgTVoQQlRyN23o=" seandemoacr01.azurecr.io/seanfunctions:v1.0.0



//参数包含application insight, webjob等
docker run -e seandemofunc_SERVICEBUS="Endpoint=sb://sean-demo-func.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=5aF2OeGsD7sgopCUVwi/TJlHH6g4LMgTVoQQlRyN23o=" -e APPINSIGHTS_INSTRUMENTATIONKEY="3d4f5adc-3705-43e3-be66-09e5c0013c84"  -e APPLICATIONINSIGHTS_CONNECTION_STRING="InstrumentationKey=3d4f5adc-3705-43e3-be66-09e5c0013c84;IngestionEndpoint=https://eastasia-0.in.applicationinsights.azure.com/;LiveEndpoint=https://eastasia.livediagnostics.monitor.azure.com/" -e AzureWebJobsStorage="DefaultEndpointsProtocol=https;AccountName=seandemofuncad30;AccountKey=Nl213l9wmp+z44NFMtGEshhi0Cpnzt5j4AT27kuMPWSqc2ymColXAjjTZTCjcx6+amjFpvODu8Wt+AStdH8zgg==;EndpointSuffix=core.windows.net" seandemoacr01.azurecr.io/seanfunctions:v1.0.0

配置了application insight的参数后,可以查看到向相关运行日志: