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

加载文件