【问题标题】:DocumentDB with Azure Functions带有 Azure Functions 的 DocumentDB
【发布时间】:2016-08-02 12:08:20
【问题描述】:

我正在尝试连接 Azure DocumentDB 并使用 Azure Functions 保存文档,但我不知道如何创建连接。

【问题讨论】:

  • 到目前为止,您在 Azure Function 中尝试过什么?请使用更多信息编辑您的问题。就您目前的问题而言,目前还不清楚您卡在哪里。
  • 现在我创建了数据库并创建了一个 azure 函数,但我不知道如何连接数据库来列出、更新、创建等
  • 这就像你在 ASPNET 应用程序、控制台应用程序等上做的一样。您可以在我的 repo 上找到一个示例

标签: c# azure azure-cosmosdb azure-functions


【解决方案1】:

您可以使用 Azure 门户进行操作。 创建 DocumentDB 后 -

  • 创建新的 Azure 函数。
  • 转到“集成”选项卡。
  • 您可以选择 Azure 文档数据库作为函数的输出。
  • 选择您要使用的文档数据库/数据库名称/集合。
  • 文档参数名称是函数的输出。

例如

using System;

public static void Run(string input, out object document, TraceWriter log)
{
    log.Info($"C# manually triggered function called with input: {input}");
    document = new {
        text = $"I'm running in a C# function! {input}"
    };
}

您需要提供与您在输出选项卡中定义的相同的输出对象。

【讨论】:

【解决方案2】:

你可以直接使用文档客户端:

var endpoint = "https://XXXXX.documents.azure.com:443/";
var authKey = "XXXXX";

using (var client = new DocumentClient(new Uri(endpoint), authKey))
{
    var sqlCountQuery = "select value count(1) from c";
    IDocumentQuery<dynamic> query = client.CreateDocumentQuery<dynamic>(UriFactory.CreateDocumentCollectionUri("YOUR_DB_ID", "YOUR_COLLECTON_ID"), sqlCountQuery).AsDocumentQuery();
    ....
}

【讨论】:

    【解决方案3】:

    Azure Functions 支持开箱即用的 Document DB (Cosmos DB)。您只需在 V1 中添加一个名为 AzureWebJobsDocumentDBConnectionString 的环境变量,在 V2 中添加一个名为 AzureWebJobsCosmosDBConnectionString 的环境变量。

    然后只需使用CosmosDBTrigger 绑定属性进行输入绑定,例如(在 C# 中):

    public static class UpsertProductCosmosDbTrigger
    {
        [FunctionName("ProductUpsertCosmosDbTrigger")]
        public static void Run(
            [CosmosDBTrigger(
            // Those names come from the application settings.
            // Those names can come with both preceding % and trailing %.
            databaseName: "CosmosDbDdatabaseName",
            collectionName: "CosmosDbCollectionName",
            LeaseDatabaseName = "CosmosDbDdatabaseName",
            LeaseCollectionName = "CosmosDbLeaseCollectionName")] 
            IReadOnlyList<Document> input,
    
            TraceWriter log)
    ...
    

    对于输出绑定,在 V1 中使用 DocumentDB 输出绑定属性,在 V2 中使用 CosmosDB,例如:

    [FunctionName("ProductUpsertHttpTrigger")]
    public static async Task<HttpResponseMessage> Run(
        [HttpTrigger(AuthorizationLevel.Function, "post", Route = "products")] 
        HttpRequestMessage req,
    
        [DocumentDB(
        databaseName: "%CosmosDbDdatabaseName%",
        collectionName: "%CosmosDbCollectionName%")] IAsyncCollector<Product> collector,
    
        TraceWriter log)
    ...
    

    我已经写了一篇关于此的博客文章:https://blog.mexia.com.au/cosmos-db-in-azure-functions-v1-and-v2

    【讨论】:

      【解决方案4】:
      var EndpointUrl = "EndpointUrl";
      var PrimaryKey = "PrimaryKeyValue" 
      this.client = new DocumentClient(new Uri(EndpointUrl), PrimaryKey);
      Database database = await this.client.CreateDatabaseIfNotExistsAsync(new Database { Id = cosmoDbName });
      

      您可以从 azure 门户的键部分获取 End-point-URL 和 Primary-Key 值。

      【讨论】:

        【解决方案5】:

        假设 C# 有类似 Java 的 SDK。下面是Java的

        有两种方法可以从 Azure 函数连接到 documentDB。

        1. 使用 SDK

          DocumentClient documentClient = new DocumentClient( "SERVICE_ENDPOINT", “主密钥”, ConnectionPolicy.GetDefault(), ConsistencyLevel.Session);

        参考 - [https://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-java-samples][1]。这也有 .Net 样本。

        1. 绑定

          @FunctionName("CosmosDBStore") @CosmosDBOutput(name = "数据库", 数据库名称 = "db_name", collectionName = "col_name", connectionStringSetting = "AzureCosmosDBConnection")

        请确保您的应用程序设置和 local.settings.json 中有一个名为“AzureCosmosDBConnection”的变量(如果您想在本地测试)

        参考 - [https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-cosmosdb-v2][1]

        上面的链接也有 C# 示例。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多