Как запустить функцию Azure при запуске

У меня есть такая функция 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}");
    }

Я хочу динамически связать строку подключения myqueue и AzureWebJobServiceBus при запуске или OnInit приложения без указанного выше параметра метода. Я имею в виду, что я хочу, чтобы в первую очередь запускался метод, такой как Program.cs в WebJob, для привязки или запуска глобальных переменных. Могу ли я сделать это в функции Azure и как это сделать? Большое спасибо


person user974335    schedule 19.10.2017    source источник
comment
Достаточно ли для вас чтения их из конфигурации?   -  person Mikhail Shilkov    schedule 19.10.2017


Ответы (2)


Атрибуты здесь скомпилированы в function.jsonfile перед развертыванием, в котором есть информация о том, с чем взаимодействует привязка. Часто такие вещи, как строка подключения, ссылаются на настройки приложения. Ни один из них не может быть изменен в самом коде (поэтому Program.cs не может изменить привязку function.json).

Можете ли вы поделиться чем-нибудь еще о своем сценарии? Если у вас есть несколько очередей, которые вы хотите прослушать, можете ли вы развернуть функцию для каждой очереди? Учитывая бессерверную природу Функций, развертывание дополнительных функций не является недостатком. Дайте мне знать - рады видеть, если мы можем помочь с тем, что вам нужно.

person jeffhollan    schedule 19.10.2017
comment
Спасибо, Джеффхоллан, за вашу поддержку. это полезно для меня - person user974335; 22.10.2017

Редактировать

Предложение ниже не работает для Trigger, только для Binding. Нам нужно дождаться, пока команда поддержит конечные точки Key Vault в Функциях Azure, см. Проблема с 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"
    }
  ]
}
person Jan_V    schedule 19.10.2017
comment
Привет Jan_v, Большое спасибо за ваш ответ. Это действительно мой ожидаемый код. Я пытался сделать это, но все еще не работал для меня. - person user974335; 24.10.2017
comment
Привет @Jan_V, Большое спасибо за ваш ответ. Это действительно мой ожидаемый код. Я хочу загрузить имя очереди и строку подключения служебной шины из Key Vault при инициализации, передать их функции Function1 и запустить функцию для запуска очереди служебной шины. Я пытался сделать это, но все еще не работал для меня. Можете ли вы объяснить более подробно о том, где реализовать ваш код. Я прописал их в файле run.csx, но это не сработало. Я также написал их внутри функции Azure и получил тот же результат (не работает). Это мой код ссылка - person user974335; 24.10.2017
comment
Я реализовал привязку Cosmos DB в своем собственном проекте, подробности реализации можно найти здесь: github.com/Jandev/minifier/commit/ Я не могу открывать файлы Dropbox на работе, но я проверю ваши, когда вернусь домой. - person Jan_V; 25.10.2017
comment
Спасибо, Ян, надеюсь скоро увидеть ваш комментарий, я видел ваш проект. - person user974335; 27.10.2017
comment
Я только что просмотрел ваш код и пришел к выводу, что императивные привязки вам не помогут. Я упустил момент, когда вы хотели использовать триггеры вместо привязок, что имеет смысл, поскольку служебная шина не имеет привязки ввода. Вы можете использовать привязки для привязки вывода, но не для запуска (что в некотором смысле имеет смысл). Извините, что оправдал ваши надежды. На GitHub есть некоторые проблемы (github.com/Azure/azure-webjobs-sdk /issues/746) по этому поводу. Думаю, нам придется подождать, чтобы получить поддержку Trigger. - person Jan_V; 27.10.2017
comment
Ом, это плохие новости. В любом случае, большое спасибо за вашу поддержку меня. - person user974335; 27.10.2017