Итак, мы начинаем работу над новым проектом по развертыванию ресурсов Azure с использованием действий GitHub и Bicep. У нас уже есть несколько модулей, которые используются для развертывания нескольких ресурсов. Eventhub, comsos, веб-приложение, функция, учетная запись хранения и т. д. Также у нас есть разные среды: dev, qa, stg, prd. Итак, вопрос будет в том, стоит ли нам структурировать код бицепса для развертывания ресурсов в 4 различных средах с помощью потока действий GitHub? .
Я думал создать папку env и iside: dev/dev.bicepparam, qa/qa.bicepparam... и так далее для других сред. Как мне настроить остальную часть инфраструктурного кода? Должен ли я иметь другую папку с именем ресурсов и внутри main.bicep? Например:
env
dev/dev.bicepparam
qa/qa.bicepparam
stg/stg.bicepparam
prd/prd.bicepparam
storage-account/main.bicep --> calling storage module inside
webapp/main.bicep --> calling webapp module
functionapp/main.bicep --> calling webapp module
.... возврат ресурсов
Если бы я, например, захотел развернуть веб-приложение в среде разработки, как бы это было?
Я также думал, что в действиях github я могу вводить данные из четырех сред, и перед запуском конвейера я могу выбрать: [dev,qa,stg,prd] и разверните новый ресурс в dev RG.
Я буду сохранять файловую структуру максимально простой. С папкой для необходимых модулей для службы, main.bicep и файлом необходимых параметров для каждой среды.
.
├── modules
│ ├── storage-account.bicep
│ ├── resource-group.bicep
│ ├── webapp.bicep
│ ├── functionapp.bicep
│ └── cosmosdb.bicep
├── main.bicep
└── env
├── dev.parameters.json
├── qa.parameters.json
├── stg.parameters.json
└── prd.parameters.json
main.bicep должен содержать имя службы с опцией передачи параметров, которые необходимо добавить из файла параметров для каждой среды.
param storageAccountParams object
//rest parameter expected
var serviceName = 'prettyservice'
module storageAccount 'modules/storage-account.bicep' = {
name: '${serviceName}--storage-account'
params: {
storageAccount: storageAccountParams
/// other expected parameters for storage-account module
}
}
// other resource definition referencing the modules like the storage account above
затем ваши файлы параметров для каждой среды: пример dev.parameters.json
using './main.bicep'
param storageAccountParams = {
name: "bvtprettystorweu"
type: "Standard_LRS"
/// other values for the object expected by the storage module
}
Не используйте один репозиторий для размещения всей инфраструктуры, которой вы управляете, а используйте один репозиторий для каждого приложения/сервиса. Например, приведенная выше инфраструктура связана с одним сервисом «prettyservice». Это помогает упростить управление и зачастую избежать поломок.
Ваш конвейер для развертывания, если таргетинг на группу ресурсов, будет таким, как указание конкретного параметра для среды.
az deployment group create \
--name $DEPLOYMENT_NAME \
--resource-group $RESOURCE_GROUP \
--template-file $TEMPLATE_FILE \
--parameters @$PARAMETERS_FILE
Теперь мы готовы к развертыванию с помощью действия GitHub. Просмотрите страницу: