如何使用 Function App identity 访问 Azure Service Bus
How to access Azure Service Bus using Function App identity
我正在按照此处列出的步骤进行操作,但对于 python 代码:
https://docs.microsoft.com/en-us/azure/azure-functions/functions-identity-based-connections-tutorial-2
Objective 是创建一个简单的 (hello world) 函数应用程序,该应用程序由 Azure 服务总线消息队列使用基于身份的连接触发。当通过连接字符串引用 ASB 时,函数应用程序工作正常,但在尝试通过函数应用程序的托管服务标识(使用特定配置模式 __fullyQualifiedNamespace)连接时出现此错误。 MSI 已被授予 ASB 上的角色(Azure 服务总线数据接收器)。
Microsoft.Azure.WebJobs.ServiceBus: Microsoft Azure WebJobs SDK ServiceBus connection string 'ServiceBusConnection__fullyQualifiedNamespace' is missing or empty.
函数代码(自动生成)
import logging
import azure.functions as func
def main(msg: func.ServiceBusMessage):
logging.info('Python ServiceBus queue trigger processed message: %s',
msg.get_body().decode('utf-8'))
function.json(连接值根据ms文档修改)
{
"scriptFile": "__init__.py",
"bindings": [
{
"name": "msg",
"type": "serviceBusTrigger",
"direction": "in",
"queueName": "erpdemoqueue",
"connection": "ServiceBusConnection"
}
]
}
host.json(根据ms docs修改的版本)
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[3.3.0, 4.0.0)"
}
}
要使用托管标识,您需要添加一个设置来标识您的服务总线实例的完全限定命名空间。
例如,在您用于本地开发的 local.settings.json
文件中:
{
"Values": {
"<connection_name>__fullyQualifiedNamespace": "<service_bus_namespace>.servicebus.windows.net"
}
}
或者在 application settings 中为你的函数部署到 Azure 时:
<connection_name>__fullyQualifiedNamespace=<service_bus_namespace>.servicebus.windows.net
这仅在 tutorial that you mentioned. The Microsoft.Azure.WebJobs.Extensions.ServiceBus
documentation does covers this a bit better in the Managed identity authentication 部分中简要提及。
我正在按照此处列出的步骤进行操作,但对于 python 代码: https://docs.microsoft.com/en-us/azure/azure-functions/functions-identity-based-connections-tutorial-2
Objective 是创建一个简单的 (hello world) 函数应用程序,该应用程序由 Azure 服务总线消息队列使用基于身份的连接触发。当通过连接字符串引用 ASB 时,函数应用程序工作正常,但在尝试通过函数应用程序的托管服务标识(使用特定配置模式 __fullyQualifiedNamespace)连接时出现此错误。 MSI 已被授予 ASB 上的角色(Azure 服务总线数据接收器)。
Microsoft.Azure.WebJobs.ServiceBus: Microsoft Azure WebJobs SDK ServiceBus connection string 'ServiceBusConnection__fullyQualifiedNamespace' is missing or empty.
函数代码(自动生成)
import logging
import azure.functions as func
def main(msg: func.ServiceBusMessage):
logging.info('Python ServiceBus queue trigger processed message: %s',
msg.get_body().decode('utf-8'))
function.json(连接值根据ms文档修改)
{
"scriptFile": "__init__.py",
"bindings": [
{
"name": "msg",
"type": "serviceBusTrigger",
"direction": "in",
"queueName": "erpdemoqueue",
"connection": "ServiceBusConnection"
}
]
}
host.json(根据ms docs修改的版本)
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[3.3.0, 4.0.0)"
}
}
要使用托管标识,您需要添加一个设置来标识您的服务总线实例的完全限定命名空间。
例如,在您用于本地开发的 local.settings.json
文件中:
{
"Values": {
"<connection_name>__fullyQualifiedNamespace": "<service_bus_namespace>.servicebus.windows.net"
}
}
或者在 application settings 中为你的函数部署到 Azure 时:
<connection_name>__fullyQualifiedNamespace=<service_bus_namespace>.servicebus.windows.net
这仅在 tutorial that you mentioned. The Microsoft.Azure.WebJobs.Extensions.ServiceBus
documentation does covers this a bit better in the Managed identity authentication 部分中简要提及。