2

您好,我已尝试关闭 Azure cosmos 的 TTL。我知道它可以通过 Not include defaultTtl in the code 来关闭。但是我有条件部署,我有一个循环来检查租户名称以创建 cosmos 容器,如果它等于“int999”,则将 defaultTtl 设置为 604800,否则关闭 TTL。我尝试将其设置为 null 但管道运行失败,它有一个非常普遍的错误消息“至少一个资源部署操作失败。请列出部署操作以获取详细信息”

在此处输入图像描述

这是我的二头肌代码

resource containers 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers@2021-06-15' = [for i in range(0, length(tenants)): {
  name: '${databases[i].name}/messages'
  properties: {
    resource: {
      id: 'messages'
      partitionKey: {
        paths: [
          '/organisationId'
        ]
      }
      defaultTtl: tenants[i] == 'int999' ? 604800 : null
    }
  }
}] 

我觉得天蓝色文档中的原因很奇怪,defaultTTL 应该接受空值https://docs.microsoft.com/en-us/azure/cosmos-db/time-to-live。但是,在此处将其设置为 null 时,我似乎遇到了语法错误。任何人都可以帮忙吗?谢谢

注意:请注意,对于我的情况,将 defaultTTL 设置为 -1 是不可接受的解决方案。我们想完全关闭 TTL。

4

1 回答 1

1

我也尝试了nullorjson('null')但它没有用。

在这里,您需要根据条件有条件地添加defaultTtl属性。此二头肌文件定义了一些默认属性,并在defaultTtl需要时添加:

param cosmosdbAccountName string
param databaseName string
param tenant string = 'int999'

// reference to the cosmos db database
resource database 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases@2021-06-15' existing = {
  name: '${cosmosdbAccountName}/${databaseName}'
}

// Create default properties for the container
var defaultResource = {
  id: 'messages'
  partitionKey: {
    paths: [
      '/organisationId'
    ]
  }
}

// Create the container
resource container 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers@2021-06-15' = {
  name: '${database.name}/messages'
  properties: {
    // Add the default ttl if needed
    resource: union(defaultResource, tenant == 'int999' ? {
      defaultTtl: 604800
    } : {})
  }
}

于 2021-08-16T22:05:29.820 回答