Cómo ejecutar la imagen de Docker de Aspose.CAD en Google Cloud

Requisitos previos

  • Docker debe estar instalado en su sistema. Para obtener información sobre cómo instalar Docker en Windows o Mac, consulte los enlaces en la sección “Véase también”.
  • Visual Studio 2022.
  • Google CLI.
  • Se utiliza el SDK de .NET Core 3.1 en el ejemplo.
  • Postman

Función de Google Cloud Run

Cloud Run es un entorno de computación completamente gestionado para implementar y escalar contenedores HTTP sin servidor sin preocuparse por aprovisionar máquinas, configurar clústeres o escalar automáticamente.

  • Sin bloqueo de proveedor - Debido a que Cloud Run utiliza contenedores OCI estándar e implementa la API estándar de Knative Serving, puede portar fácilmente sus aplicaciones a entornos locales o a cualquier otro entorno en la nube.
  • Escalado automático rápido - Los microservicios implementados en Cloud Run escalan automáticamente según la cantidad de solicitudes entrantes, sin que usted tenga que configurar o gestionar un clúster de Kubernetes completo. Cloud Run escala a cero, es decir, no utiliza recursos si no hay solicitudes.
  • Dividir tráfico - Cloud Run le permite dividir el tráfico entre múltiples versiones, por lo que puede realizar implementaciones graduales como implementaciones canarias o implementaciones azul/verde.
  • Dominios personalizados - Puede configurar el mapeo de dominios personalizados en Cloud Run y este aprovisionará un certificado TLS para su dominio.
  • Redundancia automática - Cloud Run ofrece redundancia automática, por lo que no tiene que preocuparse por crear múltiples instancias para alta disponibilidad.

Cloud Run y Cloud Functions son servicios completamente gestionados que se ejecutan en la infraestructura sin servidor de Google Cloud, escalan automáticamente y manejan solicitudes o eventos HTTP. Sin embargo, tienen algunas diferencias importantes:

  • Cloud Functions permite implementar fragmentos de código (funciones) escritos en un conjunto limitado de lenguajes de programación, mientras que Cloud Run le permite implementar imágenes de contenedor utilizando el lenguaje de programación de su elección.
  • Cloud Run también admite el uso de cualquier herramienta o biblioteca del sistema de su aplicación; Cloud Functions no le permite usar ejecutables personalizados.
  • Cloud Run ofrece una duración de tiempo de espera de solicitud más larga de hasta 60 minutos, mientras que con Cloud Functions el tiempo de espera de las solicitudes puede establecerse hasta 9 minutos.
  • Cloud Functions solo envía una solicitud a la vez a cada instancia de función, mientras que por defecto Cloud Run está configurado para enviar múltiples solicitudes concurrentes en cada instancia de contenedor. Esto es útil para mejorar la latencia y reducir costos si se esperan grandes volúmenes.

Creando el proyecto de Google Cloud Function

Para crear el programa de Google Cloud Function, siga los pasos a continuación:

  1. Instalar el SDK de .NET Core 3.1.
  2. Instale el paquete de plantilla:
    dotnet new -i Google.Cloud.Functions.Templates
  3. A continuación, cree un directorio para su proyecto y use dotnet new para crear una nueva función HTTP:
    mkdir AsposeFunctions //crear carpeta
    cd AsposeFunctions //ir a la carpeta AsposeFunctions
    dotnet new gcf-http //crear proyecto de Google Cloud Function con activador http
  4. Ejemplo de código para el archivo 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. Ejemplo de código para convertir la imagen cad a un archivo png (Function.cs).
    namespace AsposeFunctions
    {
        public class Function : IHttpFunction
        {
            /// <summary>
            /// La lógica para su función va aquí.
            /// </summary>
            /// <param name="context">El contexto HTTP, que contiene la solicitud y la respuesta.</param>
            /// <returns>Tarea que representa la operación asíncrona.</returns>
            public async Task HandleAsync(HttpContext context)
            {
                try
                {
                    //var file = context.Request.Form.Files.FirstOrDefault(); //archivo del formulario
                    var file = context.Request.Body; //datos binarios
                    
                    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. Compile su función localmente de la siguiente manera:
    dotnet run
  7. Una vez que el servidor esté en funcionamiento, navegue a http://localhost:8080 para invocar la función. Presione Ctrl-C en la consola para detener el servidor.

Desplegar la imagen docker en Google Cloud

  1. Inicie sesión en Google Cloud.
  2. Cree un proyecto si no existe.
  3. Vaya a ‘Artifact Registry’ y cree un repositorio.
    Crear repositorio de artefactos
  4. Seleccione el nuevo repositorio en Artifact Registry. Seleccionar repositorio de artefactos
  5. Haga clic en ‘INSTRUCCIÓN DE CONFIGURACIÓN’ y copie el comando ‘Configurar Docker’.
    INSTRUCCIÓN DE CONFIGURACIÓN
  6. Agregue una entrada de credHelper de Docker al archivo de configuración de Docker, o cree el archivo si no existe.
    //ejemplo
    gcloud auth configure-docker {region}-docker.pkg.dev
    
    gcloud auth configure-docker europe-west1-docker.pkg.dev
  7. Cree un Dockerfile en el directorio raíz del proyecto y edite el DockerFile como en la sección de configuración de un Dockerfile.
  8. Inicie Docker Desktop.
  9. Compile la imagen docker con el camino del repositorio en la nube.
    //ejemplo
    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. Empuje la imagen al Google Cloud Artifact Registry
    //ejemplo
    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

Crear servicio de Google Cloud Run

  1. Vaya a Cloud Run.
  2. Cree un servicio de Cloud Run.
    Crear servicio de Cloud Run
  3. En el campo de URL de imagen del contenedor, seleccione el contenedor de ‘ARTIFACT REGISTRY’.
    URL de imagen del contenedor
  4. Verifique otras configuraciones como se indica a continuación.
    Configuraciones del servicio
  5. Espere a que finalice la implementación.
  6. URL del servicio para trabajar con la aplicación de conversión.
    URL del servicio

Configurando un Dockerfile

El siguiente paso es editar el Dockerfile en el proyecto.

  1. En el Dockerfile, especifique:
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"]

Lo anterior es un Dockerfile simple, que contiene las siguientes instrucciones:

  • La imagen del SDK que se utilizará. Aquí es la imagen de Net Core 3.1. Docker la descargará cuando se ejecute la compilación. La versión del SDK se especifica como una etiqueta.
  • Después, es posible que necesite instalar fuentes porque la imagen del SDK contiene muy pocas fuentes. Además, puede usar fuentes locales copiadas a la imagen docker.
  • El directorio de trabajo, que se especifica en la siguiente línea.
  • El comando para copiar todo al contenedor, publicar la aplicación y especificar el punto de entrada.

Ejemplo de ejecución

  1. Configuraciones de Postman.
    Menú de resumen
  2. Seleccione cualquier archivo DXF, DWG, DGN, DWF, DWFX, IFC, STL, DWT, IGES, PLT, CF2, OBJ, HPGL, IGS, PCL, FBX, PDF, SVG.
  3. Haga clic en el botón enviar.

Más ejemplos

Para más ejemplos de cómo puede utilizar Aspose.CAD en Docker, consulte los ejemplos.

Véase también.