Cómo ejecutar la imagen Docker de Aspose.CAD en Azure Function

Prerrequisitos

  • 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 “Ver también”.
  • IntelliJ IDEA.
  • Azure Toolkit para IntelliJ.
  • Postman.

Azure Function

En este ejemplo, crea una función de conversión simple que convierte un archivo CAD y lo guarda como una imagen. La aplicación se puede construir en Docker y ejecutarse en Azure Function.

Creando la Azure Function

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

  1. Una vez que Docker esté instalado, asegúrese de que utiliza contenedores de Linux (por defecto). Si es necesario, seleccione la opción Cambiar a contenedores de Linux en el menú de Docker Desktop.

  2. Crear un proyecto de Azure Function en IntelliJ IDEA.
    Crear proyecto de función de Azure
    Crear proyecto de función de Azure - final

  3. Herramientas->Azure->Iniciar sesión y seleccione la autenticación OAuth 2.0.
    Iniciar sesión en Azure

  4. Inicie sesión en el navegador.

  5. Seleccione el nombre de la suscripción.

  6. Agregue soporte para Docker.
    Agregar soporte de Docker

  7. Edite el DockerFile como en la sección Configurando un Dockerfile.

  8. Agregue bloques para el repositorio aspose.cad en 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. Cuando todas las dependencias requeridas estén añadidas, escriba un programa simple que crea una elipse y la guarda como una imagen:

    public class HttpTriggerFunction {
        /**
         * Esta función escucha en el punto de entrada "/api/HttpExample". Dos formas de invocarla utilizando el comando "curl" en bash:
         * 1. curl -d "Cuerpo HTTP" {tu host}/api/HttpExample
         * 2. curl "{tu 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("El desencadenador HTTP de Java procesó una solicitud.");
    
            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();
            }
        }
    }

Configurando un Dockerfile

El siguiente paso es crear y configurar el Dockerfile en la carpeta raíz del proyecto.

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

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

  • La imagen del SDK que se va a utilizar. Docker la descargará cuando se ejecute la construcción. La versión del SDK se especifica como una etiqueta.
  • 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.

Docker Hub

  1. Iniciar sesión en Docker Hub
  2. Crear un repositorio público

Construyendo y ejecutando la aplicación en Docker

Ahora se puede construir y ejecutar la aplicación en Docker. Abra su terminal favorita, cambie el directorio a la carpeta con la aplicación (la carpeta donde se encuentra el archivo de solución y el Dockerfile) y ejecute el siguiente comando:

  1. Comando de Dockerfile build en la consola

    //ejemplo
    docker build -t <nombre de usuario>/<nombre del repositorio> .
    
    docker build -t user/asposefunction .

  2. La primera vez que ejecute este comando, puede tardar más porque Docker necesita descargar las imágenes necesarias. Después de que se complete el comando anterior, ejecute el siguiente comando para enviar la imagen a Docker Hub.

    //ejemplo
    docker push <nombre de usuario>/<nombre del repositorio>:tagname
    
    docker push user/aspose-cad-java:latest

  3. Ejecutar dockerfile en IDE y después enviar a Docker Hub.
    Ejecutar docker en ide

  4. Ingrese el nombre de la imagen, como en el repositorio de Docker Hub.
    Ejecutar docker en ide-siguiente

  5. Espere a que finalice.

Azure

  1. Inicie sesión en Azure.
  2. Elija los servicios de Azure.
  3. Elija Function App y cree una función.
    Botón de crear función de Azure
  4. Repita la configuración básica como en la imagen a continuación.
    Configuración de función de Azure
  5. Haga clic en ‘Revisar + crear’ -> Crear.
  6. Espere a que la implementación termine.
  7. Haga clic en el botón ‘Ir al recurso’.
    Botón de recurso
  8. Detener la función aspose-cad-docker-example.
    Detener contenedor
  9. Vaya al menú del centro de implementación y realice las configuraciones adecuadas.
    Centro de implementación
  10. Guardar configuraciones
  11. Copie la URL del Webhook de la configuración del centro de implementación.
    URL del Webhook
  12. Vaya a Docker Hub, seleccione su repositorio y seleccione webhooks.
  13. Pegue la ‘URL del Webhook’ de Azure en la URL del Webhook de Docker Hub y establezca el nombre.
    Configuraciones del Webhook en Docker
  14. Haga clic en el botón de crear.
  15. Regrese a la función de Azure y inicie el contenedor.
    Menú de resumen

Ejemplo de ejecución

  1. Configuraciones de Postman.
    Configuraciones de Postman
  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.
  4. Guardar resultado Guardar respuesta

Más ejemplos

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

Ver también