单个Azure函数在blob中上载文件时触发,然后在Azure SQL

时间:2017-06-19 16:24:18

标签: azure azure-storage-blobs azure-functions azure-sql-database

我刚接触Azure功能,我刚刚浏览了TimerTrigger for Sql ConnectionBlobTrigger for Azure Blob。我厌倦了演示工作正常。 接下来我尝试将两者结合起来。

在特定Blob容器中上传/添加文件时,我应该在Azure SQL数据库表中写入blob名称。

我如何在单一Azure功能中实现这一目标?

我还怀疑如果我们为 blob触发器创建一个azure函数,那么这个函数将始终在后台运行吗?我的意思是它将消耗后台运行成本?

我认为blob触发器的azure功能只会消耗成本 在它的运行期间。不是吗?

有人可以帮助我吗

2 个答案:

答案 0 :(得分:1)

  

我如何在单一Azure功能中实现这一目标?

你可以使用blob触发器实现它。您将从函数参数[name]中获取blob名称。然后,您可以将此值保存到Azure SQL数据库。以下示例代码供您参考。

public static void Run(Stream myBlob, string name, TraceWriter log)
{
    var str = "connection string of your sql server";
     using (SqlConnection conn = new SqlConnection(str))
     {
        conn.Open();
        var text = "insert into mytable(id, blobname) values(@id, @blobname)";

        using (SqlCommand cmd = new SqlCommand(text, conn))
        {
            cmd.Parameters.AddWithValue("id", 1);
            cmd.Parameters.AddWithValue("blobname", name);
            // Execute the command and log the # rows affected.
            var rows = cmd.ExecuteNonQuery();
            log.Info($"{rows} rows were updated");
        }
     }
}
  

我认为blob触发器的azure函数只会在运行期间消耗成本。不是吗?

创建Azure功能时,您需要选择主机方案。

enter image description here

如果您选择应用服务计划,则需要支付应用服务计划,具体取决于您选择的等级。如果您选择消费计划,您的功能将根据两件事进行结算。资源消耗和执行。

资源消耗的计算方法是将平均内存大小(以GB为单位)乘以执行该函数所用的时间(以秒为单位)。您需要为功能消耗的CPU和内存付费。执行意味着请求计数由您的函数处理。请注意,消费计划定价还包括每月100万次请求的免费赠款和每月400,000 GB的资源消耗。

  

我们也可以在Insert命令的位置调用Sp(比如Exec spname)吗?对吗?

是的,我们可以通过将CommandType设置为StoredProcedure来调用sp。以下代码供您参考。

using (SqlCommand cmd = new SqlCommand("StoredProcedure Name", conn))
{
    cmd.CommandType = System.Data.CommandType.StoredProcedure;
}

答案 1 :(得分:0)

当然,您应该为您的场景使用Blob Trigger。

如果您使用消费计划,则只会根据事件执行情况进行更改。不适用背景费用。