使用 Pulumi 从 DocumentDB-Account 中检索 AccountKey 或 ConnectionString

Retrieve AccountKey or ConnectionString from DocumentDB-Account using Pulumi

我创建了一个 CosmosDB/DocumentDB - 使用 AzureNextGen 的帐户:

var databaseAccount=new Pulumi.AzureNextGen.DocumentDB.Latest.DatabaseAccount(accountName, 
  new Pulumi.AzureNextGen.DocumentDB.Latest.DatabaseAccountArgs
  {
    // parameters
  }
);

为了之后能够访问该数据库,我需要检索该数据库帐户的 keyconnection string

我可以通过 databaseAccount.DocumentEndpoint.Apply(q => "AccountEndpoint=" + q) 构建连接字符串的第一部分(端点),但我无法获取更关键的部分,即密钥。

如何实现?

Azure API 不会自动 return 任何敏感数据。您需要 运行 对任何机密数据进行显式查询。

在这种情况下,您应该为此目的使用函数 listDatabaseAccountKeys and listDatabaseAccountConnectionStrings。这是 TypeScript 中的一个片段:

const keys = pulumi.all([resourceGroupName, databaseAccount.name])
    .apply(([resourceGroupName, accountName]) =>
        documentdb.listDatabaseAccountKeys({ resourceGroupName, accountName }));

const connectionStrings = pulumi.all([resourceGroupName, databaseAccount.name])
    .apply(([resourceGroupName, accountName]) =>
        documentdb.listDatabaseAccountConnectionStrings({ resourceGroupName, accountName }));

const connectionString = connectionStrings.apply(cs => cs.connectionStrings![0].connectionString);
const masterKey = keys.primaryMasterKey;

复制自 this example

转换为 C# 时,您将使用 Output.Tuple 而不是 pulumi.all,如 this template

基于 Mikhails 回答 C# - 检索主键的代码如下:

var keys = Pulumi.AzureNextGen.DocumentDB.Latest.ListDatabaseAccountKeys.InvokeAsync(
new Pulumi.AzureNextGen.DocumentDB.Latest.ListDatabaseAccountKeysArgs
{
  AcccountName = "databasename",
  ResourceGroupName = "resourcename"
});

var key = Output.Create(keys).Apply(q => q.PrimaryMasterKey);