问题描述
在使用Terraform部署带有MongoDB的Azure CosmosDB账户时,遇到了SubnetsHaveNoServiceEndpointsConfigured
错误。具体错误信息为:
Error: creating CosmosDB Account "geo-db-2pv0c" (Resource Group "geo"): waiting for the CosmosDB Account "geo-db-2pv0c" (Resource Group "geo") to finish creating/updating:
Code="BadRequest" Message="Database account creation failed. OperationId: b2f838e87b6c, Error : {
"error": {
"code":"SubnetsHaveNoServiceEndpointsConfigured",
"message":"Subnets geo-internal-1 of virtual network/subscriptions/b5a3431d77a5/resourceGroups/geo/providers/Microsoft.Network/virtualNetworks/geo-network do not have ServiceEndpoints for Microsoft.AzureCosmosDB resources configured. Add Microsoft.AzureCosmosDB to subnet's ServiceEndpoints collection before trying to ACL Microsoft.AzureCosmosDB resources to these subnets.",
"details": []
}
}
ActivityId:95817ee8-801f-415d-ad06-06fd9af4130d,Microsoft.Azure.Documents.Common/2.14.0,Microsoft.Azure.Documents.Common/2.14.0,Microsoft.Azure.Documents.Common/2.14.0,Microsoft.Azure.Documents.Common/2.14.0,Microsoft.Azure.Documents.Common/2.14.0,Microsoft.Azure.Documents.Common/2.14.0,Microsoft.Azure.Documents.Common/2.14.0"
用户在错误信息中询问如何解决这个问题,以及如何将服务端点添加到子网中。
解决方案
在Azure中,SubnetsHaveNoServiceEndpointsConfigured
错误通常是因为子网(Subnet)没有配置所需的服务终结点(Service Endpoints)。下面提供两种解决方案,你可以根据实际情况选择其中一种。
方案1:在Terraform中配置子网的服务终结点
如果你正在使用Terraform部署VNet和子网,可以通过配置子网的service_endpoints
来添加所需的服务终结点。以下是配置子网的示例代码:
resource "azurerm_subnet" "subnet-internal-1" {
name = "subnet-internal-1"
resource_group_name = azurerm_resource_group.geofriends.name
virtual_network_name = azurerm_virtual_network.vnet-internal.name
address_prefixes = ["10.0.2.0/24"]
service_endpoints = ["Microsoft.AzureCosmosDB"]
}
在上面的示例中,我们在子网配置中添加了service_endpoints
属性,其中包含了需要的服务终结点,即Microsoft.AzureCosmosDB
。
方案2:手动配置子网的服务终结点
如果你已经部署了VNet和子网,可以手动通过Azure门户来配置子网的服务终结点。以下是步骤:
- 登录到Azure门户。
- 导航到你的VNet,并选择要添加服务终结点的子网。
- 在子网的设置中,找到“服务终结点”选项。
- 点击“添加服务终结点”按钮。
- 选择“Microsoft.AzureCosmosDB”作为要添加的服务。
- 保存更改。
这将会将所需的服务终结点添加到子网中,解决SubnetsHaveNoServiceEndpointsConfigured
错误。
请注意,以上操作可能会因Azure门户界面的更新而略有不同。建议在操作之前先查阅官方文档或在线资源,确保你按照最新的步骤进行操作。
总结
在部署Azure CosmosDB账户时,出现SubnetsHaveNoServiceEndpointsConfigured
错误通常是因为子网没有配置所需的服务终结点。你可以通过Terraform配置或手动操作来添加这些服务终结点,以解决这个错误。