AWS powershell 中的自定义端点
Custom endpoint in AWS powershell
我正在尝试将 AWS Powershell 与 Eucalyptus 结合使用。
我可以使用带有参数 --endpoint-url 的 AWS CLI 来做到这一点。
是否可以在 AWS powershell 中设置端点 url?
我可以在 AWS Powershell 中使用我自己的终端节点 URL 创建自定义区域吗?
我不相信它是。此 common parameters 列表(可与所有 AWS PowerShell cmdlet 一起使用)不包含服务 URL,而是选择一个简单的字符串 Region
来设置服务 URL 基于一组已知区域。
此 AWS .NET Development forum post 建议您可以在 .NET SDK 配置对象上设置服务 URL,如果您对 PowerShell 中的可能替代方案感兴趣的话。这是该线程的示例用法:
$config=New-Object Amazon.EC2.AmazonEC2Config
$config.ServiceURL = "https://ec2.us-west-1.amazonaws.com"
$client=[Amazon.AWSClientFactory]::CreateAmazonEC2Client($accessKeyID,$secretKeyID,$config)
看起来您可以在设置客户端时将它用于大多数配置对象。下面是一些具有 ServiceURL 属性 的示例。我想这是在大多数 AWS 配置对象上:
旧版本的文档(对于 v1)指出,如果设置了 RegionEndpoint
,则此 属性 将被忽略。我不确定 v2 是否仍然如此。
--更新--
适用于 Windows PowerShell 的 AWS 工具的较新版本(根据 Get-AWSPowerShellVersion,我是 运行 3.1.66.0)具有相关命令的可选 -EndpointUrl 参数。
示例:
Get-EC2Instance -EndpointUrl https://somehostnamehere
此外,上述 bug 已修复。
好东西!
--原始答案--
TL;TR
- 从这里下载默认端点配置文件:https://github.com/aws/aws-sdk-net/blob/master/sdk/src/Core/endpoints.json
自定义。示例:
{
"version": 2,
"endpoints": {
"*/*": {
"endpoint": "your_endpoint_here"
}
}
}
导入 AWSPowerShell 模块后,告诉 SDK 使用您自定义的端点配置。示例:
[Amazon.AWSConfigs]::EndpointDefinition = "path to your customized Amazon.endpoints.json here"
注意:底层 SDK 中有一个 bug 会导致具有路径组件的端点无法正确签名。该错误影响了此解决方案和@HyperAnthony 提出的解决方案。
附加信息
阅读 .NET SDK 文档时,我偶然发现了一个部分,该部分显示可以在给定文件的情况下全局设置区域规则:http://docs.aws.amazon.com/AWSSdkDocsNET/latest/V2/DeveloperGuide/net-dg-config-other.html#config-setting-awsendpointdefinition
遗憾的是,我找不到任何记录此类文件格式的地方。
然后我通过 AWSSDK.Core.dll code and found where the SDK loads the file (see LoadEndpointDefinitions() method at https://github.com/aws/aws-sdk-net/blob/master/sdk/src/Core/RegionEndpoint.cs).
通读代码,如果未在 AWSConfigs.EndpointDefinition 上明确指定文件,它最终会从嵌入式资源(即 https://github.com/aws/aws-sdk-net/blob/master/sdk/src/Core/endpoints.json)
加载文件
我正在尝试将 AWS Powershell 与 Eucalyptus 结合使用。
我可以使用带有参数 --endpoint-url 的 AWS CLI 来做到这一点。
是否可以在 AWS powershell 中设置端点 url? 我可以在 AWS Powershell 中使用我自己的终端节点 URL 创建自定义区域吗?
我不相信它是。此 common parameters 列表(可与所有 AWS PowerShell cmdlet 一起使用)不包含服务 URL,而是选择一个简单的字符串 Region
来设置服务 URL 基于一组已知区域。
此 AWS .NET Development forum post 建议您可以在 .NET SDK 配置对象上设置服务 URL,如果您对 PowerShell 中的可能替代方案感兴趣的话。这是该线程的示例用法:
$config=New-Object Amazon.EC2.AmazonEC2Config
$config.ServiceURL = "https://ec2.us-west-1.amazonaws.com"
$client=[Amazon.AWSClientFactory]::CreateAmazonEC2Client($accessKeyID,$secretKeyID,$config)
看起来您可以在设置客户端时将它用于大多数配置对象。下面是一些具有 ServiceURL 属性 的示例。我想这是在大多数 AWS 配置对象上:
旧版本的文档(对于 v1)指出,如果设置了 RegionEndpoint
,则此 属性 将被忽略。我不确定 v2 是否仍然如此。
--更新--
适用于 Windows PowerShell 的 AWS 工具的较新版本(根据 Get-AWSPowerShellVersion,我是 运行 3.1.66.0)具有相关命令的可选 -EndpointUrl 参数。
示例:
Get-EC2Instance -EndpointUrl https://somehostnamehere
此外,上述 bug 已修复。
好东西!
--原始答案--
TL;TR
- 从这里下载默认端点配置文件:https://github.com/aws/aws-sdk-net/blob/master/sdk/src/Core/endpoints.json
自定义。示例:
{ "version": 2, "endpoints": { "*/*": { "endpoint": "your_endpoint_here" } } }
导入 AWSPowerShell 模块后,告诉 SDK 使用您自定义的端点配置。示例:
[Amazon.AWSConfigs]::EndpointDefinition = "path to your customized Amazon.endpoints.json here"
注意:底层 SDK 中有一个 bug 会导致具有路径组件的端点无法正确签名。该错误影响了此解决方案和@HyperAnthony 提出的解决方案。
附加信息
阅读 .NET SDK 文档时,我偶然发现了一个部分,该部分显示可以在给定文件的情况下全局设置区域规则:http://docs.aws.amazon.com/AWSSdkDocsNET/latest/V2/DeveloperGuide/net-dg-config-other.html#config-setting-awsendpointdefinition
遗憾的是,我找不到任何记录此类文件格式的地方。
然后我通过 AWSSDK.Core.dll code and found where the SDK loads the file (see LoadEndpointDefinitions() method at https://github.com/aws/aws-sdk-net/blob/master/sdk/src/Core/RegionEndpoint.cs).
通读代码,如果未在 AWSConfigs.EndpointDefinition 上明确指定文件,它最终会从嵌入式资源(即 https://github.com/aws/aws-sdk-net/blob/master/sdk/src/Core/endpoints.json)
加载文件