簡體   English   中英

使用 ARM 創建 Azure Function 主機密鑰不適用於新部署

[英]Creating an Azure Function host key using ARM doesn't work on a new deployment

我嘗試在首先創建函數的ARM模板中創建 Azure 函數主機密鑰,然后創建密鑰:

{
  "type": "Microsoft.Web/sites/host/functionKeys",
  "apiVersion": "2018-11-01",
  "name": "[concat(parameters('FUNCTIONNAME'), '/default/test-key')]",
  "properties": {
    "name": "test-key",
    "value": "test-value"
  },
  "dependsOn": [
    "[resourceId('Microsoft.Web/sites', parameters('FUNCTIONNAME'))]"
  ]
}

看起來,當函數已經部署時,部署將添加主機密鑰test-key 如果我將模板部署到新資源組,則不會創建主機密鑰。 如果我第二次運行部署,它是。

我的dependsOn聲明有什么問題嗎? 還有其他想法嗎?

在 ARM 模板中部署功能鍵存在幾個問題。 您的代碼是正確的,正如您所說,它有時會成功部署。 在沒有深入了解幕后真正發生的事情的情況下,這里是我的一些(痛苦的)學習:

  • 在函數的內容以某種方式具體化之前不會創建鍵(也許它必須查看是否有帶有 HttpTrigger 的函數)。 所以行為取決於提供代碼的方式 - 使用鏈接的源代碼控制(例如 Github),我遇到了最大的問題,而 WEBSITE_RUN_FROM_PACKAGE 工作得很好。 當您也在 ARM 模板中設置源代碼控制時,您可以為 functionKeys 資源添加一個依賴項,例如"[resourceId('Microsoft.Web/sites/sourcecontrols', 'name of function', 'web')]" 有了這個,我實現了功能鍵也部署在完整的初始部署中

  • 當您嘗試在同一 ARM 模板中讀取已部署的 functionKeys 時,您可能會遇到競爭條件(例如,用於 API 管理)。 您可以並且應該使用"[resourceId('Microsoft.Web/sites/host/functionKeys', 'name of function', 'default', 'name of key')]"設置一個dependsOn,這在某些情況下可能會有所幫助。 但我也遇到過密鑰尚未准備好讀取的情況,我最終為此進行了后續部署。 您可以嘗試的是將它與一些“dependsOn”設置鏈接起來,以便盡可能晚地執行它(好吧,這是一種黑客攻擊)。

  • 如果您沒有為功能鍵指定值(如代碼片段中的test-value ),則每次部署都會生成一個新值。 所以它並不是真正的“增量”,因為它應該是恕我直言。 結合上述密鑰的延遲可用性,我遇到了一個問題,即我在后續部署中總是得到舊版本的鍵值,這有點讓人痛苦。

  • 如果您想為什么不使用預定義的主密鑰或默認密鑰來避免這些麻煩:我經常遇到在部署過程中主密鑰和默認密鑰發生變化的奇怪情況。 因此,ARM 模板中的引用組件再次獲得了一個過時的鍵值。

希望這些經驗有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM