Запуск веб-приложения .net core на AWS Beanstalk — права на запись в файл

#amazon-web-services #asp.net-core #file-permissions #amazon-elastic-beanstalk

#amazon-веб-сервисы #asp.net-core #файл-разрешения #amazon-elastic-beanstalk

Вопрос:

Хорошо, итак, у меня есть веб-приложение, написанное на .NET Core, которое я развернул на AWS Elastic beanstalk, что было довольно просто, но я уже столкнулся с проблемой.

Приложение извлекает данные в формате JSON из внешнего источника и записывает в локальный файл, в настоящее время в wwwroot / data / data.json в корне проекта. После развертывания в AWS эта функциональность выдает исключение «отказано в доступе» при попытке записи файла.

Я видел кое-что о создании папки с именем .ebextensions с файлом конфигурации с некоторыми командами контейнера для установки разрешений на определенные пути / файлы после развертывания, и я пытался это сделать, но, похоже, это ничего не дает для меня — я даже не знаю, выполняются ли эти команды вообще, поэтому я понятия не имею, что происходит, если вообще что-либо.

Это конфигурационный файл, который я создал в папке .ebextensions:

 {
    "container_commands": {
        "01-aclchange": {
            "command": "icacls "C:/inetpub/AspNetCoreWebApps/app/wwwroot/data" /grant DefaultAppPool:(OI)(CI)",
         }
    }
}
  

Имя файла .config совпадает с именем приложения в AWS, но я также где-то читал, что имя не имеет значения, если оно имеет расширение .config.

Кто-нибудь успешно делал что-то подобное? Приветствуются любые указания.

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

1. Учитывая тот факт, что я ничего не знаю о EB, могу я предложить вам вообще не выполнять запись в файловую систему? Оно может быть хрупким и вызывать проблемы, подобные тем, которые вы видите. Почему бы, например, не поместить файл в хранилище S3?

2. Это вполне может быть вариантом. Первоначальная причина использования файловой системы заключалась в том, чтобы избежать необходимости использовать базу данных только для этого, поскольку в противном случае приложению вообще не нужна база данных. Я мог бы взглянуть на хранилище S3, спасибо.

3. Только что бегло просмотрел хранилище S3, и, похоже, это именно то, что мне нужно. Я собираюсь использовать это вместо файловой системы. Спасибо за информацию.

4. Хорошо, я ответил и убрал свои комментарии здесь.

Ответ №1:

Вместо того, чтобы пытаться устранить проблемы с разрешениями на запись в локальное хранилище в AWS Elastic Beanstalk, я бы вместо этого предложил использовать что-то вроде Amazon S3 для хранения файлов. Некоторые преимущества были бы:

  • Не нужно беспокоиться о разрешениях для файлов.
  • Файлы S3 являются постоянными.
  • При повторной публикации приложения могут возникнуть проблемы с потерей локальных файлов.
  • Если вы когда-нибудь перейдете на использование чего-то вроде контейнеров, вы будете терять файл каждый раз, когда контейнер будет удален.
  • S3 невероятно дешев в использовании.