Comment exécuter IronPDF for Java dans Google Cloud

This article was translated from English: Does it need improvement?
Translated
View the article in English

Le déploiement d'IronPDF for Java sur Google Cloud Functions nécessite une configuration non standard car IronPDF repose sur un binaire Chromium intégré pour rendre l'HTML en PDF. Ce guide couvre tout ce qui est nécessaire pour exécuter IronPDF dans un conteneur Docker personnalisé sur Google Cloud Functions — des dépendances pom.xml correctes aux autorisations d'exécution et aux paramètres de ressources.

ImportantLe support Google Cloud pour IronPDF for Java est actuellement expérimental — toutes les configurations n'ont pas été validées dans chaque région ou version d'exécution. Testez les déploiements en profondeur avant de publier en production.

Ce n'est pas une préoccupation si vous êtes déjà à l'aise avec Google Cloud Functions et Docker. Les changements de configuration sont simples : échangez l'image de fonction par défaut pour un Dockerfile personnalisé, ajoutez la dépendance du moteur Linux, ajustez les limites de ressource et définissez le répertoire de travail. Chaque étape est expliquée ci-dessous.

Démarrage rapide : Déployez IronPDF for Java sur Google Cloud

La configuration minimale requise comprend un fichier Dockerfile personnalisé (car les images Cloud Function par défaut ne disposent pas des dépendances système de Chrome), l'artefact ironpdf-engine-linux-x64 dans votre pom.xml, et un répertoire de travail pointant vers /tmp/. Le code ci-dessous montre comment définir le répertoire de travail du moteur dans votre point d'entrée de fonction :

//:path=/static-assets/pdf/content-code-examples/tutorials/google-cloud/configure-working-directory.java
import com.ironsoftware.ironpdf.Paramètres;
import java.nio.file.Paths;

// Point IronPDF at a writable directory in the Cloud Function runtime
Paramètres.setIronPdfEngineWorkingDirectory(Paths.get("/tmp/"));
//:path=/static-assets/pdf/content-code-examples/tutorials/google-cloud/configure-working-directory.java
import com.ironsoftware.ironpdf.Paramètres;
import java.nio.file.Paths;

// Point IronPDF at a writable directory in the Cloud Function runtime
Paramètres.setIronPdfEngineWorkingDirectory(Paths.get("/tmp/"));
JAVA

Après avoir défini le répertoire de travail, IronPDF peut extraire et exécuter son binaire de moteur dans le système de fichiers éphémère de Cloud Function. Le répertoire /tmp/ est le seul chemin d'accès accessible en écriture et exécutable disponible dans la plupart des environnements d'exécution de Google Cloud Function.

Table des matières

Pourquoi les images par défaut de Cloud Function ne fonctionnent-elles pas ?

Les images d'exécution par défaut de Google Cloud Function sont minimalistes par conception — elles incluent uniquement les packages nécessaires pour exécuter le code de fonction écrit dans des langages courants. Le moteur de rendu basé sur Chromium d'IronPDF dépend d'un ensemble plus large de bibliothèques système Linux (polices, bibliothèques graphiques, outils de sandbox) qui sont absentes des images standard.

Google publie une liste complète des packages système disponibles pour chaque environnement d'exécution dans la référence des packages systèmes de Google Cloud Functions. Les dépendances de Chromium ne sont incluses dans aucun des environnements d'exécution de 2e génération standard. Tenter de charger le moteur IronPDF dans l'image par défaut entraîne un échec de chargement de la bibliothèque native au démarrage.

La solution consiste à créer une image Docker personnalisée qui installe explicitement ces packages avant l'ajout du binaire de la fonction. Cette approche est entièrement supportée par les Google Cloud Functions et est la même stratégie recommandée pour toute fonction nécessitant des binaires natifs. Consultez le guide de déploiement Linux d'IronPDF pour la liste complète des packages à inclure.

