任何 AWS Powershell 命令失败并显示消息 "Invalid URI: The hostname could not be parsed."
Any AWS Powershell command fails with message "Invalid URI: The hostname could not be parsed."
我正在使用 powershell 通过以下脚本创建新的 EC2 密钥对:
Import-Module AWSPowerShell
$Region = "EU West"
$ProfileName = "AWS Default"
Initialize-AWSDefaults -ProfileName $ProfileName
$KeyName = "SecurityEssentials"
$KeyPair = New-EC2KeyPair -KeyName $KeyName
但是它在最后一行失败并显示以下消息:
New-EC2KeyPair : Invalid URI: The hostname could not be parsed. At
C:\Users\John\Documents\Cloud\AWS Setup.ps1:12 char:12
+ $KeyPair = New-EC2KeyPair -KeyName $KeyName
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (Amazon.PowerShe...C2KeyPairCmdlet:NewEC2KeyPairCmdlet)
[New-EC2KeyPair], InvalidOperationException
+ FullyQualifiedErrorId : System.UriFormatException,Amazon.PowerShell.Cmdlets.EC2.NewEC2KeyPairCmdlet
使用调试标志不会提供任何新信息。我正在使用 Windows 8.1 和最新的 AWS SDK 和 AWS powershell cmdlet
编辑:问题似乎与 AWSDefaults 的设置方式有关。事实证明,在此之后发出的任何命令都会出现相同的错误。
此错误 Invalid URI: The hostname could not be parsed.
可能会在您指定区域不正确时发生。在您的情况下,您指定的 "EU West" 似乎不正确——应该是 eu-west-1
。
例如,如果我在会话中使用 "EU West" 作为 Get-EC2Instances
的区域,否则我将得到相同的错误配置:
PS C:\> get-ec2instance -Region "EU West"
get-ec2instance : Invalid URI: The hostname could not be parsed.
At line:1 char:1
+ get-ec2instance -Region "EU West"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (Amazon.PowerShe...2InstanceCmdlet:GetEC2InstanceCmdlet) [Get-EC2Insta
nce], InvalidOperationException
+ FullyQualifiedErrorId : System.UriFormatException,Amazon.PowerShell.Cmdlets.EC2.GetEC2InstanceCmdlet
要列出 Powershell 的可用 AWS 区域,您可以使用 Get-AWSRegion
。这是一个示例,其中我的 shell 默认值为 us-east-1
:
PS C:\> Get-AWSRegion
Region Name IsShellDefault
------ ---- --------------
us-east-1 US East (Virginia) True
us-west-1 US West (N. California) False
us-west-2 US West (Oregon) False
eu-west-1 EU West (Ireland) False
eu-central-1 EU Central (Frankfurt) False
ap-northeast-1 Asia Pacific (Tokyo) False
ap-southeast-1 Asia Pacific (Singapore) False
ap-southeast-2 Asia Pacific (Sydney) False
sa-east-1 South America (Sao Paulo) False
所以在这里我们看到 EU West 实际上是一个区域,但它被指定为 eu-west-1
而不是 EU West
。因此,只需将 EU West 称为 eu-west-1
,您应该可以设置默认值。
您可以在 Initialize-AWSDefaults 中明确设置要使用的区域:
Initialize-AWSDefaults -ProfileName MyProfileName -Region eu-west-1
有关指定 AWS 区域的更多信息,请参阅 documentation。
我正在使用 powershell 通过以下脚本创建新的 EC2 密钥对:
Import-Module AWSPowerShell
$Region = "EU West"
$ProfileName = "AWS Default"
Initialize-AWSDefaults -ProfileName $ProfileName
$KeyName = "SecurityEssentials"
$KeyPair = New-EC2KeyPair -KeyName $KeyName
但是它在最后一行失败并显示以下消息:
New-EC2KeyPair : Invalid URI: The hostname could not be parsed. At C:\Users\John\Documents\Cloud\AWS Setup.ps1:12 char:12 + $KeyPair = New-EC2KeyPair -KeyName $KeyName + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (Amazon.PowerShe...C2KeyPairCmdlet:NewEC2KeyPairCmdlet) [New-EC2KeyPair], InvalidOperationException + FullyQualifiedErrorId : System.UriFormatException,Amazon.PowerShell.Cmdlets.EC2.NewEC2KeyPairCmdlet
使用调试标志不会提供任何新信息。我正在使用 Windows 8.1 和最新的 AWS SDK 和 AWS powershell cmdlet
编辑:问题似乎与 AWSDefaults 的设置方式有关。事实证明,在此之后发出的任何命令都会出现相同的错误。
此错误 Invalid URI: The hostname could not be parsed.
可能会在您指定区域不正确时发生。在您的情况下,您指定的 "EU West" 似乎不正确——应该是 eu-west-1
。
例如,如果我在会话中使用 "EU West" 作为 Get-EC2Instances
的区域,否则我将得到相同的错误配置:
PS C:\> get-ec2instance -Region "EU West"
get-ec2instance : Invalid URI: The hostname could not be parsed.
At line:1 char:1
+ get-ec2instance -Region "EU West"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (Amazon.PowerShe...2InstanceCmdlet:GetEC2InstanceCmdlet) [Get-EC2Insta
nce], InvalidOperationException
+ FullyQualifiedErrorId : System.UriFormatException,Amazon.PowerShell.Cmdlets.EC2.GetEC2InstanceCmdlet
要列出 Powershell 的可用 AWS 区域,您可以使用 Get-AWSRegion
。这是一个示例,其中我的 shell 默认值为 us-east-1
:
PS C:\> Get-AWSRegion
Region Name IsShellDefault
------ ---- --------------
us-east-1 US East (Virginia) True
us-west-1 US West (N. California) False
us-west-2 US West (Oregon) False
eu-west-1 EU West (Ireland) False
eu-central-1 EU Central (Frankfurt) False
ap-northeast-1 Asia Pacific (Tokyo) False
ap-southeast-1 Asia Pacific (Singapore) False
ap-southeast-2 Asia Pacific (Sydney) False
sa-east-1 South America (Sao Paulo) False
所以在这里我们看到 EU West 实际上是一个区域,但它被指定为 eu-west-1
而不是 EU West
。因此,只需将 EU West 称为 eu-west-1
,您应该可以设置默认值。
您可以在 Initialize-AWSDefaults 中明确设置要使用的区域:
Initialize-AWSDefaults -ProfileName MyProfileName -Region eu-west-1
有关指定 AWS 区域的更多信息,请参阅 documentation。