Проблема AWS S3 с докером, использующим asp net core mvc

#json #amazon-web-services #docker #asp.net-core #amazon-s3

Вопрос:

Я пытаюсь запустить свое приложение микросервиса (Asp Net Core) с помощью docker и пытаюсь заставить его работать с корзинами Amazon AWS S3. Я совершенно новичок в использовании Amazon AWS, поэтому я прочитал документацию и сделал эту работу, но без докера, и теперь я пытаюсь использовать ее с докером, но не могу заставить это работать.

У меня в папке проекта есть файл с именем credenciales.txt , в котором хранятся мои учетные данные amazon, такие как ключи доступа:

 [myprofilename]
aws_access_key_id=myAccessKey
aws_secret_access_key=mySecretKey
 

Это мои приложения.json:

 {
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "ApiSettings": {
    "GatewayAddress": "http://localhost:5000"
  },
  "ElasticConfiguration": {
    "Uri": "http://localhost:9200"
  },

  "AWS": {
    "Profile": "myprofilename",
    "Region": "us-east-2",
    "ProfilesLocation": "credenciales.txt"
  },

  "ConfigKeys": {
    "AwsBucketName": "bucketName",
    "AwsS3BaseUrl": "amazonaws",
    "AwsRegion": "us-east-2",
    "FileSize": "2000000"
  },

  "AllowedHosts": "*"
}
 

При запуске приложения dotnet run --urls=https://localhost:7888 и попытке загрузить файл в корзину Amazon S3 это сработало!!!

но при попытке запустить его с помощью docker docker-compose up и попытке загрузить файл в amazon S3 он не работает, скорее всего, потому, что он не может получить файл учетных данных(я думаю).

Это мой файл docker из проекта, который я пытаюсь заставить aws работать:

 FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["Apps/Web/ASPNET/Sistema/Sistema.csproj", "Apps/Web/ASPNET/Sistema/"]
RUN dotnet restore "Apps/Web/ASPNET/Sistema/Sistema.csproj"
COPY . .
WORKDIR "/src/Apps/Web/ASPNET/Sistema"
RUN dotnet build "Sistema.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "Sistema.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Sistema.dll"]
 

docker files from src, docker-compose.yml

 version: '3.4'

services:
    sistema:
        image: ${DOCKER_REGISTRY-}sistema
        build:
            context: .
            dockerfile: Apps/Web/ASPNET/Sistema/Dockerfile
 

докер-составить.переопределить.yml

 version: '3.4'

services:

    inventario.api:
        container_name: inventario.api
        environment:
            - ASPNETCORE_ENVIRONMENT=Development
            - "DatabaseSettings:ConnectionString=Server=myServer;Port=myPort;Database=myDatabase;User Id=myUser;Password=HelloWorld;"
            - "ElasticConfiguration:Uri=http://elasticsearch:9200"
        depends_on:
            - inventariodb
        ports:
            - "5035:80"

    ocelotapigw:
        container_name: ocelotapigw
        environment:
            - ASPNETCORE_ENVIRONMENT=Development
            - "ElasticConfiguration:Uri=http://elasticsearch:9200"
        depends_on:
            - inventario.api
        ports:
            - "5000:80"

    sistema:
        container_name: sistema
        environment:
            - ASPNETCORE_ENVIRONMENT=Development
            - "ApiSettings:GatewayAddress=http://ocelotapigw"
            - "ElasticConfiguration:Uri=http://elasticsearch:9200"
        depends_on:
            - ocelotapigw
            - inventario.api
        ports:
            - "1235:80"
 

Как мне сделать так, чтобы это работало с помощью docker? Должен ли я использовать Amazon AWS CLI или что-то в этом роде?

PD: Приложение находится в разработке, и я использую Ubuntu 20.04 с кодом VS. Я планирую развернуть приложение микросервиса в Amazon EKS через несколько месяцев.

Комментарии:

1. рассмотрите возможность настройки клиента S3 с использованием переменных среды вместо файла

2. Вы пробовали добавить учетные данные в каталог с именем .aws, расположенный в домашнем каталоге пользователя, которому принадлежит приложение и который запускает его в контейнере ( в отличие от каталога проектов )?

3. Решение Дэниелса, вероятно, лучше

4. Сделал то, что сказал Дэниел, и работал, НО не для docker, Нужно ли мне указывать путь к файлам .aws внутри файлов docker? потому что дал мне эту ошибку: AmazonClientException: No RegionEndpoint or ServiceURL configured