azure - 如何传入 CosmosDBTrigger 的存储帐户连接字符串?
问题描述
我试图找出将存储帐户连接字符串传递给 CosmosDBTrigger 的正确方法。我有一个在 CosmosDB 容器发生更改时运行的函数。此函数将图像 blob 从一个容器复制到另一个容器。如果您查看下面的代码,我已经注释掉了我试图对要连接的存储帐户进行罚款的行。此函数在注释掉时运行。当我没有注释时它不会运行。为什么?
public static class Function1
{
[FunctionName("ImageCopier")]
public static async Task Run([CosmosDBTrigger(
databaseName: "MyDatabase",
collectionName: "Orders",
ConnectionStringSetting = "databaseConnection",
CreateLeaseCollectionIfNotExists = true,
LeaseDatabaseName = "TriggerLeases",
LeaseCollectionName = "TriggerLeases",
LeaseCollectionPrefix = "ImageCopier")]IReadOnlyList<Document> input,
//[StorageAccount("MyStorageAccount")]string storageConnectionString,
ILogger log)
{
我在我的 local.settings.json 文件中定义了 MyStorageAccount,并且在我的 Azure 函数配置设置中也有它。我直接从存储帐户密钥面板复制了连接字符串。
解决方案
设置 CosmosDB 触发器时,该触发器中提供的信息特定于该触发器。如果您需要在代码中进行与触发器无关的设置或配置,可以使用Environment.GetEnvironmentVariable
方法.
local.settings.json
在您的本地环境中,您可以通过编辑文件,特别是Values
数组来设置这些变量。例如:
{
"IsEncrypted": false,
"Values": {
"JobUri": "https://yourapiendpointurl.com",
"BlobStorageConnectionString" : "the connection string",
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet"
}
}
在您的方法中,您可以像这样获取该值:
public static class Function1
{
[FunctionName("ImageCopier")]
public static async Task Run([CosmosDBTrigger(
databaseName: "MyDatabase",
...
ILogger log)
{
var connectionString =
Environment.GetEnvironmentVariable("BlobStorageConnectionString");
}
}
该local.settings.json
文件在 Azure 中运行时不会被使用。
我不确定当您发布该函数时,您的local.settings.json
文件是否会将设置迁移到您的 Azure Function 应用程序的配置中,因此我会检查以确保您的设置在发布后在那里。
旁注:将代码提交到 repos 时要小心 .. 你不希望存储库中有“秘密”,以防有人进入你的 repo 并发现它。
推荐阅读
- reactjs - React 样式最佳实践。全局或组件级别
- sql - 每月需要将单行转换为多行
- symfony - 交响乐。如何构建表格?
- laravel - 如何从 Laravel 中的 Storage/App 目录访问文件
- swift - 如何从谷歌自动完成中获取所选地点的正确纬度
- python - 用于从 systemd 日志返回 systemd 单元日志消息列表的 Python 脚本
- c++ - 如何在 Windows Cmake 中将 Dlib 设置为静态安装的共享库
- docker - Vagrant 和 Docker 之间的 Redis 连接被拒绝
- javascript - Chrome 扩展程序“接收端不存在。” 错误
- python - 在python中为可滚动图像添加复选框