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

Предварительные требования

  • Docker должен быть установлен на вашей системе. Для получения информации о том, как установить Docker на Windows или Mac, обратитесь к ссылкам в разделе “Смотрите также”.
  • IntelliJ IDEA.
  • Azure Toolkit for IntelliJ.
  • Postman.

Azure Function

В этом примере вы создадите простую функцию преобразования, которая конвертирует файл CAD и сохраняет его как изображение. Приложение затем может быть создано в Docker и запущено в Azure Function.

Создание Azure Function

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

  1. После установки Docker убедитесь, что он использует контейнеры Linux (по умолчанию). При необходимости выберите вариант переключения на Linux-контейнеры из меню Docker Desktops.

  2. Создайте проект Azure Function в IntelliJ IDEA.
    Создание проекта azure function
    Создание проекта azure function - финал

  3. Инструменты -> Azure -> Войти и выберите аутентификацию OAuth 2.0.
    Вход в Azure

  4. Войдите в браузере.

  5. Выберите имя подписки.

  6. Добавьте поддержку docker.
    Добавление поддержки docker

  7. Отредактируйте DockerFile, как в разделе Настройка Dockerfile.

  8. Добавьте блоки для репозитория aspose.cad в pom.xml.

    <repositories>
        <repository>
    		<id>AsposeJavaAPI</id>
            <name>Aspose Java API</name>
            <url>https://releases.aspose.com/java/repo/</url>
        </repository>
    </repositories>
    
    
    <dependencies>
     <dependency>
        <groupId>com.aspose</groupId>
        <artifactId>aspose-cad</artifactId>
        <version>22.3</version>
        <scope>compile</scope>
      </dependency>
    </dependencies>

  9. Когда все необходимые зависимости добавлены, напишите простую программу, которая создает эллипс и сохраняет его как изображение:

    public class HttpTriggerFunction {
        /**
         * Эта функция прослушивает конечную точку "/api/HttpExample". Два способа вызвать ее, используя команду "curl" в bash:
         * 1. curl -d "HTTP Body" {ваш хост}/api/HttpExample
         * 2. curl "{ваш хост}/api/HttpExample?name=HTTP%20Query"
         */
        @FunctionName("HttpExample")
        public HttpResponseMessage run(
                @HttpTrigger(
                    name = "req",
                    methods = {HttpMethod.GET, HttpMethod.POST},
                    authLevel = AuthorizationLevel.ANONYMOUS)
                    HttpRequestMessage<Optional<String>> request,
                final ExecutionContext context) throws FileNotFoundException {
            context.getLogger().info("Java HTTP trigger обработал запрос.");
    
            try{
                String body = request.getBody().get();
                InputStream targetStream = new ByteArrayInputStream(body.getBytes());
    
                CadImage image = (CadImage)Image.load(targetStream);
                {
                    CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
                    rasterizationOptions.setPageWidth(1200);
                    rasterizationOptions.setPageHeight(1200);
    
                    ImageOptionsBase options = new PngOptions();
                    options.setVectorRasterizationOptions(rasterizationOptions);
    
                    ByteArrayOutputStream out = new ByteArrayOutputStream();
    
                    image.save(out, options);
    
                    return request.createResponseBuilder(HttpStatus.OK)
                            .header("Content-type", "image/png")
                            .header("Content-Disposition", "attachment;filename=filename.png")
                            .body(out.toByteArray()).build();
                }
            }
            catch (Exception e)
    		{
                return request.createResponseBuilder(HttpStatus.BAD_REQUEST).body(e.getMessage()).build();
            }
        }
    }

Настройка Dockerfile

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

  1. В Dockerfile укажите:
    FROM mcr.microsoft.com/azure-functions/java:3.0-java8-build AS installer-env
    
    COPY . /src/java-function-app
    RUN cd /src/java-function-app && \
        mkdir -p /home/site/wwwroot && \
        mvn clean package && \
        cd ./target/azure-functions/ && \
        cd $(ls -d */|head -n 1) && \
        cp -a . /home/site/wwwroot
    
    FROM mcr.microsoft.com/azure-functions/java:3.0-java8-appservice
    
    ENV AzureWebJobsScriptRoot=/home/site/wwwroot \
        AzureFunctionsJobHost__Logging__Console__IsEnabled=true
    
    COPY --from=installer-env ["/home/site/wwwroot", "/home/site/wwwroot"]

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

  • Образ SDK, который будет использоваться. Docker загрузит его при запуске сборки. Версия SDK указана в виде тега.
  • Рабочий каталог, который указан в следующей строке.
  • Команда для копирования всего в контейнер, публикации приложения и определения точки входа.

Docker Hub

  1. Войдите в Docker Hub
  2. Создайте публичный репозиторий

Создание и запуск приложения в Docker

Теперь приложение можно создать и запустить в Docker. Откройте свою любимую командную строку, измените каталог на папку с приложением (папка, в которой находится файл решения и Dockerfile) и выполните следующую команду:

  1. Построение команды dockerfile в консоли

    //пример
    docker build -t <имя пользователя>/<имя репозитория> .
    
    docker build -t user/asposefunction .

  2. Первый раз, когда вы запускаете эту команду, это может занять больше времени, так как Docker должен загрузить необходимые образы. После завершения предыдущей команды выполните следующую команду для отправки изображения в docker hub.

    //пример
    docker push <имя пользователя>/<имя репозитория>:tagname
    
    docker push user/aspose-cad-java:latest

  3. Запустите dockerfile в IDE и после отправки в docker hub.
    Запуск docker в IDE

  4. Введите имя изображения, как в репозитории Docker HUb.
    Запуск docker в ide - следующий

  5. Ждите завершения.

Azure

  1. Войдите в Azure.
  2. Выберите службы Azure.
  3. Выберите Function App и создайте функцию.
    Кнопка создания функции Azure
  4. Повторите основные настройки, как на изображении ниже.
    Настройки создания функции Azure
  5. Нажмите ‘Обзор + создание’ -> Создать.
  6. Подождите, пока развертывание завершится.
  7. Нажмите кнопку ‘Перейти к ресурсу’.
    Кнопка ресурса
  8. Остановите функцию aspose-cad-docker-example.
    Остановить контейнер
  9. Перейдите в меню центра развертывания и внесите соответствующие настройки.
    Центр развертывания
  10. Сохраните настройки
  11. Скопируйте URL-адрес вебхука из настроек центра развертывания.
    URL вебхука
  12. Перейдите в Docker Hub, выберите свой репозиторий и выберите вебхуки.
  13. Вставьте ‘URL вебхука’ из Azure в URL вебхука Docker Hub и задайте имя.
    Настройки вебхука в docker
  14. Нажмите кнопку создать.
  15. Вернитесь к обзору функции Azure и запустите контейнер.
    Меню обзора

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

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

Другие примеры

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

Смотрите также