Bicep: Come creare una Static Web App

Sapevi che utilizzando Bicep puoi creare una Azure Static Web App minimale in pochissime righe di codice? Se non hai ancora letto l’articolo Bicep: come installarlo tramite CLI ti consiglio di farlo prima di proseguire.

Ti ricordo che con Bicep potrai lavorare esclusicamente su Azure e non altrove, ma non temere in quanto troverai altri dettagli nell’articolo che ti ho appena segnato.

Static Web App

Per creare la nostra Static Web App il primo passaggio che andremo a fare sarà quello di creare un nuovo file e lo chiameremo “staticSite.bicep” ed al suo interno andremo a mettere il seguente codice sorgente:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
targetScope = 'resourceGroup'

param staticSiteName string

param resourceGroupLocation string = 'westeurope'

@allowed(['Free', 'Standard'])
param sku string = 'Free'

resource staticSite 'Microsoft.Web/staticSites@2022-09-01' = {
  name: staticSiteName
  location: resourceGroupLocation
  sku: {
    tier: sku
    name: sku
  }
  properties: {}
  tags: {
    environment: 'dev'
  }
}

output staticSiteEndpoint string = staticSite.properties.defaultHostname
output staticSiteSku string = staticSite.sku.tier
output staticSiteSkuName string = staticSite.sku.name
output staticSiteLocation string = staticSite.location
output deployment_token string = staticSite.listSecrets().properties.apiKey

Ora che hai creato il tuo primo staticSite.bicep sei pronto a lanciarlo?

1
2
3
4
5
az deployment group create 
    --name groupDeployment 
    --template-file staticSite.bicep 
    --resource-group bicep-demo-rg
    --parameters staticSiteName=bicep-demo-static-site

🚀 A questo punto preparati perché potresti avere una serie di “questioni inaspettate” prima di vederlo andare in run correttamente.

Attenzione: Il valore fornito al parametro “–resource-group” deve corrispondere al nome di un Resource Group creato in precedenza

output

Come avrai notato nel codice appena mostrato ho inserito una serie di valori in output e dal run appena effettuato tramite il comando indicato ho ottenuto i seguenti risultati:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
 "outputs": {
      "deployment_token": {
        "type": "String",
        "value": "47d[...]188"
      },
      "staticSiteEndpoint": {
        "type": "String",
        "value": "..."
      },
      "staticSiteLocation": {
        "type": "String",
        "value": "West Europe"
      },
      "staticSiteSku": {
        "type": "String",
        "value": "Free"
      },
      "staticSiteSkuName": {
        "type": "String",
        "value": "Free"
      }
    },

In questo momento -prima di chiudere il contenuto- vorrei sensibilizzare la tua attenzione su deployment_token. Come mai?

🔐 Produrre in output un valore contenente un secret non è consigliato per ovvi motivi di sicurezza. Il messaggio che avrete in console sarà il seguente (o molto simile)

Warning outputs-should-not-contain-secrets: Outputs should not contain secrets. Found possible secret: function ‘listSecrets’ [https://aka.ms/bicep/linter/outputs-should-not-contain-secrets]

Ora devi solamente porti una domanda: mi serve davvero esporre quel valore? Oppure posso ricavarlo/ usarlo in altro modo?

Il mio inserimento nel codice è legato a due motivi:

  • mostrare la possibilità di usare listSecrets() all’interno dello script
  • mostrare il warning legato a questa pratica

Buona IaC tramite Bicep!