AWS .NET SDK 使用 Localstack 时如何指定区域

Mof*_*fen 5 .net amazon-sqs amazon-web-services aws-sdk-net localstack

如何实例化同时具有自定义区域和 ServiceURL 的 .NET AWSSDK SQS 客户端?


更多信息:

我在 localstack 中设置了一个队列,我可以sqs list-queues使用 CLI 通过查询来验证该队列是否存在:

> aws --endpoint-url=http://localhost:4566 --region=ap-southeast-2 sqs list-queues

{
    "QueueUrls": [
        "http://localhost:4566/000000000000/question-renderer-requests-errors",
        "http://localhost:4566/000000000000/question-renderer-requests"
    ]
}
Run Code Online (Sandbox Code Playgroud)

队列位于 Region ap-southeast-2,但是当我尝试通过 SDK 访问队列时,它找不到任何内容:

var cred = new BasicAWSCredentials("test", "test");

var sqsClientConfig = new AmazonSQSConfig()
{
    RegionEndpoint = RegionEndpoint.APSoutheast2,
    ServiceURL = "http://localhost:4566"
};

var sqsClient = new AmazonSQSClient(cred, sqsClientConfig);

var queues = await sqsClient.ListQueuesAsync(new ListQueuesRequest());
Run Code Online (Sandbox Code Playgroud)

我发现RegionEndpointServiceURL是相互排斥的:

RegionEndpoint 和 ServiceURL 是互斥的属性。无论最后设置哪个属性,都会导致另一个属性自动重置为 null。

我需要将服务端点设置为http://localhost:4566指向 localstack,如何设置区域端点?我在这件事上走的路正确吗?

更新:我在 google 上搜索了默认区域 us-east-1,当我将队列放在那里时,SDK 设法找到了它 - 所以它一定是区域配置问题。

Mof*_*fen 10

用于AuthenticationRegion指定区域(IClientConfig的一部分)


var sqsClientConfig = new AmazonSQSConfig()
{
    RegionEndpoint = RegionEndpoint.APSoutheast2,
    ServiceURL = "http://localhost:4566"
};
Run Code Online (Sandbox Code Playgroud)

变成:

var sqsClientConfig = new AmazonSQSConfig()
{
    AuthenticationRegion = "ap-southeast-2",
    ServiceURL = "http://localhost:4566"
};
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢。你拯救了我的日子! (3认同)