Как запустить образ Aspose.CAD Docker в AWS Lambda Function

Требования

  • Docker должен быть установлен в вашей системе. Для получения информации о том, как установить Docker на Windows или Mac, обратитесь к ссылкам в разделе «См. также».
  • Visual Studio 2022.
  • AWS Toolkit для Visual Studio 2022.
  • В примере используется .NET 6 SDK.
  • Postman

AWS Lambda Function

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

Создание AWS Lambda Function

Чтобы создать программу AWS Lambda Function, выполните следующие шаги:

  1. Создайте проект AWS Lambda.
    Create AWS function button
  2. Выберите .NET 6 (Container Image) и нажмите кнопку ‘Finish’.
    Create container function button
  3. Откройте AWS Explorer в Visual Studio (View->AWS Explorer).
  4. Добавьте профиль учетных данных AWS в AWS Explorer.
    Credential profile
  5. Введите Access Key ID и Secret Access Key, вы можете получить эти ключи в разделе Безопасность или связаться с администратором и получить csv-файл для авторизации.
    Acount profile settings
  6. Установите последние библиотеки из NuGet.
    NuGet Manager
  7. Пример кода для конвертации cad-изображения в pdf-файл.
    public APIGatewayHttpApiV2ProxyResponse FunctionHandler(APIGatewayHttpApiV2ProxyRequest stream, ILambdaContext context)
    {
        try
        {            
            var parser = HttpMultipartParser.MultipartFormDataParser.Parse(new MemoryStream(Convert.FromBase64String(stream.Body)));
            var file = parser.Files.First();
            Stream fileStream = file.Data;
    
            using (var img = Aspose.CAD.Image.Load(fileStream))
            {
                var ms = new MemoryStream();
                img.Save(ms, new PdfOptions());
                ms.Seek(0, (System.IO.SeekOrigin)SeekOrigin.Begin);
              
                return new APIGatewayHttpApiV2ProxyResponse
                {
                    StatusCode = (int)HttpStatusCode.OK,
                    Body = Convert.ToBase64String(ms.ToArray()),
                    IsBase64Encoded = true,
                    Headers = new Dictionary<string, string>
                    {
                        {"Content-Type", "application/pdf" },
                        {"Content-Disposition", "attachment;filename=filename.pdf" }
                    }
                };
            }
        }
        catch (Exception e)
        {           
            return new APIGatewayHttpApiV2ProxyResponse
            {
                StatusCode = (int)HttpStatusCode.OK,
                Body = e.Message,
                Headers = new Dictionary<string, string>
                {
                    {
                        "Content-Type", "text/html"
                    }
                }
            };
        }
    }
  8. Отредактируйте DockerFile, как в разделе Настройка Dockerfile.
  9. Запустите Docker Desktop.
  10. Опубликуйте в AWS Lambda.
    AWS lambda publish
  11. Измените конфигурацию загрузки.
    Upload aws lambda
  12. Нажмите кнопку ‘Upload’.
    Upload aws lambda last
  13. Перейдите в AWS и выберите Lambda.
    AWS Lambda
  14. Выберите вашу новую функцию и создайте URL функции.
    Configuration url function
  15. Выберите тип аутентификации
  • AWS_IAM - Только аутентифицированные пользователи и роли IAM могут отправлять запросы к вашему URL функции.
  • NONE - Lambda не будет выполнять аутентификацию IAM для запросов к вашему URL функции. Конечная точка URL будет общедоступной, если вы не реализуете свою собственную логику авторизации в вашей функции.

Настройка Dockerfile

Следующий шаг - отредактировать Dockerfile в проекте.

  1. В Dockerfile укажите:
FROM public.ecr.aws/lambda/dotnet:6

WORKDIR /var/task

COPY "bin/Release/lambda-publish"  .

RUN yum install -y amazon-linux-extras 
RUN amazon-linux-extras install epel -y
RUN yum install -y libgdiplus  

CMD ["AWSLambda::AWSLambda.Function::FunctionHandler"]

Выше представлен простой Dockerfile, который содержит следующие инструкции:

  • Используемый образ SDK. Здесь это образ Net 6. Docker загрузит его, когда будет запущена сборка. Версия SDK указывается в качестве тега.
  • После этого вам, возможно, придется установить шрифты, поскольку образ SDK содержит очень мало шрифтов. Вы также можете использовать локальные шрифты, скопированные в образ docker.
  • Рабочий каталог, который указывается в следующей строке.
  • Команда для копирования всего в контейнер, публикации приложения и указания точки входа.

Пример выполнения

  1. Настройки Postman.
    Overview menu
  2. Выберите любой файл DXF, DWG, DGN, DWF, DWFX, IFC, STL, DWT, IGES, PLT, CF2, OBJ, HPGL, IGS, PCL, FBX, PDF, SVG.
  3. Нажмите кнопку отправки.

Дополнительные примеры

Для получения дополнительных примеров использования Aspose.CAD в Docker смотрите примеры.

См. также.