Funzioni di data per i modelli di Resource Manager
Questo articolo descrive le funzioni per l'uso delle date nel modello di Azure Resource Manager .This article describe the functions for working with dates in your Azure Resource Manager template (ARM template).
Suggerimento
È consigliabile usare Bicep perché offre le stesse funzionalità dei modelli arm e la sintassi è più facile da usare. Per altre informazioni, vedere Funzioni di 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 | Digita | Descrizione |
---|---|---|---|
base | Sì | stringa | Valore datetime iniziale per l'addizione. Usare il formato timestamp ISO 8601. |
duration | Sì | stringa | Valore dell'ora da aggiungere alla base. Può essere un valore negativo. Usare il formato di durata ISO 8601. |
format | No | stringa | Formato di output per il risultato di data e ora. Se non specificato, viene utilizzato il formato del valore di base. Usare stringhe di formato standard o stringhe di formato personalizzate. |
Valore restituito
Valore datetime risultante dall'aggiunta del valore di durata al valore di base.
Osservazioni
La funzione dateTimeAdd tiene conto degli anni intercalari e del numero di giorni in un mese durante l'esecuzione dell'aritmetica della data. Nell'esempio seguente viene aggiunto un mese al 31 gennaio:
"outputs": {
"add10YearsOutput": {
"type": "string",
"value": "[dateTimeAdd('2023-01-31 00:00:00Z', 'P1M')]" //2023-03-02T00:00:00Z
},
"add1MonthOutput": {
"type": "string",
"value": "[dateTimeAdd('2024-01-31 00:00:00Z', 'P1M')]" //2024-03-01T00:00:00Z
}
}
In questo esempio restituisce dateTimeAdd
2023-03-02T00:00:00Z
, non 2023-02-28T00:00:00Z
. Se la base è 2024-01-31 00:00:00Z
, restituisce 2024-03-01T00:00:00Z
perché il 2024 è un anno bisestile.
Esempi
Il modello di esempio seguente illustra diversi modi per aggiungere valori di ora.
{
"$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 | Stringa | 4/7/2023 2:53:14 PM |
subtract9DaysOutput | Stringa | 29/3/2020 2:53:14 PM |
add1HourOutput | Stringa | 4/7/2020 3:53:14 PM |
Il modello di esempio successivo illustra 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 time integer dell'epoca in un valore datetime ISO 8601.
In Bicep usare la funzione dateTimeFromEpoch .
Parametri
Parametro | Richiesto | Digita | Descrizione |
---|---|---|---|
epochTime | Sì | int | Ora dell'epoca 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 dell'epoca.
{
"$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 | Stringa | 2023-05-02T15:16:13Z |
epochValue | Int | 1683040573 |
dateTimeToEpoch
dateTimeToEpoch(dateTime)
Converte una stringa datetime ISO 8601 in un valore intero temporale dell'epoca.
In Bicep usare la funzione dateTimeToEpoch .
Parametri
Parametro | Richiesto | Digita | Descrizione |
---|---|---|---|
dateTime | Sì | stringa | Stringa datetime da convertire in un'ora dell'epoca. |
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 dell'epoca.
{
"$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 | Stringa | 2023-05-02T15:16:13Z |
epochValue | Int | 1683040573 |
Nell'esempio seguente viene usato il valore dell'ora dell'epoca 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 | Digita | Descrizione |
---|---|---|---|
format | No | stringa | Valore URI codificato da convertire in stringa. Usare stringhe di formato standard o stringhe di formato personalizzate. |
Osservazioni
È possibile usare questa funzione solo all'interno di un'espressione per il valore predefinito di un parametro. L'uso di questa funzione in un'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. La distribuzione dello stesso modello con gli stessi parametri non produce in modo affidabile gli stessi risultati.
Se si usa l'opzione per eseguire il rollback in caso di errore in una distribuzione con esito positivo precedente e la distribuzione precedente include un parametro che usa utcNow
, il parametro non viene rivalutato. Il valore del parametro della distribuzione precedente viene invece riutilizzato automaticamente nella distribuzione di rollback.
Prestare attenzione alla ridistribuzione di un modello che si basa sulla utcNow
funzione 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, passare 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 al seguente:
Nome | Type | Valore |
---|---|---|
utcOutput | stringa | 20190305T175318Z |
utcShortOutput | stringa | 03/05/2019 |
utcCustomOutput | stringa | 3 5 |
Nell'esempio seguente viene illustrato 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 Resource Manager, vedere Informazioni sulla struttura e la sintassi dei modelli di Resource Manager.