Datumsfunktionen für ARM-Vorlagen
Dieser Artikel beschreibt die Funktionen für das Arbeiten mit Datumsangaben in Ihren Azure Resource Manager-Vorlagen (ARM-Vorlagen).
Tipp
Wir empfehlen Bicep, weil es dieselben Funktionen wie ARM-Vorlagen bietet und die Syntax einfacher zu verwenden ist. Weitere Informationen finden Sie unter Datumsfunktionen für Bicep.
dateTimeAdd
dateTimeAdd(base, duration, [format])
Hiermit wird einem Basiswert eine Dauer hinzugefügt. ISO 8601-Format wird erwartet.
Verwenden Sie in Bicep die dateTimeAdd-Funktion.
Parameter
Parameter | Erforderlich | Type | BESCHREIBUNG |
---|---|---|---|
base | Ja | Zeichenfolge | Der datetime-Startwert für die Hinzufügung. Verwenden Sie das Zeitstempelformat nach ISO 8601. |
duration | Ja | Zeichenfolge | Der Zeitwert, der der Basis hinzugefügt werden soll. Dieser darf kein negativer Wert sein. Verwenden Sie das Format der Zeitspanne nach ISO 8601. |
format | Nein | Zeichenfolge | Das Ausgabeformat für das datetime-Ergebnis. Ist dieser Wert nicht angegeben, wird das Format des Basiswerts verwendet. Verwenden Sie entweder Standardformatzeichenfolgen oder benutzerdefinierte Formatzeichenfolgen. |
Rückgabewert
Der datetime-Wert, der durch Hinzufügen der Dauer zum Basiswert erhalten wird.
Hinweise
Die dateTimeAdd
-Funktion berücksichtigt keine Schaltjahre, und P1Y sollte als P365D interpretiert werden, während P1M als P30D interpretiert werden sollte. Der folgende JSON-Code enthält einige Beispiele:
{
"$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
}
}
}
Im vorstehenden Beispiel ist unter Berücksichtigung des Jahres 2023 als Nicht-Schaltjahr das Ergebnis der Hinzufügung eines Jahres zum ersten Tag des Jahres 2024-01-01T00:00:00Z. Umgekehrt ergibt das Hinzufügen eines Jahres zum ersten Tag von 2024, ein Schaltjahr, 2024-12-31T00:00:00Z und nicht 2025-01-01T00:00:00Z. Die Voraussetzung ist, dass ein Schaltjahr 366 Tage anstelle von 365 umfasst. Des Weiteren wird die Unterscheidung zwischen Schaltjahren und Nicht-Schaltjahren deutlich, wenn ein Monat zum ersten Tag im Februar hinzugefügt wird, was zu unterschiedlichen Tagesergebnissen führt.
Beispiele
In der folgenden Beispielvorlage werden verschiedene Möglichkeiten zum Hinzufügen von time-Werten veranschaulicht.
{
"$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"
}
}
}
Wenn die obige Vorlage mit dem time-Basiswert 2020-04-07 14:53:14Z
bereitgestellt wird, erhalten wir folgende Ausgabe:
Name | type | Wert |
---|---|---|
add3YearsOutput | String | 07.04.2023 14:53:14 |
subtract9DaysOutput | String | 29.03.2020 14:53:14 |
add1HourOutput | String | 07.04.2020 15:53:14 |
Mit der nächsten Beispielvorlage wird veranschaulicht, wie die Startzeit für einen Automation-Zeitplan festgelegt wird.
{
"$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)
Wandelt einen ganzzahligen Unix-Zeitwert (Epoch) in einen ISO 8601-DateTime-Wert um.
Verwenden Sie in Bicep die dateTimeFromEpoch-Funktion.
Parameter
Parameter | Erforderlich | Type | BESCHREIBUNG |
---|---|---|---|
epochTime | Ja | INT | Die Unix-Zeit (Epoch), die in eine DateTime-Zeichenfolge konvertiert werden soll. |
Rückgabewert
Eine ISO 8601-DateTime-Zeichenfolge.
Beispiel
Das folgende Beispiel zeigt Ausgabewerte für die Unix-Zeitfunktionen (Epoch) an.
{
"$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')]"
}
}
}
Die Ausgabe ist:
Name | type | Wert |
---|---|---|
datetimeValue | String | 2023-05-02T15:16:13Z |
epochValue | Int | 1683040573 |
dateTimeToEpoch
dateTimeToEpoch(dateTime)
Wandelt einen ISO 8601-DateTime-Wert in einen ganzzahligen Unix-Zeitwert (Epoch) um.
Verwenden Sie in Bicep die dateTimeToEpoch-Funktion.
Parameter
Parameter | Erforderlich | Type | BESCHREIBUNG |
---|---|---|---|
dateTime | Ja | Zeichenfolge | Die DateTime-Zeichenfolge, die in eine Unix-Zeit (Epoch) konvertiert werden soll. |
Rückgabewert
Eine ganze Zahl, die die Anzahl der Sekunden seit Mitternacht am 1. Januar 1970 darstellt.
Beispiele
Das folgende Beispiel zeigt Ausgabewerte für die Unix-Zeitfunktionen (Epoch) an.
{
"$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')]"
}
}
}
Die Ausgabe ist:
Name | type | Wert |
---|---|---|
datetimeValue | String | 2023-05-02T15:16:13Z |
epochValue | Int | 1683040573 |
Im nächsten Beispiel wird der Unix-Zeitwert (Epoch) verwendet, um den Ablauf für einen Schlüssel in einem Schlüsseltresor festzulegen.
{
"$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)
Gibt den aktuellen datetime-Wert (UTC) im festgelegten Format zurück. Wenn kein Format angegeben wird, wird das ISO 8601-Format (yyyyMMddTHHmmssZ
) verwendet. Diese Funktion kann nur für den Standardwert eines Parameters verwendet werden.
Verwenden Sie in Bicep die utcNow-Funktion.
Parameter
Parameter | Erforderlich | Type | BESCHREIBUNG |
---|---|---|---|
format | Nein | Zeichenfolge | Der als URI codierte Wert, der in eine Zeichenfolge konvertiert werden soll. Verwenden Sie entweder Standardformatzeichenfolgen oder benutzerdefinierte Formatzeichenfolgen. |
Bemerkungen
Sie können diese Funktion nur in einem Ausdruck für den Standardwert eines Parameters verwenden. Wenn diese Funktion an einer anderen Stelle in einer Vorlage verwendet wird, wird ein Fehler zurückgegeben. Die Funktion ist in anderen Teilen der Vorlage nicht zulässig, da bei jedem Aufruf ein anderer Wert zurückgegeben wird. Das Bereitstellen der gleichen Vorlage mit den gleichen Parametern würde nicht zuverlässig zu den gleichen Ergebnissen führen.
Wenn Sie die Option für ein Rollback zu einer vorherigen erfolgreichen Bereitstellung bei einem Fehler verwenden und die vorherige Bereitstellung einen Parameter enthält, der die Funktion utcNow
nutzt, wird dieser Parameter nicht erneut ausgewertet. Stattdessen wird der Parameterwert der vorherigen Bereitstellung in der Rollbackbereitstellung automatisch wiederverwendet.
Seien Sie vorsichtig, wenn Sie eine Vorlage erneut bereitstellen, die die utcNow
-Funktion für einen Standardwert nutzt. Wenn Sie die erneute Bereitstellung durchführen und keinen Wert für den Parameter bereitstellen, wird die Funktion erneut ausgewertet. Wenn Sie eine vorhandene Ressource aktualisieren möchten, anstatt eine neue zu erstellen, übergeben Sie den Parameterwert aus der früheren Bereitstellung.
Rückgabewert
Der aktuelle UTC-datetime-Wert
Beispiele
In der folgenden Beispielvorlage werden verschiedene Formate für den datetime-Wert veranschaulicht.
{
"$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')]"
}
}
}
Die Ausgabe des vorherigen Beispiels variiert bei jeder Bereitstellung. Sie sollte jedoch folgender ähneln:
Name | type | Wert |
---|---|---|
utcOutput | Zeichenfolge | 20190305T175318Z |
utcShortOutput | Zeichenfolge | 03/05/2019 |
utcCustomOutput | Zeichenfolge | 3 5 |
Im folgenden Beispiel wird gezeigt, wie ein Wert der Funktion beim Festlegen eines Tagwerts verwendet wird.
{
"$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')]"
}
}
}
Nächste Schritte
- Eine Beschreibung der Abschnitte in einer ARM-Vorlage finden Sie unter Grundlegendes zur Struktur und Syntax von ARM-Vorlagen.