3

I am trying to use AWS Powershell with Eucalyptus.

I can do this with AWS CLI with parameter --endpoint-url.

Is it possible to set endpoint url in AWS powershell? Can I create custom region with my own endpoint URL in AWS Powershell?

stkxchng
  • 65
  • 5
  • 26

2 Answers2

2

--UPDATE--

The newer versions of the AWS Tools for Windows PowerShell (I'm running 3.1.66.0 according to Get-AWSPowerShellVersion), has an optional -EndpointUrl parameter for the relevant commands.

Example:

Get-EC2Instance -EndpointUrl https://somehostnamehere

Additionally, the aforementioned bug has been fixed.

Good stuff!


--ORIGINAL ANSWER--

TL;TR

  • Download the default endpoint config file from here: https://github.com/aws/aws-sdk-net/blob/master/sdk/src/Core/endpoints.json
  • Customize it. Example:

    {
        "version": 2,
        "endpoints": {
            "*/*": {
                "endpoint": "your_endpoint_here"
            }
        }
    }
    
  • After importing the AWSPowerShell module, tell the SDK to use your customized endpoint config. Example:

    [Amazon.AWSConfigs]::EndpointDefinition = "path to your customized Amazon.endpoints.json here"
    

Note: there is a bug in the underlying SDK that causes endpoints that have a path component from being signed correctly. The bug affects this solution and the solution @HyperAnthony proposed.

Additional Info

Reading through the .NET SDK docs, I stumbled across a section that revealed that one can global set the region rules given a file: http://docs.aws.amazon.com/AWSSdkDocsNET/latest/V2/DeveloperGuide/net-dg-config-other.html#config-setting-awsendpointdefinition

Unfortunately, I couldn't find anywhere where the format of such a file is documented.

I then splunked through the 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).

Reading through the code, if a file isn't explicitly specified on AWSConfigs.EndpointDefinition, it ultimately loads the file from an embedded resource (i.e. https://github.com/aws/aws-sdk-net/blob/master/sdk/src/Core/endpoints.json)

1

I don't believe that it is. This list of common parameters (that can be used with all AWS PowerShell cmdlets) does not include a Service URL, it seems instead to opt for a simple string Region to set the Service URL based on a set of known regions.

This AWS .NET Development forum post suggests that you can set the Service URL on a .NET SDK config object, if you're interested in a possible alternative in PowerShell. Here's an example usage from that thread:

$config=New-Object Amazon.EC2.AmazonEC2Config
$config.ServiceURL = "https://ec2.us-west-1.amazonaws.com"
$client=[Amazon.AWSClientFactory]::CreateAmazonEC2Client($accessKeyID,$secretKeyID,$config)

It looks like you can use it with most config objects when setting up a client. Here's some examples that have the ServiceURL property. I would imagine that this is on most all AWS config objects:

Older versions of the documentation (for v1) noted that this property will be ignored if the RegionEndpoint is set. I'm not sure if this is still the case with v2.

Anthony Neace
  • 25,013
  • 7
  • 114
  • 129