Funzioni data per i modelli ARM
Questo articolo descrive le funzioni per operare con le date nel modello di Azure Resource Manager (modello di ARM).
Suggerimento
È consigliabile Bicep perché offre le stesse funzionalità dei modelli di ARM e la sintassi è più semplice da usare. Per ulteriori informazioni, vedere le funzioni data.
DateTimeAdd
dateTimeAdd(base, duration, [format])
Aggiunge una durata temporale a un valore di base. È previsto il formato ISO 8601.
In Bicep usare la funzione dateTimeAdd.
Parametri
Parametro | Richiesto | Type | Descrizione |
---|---|---|---|
base | Sì | string | Valore datetime iniziale per l'aggiunta. Usare il formato timestamp ISO 8601. |
duration | Sì | string | Valore dell'ora da aggiungere alla base. Può essere un valore negativo. Usare il formato di durata ISO 8601. |
format | No | string | Formato di output per il risultato di data e ora. Se non specificato, viene utilizzato il formato del valore di base. Usare stringhe con formato standard oppure stringhe con formato personalizzato. |
Valore restituito
Valore datetime risultante dall'aggiunta del valore di durata al valore di base.
Osservazioni:
La funzione dateTimeAdd
non prende in considerazione gli anni bisestili e P1Y deve essere interpretato come P365D, mentre P1M deve essere interpretato come P30D. Il codice JSON seguente mostra alcuni esempi:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [],
"outputs": {
"addOneYearNonLeap": {
"type": "string",
"value": "[dateTimeAdd('2023-01-01 00:00:00Z', 'P1Y')]" //2024-01-01T00:00:00Z
},
"addOneYearLeap": {
"type": "string",
"value": "[dateTimeAdd('2024-01-01 00:00:00Z', 'P1Y')]" //2024-12-31T00:00:00Z
},
"addOneMonthNonLeap": {
"type": "string",
"value": "[dateTimeAdd('2023-02-01 00:00:00Z', 'P1M')]" //2023-03-03T00:00:00Z
},
"addOneMonthLeap": {
"type": "string",
"value": "[dateTimeAdd('2024-02-01 00:00:00Z', 'P1M')]" //2024-03-02T00:00:00Z
}
}
}
Nell'esempio precedente, considerando il 2023 come anno non bisestile, il risultato dell'aggiunta di un anno al giorno iniziale dell'anno è 2024-01-01T00:00:00Z. Viceversa, aggiungendo un anno al giorno iniziale del 2024, anno bisestile, si ottiene 2024-12-31T00:00:00Z, non 2025-01-01T00:00:00Z, dato che un anno bisestile è composto da 366 giorni invece di 365. Inoltre, la distinzione tra anni bisestili e non bisestili diventa evidente quando si aggiunge un mese al primo giorno di febbraio, portando a risultati variabili del giorno del mese.
Esempi
Il modello di esempio seguente illustra diversi modi per aggiungere valori temporali.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"baseTime": {
"type": "string",
"defaultValue": "[utcNow('u')]"
}
},
"variables": {
"add3Years": "[dateTimeAdd(parameters('baseTime'), 'P3Y')]",
"subtract9Days": "[dateTimeAdd(parameters('baseTime'), '-P9D')]",
"add1Hour": "[dateTimeAdd(parameters('baseTime'), 'PT1H')]"
},
"resources": [],
"outputs": {
"add3YearsOutput": {
"value": "[variables('add3Years')]",
"type": "string"
},
"subtract9DaysOutput": {
"value": "[variables('subtract9Days')]",
"type": "string"
},
"add1HourOutput": {
"value": "[variables('add1Hour')]",
"type": "string"
}
}
}
Quando il modello precedente viene distribuito con un tempo di base di 2020-04-07 14:53:14Z
, l'output è:
Nome | Type | Valore |
---|---|---|
add3YearsOutput | String | 4/7/2023 2:53:14 PM |
subtract9DaysOutput | String | 3/29/2020 2:53:14 PM |
add1HourOutput | String | 4/7/2020 3:53:14 PM |
Il modello di esempio successivo mostra come impostare l'ora di inizio per una pianificazione di Automazione.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"omsAutomationAccountName": {
"type": "string",
"defaultValue": "demoAutomation",
"metadata": {
"description": "Use an existing Automation account."
}
},
"scheduleName": {
"type": "string",
"defaultValue": "demoSchedule1",
"metadata": {
"description": "Name of the new schedule."
}
},
"baseTime": {
"type": "string",
"defaultValue": "[utcNow('u')]",
"metadata": {
"description": "Schedule will start one hour from this time."
}
}
},
"variables": {
"startTime": "[dateTimeAdd(parameters('baseTime'), 'PT1H')]"
},
"resources": [
...
{
"type": "Microsoft.Automation/automationAccounts/schedules",
"apiVersion": "2022-08-08",
"name": "[concat(parameters('omsAutomationAccountName'), '/', parameters('scheduleName'))]",
"properties": {
"description": "Demo Scheduler",
"startTime": "[variables('startTime')]",
"interval": 1,
"frequency": "Hour"
}
}
],
"outputs": {
}
}
dateTimeFromEpoch
dateTimeFromEpoch(epochTime)
Converte un valore di tipo tempo intero epoch in un valore datetime ISO 8601.
In Bicep, usare la funzione dateTimeFromEpoch.
Parametri
Parametro | Richiesto | Type | Descrizione |
---|---|---|---|
epochTime | Sì | int | Tempo epoch da convertire in una stringa datetime. |
Valore restituito
Stringa datetime ISO 8601.
Esempio
L'esempio seguente mostra i valori di output per le funzioni temporali epoch.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"convertedEpoch": {
"type": "int",
"defaultValue": "[dateTimeToEpoch(dateTimeAdd(utcNow(), 'P1Y'))]"
}
},
"variables": {
"convertedDatetime": "[dateTimeFromEpoch(parameters('convertedEpoch'))]"
},
"resources": [],
"outputs": {
"epochValue": {
"type": "int",
"value": "[parameters('convertedEpoch')]"
},
"datetimeValue": {
"type": "string",
"value": "[variables('convertedDatetime')]"
}
}
}
L'output è il seguente:
Nome | Type | Valore |
---|---|---|
datetimeValue | String | 2023-05-02T15:16:13Z |
epochValue | Int | 1683040573 |
dateTimeToEpoch
dateTimeToEpoch(dateTime)
Converte una stringa datetime ISO 8601 in un valore intero temporale epoch.
In Bicep, usare la funzione dateTimeToEpoch .
Parametri
Parametro | Richiesto | Type | Descrizione |
---|---|---|---|
dateTime | Sì | string | Stringa datetime da convertire in ora epoch. |
Valore restituito
Intero che rappresenta il numero di secondi dalla mezzanotte del 1° gennaio 1970.
Esempi
L'esempio seguente mostra i valori di output per le funzioni temporali epoch.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"convertedEpoch": {
"type": "int",
"defaultValue": "[dateTimeToEpoch(dateTimeAdd(utcNow(), 'P1Y'))]"
}
},
"variables": {
"convertedDatetime": "[dateTimeFromEpoch(parameters('convertedEpoch'))]"
},
"resources": [],
"outputs": {
"epochValue": {
"type": "int",
"value": "[parameters('convertedEpoch')]"
},
"datetimeValue": {
"type": "string",
"value": "[variables('convertedDatetime')]"
}
}
}
L'output è il seguente:
Nome | Type | Valore |
---|---|---|
datetimeValue | String | 2023-05-02T15:16:13Z |
epochValue | Int | 1683040573 |
Nell'esempio seguente viene usato il valore temporale epoch per impostare la scadenza di una chiave in un insieme di credenziali delle chiavi.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.5.6.12127",
"templateHash": "16023511331197397029"
}
},
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "The location into which the resources should be deployed."
}
},
"tenantId": {
"type": "string",
"defaultValue": "[subscription().tenantId]",
"metadata": {
"description": "The Tenant Id that should be used throughout the deployment."
}
},
"userAssignedIdentityName": {
"type": "string",
"metadata": {
"description": "The name of the existing User Assigned Identity."
}
},
"userAssignedIdentityResourceGroupName": {
"type": "string",
"metadata": {
"description": "The name of the resource group for the User Assigned Identity."
}
},
"keyVaultName": {
"type": "string",
"defaultValue": "[format('vault-{0}', uniqueString(resourceGroup().id))]",
"metadata": {
"description": "The name of the Key Vault."
}
},
"keyVaultKeyName": {
"type": "string",
"defaultValue": "cmkey",
"metadata": {
"description": "Name of the key in the Key Vault"
}
},
"keyExpiration": {
"type": "int",
"defaultValue": "[dateTimeToEpoch(dateTimeAdd(utcNow(), 'P1Y'))]",
"metadata": {
"description": "Expiration time of the key"
}
},
"storageAccountName": {
"type": "string",
"defaultValue": "[format('storage{0}', uniqueString(resourceGroup().id))]",
"metadata": {
"description": "The name of the Storage Account"
}
}
},
"resources": [
{
"type": "Microsoft.KeyVault/vaults",
"apiVersion": "2021-10-01",
"name": "[parameters('keyVaultName')]",
"location": "[parameters('location')]",
"properties": {
"sku": {
"name": "standard",
"family": "A"
},
"enableSoftDelete": true,
"enablePurgeProtection": true,
"enabledForDiskEncryption": true,
"tenantId": "[parameters('tenantId')]",
"accessPolicies": [
{
"tenantId": "[parameters('tenantId')]",
"permissions": {
"keys": [
"unwrapKey",
"wrapKey",
"get"
]
},
"objectId": "[reference(extensionResourceId(format('/subscriptions/{0}/resourceGroups/{1}', subscription().subscriptionId, parameters('userAssignedIdentityResourceGroupName')), 'Microsoft.ManagedIdentity/userAssignedIdentities', parameters('userAssignedIdentityName')), '2018-11-30').principalId]"
}
]
}
},
{
"type": "Microsoft.KeyVault/vaults/keys",
"apiVersion": "2021-10-01",
"name": "[format('{0}/{1}', parameters('keyVaultName'), parameters('keyVaultKeyName'))]",
"properties": {
"attributes": {
"enabled": true,
"exp": "[parameters('keyExpiration')]"
},
"keySize": 4096,
"kty": "RSA"
},
"dependsOn": [
"[resourceId('Microsoft.KeyVault/vaults', parameters('keyVaultName'))]"
]
},
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-04-01",
"name": "[parameters('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"[format('{0}', extensionResourceId(format('/subscriptions/{0}/resourceGroups/{1}', subscription().subscriptionId, parameters('userAssignedIdentityResourceGroupName')), 'Microsoft.ManagedIdentity/userAssignedIdentities', parameters('userAssignedIdentityName')))]": {}
}
},
"properties": {
"accessTier": "Hot",
"supportsHttpsTrafficOnly": true,
"minimumTlsVersion": "TLS1_2",
"encryption": {
"identity": {
"userAssignedIdentity": "[extensionResourceId(format('/subscriptions/{0}/resourceGroups/{1}', subscription().subscriptionId, parameters('userAssignedIdentityResourceGroupName')), 'Microsoft.ManagedIdentity/userAssignedIdentities', parameters('userAssignedIdentityName'))]"
},
"services": {
"blob": {
"enabled": true
}
},
"keySource": "Microsoft.Keyvault",
"keyvaultproperties": {
"keyname": "[parameters('keyVaultKeyName')]",
"keyvaulturi": "[if(endsWith(reference(resourceId('Microsoft.KeyVault/vaults', parameters('keyVaultName'))).vaultUri, '/'), substring(reference(resourceId('Microsoft.KeyVault/vaults', parameters('keyVaultName'))).vaultUri, 0, sub(length(reference(resourceId('Microsoft.KeyVault/vaults', parameters('keyVaultName'))).vaultUri), 1)), reference(resourceId('Microsoft.KeyVault/vaults', parameters('keyVaultName'))).vaultUri)]"
}
}
},
"dependsOn": [
"[resourceId('Microsoft.KeyVault/vaults', parameters('keyVaultName'))]",
"[resourceId('Microsoft.KeyVault/vaults/keys', parameters('keyVaultName'), parameters('keyVaultKeyName'))]"
]
}
]
}
utcNow
utcNow(format)
Restituisce il valore datetime corrente (UTC) nel formato specificato. Se non viene fornito alcun formato, viene usato il formato ISO 8601 (yyyyMMddTHHmmssZ
). Questa funzione può essere usata solo nel valore predefinito per un parametro.
In Bicep, usare la funzione utcNow.
Parametri
Parametro | Richiesto | Type | Descrizione |
---|---|---|---|
format | No | string | Valore URI codificato da convertire in stringa. Usare stringhe con formato standard oppure stringhe con formato personalizzato. |
Osservazioni:
È possibile utilizzare questa funzione solo all'interno di un'espressione per il valore predefinito di un parametro. L'uso di questa funzione in qualsiasi altra posizione in un modello restituisce un errore. La funzione non è consentita in altre parti del modello perché restituisce un valore diverso ogni volta che viene chiamato. Distribuire lo stesso modello con gli stessi parametri non produce gli stessi risultati in modo affidabile.
Se si usa l'opzione per eseguire il ripristino dello stato precedente in caso di errore a una precedente distribuzione con esito positivo e la distribuzione precedente include un parametro che usa utcNow
, il parametro non viene rivalutato. Al contrario, il valore del parametro della distribuzione precedente viene invece riutilizzato automaticamente nella distribuzione di ripristino.
Prestare attenzione alla ridistribuzione di un modello che si basa sulla funzione utcNow
per un valore predefinito. Quando si ridistribuisce e non si specifica un valore per il parametro, la funzione viene rivalutata. Se si vuole aggiornare una risorsa esistente anziché crearne una nuova, inserire il valore del parametro dalla distribuzione precedente.
Valore restituito
Valore datetime UTC corrente.
Esempi
Il modello di esempio seguente mostra formati diversi per il valore datetime.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"utcValue": {
"type": "string",
"defaultValue": "[utcNow()]"
},
"utcShortValue": {
"type": "string",
"defaultValue": "[utcNow('d')]"
},
"utcCustomValue": {
"type": "string",
"defaultValue": "[utcNow('M d')]"
}
},
"resources": [
],
"outputs": {
"utcOutput": {
"type": "string",
"value": "[parameters('utcValue')]"
},
"utcShortOutput": {
"type": "string",
"value": "[parameters('utcShortValue')]"
},
"utcCustomOutput": {
"type": "string",
"value": "[parameters('utcCustomValue')]"
}
}
}
L'output dell'esempio precedente varia per ogni distribuzione, ma sarà simile a:
Nome | Type | Valore |
---|---|---|
utcOutput | string | 20190305T175318Z |
utcShortOutput | string | 03/05/2019 |
utcCustomOutput | string | 3 5 |
L'esempio seguente mostra come usare un valore della funzione quando si imposta un valore di tag.
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"utcShort": {
"type": "string",
"defaultValue": "[utcNow('d')]"
},
"rgName": {
"type": "string"
}
},
"resources": [
{
"type": "Microsoft.Resources/resourceGroups",
"apiVersion": "2021-04-01",
"name": "[parameters('rgName')]",
"location": "westeurope",
"tags": {
"createdDate": "[parameters('utcShort')]"
},
"properties": {}
}
],
"outputs": {
"utcShortOutput": {
"type": "string",
"value": "[parameters('utcShort')]"
}
}
}
Passaggi successivi
- Per una descrizione delle sezioni in un modello di ARM, vedere Comprendere la struttura e la sintassi dei modelli di ARM.