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

Попередні вимоги

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

Azure Function

У цьому прикладі ви створюєте просту функцію конвертації, яка конвертує CAD-файл і зберігає його як зображення. Додаток можна буде зібрати в Docker і запустити в Azure Function.

Створення Azure Function

Щоб створити програму Azure Function, виконайте наведені нижче кроки:

  1. Після встановлення Docker переконайтеся, що він використовує контейнері Linux (за умовчанням). Якщо це необхідно, виберіть опцію Switch to Linux containers у меню Docker Desktops.

  2. Створіть проект Azure Function в IntelliJ IDEA.
    Create azure function project
    Create azure function project-final

  3. У меню Tools->Azure->Sing In виберіть автентифікацію OAuth 2.0.
    Azure sign In

  4. Увійдіть у браузер.

  5. Виберіть ім’я підписки.

  6. Додайте підтримку Docker.
    Azure sign In

  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" {your host}/api/HttpExample
         * 2. curl "{your host}/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 processed a request.");
    
            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 <user name>/<repository name> .
    
    docker build -t user/asposefunction .

  2. Перший раз, коли ви запускаєте цю команду, це може зайняти більше часу, оскільки Docker повинен завантажити необхідні образи. Після завершення попередньої команди запустіть наступну команду для відправлення образу на docker hub.

    //приклад
    docker push <user name>/<repository name>:tagname
    
    docker push user/aspose-cad-java:latest

  3. Запустіть dockerfile в IDE і після відправки до docker hub.
    Run docker in ide

  4. Введіть ім’я образу, як у репозиторії Docker Hub.
    Run docker in ide-next

  5. Чекайте закінчення.

Azure

  1. Увійдіть в Azure.
  2. Виберіть послуги Azure.
  3. Виберіть Function App і створіть функцію.
    Azure create function button
  4. Повторіть основні налаштування, як на зображенні нижче.
    Azure create function settings
  5. Натисніть ‘Review + create’ -> Create.
  6. Чекайте завершення розгортання.
  7. Натисніть кнопку ‘Go to resource’.
    Resource button
  8. Зупиніть функцію aspose-cad-docker-example.
    Stop conteiner
  9. Перейдіть до меню центру розгортання та налаштуйте відповідні параметри.
    Deployment center
  10. Збережіть налаштування
  11. Скопіюйте URL-адресу Webhook із налаштувань центру розгортання.
    Webhook url
  12. Перейдіть до Docker Hub, виберіть свій репозиторій і виберіть вебхуки.
  13. Вставте ‘Webhook url’ з Azure у URL-адресу вебхука Docker Hub і вкажіть ім’я.
    Webhook settings in docker
  14. Натисніть кнопку створення.
  15. Поверніться до огляду функції azure і запустіть контейнер.
    Overview menu

Приклад виконання

  1. Налаштування Postman.
    Overview menu
  2. Виберіть будь-який файл DXF, DWG, DGN, DWF, DWFX, IFC, STL, DWT, IGES, PLT, CF2, OBJ, HPGL, IGS, PCL, FBX, PDF, SVG.
  3. Натисніть кнопку відправки.
  4. Збережіть результат Save responce

Більше прикладів

Для отримання додаткових прикладів використання Aspose.CAD у Docker дивіться приклади.

Дивіться також