【问题标题】:Asp.net core5.0 API in Docker. How to acces AWS parameter store?Docker 中的 Asp.net 核心 5.0 API。如何访问 AWS 参数存储?
【发布时间】:2021-10-08 10:30:15
【问题描述】:

我有一个 Asp.NetCore5.0 应用程序。
我构建了一个 docker 镜像,例如:

# syntax=docker/dockerfile:1
FROM mcr.microsoft.com/dotnet/aspnet:5.0
COPY bin/Release/netcoreapp3.1/publish/ App/
WORKDIR /App
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

应用程序应使用 AWS Parameter Store,例如:

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((hostingContext, config) =>
                {
                    var envName = hostingContext.HostingEnvironment.EnvironmentName.ToString().ToLower();
                    config.AddSystemsManager($"/{envName}", TimeSpan.FromMinutes(5));
                })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });

它在我的本地机器上运行(我在本地机器上安装了 AWS Cli)没有任何问题。
但它不能在我的 Linux 服务器上的 Docker 容器内运行

AWS Cli 安装在服务器上 [不在 Docker 内] 并经过测试)。
服务器不是 AWS 云的一部分。

例外

Unhandled exception. System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
 ---> Amazon.Runtime.AmazonClientException: No RegionEndpoint or ServiceURL configured
   at Amazon.Runtime.ClientConfig.Validate()
   at Amazon.Runtime.AmazonServiceClient..ctor(AWSCredentials credentials, ClientConfig config)
   at Amazon.SimpleSystemsManagement.AmazonSimpleSystemsManagementClient..ctor(AWSCredentials credentials, AmazonSimpleSystemsManagementConfig clientConfig)
   --- End of inner exception stack trace ---

我已经尝试将未配置 RegionEndpoint 或 ServiceURL 传递为 ENV 等等,但没有成功。

docker run -d -p 12080:80 -e AWS_ACCESS_KEY_ID=thisIsMyId -e AWS_SECRET_ACCESS_KEY=secret --name nameoftheapi dockerhubuser/nameoftheapi:262

docker run -d -p 12080:80-v $HOME/.aws/credentials:/home/app/.aws/credentials:ro --name nameoftheapi dockerhubuser/nameoftheapi:262

同样的例外。

如何从 Docker 容器内部访问 AWS Cli?
我是否需要 Docker 中的 AWS Cli?有没有其他解决方案可以做这样的事情?

提前致谢

【问题讨论】:

  • “不工作” - 不具体。到底发生了什么?有任何错误信息吗?
  • 抱歉,请查看更新后的帖子。
  • 您不需要在 Docker 中使用 AWS Cli。向我们展示如何将 ENV 传递到容器中
  • 我尝试使用 docker run -e AWS_ACCESS_KEY_ID=thisIsMyId -e AWS_SECRET_ACCESS_KEY=secret 传递信誉

标签: linux amazon-web-services docker asp.net-core


【解决方案1】:

我的解决方案是将带有 aws 凭据的文件夹传递给 docker 容器。

docker run -d  -p 12080:80 -v /root/.aws:/root/.aws:ro  --name nameofthecontainer dockerhubuser/someimage:264

我也在 docker-host-server 上安装了 aws cli。我想,我现在可以卸载了。我只需要凭据。

我创建了一个可以访问 AWS 上的参数存储的用户。
还创建了一些参数和访问策略。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ssm:GetParametersByPath",
                "ssm:GetParameters",
                "ssm:GetParameter"
            ],
            "Resource": "arn:aws:ssm:eu-central-1:12345678:parameter/abc/*"
        }
    ]
}

我遇到的最后一个问题是参数路径错误

/abc/Release/def/ghi/jkl
instead of
/abc/Production/def/ghi/jkl

基于此代码中对环境的错误假设

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((hostingContext, config) =>
                {
                    var envName = hostingContext.HostingEnvironment.EnvironmentName.ToString().ToLower();
                    config.AddSystemsManager($"/{envName}", TimeSpan.FromMinutes(5));
                })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });

我现在很开心。

【讨论】:

    猜你喜欢
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 2019-07-14
    相关资源
    最近更新 更多