Veuillez noter(Le déploiement de Zip n'est pas supporté pour IronPDF sur Google Cloud. IronPDF doit extraire et exécuter des binaires natifs à l'exécution, ce qui nécessite un système de fichiers accessible en écriture et des autorisations d'exécution que le modèle de déploiement Zip ne fournit pas.

Comment créer un Dockerfile personnalisé pour Google Cloud ?

Un Dockerfile personnalisé donne un contrôle total sur l'environnement d'exécution. Commencez par l'image de base Java officielle des Google Cloud Functions, puis installez les bibliothèques système requises par Chromium.

Le Dockerfile ci-dessous démontre le modèle recommandé. Remplacez les entrées COPY et CMD par les spécificités de votre projet de fonction :

//:path=Dockerfile
# Use the official Google Cloud Functions Java 17 base image
FROM gcr.io/google-appengine/java17:latest

# Install Chrome system dependencies required by IronPDF's rendering engine
RUN apt-get update && apt-get install -y \
    libglib2.0-0 \
    libnss3 \
    libatk1.0-0 \
    libatk-bridge2.0-0 \
    libcups2 \
    libdrm2 \
    libxkbcommon0 \
    libxcomposite1 \
    libxdamage1 \
    libxfixes3 \
    libxrandr2 \
    libgbm1 \
    libasound2 \
    libpango-1.0-0 \
    libpangocairo-1.0-0 \
    --no-install-recommends \
    && rm -rf /var/lib/apt/lists/*

# Grant execute permissions on /tmp so the IronPDF engine can extract there
RUN chmod 777 /tmp/

# Copy the compiled JAR and set the entry point
COPY target/your-function.jar /app/function.jar
CMD ["java", "-jar", "/app/function.jar"]

La ligne chmod 777 /tmp/ est nécessaire car IronPDF doit écrire et exécuter le binaire du moteur lors de l'initialisation. Sans autorisation d'exécution sur le répertoire de travail, le moteur ne pourra pas démarrer.

ConseilsTestez l'image Docker localement avec docker build et docker run avant de la déployer sur Cloud Functions. Les tests locaux détecteront les dépendances manquantes tôt et éviteront les cycles de construction en cloud lents.

Comment configurer pom.xml pour le déploiement Google Cloud ?

L'artefact Maven standard ironpdf regroupe les binaires du moteur pour plusieurs plateformes. Pour Google Cloud Functions (qui s'exécutent sur Linux x86-64), ajoutez l'artéfact de moteur spécifique à la plateforme pour garder l'image de déploiement légère et pour s'assurer que le binaire correct est toujours disponible :

//:path=pom.xml
<dependencies>

    <dependency>
        <groupId>com.ironsoftware</groupId>
        <artifactId>ironpdf</artifactId>
        <version>2024.9.1</version>
    </dependency>

    <dependency>
        <groupId>com.ironsoftware</groupId>
        <artifactId>ironpdf-engine-linux-x64</artifactId>
        <version>2024.9.1</version>
    </dependency>
</dependencies>
//:path=pom.xml
<dependencies>

    <dependency>
        <groupId>com.ironsoftware</groupId>
        <artifactId>ironpdf</artifactId>
        <version>2024.9.1</version>
    </dependency>

    <dependency>
        <groupId>com.ironsoftware</groupId>
        <artifactId>ironpdf-engine-linux-x64</artifactId>
        <version>2024.9.1</version>
    </dependency>
</dependencies>
XML

Mettez toujours à jour le numéro de version à la dernière version d'IronPDF for Java. L'artefact ironpdf-engine-linux-x64 doit correspondre exactement à la version de l'artefact principal ironpdf.

ImportantGardez les deux numéros de version synchronisés. Un décalage entre l'artéfact principal et la version de l'artéfact du moteur entraînera un échec de démarrage à l'exécution.

Comment ajouter le plugin Maven Shade ?

Lors du déploiement sur Google Cloud Functions en tant qu'uber-JAR (fat JAR), le maven-shade-plugin garantit que les fichiers de chargement de service de toutes les dépendances transitives sont correctement fusionnés. Sans cela, certains enregistrements de services gRPC peuvent être discrètement abandonnés, entraînant un échec de l'initialisation du moteur.

Ajoutez la configuration de plugin suivante à la section <build><plugins> de votre pom.xml :

//:path=pom.xml
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.2.4</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>

            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>
//:path=pom.xml
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.2.4</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>

            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>
XML

Le ServicesResourceTransformer est l'élément essentiel. Elle combine les entrées META-INF/services/ de chaque fichier JAR de dépendance en un seul fichier fusionné. gRPC utilise le mécanisme ServiceLoader de Java ; les fichiers de service fusionnés sont donc nécessaires pour que la sélection du transport (HTTP/2 ou texte brut) fonctionne lors de l'exécution.

Comment ajouter des dépendances gRPC facultatives ?

Dans certaines configurations de déploiement — notamment lors de l'utilisation d'un JAR éclaté avec certaines versions du cadre Google Cloud Functions — des dépendances de transport gRPC explicites sont nécessaires. Ajoutez-les si la fonction ne parvient pas à démarrer avec une erreur de transport ou de canal gRPC :

//:path=pom.xml
<dependencies>

    <dependency>
        <groupId>io.perfmark</groupId>
        <artifactId>perfmark-api</artifactId>
        <version>0.26.0</version>
    </dependency>

    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-okhttp</artifactId>
        <version>1.50.2</version>
    </dependency>

    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-netty-shaded</artifactId>
        <version>1.50.2</version>
    </dependency>
</dependencies>
//:path=pom.xml
<dependencies>

    <dependency>
        <groupId>io.perfmark</groupId>
        <artifactId>perfmark-api</artifactId>
        <version>0.26.0</version>
    </dependency>

    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-okhttp</artifactId>
        <version>1.50.2</version>
    </dependency>

    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-netty-shaded</artifactId>
        <version>1.50.2</version>
    </dependency>
</dependencies>
XML

Dans la plupart des cas, l'inclusion de grpc-netty-shaded est suffisante pour la production. Le transport grpc-okhttp est une alternative plus légère, utile lorsque la réduction de la taille des images est une priorité. Ajoutez perfmark-api uniquement si vous rencontrez des avertissements de classpath concernant des annotations de traçage manquantes.

Veuillez noterCheck the gRPC release notes to confirm the latest compatible version for your IronPDF dependency set.

Comment définir les limites de ressources pour Google Cloud Functions ?

IronPDF démarre un sous-processus Chromium à l'intérieur du conteneur Cloud Function lors de sa première invocation. Le démarrage de Chromium et le rendu initial sont gourmands en mémoire, et la fonction doit rester active suffisamment longtemps pour que le moteur s'initialise. Les limites de ressources par défaut des Cloud Functions sont trop basses pour un fonctionnement fiable.

Configurez les limites suivantes dans la console Google Cloud ou via l'interface CLI gcloud lors du déploiement de la fonction :

Paramètres de ressources recommandés pour les Google Cloud Functions IronPDF Java
Paramètre Valeur recommandée Raison
Délai d'attente 330 secondes L'initialisation de Chromium à froid peut prendre 60 à 90 secondes. La fonction ne doit pas expirer avant que le moteur soit prêt.
Mémoire 2 048 Mo ou plus Chromium nécessite une RAM importante pour rendre des pages HTML complexes. Une mémoire insuffisante entraîne l'arrêt du processus en cours de rendu.
Stockage Éphémère 1 024 Mo ou plus Le binaire du moteur et les fichiers PDF temporaires sont écrits dans /tmp/. Un stockage faible entraîne des échecs d'extraction ou d'écriture.

Ces valeurs sont des points de départ. Une génération de PDF de volume élevé ou complexe peut nécessiter des allocations de mémoire plus élevées. Surveillez les métriques d'utilisation de mémoire des Cloud Functions dans la console Google Cloud et augmentez les limites si vous observez des erreurs de mémoire insuffisante.

AvertissementNe réduisez pas le temps d'attente sous 180 secondes. L'initialisation à froid pour IronPDF sur Cloud Functions nécessite systématiquement plus de temps que les fonctions Java standard.

Comment configurer le répertoire de travail et les autorisations des fichiers ?

Le moteur IronPDF extrait son fichier binaire dans un répertoire de travail au démarrage. Sur Google Cloud Functions, le seul chemin accessible en écriture et exécutable est /tmp/. Définissez explicitement le répertoire de travail avant d'appeler n'importe quelle API d'IronPDF, et assurez-vous que le Dockerfile accorde les autorisations nécessaires sur ce chemin.

Ajoutez cet appel de configuration en haut de votre point d'entrée de fonction, avant toute opération PDF :

//:path=/static-assets/pdf/content-code-examples/tutorials/google-cloud/configure-working-directory.java
import com.ironsoftware.ironpdf.Paramètres;
import java.nio.file.Paths;

public class PdfFunction {
    static {
        // Must be called before any IronPDF operation.
        // /tmp/ is the only writable and executable directory in Cloud Functions.
        Paramètres.setIronPdfEngineWorkingDirectory(Paths.get("/tmp/"));
    }
}
//:path=/static-assets/pdf/content-code-examples/tutorials/google-cloud/configure-working-directory.java
import com.ironsoftware.ironpdf.Paramètres;
import java.nio.file.Paths;

public class PdfFunction {
    static {
        // Must be called before any IronPDF operation.
        // /tmp/ is the only writable and executable directory in Cloud Functions.
        Paramètres.setIronPdfEngineWorkingDirectory(Paths.get("/tmp/"));
    }
}
JAVA

Ajoutez ensuite la commande d'autorisation correspondante à votre Dockerfile :

//:path=Dockerfile
# Ensure the IronPDF engine can extract and run binaries from /tmp/
RUN chmod 777 /tmp/

L'utilisation d'un bloc d'initialisation static {} garantit que le répertoire de travail est configuré avant qu'une classe de votre fonction ne tente de charger le moteur IronPDF. Si vous le définissez dans une méthode d'instance ou un gestionnaire de requêtes, il existe un risque qu'un autre thread initialise le moteur avant que le chemin d'accès ne soit configuré.

Quelles sont les prochaines étapes?

Ce guide couvre la configuration complète pour exécuter IronPDF for Java à l'intérieur d'une Google Cloud Function à l'aide d'un conteneur Docker personnalisé. Les points clés sont les suivants : utiliser un fichier Dockerfile personnalisé qui installe les dépendances système de Chrome, inclure l'artefact ironpdf-engine-linux-x64 Maven, configurer le répertoire de travail sur /tmp/, définir le délai d'expiration à au moins 330 secondes et la mémoire à au moins 2 048 Mo, et ajouter maven-shade-plugin pour fusionner les fichiers du chargeur de services.

Pour explorer davantage ce que peut faire IronPDF for Java, consultez la documentation IronPDF for Java ou essayez une de ces guides :

Obtenez une licence d'essai gratuite pour tester IronPDF for Java dans votre environnement Google Cloud. Une clé de licence est requise pour les déploiements en production. Achetez une licence lorsque vous êtes prêt à passer en ligne.

Questions Fréquemment Posées

Pourquoi IronPDF for Java échoue-t-il à démarrer sur l'image Google Cloud Function par défaut ?

Les images runtime de Cloud Function par défaut n'incluent pas les bibliothèques système Linux que Chromium nécessite, telles que libnss3, libatk1.0-0, et les packages graphiques associés. Le moteur de rendu d'IronPDF utilise Chromium en interne, donc un Dockerfile personnalisé qui installe explicitement ces dépendances est requis.

Pourquoi le déploiement Zip n'est-il pas pris en charge pour IronPDF sur Google Cloud ?

IronPDF doit extraire et exécuter un binaire natif de Chromium au moment de l'exécution. Le modèle de déploiement Zip ne fournit pas de système de fichiers exécutable et inscriptible, donc le moteur ne peut pas extraire ou lancer son binaire. Un déploiement basé sur Docker est requis.

Quelle dépendance Maven est nécessaire pour IronPDF sur Google Cloud Functions ?

Ajoutez ironpdf-engine-linux-x64 du groupe com.ironsoftware à votre pom.xml. Le numéro de version doit correspondre exactement à celui de l'artifact ironpdf principal. Cet artifact regroupe le binaire Chromium Linux x86-64 utilisé par IronPDF pour le rendu.

Pourquoi IronPDF for Java a-t-il besoin du maven-shade-plugin ?

Lors de l'emballage sous forme d'uber-JAR, le maven-shade-plugin avec ServicesResourceTransformer fusionne les fichiers META-INF/services/ de tous les JARs de dépendance. Sans cela, les enregistrements de services gRPC peuvent être discrètement supprimés, causant l'échec de l'initialisation du moteur IronPDF.

Quels paramètres de délai d'attente et de mémoire sont nécessaires pour les Google Cloud Functions exécutant IronPDF ?

Définissez le délai d'attente de la fonction à 330 secondes, la mémoire à au moins 2048 Mo, et le stockage éphémère à au moins 1024 Mo. L'initialisation de Chromium lors d'un démarrage à froid peut prendre de 60 à 90 secondes, et le moteur nécessite une mémoire substantielle pour rendre des pages HTML complexes.

Pourquoi Settings.setIronPdfEngineWorkingDirectory doit-il pointer vers /tmp/ sur Google Cloud ?

Le répertoire /tmp/ est le seul chemin inscriptible et exécutable disponible dans la plupart des runtimes de Google Cloud Function. IronPDF doit extraire son binaire moteur et écrire des fichiers temporaires à cet emplacement. Sans ce paramètre, le moteur ne peut pas trouver de cible d'extraction appropriée et échouera à démarrer.

Pourquoi le Dockerfile a-t-il besoin de RUN chmod 777 /tmp/ ?

Le binaire du moteur IronPDF doit être à la fois écrit et exécuté depuis /tmp/. Les permissions par défaut sur /tmp/ dans certaines images de base n'incluent pas la permission d'exécution pour tous les utilisateurs. La commande chmod 777 garantit que l'utilisateur runtime de la fonction peut extraire et lancer le binaire.

Quand grpc-okhttp doit-il être utilisé à la place de grpc-netty-shaded ?

grpc-netty-shaded est recommandé pour la production car il fournit une implémentation HTTP/2 plus complète. grpc-okhttp est une alternative plus légère utile lorsqu'il est prioritaire de minimiser la taille de l'image Docker. Les deux transports fonctionnent avec IronPDF for Java sur Google Cloud Functions.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite
Prêt à commencer?
Version : 2026.5 just released
Still Scrolling Icon

Vous faites encore défiler ?

Vous voulez une preuve rapidement ?
exécuter un échantillon Regardez votre code HTML se transformer en PDF.