وظائف التاريخ لقوالب مدير موارد Azure

يوضح هذا المقال الدوال للعمل مع التواريخ في قالب مدير موارد Azure.

تلميح

نوصي باستخدام Bicep لأنها تقدم نفس الإمكانات التي توفرها قوالب ARM ولأن بناء الجملة أسهل في الاستخدام. لمعرفة المزيد، راجع دوال date.

dateTimeAdd

dateTimeAdd(base, duration, [format])

إضافة مدة زمنية إلى قيمة أساسية. يُتوقع تنسيق ISO 8601.

في Bicep، استخدم دالة dateTimeAdd.

المعلمات

المعلمة مطلوب النوع الوصف
التمركز نعم سلسلة قيمة البداية والتاريخ والوقت للإضافة. استخدم تنسيق الطابع الزمني ISO 8601.
المدة نعم سلسلة القيمة الزمنية المراد إضافتها إلى القاعدة. يمكن أن تكون قيمة سالبة. استخدم تنسيق المدة ISO 8601.
التنسيق لا سلسلة تنسيق الإخراج لنتيجة التاريخ والوقت. إذا لم يتم توفيره، فسيتم استخدام تنسيق القيمة الأساسية. استخدم إما سلاسل ذات تنسيق قياسي أو سلاسل ذات تنسيق مخصص .

قيمة الإرجاع

قيمة التاريخ والوقت التي تنتج عن إضافة قيمة المدة إلى القيمة الأساسية.

أمثلة

يوضح نموذج المثال التالي طرقاً مختلفة لإضافة قيم الوقت.

{
  "$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"
    }
  }
}

عندما يتم نشر القالب السابق بوقت أساسي هو2020-04-07 14:53:14Z، يكون الناتج:

الاسم النوع القيمة
add3YearsOutput سلسلة 4/7/2023 2:53:14 مساءً
subtract9DaysOutput سلسلة 29/3/2020 2:53:14 مساءً
add1HourOutput سلسلة 7/4/2020 03:53:14 مساءً

يوضح نموذج المثال التالي كيفية تعيين وقت البدء لجدول التنفيذ التلقائي.

{
  "$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": "2020-01-13-preview",
      "name": "[concat(parameters('omsAutomationAccountName'), '/', parameters('scheduleName'))]",

      "properties": {
        "description": "Demo Scheduler",
        "startTime": "[variables('startTime')]",
        "interval": 1,
        "frequency": "Hour"
      }
    }
  ],
  "outputs": {
  }
}

dateTimeFromEpoch

dateTimeFromEpoch(epochTime)

يحول قيمة عدد صحيح لوقت زمني إلى تاريخ ISO 8601.

في Bicep، استخدم الدالة dateTimeFromEpoch.

المعلمات

المعلمة مطلوب النوع الوصف
epochTime نعم Int وقت epoch للتحويل إلى سلسلة التاريخ والوقت.

قيمة الإرجاع

سلسلة التاريخ والوقت ISO 8601.

مثال

يوضح المثال التالي قيم الإخراج لدوال وقت الفترة.

{
  "$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')]"
    }
  }
}

النتيجة هي:

الاسم النوع القيمة
datetimeValue سلسلة 2023-05-02T15:16:13Z
epochValue Int 1683040573

dateTimeToEpoch

dateTimeToEpoch(dateTime)

يحول سلسلة التاريخ والوقت ISO 8601 إلى قيمة عدد صحيح لوقت epoch.

في Bicep، استخدم الدالة dateTimeToEpoch.

المعلمات

المعلمة مطلوب النوع الوصف
dateTime نعم سلسلة سلسلة التاريخ والوقت للتحويل إلى وقت epoch.

قيمة الإرجاع

عدد صحيح يمثل عدد الثواني من منتصف الليل يوم 1 يناير 1970.

أمثلة

يوضح المثال التالي قيم الإخراج لدوال وقت الفترة.

{
  "$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')]"
    }
  }
}

تكون النتيجة:

الاسم النوع القيمة
datetimeValue سلسلة 2023-05-02T15:16:13Z
epochValue Int 1683040573

يستخدم المثال التالي قيمة وقت epoch لتعيين انتهاء الصلاحية لمفتاح في مخزن مفاتيح.

{
  "$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)

ترجع قيمة التاريخ والوقت الحالية (UTC) بالتنسيق المحدد. إذا لم يتم توفير تنسيق، فسيتم استخدام تنسيق ISO 8601 (yyyyMMddTHHmmssZ). لا يمكن استخدام هذه الوظيفة إلا في القيمة الافتراضية للمعلمة.

في Bicep، استخدم دالة utcNow.

المعلمات

المعلمة مطلوب النوع الوصف
التنسيق لا سلسلة القيمة المشفرة URI للتحويل إلى سلسلة. استخدم إما سلاسل ذات تنسيق قياسي أو سلاسل ذات تنسيق مخصص .

الملاحظات

يمكنك فقط استخدام هذه الوظيفة داخل تعبير للقيمة الافتراضية للمعامل. يؤدي استخدام هذه الوظيفة في أي مكان آخر في القالب إلى إرجاع خطأ. الوظيفة غير مسموح بها في أجزاء أخرى من القالب لأنها ترجع قيمة مختلفة في كل مرة يتم طلبها. لن يؤدي توزيع نفس النموذج باستخدام نفس المعلمات إلى الحصول على نفس النتائج بشكل موثوق به.

إذا كنت تستخدم الخيار للتراجع عن الخطأ لتوزيع ناجح سابق، وكان التوزيع السابق يتضمن معلمة تستخدم utcNow، فلن تتم إعادة تقييم المعلمة. بدلاً من ذلك، تتم إعادة استخدام قيمة المعلمة من النشر السابق تلقائياً في نشر العودة إلى الحالة السابقة.

كن حذراً عند إعادة توزيع نموذج يعتمد على الدالة utcNow لقيمة افتراضية. عند إعادة النشر وعدم توفير قيمة للمعامل، تتم إعادة تقييم الدالة. إذا كنت تريد تحديث مورد موجود بدلاً من إنشاء مورد جديد، فمرر قيمة المعلمة من النشر السابق.

قيمة الإرجاع

القيمة الحالية للتاريخ والوقت بالتوقيت العالمي المنسق.

أمثلة

يُظهر نموذج المثال التالي تنسيقات مختلفة لقيمة التاريخ والوقت.

{
  "$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')]"
    }
  }
}

يختلف الإخراج من المثال السابق لكل عملية نشر ولكنه سيكون مشابهاً لـ:

الاسم النوع القيمة
utcOutput سلسلة 20190305T175318Z
utcShortOutput سلسلة 05/03/2019
utcCustomOutput سلسلة 3 5

يوضح المثال التالي كيفية استخدام قيمة من الوظيفة عند تعيين قيمة علامة.

{
  "$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')]"
    }
  }
}

الخطوات التالية