Fungsi tanggal untuk templat ARM
Artikel ini menjelaskan agar fungsi bekerja sesuai tanggal di templat Azure Resource Manager (templat ARM).
Tip
Kami merekomendasikan Bicep karena menawarkan kemampuan yang sama dengan templat ARM dan sintaksnya lebih mudah digunakan. Untuk mempelajari selengkapnya, lihat fungsi tanggal.
dateTimeAdd
dateTimeAdd(base, duration, [format])
Menambahkan durasi waktu ke nilai dasar. Format ISO 8601 diharapkan.
Di Bicep, gunakan fungsi dateTimeAdd.
Parameter
Parameter | Wajib | Tipe | Deskripsi |
---|---|---|---|
dasar | Ya | string | Nilai tanggalwaktu mulai untuk penambahan. Gunakan format tanda waktu ISO 8601. |
durasi | Ya | string | Nilai waktu untuk ditambahkan ke basis. Hal ini bisa menjadi nilai negatif. Gunakan format durasi ISO 8601. |
format | No | string | Format keluaran untuk hasil tanggal waktu. Jika tidak disediakan, format nilai dasar digunakan. Gunakan untai (karakter) format standar atau untai (karakter) format kustom. |
Nilai hasil
Nilai tanggalwaktu yang hasil dari menambahkan nilai durasi ke nilai dasar.
Keterangan
Fungsi dateTimeAdd
ini tidak mempertimbangkan tahun kampung, dan P1Y harus ditafsirkan sebagai P365D, sementara P1M harus ditafsirkan sebagai P30D. Json berikut menunjukkan beberapa contoh:
{
"$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
}
}
}
Dalam contoh sebelumnya, mengingat 2023 sebagai tahun non-kampung, hasil penambahan satu tahun ke hari awal tahun adalah 2024-01-01T00:00:00Z. Sebaliknya, menambahkan satu tahun ke hari mulai 2024, tahun kabut, menghasilkan 2024-12-31T00:00:00Z, bukan 2025-01-01T00:00:00Z, mengingat bahwa tahun kabut terdiri dari 366 hari alih-alih 365 hari. Selain itu, perbedaan antara tahun lompatan dan non-lompatan menjadi jelas ketika menambahkan satu bulan ke hari pertama Bulan Februari, yang mengarah ke berbagai hasil hari dalam sebulan.
Contoh
Contoh templat berikut ini menampilkan berbagai cara untuk menambahkan nilai waktu.
{
"$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"
}
}
}
Ketika template sebelumnya disebarkan dengan waktu dasar 2020-04-07 14:53:14Z
, keluarannya adalah:
Nama | Jenis | Nilai |
---|---|---|
add3YearsOutput | String | 4/7/2023 14:53:14 WIB |
subtract9DaysOutput | String | 3/29/2020 14:53:14 WIB |
add1HourOutput | String | 4/7/2020 15:53:14 WIB |
Contoh templat berikutnya menampilkan cara mengatur waktu mulai untuk jadwal Automation.
{
"$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)
Mengonversi nilai bilangan bulat waktu epoch menjadi tanggalwaktu ISO 8601.
Di Bicep, gunakan fungsi dateTimeFromEpoch.
Parameter
Parameter | Wajib | Tipe | Deskripsi |
---|---|---|---|
epochTime | Ya | int | Waktu epoch untuk mengonversi ke string tanggalwaktu. |
Nilai hasil
String tanggalwaktu ISO 8601.
Contoh
Contoh berikut menunjukkan nilai output untuk fungsi waktu 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')]"
}
}
}
Outputnya adalah:
Nama | Jenis | Nilai |
---|---|---|
datetimeValue | String | 2023-05-02T15:16:13Z |
epochValue | Int | 1683040573 |
dateTimeToEpoch
dateTimeToEpoch(dateTime)
Mengonversi string tanggalwaktu ISO 8601 menjadi nilai bilangan bulat waktu epoch.
Di Bicep, gunakan fungsi dateTimeFromEpoch.
Parameter
Parameter | Wajib | Tipe | Deskripsi |
---|---|---|---|
tanggalWaktu | Ya | string | String tanggalwaktu untuk dikonversi ke waktu epoch. |
Nilai hasil
Bilangan bulat yang mewakili jumlah detik dari tengah malam pada 1 Januari 1970.
Contoh
Contoh berikut menunjukkan nilai output untuk fungsi waktu 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')]"
}
}
}
Outputnya adalah:
Nama | Jenis | Nilai |
---|---|---|
datetimeValue | String | 2023-05-02T15:16:13Z |
epochValue | Int | 1683040573 |
Contoh berikutnya menggunakan nilai waktu epoch untuk mengatur kedaluwarsa untuk kunci dalam brankas kunci.
{
"$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)
Mengembalikan nilai tanggalwaktu (UTC) saat ini dalam format yang ditentukan. Jika tidak ada format yang disediakan, format ISO 8601 (yyyyMMddTHHmmssZ
) digunakan. Fungsi ini hanya dapat digunakan dalam nilai default untuk parameter.
Di Bicep, gunakan fungsi utcNow.
Parameter
Parameter | Wajib | Tipe | Deskripsi |
---|---|---|---|
format | No | string | Nilai yang dikodekan URI untuk dikonversi menjadi string. Gunakan untai (karakter) format standar atau untai (karakter) format kustom. |
Keterangan
Anda hanya bisa menggunakan fungsi ini dalam ekspresi untuk nilai default parameter. Menggunakan fungsi ini di tempat lain dalam templat mengembalikan kesalahan. Fungsi ini tidak diizinkan di bagian lain templat karena mengembalikan nilai yang berbeda setiap kali disebut. Menyebarkan template yang sama dengan parameter yang sama tidak akan menghasilkan hasil sama yang terpercaya.
Jika Anda menggunakan opsi untuk memutar kembali kesalahan yang berhasil disebar sebelumnya, dan menyertakan parameter yang menggunakan utcNow
, parameter tidak dievaluasi ulang. Sebaliknya, nilai parameter dari penyebaran sebelumnya secara otomatis digunakan kembali dalam penyebaran putar kembali.
Hati-hati menyebar ulang templat yang bergantung pada utcNow
fungsi untuk nilai default. Ketika Anda menyebar ulang dan tidak memberikan nilai untuk parameter, fungsi tersebut dievaluasi kembali. Jika Anda ingin memperbarui sumber daya yang ada daripada membuat yang baru, berikan nilai parameter dari penyebaran sebelumnya.
Nilai hasil
Nilai tanggalwaktu UTC saat ini.
Contoh
Contoh templat berikut ini menampilkan format berbeda untuk nilai tanggalwaktu.
{
"$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')]"
}
}
}
Keluaran dari contoh sebelumnya bervariasi untuk setiap penyebaran tetapi akan mirip dengan:
Nama | Jenis | Nilai |
---|---|---|
utcOutput | string | 20190305T175318Z |
utcShortOutput | string | 03/05/2019 |
utcCustomOutput | string | 3 5 |
Contoh berikutnya menampilkan cara menggunakan nilai dari fungsi saat mengatur nilai 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')]"
}
}
}
Langkah berikutnya
- Untuk deskripsi bagian-bagian dalam templat ARM, lihat Memahami struktur dan sintaksis templat ARM.