繁体   English   中英

如何使启动Azure功能

[英]How to make startup Azure Function

我有这样的Azure函数

[FunctionName("Function1")]
public static void Run([ServiceBusTrigger("myqueue", AccessRights.Manage,      Connection = "AzureWebJobsServiceBus")]string myQueueItem, TraceWriter log)
    {
        log.Info($"C# ServiceBus queue trigger function processed message: {myQueueItem}");
    }

我想在应用程序的启动或OnInit中动态绑定myqueue和AzureWebJobServiceBus连接字符串,而无需作为上述方法的参数。 我的意思是,我想首先运行一个像WebJob中的Program.cs这样的方法来绑定或启动全局变量。 我可以在Azure Function中做到这一点,怎么做? 非常感谢

部署之前,这里的属性被编译成一个function.json文件,其中包含有关绑定所要通信的信息。 连接字符串通常会引用应用程序设置。 这些都不能在代码本身内进行修改(因此Program.cs无法修改function.json绑定)。

您能否再分享您的方案? 如果您要监听多个队列,是否可以为每个队列部署一个功能? 鉴于功能的无服务器性质,部署额外的功能没有不利之处。 让我知道-很高兴看到我们能否为您提供所需的帮助。

编辑

以下建议不适用于Trigger ,仅适用于Binding 我们必须等待团队在Azure Functions中支持Key Vault终结点, 请参阅此GitHub问题


我认为您正在寻找的是所谓的命令式绑定

我昨天才发现他们,也对他们有一个问题 使用这些类型的绑定,您可以动态地设置所需的绑定,因此您可以从其他位置(例如全局变量或某些初始化代码)检索数据并将其用于绑定中。

我使用它的目的是从Azure Key Vault检索一些值,但是您当然也可以从其他地方检索数据。 一些示例代码。

// Retrieving the secret from Azure Key Vault via a helper class
var connectionString = await secret.Get("CosmosConnectionStringSecret");
// Setting the AppSetting run-time with the secret value, because the Binder needs it
ConfigurationManager.AppSettings["CosmosConnectionString"] = connectionString;

// Creating an output binding
var output = await binder.BindAsync<IAsyncCollector<MinifiedUrl>>(new DocumentDBAttribute("TablesDB", "minified-urls")
{
    CreateIfNotExists = true,
    // Specify the AppSetting key which contains the actual connection string information
    ConnectionStringSetting = "CosmosConnectionString",
});

// Create the MinifiedUrl object
var create = new CreateUrlHandler();
var minifiedUrl = create.Execute(data);

// Adding the newly created object to Cosmos DB
await output.AddAsync(minifiedUrl);

您还可以在命令式绑定中使用其他一些属性,我相信您会在文档(第一个链接)中看到它。

除了使用命令式绑定,您还可以使用应用程序设置

最佳做法是,应使用应用程序设置而不是配置文件来管理机密和连接字符串。 这限制了对这些机密的访问,并可以安全地将function.json存储在公共源代码控制存储库中。 每当您要根据环境更改配置时,应用程序设置也很有用。 例如,在测试环境中,您可能想要监视其他队列或Blob存储容器。 只要用百分号括起来的值(例如%MyAppSetting%),就可以解析应用程序设置。 请注意,触发器和绑定的连接属性是一种特殊情况,会自动将值解析为应用程序设置。 以下示例是一个Azure队列存储触发器,该触发器使用应用程序设置%input-queue-name%定义要在其上触发的队列。

 { "bindings": [ { "name": "order", "type": "queueTrigger", "direction": "in", "queueName": "%input-queue-name%", "connection": "MY_STORAGE_ACCT_APP_SETTING" } ] } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM