Як запустити Docker-образ Aspose.CAD у Google Cloud

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

  • Docker повинен бути встановлений на вашій системі. Для інформації про те, як встановити Docker на Windows або Mac, зверніться до посилань у розділі “Дивіться також”.
  • Visual Studio 2022.
  • Google CLI.
  • У прикладі використовується .NET Core 3.1 SDK.
  • Postman

Функція Google Cloud Run

Cloud Run — це повністю кероване обчислювальне середовище для розгортання та масштабування безсерверних HTTP-контейнерів без необхідності турбуватися про постачання машин, налаштування кластерів або автоматичне масштабування.

  • Немає прив’язки до постачальника - оскільки Cloud Run використовує стандартні OCI-контейнери та реалізує стандартний API Knative Serving, ви можете легко перенести свої додатки на локальні сервери або будь-яке інше хмарне середовище.
  • Швидке автоматичне масштабування - мікросервіси, розгорнуті в Cloud Run, автоматично масштабуються залежно від кількості вхідних запитів, без потреби в налаштуванні або управлінні повноцінним кластером Kubernetes. Cloud Run масштабується до нуля — тобто не використовує ресурси — якщо немає запитів.
  • Розподіл трафіку - Cloud Run дозволяє розподілити трафік між кількома версіями, тому ви можете виконати поетапне розгортання, таке як канаркове або синє/зелене розгортання.
  • Настроювані домени - ви можете налаштувати відображення власного домену в Cloud Run, і він створить сертифікат TLS для вашого домену.
  • Автоматична відмовостійкість - Cloud Run пропонує автоматичну відмовостійкість, тому вам не потрібно турбуватися про створення кількох примірників для високої доступності.

Cloud Run і Cloud Functions — це обидва повністю керовані сервіси, які працюють на безсерверній інфраструктурі Google Cloud, автоматично масштабуються та обробляють HTTP-запити або події. Однак у них є деякі суттєві відмінності:

  • Cloud Functions дозволяє вам розгортати фрагменти коду (функції), написані на обмеженій кількості мов програмування, тоді як Cloud Run дозволяє вам розгортати образи контейнерів, використовуючи обрану вами мову програмування.
  • Cloud Run також підтримує використання будь-якого інструменту або системної бібліотеки з вашого додатка; Cloud Functions не дозволяє використовувати власні виконувані файли.
  • Cloud Run пропонує більший час очікування запитів до 60 хвилин, тоді як для Cloud Functions тайм-аут запитів можна встановити на максимум 9 хвилин.
  • Cloud Functions надсилає лише один запит одночасно до кожного примірника функції, тоді як за замовчуванням Cloud Run налаштовано на надсилання кількох паралельних запитів на кожен примірник контейнера. Це корисно для покращення затримки та зниження витрат, якщо ви очікуєте великі обсяги.

Створення проекту Google Cloud Function

Щоб створити програму Google Cloud Function, виконайте такі кроки:

  1. Встановіть .NET Core SDK 3.1.
  2. Встановіть пакет шаблону:
    dotnet new -i Google.Cloud.Functions.Templates
  3. Далі створіть каталог для свого проекту та використовуйте dotnet new для створення нової HTTP-функції:
    mkdir AsposeFunctions //створіть папку
    cd AsposeFunctions //перейдіть до папки AsposeFunctions
    dotnet new gcf-http //створіть проект Google Cloud Function з http-тригером
  4. Приклад коду для файлу csproj (AsposeFunctions.csproj).
    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp3.1</TargetFramework>
      </PropertyGroup>
    
      <ItemGroup>
        <PackageReference Include="Aspose.CAD" Version="22.7.0" />
        <PackageReference Include="Google.Cloud.Functions.Hosting" Version="1.0.0" />
      </ItemGroup>
    </Project>
  5. Приклад коду для перетворення CAD-образу на файл PNG (Function.cs).
    namespace AsposeFunctions
    {
        public class Function : IHttpFunction
        {
            /// <summary>
            /// Логіка для вашої функції йде сюди.
            /// </summary>
            /// <param name="context">HTTP-контекст, що містить запит і відповідь.</param>
            /// <returns>Завдання, що представляє асинхронну операцію.</returns>
            public async Task HandleAsync(HttpContext context)
            {
                try
                {
                    //var file = context.Request.Form.Files.FirstOrDefault(); //файл форми
                    var file = context.Request.Body; //бінарні дані
                    
                    var msFile = new MemoryStream();
                    await file.CopyToAsync(msFile);
                    msFile.Seek(0, SeekOrigin.Begin);
                    
                    using (var image = (CadImage)Image.Load(msFile))
                    {
                        var ms = new MemoryStream();
                        image.Save(ms, new PngOptions());
                        ms.Seek(0, System.IO.SeekOrigin.Begin);
    
                        context.Response.Headers.Add("Content-Type", "image/png");
                        context.Response.Headers.Add("Content-Disposition", "attachment;filename=result.png");
    
                        await context.Response.Body.WriteAsync(ms.ToArray(), 0, ms.ToArray().Length);
                    }
                }
                catch (Exception e)
                {
                    await context.Response.WriteAsync(e.Message);
                }
            }
        }
    }
  6. Запустіть вашу функцію локально наступним чином:
    dotnet run
  7. Після того, як сервер запуститься, перейдіть за адресою http://localhost:8080, щоб викликати функцію. Натисніть Ctrl-C у консолі, щоб зупинити сервер.

Розгортання образу Docker у Google Cloud

  1. Увійдіть до Google Cloud.
  2. Створіть проект, якщо його не існує.
  3. Перейдіть до ‘Artifact Registry’ та створіть репозиторій.
    Створіть сховище артефактів
  4. Виберіть новий репозиторій у Artifact Registry. Виберіть репозиторій артефактів
  5. Натисніть ‘ІНСТРУКЦІЇ З НАЛАШТУВАННЯ’ та скопіюйте команду ‘Налаштувати Docker’.
    ІНСТРУКЦІЇ З НАЛАШТУВАННЯ
  6. Додайте запис Docker credHelper до файлу конфігурації Docker або створіть файл, якщо він не існує.
    //приклад
    gcloud auth configure-docker {region}-docker.pkg.dev
    
    gcloud auth configure-docker europe-west1-docker.pkg.dev
  7. Створіть файл Dockerfile у кореневому каталозі проекту та відредагуйте DockerFile, як у Розділі налаштування Dockerfile.
  8. Запустіть Docker Desktop.
  9. Побудуйте образ Docker з шляхом до хмарного репозиторію.
    //приклад
    docker build -t {region}-docker.pkg.dev/{project-name}/{repository-name}/{any-name}:{tag} .
    
    docker build -t europe-west1-docker.pkg.dev/test/aspose/function:latest .
  10. Завантажте образ до Google Cloud Artifact Registry
    //приклад
    docker build -t {region}-docker.pkg.dev/{project-name}/{repository-name}/{any-name}:{tag} .
    
    docker push europe-west1-docker.pkg.dev/test/aspose-cloud/function:latest

Створення сервісу Google Cloud Run

  1. Перейдіть до Cloud Run.
  2. Створіть сервіс Cloud Run.
    Створіть сервіс Cloud Run
  3. У полі URL контейнера виберіть контейнер із ‘ARTIFACT REGISTRY’.
    URL контейнера
  4. Перевірте інші налаштування, як наведено нижче.
    Налаштування сервісу
  5. Зачекайте, поки завершиться розгортання.
  6. URL сервісу для роботи з програмою конвертації.
    URL сервісу

Налаштування Dockerfile

Наступним кроком буде редагування конфігурації Dockerfile у проекті.

  1. В Dockerfile вкажіть:
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /build
COPY . .
RUN dotnet restore
RUN dotnet publish -c Release -o /app

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS final
WORKDIR /app
COPY --from=build /app .

RUN apt-get update
RUN apt-get install -y apt-utils
RUN apt-get install -y libgdiplus
RUN apt-get install -y libc6-dev 
RUN ln -s /usr/lib/libgdiplus.so/usr/lib/gdiplus.dll

EXPOSE 8080
ENV ASPNETCORE_URLS=http://*:8080
ENV ASPNETCORE_ENVIRONMENT=Release
ENV TAPTAKE_SEED=false
ENTRYPOINT ["dotnet", "AsposeFunctions.dll"]

Наведеними вище простий Dockerfile, який містить наступні інструкції:

  • Зображення SDK, що використовуватиметься. Тут це зображення Net Core 3.1. Docker завантажить його під час виконання збірки. Версія SDK вказується як тег.
  • Далі, вам може знадобитися встановити шрифти, оскільки зображення SDK містить дуже мало шрифтів. Крім того, ви можете використовувати локальні шрифти, скопійовані в образ Docker.
  • Робочий каталог, який вказується в наступному рядку.
  • Команда, яка копіює все в контейнер, публікує додаток і вказує точку входу.

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

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

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

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

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