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

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

تلميح

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

dateTimeAdd

dateTimeAdd(base, duration, [format])

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

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

المعلمات

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

قيمة الإرجاع

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

ملاحظات

dateTimeAdd لا تأخذ الدالة السنوات الكبسة في الاعتبار، ويجب تفسير P1Y على أنها P365D، بينما يجب تفسير P1M على أنها P30D. يعرض json التالي بعض الأمثلة:

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

في المثال السابق، بالنظر إلى عام 2023 كسنة غير كبيسة، فإن نتيجة إضافة سنة واحدة إلى اليوم الأولي من السنة هي 2024-01-01T00:00:00Z. وعلى العكس من ذلك، تؤدي إضافة سنة واحدة إلى يوم بداية عام 2024، وهي سنة كبيسة، إلى 2024-12-31T00:00:00Z، وليس 2025-01-01T00:00:00Z، نظرا لأن السنة الكبسة تتكون من 366 يوما بدلا من 365 يوما. وعلاوة على ذلك، يصبح التمييز بين السنوات الكبسة وغير الكبسة واضحا عند إضافة شهر واحد إلى اليوم الأول من شهر فبراير، مما يؤدي إلى نتائج مختلفة في اليوم من الشهر.

الأمثلة

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

{
  "$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، يكون الإخراج:

Name نوع القيمة‬
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": "2022-08-08",
      "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 ‏‏نعم‬ العدد الصحيح وقت 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')]"
    }
  }
}

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

Name نوع القيمة‬
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')]"
    }
  }
}

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

Name نوع القيمة‬
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.

المعلمات

المعلمة‬ المطلوب نوع ‏‏الوصف
format لا سلسلة قيمة 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')]"
    }
  }
}

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

Name نوع القيمة‬
خرج التوقيت العالمي المتفق عليه سلسلة 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')]"
    }
  }
}

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