如何启动Azure功能

时间:2017-10-19 09:59:10

标签: c# azure azure-functions azure-functions-runtime azure-function-app-proxy

我有像这样的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}");
    }

我想在app的启动或OnInit中动态绑定myqueue和AzureWebJobServiceBus连接字符串,而不是上面的方法参数。我的意思是,我想首先运行一个方法,比如WebJob中的Program.cs,以绑定或启动全局变量。我可以在Azure功能中执行此操作以及如何执行此操作吗? 非常感谢

2 个答案:

答案 0 :(得分:1)

此处的属性在部署之前编译为function.json文件,其中包含绑定所涉及的信息。通常像连接字符串参考应用程序设置。这些都不能在代码本身内修改(因此Program.cs无法修改function.json绑定)。

您可以在您的方案中分享更多内容吗?如果您想要侦听多个队列,是否可以为每个队列部署一个函数?鉴于函数的无服务器特性,部署额外功能并没有缺点。让我知道 - 很高兴看到我们能否帮助您满足您的需求。

答案 1 :(得分:0)

修改

以下建议不适用于Trigger,仅适用于Binding。 我们必须等待团队支持Azure Functions中的Key Vault端点see this GitHub issue

我认为您所寻找的是Imperative Bindings

我昨天才发现他们并且question about them also。使用这些类型的绑定,您可以动态设置所需的绑定,这样您就可以从其他地方检索数据(如全局变量或某些初始化代码),并在绑定中使用它。

我使用它的方法是从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);

还有一些其他属性可以用于命令式绑定,我确定你会在文档(第一个链接)中看到这个。

您也可以使用your application settings

,而不是使用Imperative Bindings
  

作为最佳做法,应使用应用程序设置而不是配置文件来管理机密和连接字符串。这限制了对这些秘密的访问,并使得将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"
    }
  ]
}