Я использую Bicep для развертывания инфраструктуры наших приложений, и мы пытаемся добавить DNS-записи проверки подлинности домена SendGrid в Bicep, чтобы мы могли развертывать их в разных средах или в новой среде, если захотим, заменить значения в файле parameters.{environment}.json
и запустить его.
Мы развертываем нашу среду с помощью действий GitHub, и до сих пор, до этого момента, не возникло никаких проблем, из-за которых я до сих пор чувствовал себя застрявшим: наш регистратор домена является другой стороной, но наша NS была изменена на Azure, поэтому мы управляем вся платформа через Azure.
resource dnsZonesNameResouce 'Microsoft.Network/dnsZones@2023-07-01-preview' existing = {
name: dnsZonesName
}
Имя зоны DNS передается в модуль в качестве параметра.
Ниже приведен пример создания записи DNS с использованием этого ресурса в качестве родительского.
resource dnsZoneSendGridS1 'Microsoft.Network/dnsZones/CNAME@2023-07-01-preview' = {
parent: dnsZonesNameResouce
name: sendGridS1Name
properties: {
TTL: 3600
TXTRecords: [
{
value: [
sendGridS1Value
]
}
]
targetResource: {}
}
}
Все эти параметры передаются, важно то, что ни одна из этих записей не существует в домене, которому я пытаюсь их назначить. Когда дело доходит до запуска этого Bicep в соответствующем действии GitHub, я всегда получаю несколько ошибок, и все они в том же формате
"/subscriptions/{subscriptionId}/resourceGroups/rg-common/providers/Microsoft.Network/dnsZones/some.domain.com/CNAME/em3203.some.domain.com","message":"***\r\n \"code\": \"BadRequest\",\r\n \"message\": \"Resource records can contain only one type of record specified.
Эта ошибка повторяется несколько раз для каждой отдельной DNS-записи, которую я пытаюсь вставить из этого модуля. Я привел фрагмент выше, эти записи НЕ существуют в домене Azure, в чем я абсолютно уверен, однако Bicep настаивает на том, что оно делает.
Запуск what-if
показывает результат, который выглядит именно так, как мне нужно для запуска в нашей среде, однако, когда мы на самом деле запускаем его, появляется эта ошибка.
Любая помощь приветствуется!
Я попробовал изменить версию resource@...
, чтобы проверить, есть ли несоответствие, но это не дало никаких результатов.
Бег what-if
показывает, чего я ожидал от бицепса, который я написал.
Если в вашем сообщении вы используете свойство TXTRecords
, предназначенное для записи TXT? Извините, я не слишком знаком с Azure DNS, поэтому игнорируйте, если это не имеет значения.
@Thomas проверяет Microsoft DNS CNAME там не упоминается CNAMERecord
он просто говорит CNAME
- Я попробую, так как попытка не повредит!
@Томас, к сожалению CNAMERecord
не сработало
та же ошибка или другая?
Ошибка изменилась, теперь их две: первая ошибка: Warning BCP081: Resource type "Microsoft.Network/dnsZones/CNAMERecord@2023-07-01-preview" does not have types available. Bicep is unable to validate resource properties prior to deployment, but this will not block the resource from being deployed
и вторая ошибка: The client '{clientId}' with object id '{objectId}' does not have permission to perform action 'Microsoft.Network/dnsZones/CNAMERecord/write' at scope '{subscriptionId}'
ошибка выглядит лучше, если честно
Пишет, что у вас нет разрешения на обновление зоны DNS.
так что я предполагаю, что как только вы исправите, это должно работать
С надеждой! Просто пытаюсь разобраться с разрешениями для него, и я сообщу вам, сработает ли это, и вы сможете опубликовать свое решение, и я отмечу его как ответ.
Возможно, вам не хватает разрешения роли «Участник зоны DNS» @Tom
Бицеп добавляет записи DNS, говорящие, что они уже существуют, хотя их нет
Блокировщик, который вы упомянули в комментариях Resource type "Microsoft.Network/dnsZones/CNAMERecord@2023-07-01-preview"
, не имеет доступных типов из-за неспособности бицепса не проверять свойства перед развертыванием, а вторая ошибка связана с отсутствием разрешения роли Участник зоны DNS, которую необходимо назначить вашему SP или пользователю. .
Я также согласился с Томасом по поводу упомянутого им вопроса о том, как мы используем TXTRecords
в конфигурации бицепса.
основной бицепс:
param dnsZonesName string
param sendGridS1Name string
param sendGridS1Value string
resource dnsZonesNameResouce 'Microsoft.Network/dnsZones@2023-07-01-preview' existing = {
name: dnsZonesName
}
resource dnsZoneSendGridS1 'Microsoft.Network/dnsZones/CNAME@2023-07-01-preview' = {
parent: dnsZonesNameResouce
name: sendGridS1Name
properties: {
TTL: 3600
CNAMERecord: {
cname: sendGridS1Value
}
}
}
параметры.json:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"dnsZonesName": {
"value": "vkdomain.com"
},
"sendGridS1Name": {
"value": "em3203.vkdomain.com"
},
"sendGridS1Value": {
"value": "sendgrid.net"
}
}
}
У меня есть уже существующая DNS-запись, созданная vkdomain.com.
Развертывание выполнено успешно:
Ссылка:
Microsoft.Network/dnsZones — шаблон Bicep, ARM и ссылка на Terraform AzAPI | Microsoft Learn
Это справедливо, и вы были правы с CNAMERecord
если это запись CNAME, вам следует использовать свойство
CNAMERecord
, верно? Learn.microsoft.com/en-us/azure/templates/microsoft.network/…