【问题标题】:Getting Function Key in ARM Template - Fails Intermittently在 ARM 模板中获取功能键 - 间歇性失败
【发布时间】:2019-02-28 17:08:39
【问题描述】:

您好,我正在使用以下代码在我们的 Arm 模板中获取功能键和触发器 URL 作为输出。

>     "outputs": {
>     "Key": {
>       "type": "string",
>       "value": "[listsecrets(resourceId('Microsoft.Web/sites/functions',
> variables('funcName'),
> parameters('NameOfService')),'2015-08-01').key]"
>     },
>     "functionUrl": {
>       "type": "string",
>       "value": "[listsecrets(resourceId('Microsoft.Web/sites/functions',
> variables('funcName'),
> parameters('NameOfService')),'2015-08-01').trigger_url]"
>     }   }

我们在应用程序设置中将“AzureWebJobsSecretStorageType”设置为“文件”,因为在 Functions v2 中没有它就无法工作,当我们执行 ARM 模板时,它有时会工作,但有时会引发以下错误,而不是确定是什么问题,ARM 模板是有效的,因为它确实有效,而且我可以看到该函数也已成功部署在 Azure 门户中,所以不确定它到底为什么会失败,有什么线索吗?

[错误]BadRequest:{“错误”:{ "code": "BadRequest", “消息”:“System.FormatException:无法解密 CfDJ8AAAAAAAAAAAAAAAAAAAAAB93sc99M4b_klhBWrLMfQYRpSN9,密钥无效或格式错误 ---> System.Security.Cryptography.CryptographicException:有效负载是 无效。\r\n 在 Microsoft.AspNetCore.DataProtection.Cng.CbcAuthenticatedEncryptor.DecryptImpl(字节* pbCiphertext,UInt32 cbCiphertext,字节* pbAdditionalAuthenticatedData,UInt32 cbAdditionalAuthenticatedData)\r\n 在 Microsoft.AspNetCore.DataProtection.Cng.Internal.CngAuthenticatedEncryptorBase.Decrypt(ArraySegment1 ciphertext, ArraySegment1 additionalAuthenticatedData)\r\n at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.UnprotectCore(字节[] protectedData, Boolean allowOperationsOnRevokedKeys, UnprotectStatus& 状态)\r\n 在 Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.DangerousUnprotect(字节[] protectedData,布尔型 ignoreRevocationErrors,布尔型& requiresMigration, Boolean& wasRevoked)\r\n at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.Unprotect(字节[] protectedData)\r\n 在 Microsoft.AspNetCore.DataProtection.DataProtectionCommonExtensions.Unprotect(IDataProtector 保护器,字符串 protectedData)\r\n 在 Kudu.Core.Infrastructure.SecurityUtility.DecryptSecretString(字符串 内容)在 C:\Kudu Files\Private\src\master\Kudu.Core\Infrastructure\SecurityUtility.cs:line 40\r\n --- 内部异常堆栈跟踪结束 ---\r\n at Kudu.Core.Infrastructure.SecurityUtility.DecryptSecretString(字符串 内容)在 C:\Kudu Files\Private\src\master\Kudu.Core\Infrastructure\SecurityUtility.cs:line 45\r\n 在 Kudu.Core.Functions.FunctionManager.d__91.MoveNext() in C:\\Kudu Files\\Private\\src\\master\\Kudu.Core\\Functions\\FunctionManager.cs:line 203\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at Kudu.Core.Functions.FunctionManager.<GetFunctionSecretsAsync>d__12.MoveNext() in C:\\Kudu Files\\Private\\src\\master\\Kudu.Core\\Functions\\FunctionManager.cs:line 220\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at Kudu.Services.Functions.FunctionController.<GetSecrets>d__12.MoveNext() in C:\\Kudu Files\\Private\\src\\master\\Kudu.Services\\Functions\\FunctionController.cs:line 141\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Threading.Tasks.TaskHelpersExtensions.<CastToObject>d__31.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 System.Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 System.Web.Http.Filters.ActionFilterAttribute.d__5.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Web.Http.Filters.ActionFilterAttribute.d__5.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 System.Web.Http.Filters.ActionFilterAttribute.d__0.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 System.Web.Http.Filters.ActionFilterAttribute.d__5.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Web.Http.Filters.ActionFilterAttribute.d__5.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 System.Web.Http.Filters.ActionFilterAttribute.d__0.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 System.Web.Http.Controllers.ActionFilterResult.d__2.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 System.Web.Http.Controllers.ExceptionFilterResult.d__0.MoveNext()" }

【问题讨论】:

    标签: azure azure-functions


    【解决方案1】:

    我找到了造成这种情况的原因,它仅在 Function 的新部署期间发生,即当我删除函数应用程序然后尝试部署时,我遇到了这个问题,原因是我只是删除了函数应用程序而不是存储帐户与它相关,因此旧的存储帐户保留了有关已删除功能应用程序的一些信息(我假设)并且事情变得一团糟,当我开始使用功能应用程序删除存储帐户时,问题就消失了。只是为了添加该存储帐户专用于此功能应用程序,并且不被其他任何东西使用。

    【讨论】:

      【解决方案2】:

      根据您的错误消息,我假设功能键看起来像 CfDJ8AAAAAAAAAAAAAAAAAAAAAB93sc99M4b_klhBWrLMfQYRpSN9。但是,这种密钥格式没有意义。我遇到过几次同样的情况。钥匙和你的一模一样。

      在这种情况下,密钥本身格式不正确。它有时会发生。因此,唯一的解决方案是更新密钥。然后它会看起来是一个普通的 base-64 编码的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-04-11
        • 2019-04-18
        • 2011-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-19
        相关资源
        最近更新 更多