通过 Visual Studio 部署资源时,Azure ExpiredAuthenticationToken 在 New-AzureRmResourceGroupDeployment 期间
Azure ExpiredAuthenticationToken during New-AzureRmResourceGroupDeployment when deploying resources via Visual Studio
我正在尝试通过 Visual Studio 使用 ARM 模板部署 HDInsight 集群。我在 Visual Studio 2015 年创建了一个 Azure 资源组项目,并将我的资源定义添加到模板 JSON 文件中。
然而,当我去部署它时(通过右键单击项目,选择 Deploy -> New Deployment,输入我的参数),Visual Studio 的输出显示(我剪掉了一些无聊的东西):
17:19:23 - Build started.
17:19:23 - Project "LaunchHdInsightCluster.deployproj" (StageArtifacts target(s)):
[snip]
17:20:27 - [VERBOSE] 17:20:27 - Resource Microsoft.HDInsight/clusters 'groupbhdinsight' provisioning status is running
17:31:06 - [ERROR] New-AzureRmResourceGroupDeployment : ExpiredAuthenticationToken: The access token expiry UTC time '3/14/2016 5:31:06 PM' is earlier than current UTC time '3/14/2016 5:31:07 PM'.
请注意,在访问令牌过期之前部署仅 运行 12 分钟 - 显然对于部署 HDInsight 群集来说这是一个问题(平均需要 20 分钟)。
我只是想了解这里的幕后情况,因为我找不到这方面的文档。即:
什么创建访问令牌以及如何创建?它持续多长时间?部署时我没有被要求提供任何 Azure 凭据 - 我假设这一定是我使用我在 Azure 中使用的相同帐户登录 Visual Studio 的事实,并且它 'borrows' 身份验证会话,但这只是一个猜测
什么决定了访问令牌的到期时间,以便我可以防止这种情况再次发生?
如何刷新我的身份验证令牌?
我不确定,但我相信 New-AzureRmResourceGroupDeployment 会上传您的模板文件并设置部署以在云中进行。然后它查询部署以查看它是否完成并在资源创建时输出它们。显然,当令牌过期时,这些查询会出错。但部署应该继续。
您可以忽略此错误并自行查询部署或资源组,以查看何时完成。
我敢打赌这是一个暂时性的问题。我重试部署(需要修改我的 ARM 模板),现在成功了。
请在门户中检查您的 Azure 资源组。您可能会准备好资源并 运行.
@Cleverguy25 解释了我认为部署过程是如何工作的。
这里发生的是 VS 中的 Azure 资源组部署使用项目中的 PowerShell 脚本进行部署(即使输出托管在 VS 中,我们使用那个 PS 脚本来完成工作). PowerShell 脚本通过使用 VS 登录中的令牌进行身份验证。该令牌仅在一个小时内有效,然后 VS 将刷新它。不过,一旦它被移交给 PowerShell,PowerShell 就不会自动刷新它。因此,如果您拥有 59 分钟的令牌,它会在您开始部署后很快过期。令牌可以持续一个小时,或更短的时间。我们正在努力解决这个问题(即让 PowerShell 自动刷新令牌),但这还需要一个月左右的时间。参见:https://github.com/Azure/azure-powershell/issues/1068
解决方法:不幸的是,VS 没有很好的解决方法。但是...
- 据观察,部署将在 Azure 中继续正常进行,只是 VS/PS 无法再轮询状态。您可以通过门户或 PowerShell 监控部署。
- 如果您转到 PowerShell 和 运行 脚本,PowerShell 将在您使用凭据登录时自动刷新令牌 - 您可以通过筛选输出获得 VS 运行s 的确切命令window - 此文档还概述了 运行 手动执行脚本:https://azure.microsoft.com/en-us/documentation/articles/vs-azure-tools-resource-groups-how-script-works/
希望对您有所帮助...
我遵循此 post,只需执行 'Clear-AzureRmContext' 此命令,然后使用 'connect-AzAccount' 重新连接到 Azure,问题已解决。
打开一个新的 powershell 并使用 Clear-AzureRmContext
获取用于验证 Azure 资源管理器请求的当前元数据。
这对我来说很神奇。
我正在尝试通过 Visual Studio 使用 ARM 模板部署 HDInsight 集群。我在 Visual Studio 2015 年创建了一个 Azure 资源组项目,并将我的资源定义添加到模板 JSON 文件中。
然而,当我去部署它时(通过右键单击项目,选择 Deploy -> New Deployment,输入我的参数),Visual Studio 的输出显示(我剪掉了一些无聊的东西):
17:19:23 - Build started.
17:19:23 - Project "LaunchHdInsightCluster.deployproj" (StageArtifacts target(s)):
[snip]
17:20:27 - [VERBOSE] 17:20:27 - Resource Microsoft.HDInsight/clusters 'groupbhdinsight' provisioning status is running
17:31:06 - [ERROR] New-AzureRmResourceGroupDeployment : ExpiredAuthenticationToken: The access token expiry UTC time '3/14/2016 5:31:06 PM' is earlier than current UTC time '3/14/2016 5:31:07 PM'.
请注意,在访问令牌过期之前部署仅 运行 12 分钟 - 显然对于部署 HDInsight 群集来说这是一个问题(平均需要 20 分钟)。
我只是想了解这里的幕后情况,因为我找不到这方面的文档。即:
什么创建访问令牌以及如何创建?它持续多长时间?部署时我没有被要求提供任何 Azure 凭据 - 我假设这一定是我使用我在 Azure 中使用的相同帐户登录 Visual Studio 的事实,并且它 'borrows' 身份验证会话,但这只是一个猜测
什么决定了访问令牌的到期时间,以便我可以防止这种情况再次发生?
如何刷新我的身份验证令牌?
我不确定,但我相信 New-AzureRmResourceGroupDeployment 会上传您的模板文件并设置部署以在云中进行。然后它查询部署以查看它是否完成并在资源创建时输出它们。显然,当令牌过期时,这些查询会出错。但部署应该继续。
您可以忽略此错误并自行查询部署或资源组,以查看何时完成。
我敢打赌这是一个暂时性的问题。我重试部署(需要修改我的 ARM 模板),现在成功了。
请在门户中检查您的 Azure 资源组。您可能会准备好资源并 运行.
@Cleverguy25 解释了我认为部署过程是如何工作的。
这里发生的是 VS 中的 Azure 资源组部署使用项目中的 PowerShell 脚本进行部署(即使输出托管在 VS 中,我们使用那个 PS 脚本来完成工作). PowerShell 脚本通过使用 VS 登录中的令牌进行身份验证。该令牌仅在一个小时内有效,然后 VS 将刷新它。不过,一旦它被移交给 PowerShell,PowerShell 就不会自动刷新它。因此,如果您拥有 59 分钟的令牌,它会在您开始部署后很快过期。令牌可以持续一个小时,或更短的时间。我们正在努力解决这个问题(即让 PowerShell 自动刷新令牌),但这还需要一个月左右的时间。参见:https://github.com/Azure/azure-powershell/issues/1068
解决方法:不幸的是,VS 没有很好的解决方法。但是...
- 据观察,部署将在 Azure 中继续正常进行,只是 VS/PS 无法再轮询状态。您可以通过门户或 PowerShell 监控部署。
- 如果您转到 PowerShell 和 运行 脚本,PowerShell 将在您使用凭据登录时自动刷新令牌 - 您可以通过筛选输出获得 VS 运行s 的确切命令window - 此文档还概述了 运行 手动执行脚本:https://azure.microsoft.com/en-us/documentation/articles/vs-azure-tools-resource-groups-how-script-works/
希望对您有所帮助...
我遵循此 post,只需执行 'Clear-AzureRmContext' 此命令,然后使用 'connect-AzAccount' 重新连接到 Azure,问题已解决。
打开一个新的 powershell 并使用 Clear-AzureRmContext
获取用于验证 Azure 资源管理器请求的当前元数据。
这对我来说很神奇。