Aller au contenu

Pratiques exemplaires pour Bicep

AI generated translation.

Azure Bicep est un langage spécifique à un domaine (DSL) pour déployer de manière déclarative des ressources Azure. C’est un langage conçu pour être plus lisible et plus facile à maintenir afin de définir les ressources Azure.

Bicep est livré avec un linter qui détecte différentes erreurs, mais propose également des meilleures pratiques en ligne qui ne sont pas entièrement couvertes par le linter.

Le fichier suivant est un fichier Bicep qui déploie une application web avec un plan de service d’application Linux. C’est l’exemple de modèle microsoft.web/webapp-basic-linux/main.bicep dans le bac à sable Bicep.

web-app-basic-linux.bicep
@description('Base name of the resource such as web app name and app service plan ')
@minLength(2)
param webAppName string = 'AzureLinuxApp'
@description('The SKU of App Service Plan ')
param sku string = 'S1'
@description('The Runtime stack of current web app')
param linuxFxVersion string = 'php|7.4'
@description('Location for all resources.')
param location string = resourceGroup().location
var webAppPortalName = '${webAppName}-webapp'
#disable-next-line genaiscript
var appServicePlanName = 'AppServicePlan-${webAppName}'
resource appServicePlan 'Microsoft.Web/serverfarms@2022-03-01' = {
name: appServicePlanName
location: location
sku: {
name: sku
}
kind: 'linux'
properties: {
reserved: true
}
}
resource webAppPortal 'Microsoft.Web/sites@2022-03-01' = {
name: webAppPortalName
location: location
kind: 'app'
properties: {
serverFarmId: appServicePlan.id
siteConfig: {
linuxFxVersion: linuxFxVersion
ftpsState: 'FtpsOnly'
}
httpsOnly: true
}
identity: {
type: 'SystemAssigned'
}
}

Le fichier est conforme au linter, mais certaines améliorations peuvent être apportées en suivant les meilleures pratiques. Le script suivant appliquera les meilleures pratiques au fichier Bicep.

bicep-best-practices.genai.mjs
script({
title: "Bicep Best Practices",
temperature: 0,
system: ["system", "system.annotations"],
accept: ".bicep",
});
def("FILE", env.files, { endsWith: ".bicep" });
$`You are an expert at Azure Bicep.
Review the bicep in FILE and generate errors to enhance the script base on best practices
(https://learn.microsoft.com/en-us/azure/azure-resource-manager/bicep/best-practices).
- Generate the top 3 most important annotations.
- Limit range to a single line.
- Do NOT generate notes.
- If a line starts with "#disable-next-line genaiscript", ignore the next line.
`;
  • des numéros de ligne sont ajoutés au contenu du fichier pour aider le LLM à localiser précisément les problèmes.
def("FILE", env.files, {
endsWith: ".bicep",
lineNumbers: true,
});
  • le script utilise un support intégré pour les annotations pour générer des avertissements et des erreurs analysables. Les annotations sont automatiquement intégrées comme problèmes dans VSCode ou comme erreurs de build dans la chaîne CI/CD.
$`... and generate annotations ...`;
  • ajout du support pour ignorer les faux positifs en utilisant le commentaire #disable-next-line genaiscript
$`- If a line starts with "#disable-next-line genaiscript", ignore the next line.`;
  • GPT-4 connaît déjà les meilleures pratiques pour Bicep, il n’est pas nécessaire de les répéter !

Le LLM génère 3 annotations pour le fichier Bicep. Les annotations sont affichées sous forme de lignes ondulées dans VSCode.

Screenshot of a code editor displaying a Bicep file with parameters for an Azure web app. The parameters include webAppName, sku, linuxFxVersion, and location. There are warnings at the bottom suggesting to use a secure and unique default value for 'webAppName', specify the runtime stack more dynamically, and consider adding a 'reserved' property within 'siteConfig'.