【问题标题】:AWS gets empty SSM parameter list from LocalStackAWS 从 LocalStack 获取空的 SSM 参数列表
【发布时间】:2022-07-06 05:15:16
【问题描述】:

我有一些 SSM 参数存储在 LocalStack 中,但是当应用程序运行时无法获取参数,尽管参数在那里。

应用程序日志甚至说:[AWSSDK] Found AWS credentials for the profile local

参数在那里,如下所示。

知道为什么会发生这种情况吗?

$ aws ssm get-parameters-by-path --path "/app-local/dynamodb" --endpoint-url http://127.0.0.1:4566 --profile local --recursive
{
    "Parameters": [
        {
            "Name": "/app-local/dynamodb/urls/expire",
            "Type": "String",
            "Value": "1.00:00:00",
            "Version": 1,
            "LastModifiedDate": 1656607246.131,
            "ARN": "arn:aws:ssm:us-west-2:000000000000:parameter/app-local/dynamodb/urls/expire",
            "DataType": "text"
        }
    ]
}

程序.cs

config.AddSystemsManager("/app-local");

应用设置.json

{
  "AWS": {
    "Profile": "local",
    "ServiceURL": "http://127.0.0.1:4566",
    "UseHttp": "true"
  }
}

在我的 Main.cs 中设置此代码:

var awsFile = new SharedCredentialsFile();
                if (awsFile.TryGetProfile(awsOptions.Profile, out var profile))
                {
                    Console.WriteLine($"Found credentials for '{awsOptions.Profile}' in credentials file '{awsFile.FilePath}'.");
                }

它打印:

Found credentials for 'local' in credentials file '/root/.aws/credentials'.
root@8bb9c17a7179:/app# cat /root/.aws/credentials
[local]
aws_access_key_id = local
aws_secret_access_key = local
region=us-west-2

【问题讨论】:

    标签: amazon-web-services .net-core aws-ssm localstack aws-sdk-net


    【解决方案1】:

    由于某种原因,AWS SDK 没有使用配置的区域,它试图从端点 url 中找出区域,这是愚蠢的。由于无法弄清楚,在签署 HTTP 请求时使用默认的 us-east-1 作为区域,导致所描述的问题,因为 Localstack 每个区域有不同的数据存储。

    使用 http://us-west-2.localhost:4566 作为服务 url 而不是 http://127.0.0.1:4566 解决了这个问题。当然,您需要在/etc/hosts 中添加该条目。

    这不是一个错误。这是一个愚蠢的设计决定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-02
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 2021-09-24
      • 1970-01-01
      • 2019-04-21
      • 1970-01-01
      相关资源
      最近更新 更多