#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