gpt4 book ai didi

azure - 通过 Bicep 部署队列、blob 和 ADLS2 专用端点出错

转载 作者:行者123 更新时间:2023-12-03 06:49:37 25 4
gpt4 key购买 nike

我正在尝试在两个存储帐户下部署三个 Azure 存储资源,并且我想要实现三个专用终结点,以仅允许从同一 VNET 中的虚拟机连接到这些资源。需要连接到两个单独存储帐户的资源类型为(每个存储帐户):

storageAccountTemp

  1. Azure Blob 队列
  2. Azure Blob 存储

存储帐户数据湖

  1. ADLS 2 容器(数据湖)

我有以下用于部署永久和临时存储的 Azure Bicep 代码:

param location string
param environmentType string
param storageAccountSku string
param privateEndpointsSubnetId string

var privateEndpointNameTmpstBlob = 'pe-tmpst-blob-${environmentType}-001'
var privateEndpointNameTmpstQueue = 'pe-tmpst-queue-{environmentType}-001'
var privateEndpointNamePst = 'pe-pst-${environmentType}-001'

/// Temp storage ///
resource storageAccountTemp 'Microsoft.Storage/storageAccounts@2021-08-01' = {
name: 'tmpst${environmentType}'
location: location
sku: {
name: storageAccountSku
}
kind: 'StorageV2'
properties: {
allowBlobPublicAccess: false
accessTier: 'Hot'
minimumTlsVersion: 'TLS1_0'
publicNetworkAccess: 'Disabled'
}
}

resource blobContainerForQueue 'Microsoft.Storage/storageAccounts/blobServices/containers@2021-08-01' = {
name: '${storageAccountTemp.name}/default/claimcheck-storage-${environmentType}'
properties: {
publicAccess: 'None'
}
}

resource storageQueueMain 'Microsoft.Storage/storageAccounts/queueServices/queues@2019-06-01' = {
name: '${storageAccountTemp.name}/default/queue-main-${environmentType}'
}

/// Persistant storage datalake ///
resource storageAccountDatalake 'Microsoft.Storage/storageAccounts@2021-08-01' = {
name: 'pstdatalake${environmentType}'
location: location
sku: {
name: storageAccountSku
}
kind: 'StorageV2'
properties: {
allowBlobPublicAccess: false
accessTier: 'Hot'
minimumTlsVersion: 'TLS1_0'
isHnsEnabled: true
publicNetworkAccess: 'Disabled'
}
}

/// Data///
resource ContainerForData 'Microsoft.Storage/storageAccounts/blobServices/containers@2021-08-01' = {
name: '${storageAccountDatalake.name}/default/data-${environmentType}'
properties: {
publicAccess: 'None'
}
}

/// Private endpoints configuration for tempblob, queue and datalake ///
resource privateEndpointTmpstBlob 'Microsoft.Network/privateEndpoints@2021-05-01' = if (environmentType == 'dev' || environmentType == 'prd') {
name: privateEndpointNameTmpstBlob
location: location
properties: {
subnet: {
id: privateEndpointsSubnetId
}
privateLinkServiceConnections: [
{
name: privateEndpointNameTmpstBlob
properties: {
privateLinkServiceId: storageAccountTemp.id
groupIds: ['blob']
}
}
]
}
}

resource privateEndpointTmpstQueue 'Microsoft.Network/privateEndpoints@2021-05-01' = if (environmentType == 'dev' || environmentType == 'prd') {
name: privateEndpointNameTmpstQueue
location: location
properties: {
subnet: {
id: privateEndpointsSubnetId
}
privateLinkServiceConnections: [
{
name: privateEndpointNameTmpstQueue
properties: {
privateLinkServiceId: storageAccountTemp.id
groupIds: ['queue']
}
}
]
}
}

resource privateEndpointPst 'Microsoft.Network/privateEndpoints@2021-05-01' = if (environmentType == 'dev' || environmentType == 'prd') {
name: privateEndpointNamePst
location: location
properties: {
subnet: {
id: privateEndpointsSubnetId
}
privateLinkServiceConnections: [
{
name: privateEndpointNamePst
properties: {
privateLinkServiceId: storageAccountDatalake.id
groupIds: ['blob']
}
}
]
}
}

如您所见,对于存储帐户,IsHnsEnabled 设置为 true,以启用 HierarchicalNamespace 以及 ADLS2 功能。问题是,如果我在 Bicep 部署中包含 privateEndpointPst 资源部署,然后尝试从与专用终结点位于同一 VNET 中的虚拟机(位于生成 privateEndpointsSubnetId 的子网中)查看门户中的数据湖容器变量),当尝试查看数据湖容器之一中的文件时,我收到以下消息: enter image description here

我相信这不是图中的问题。原因是,当我将所有三个端点部署在一起时,当我部署所有三个端点时,在尝试查看 storageAccountTemp 和 storageAccountDatalake 中的 blob/queue/datalake 时,它​​们都会显示相同的问题。

但是,仅部署 storageAccountTemp 资源的两个端点,而不是 Datalake 的端点,当从 VNET 中的虚拟机运行时,我可以看到门户中的数据,并且从该虚拟机运行的代码也可以到达队列 + blob 。因此,privateEndpointPst 的部署不仅似乎会扰乱数据湖的可访问性,而且如果我完全部署它们,它还会以某种方式对 storageAccountTemp 中的其他队列和 blob 的可访问性造成同样的影响。我很困惑为什么会发生这种情况,以及为什么我似乎无法以正确的方式部署数据湖端点。此外,有时,完全部署端点将使数据湖端点正常工作,并破坏其他两个端点,这更令人难以置信。单击您是否想要进行一些检查来检测常见的连接问题会给我提供以下信息,但这并没有让我更清楚导致问题的原因(因为我很确定这不是防火墙) ;有时可以访问,有时不能访问): enter image description here有谁知道我的 Bicep 代码用于部署可能导致此问题的端点有什么问题吗?我在这里很茫然。还尝试将 groupIds: ['blob'] 替换为 groupIds: ['dfs'],但这似乎并不能解决我的问题。

最佳答案

我似乎发现了问题。要连接到数据湖资源,需要同时拥有带有 groupIds: ['blob']groupIds: ['dfs] 的私有(private)端点,因为 blob API 是仍然用于获取有关容器的一些元信息(据我所知)。

所以添加:

resource privateEndpointPstDfs 'Microsoft.Network/privateEndpoints@2021-05-01' = if (environmentType == 'dev' || environmentType == 'prd') {
name: privateEndpointNamePstDfs
location: location
properties: {
subnet: {
id: privateEndpointsSubnetId
}
privateLinkServiceConnections: [
{
name: privateEndpointNamePstDfs
properties: {
privateLinkServiceId: storageAccountDatalake.id
groupIds: ['dfs']
}
}
]
}
}

使部署成功。

关于azure - 通过 Bicep 部署队列、blob 和 ADLS2 专用端点出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73817871/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com