Migrer du service App Engine Images vers Cloud Run

ID de la région

Le REGION_ID est un code abrégé que Google attribue en fonction de la région que vous sélectionnez lors de la création de votre application. Le code ne correspond pas à un pays ou une province, même si certains ID de région peuvent ressembler aux codes de pays et de province couramment utilisés. Pour les applications créées après février 2020, REGION_ID.r est inclus dans les URL App Engine. Pour les applications existantes créées avant cette date, l'ID de région est facultatif dans l'URL.

En savoir plus sur les ID de région.

Pour moderniser le traitement des images dans vos applications App Engine existantes, vous pouvez déployer un service de transformation d'images conteneurisé sur Cloud Run et y acheminer vos appels au service Images App Engine.

Cette migration ne nécessite pas de réécrire en grande partie votre code de traitement d'images ni d'héberger votre application App Engine sur Cloud Run. Au lieu de cela, lorsque vous configurez votre application, le SDK des services App Engine intercepte vos appels au service Images App Engine et les achemine vers le service Cloud Run. Le service traite les images à l'aide d'un moteur Open Source Pillow via gRPC et renvoie les résultats à votre application App Engine. Cette configuration remplace le backend du service Images App Engine hérité par une solution moderne et cloud native.

Limites

  • Lorsque vous utilisez le service de traitement d'images personnalisé, vous ne pouvez pas générer d'URL de diffusion. App Engine génère une exception d'exécution lorsque vous appelez la méthode get_serving_url(). Cette restriction empêche de s'appuyer sur le backend hérité pour stocker et diffuser des images.

    Pour diffuser des images, nous vous recommandons de les diffuser directement à partir d'une URL Cloud Storage ou d'utiliser un bucket Cloud Storage soutenu par Cloud CDN, en fonction des exigences de votre application.

    Les URL existantes que vous avez créées à l'aide d'appels hérités à la méthode get_serving_url() continuent de diffuser des images.

  • Lorsque vous mettez à niveau la version du SDK des services App Engine, App Engine n'achemine pas automatiquement les appels App Engine vers le service Cloud Run. Votre application n'applique le nouveau comportement qu'après avoir configuré les variables d'environnement de migration APPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICE et APPENGINE_IMAGES_SERVICE_ENDPOINT.

Avant de commencer

  1. Assurez-vous d'avoir accès au code source App Engine.

  2. Activez l'API Cloud Run Admin et l'API Artifact Registry :

    Activer les API

Rôles requis

Vous pouvez choisir de créer un compte de service ou d'utiliser le même compte de service géré par l'utilisateur dans Cloud Run que celui que vous utilisez pour App Engine. Vous ou votre administrateur devez attribuer les rôles IAM suivants au compte déployeur et au compte de service Cloud Build.

Cliquez ici pour afficher les rôles requis pour le compte déployeur

Pour obtenir les autorisations nécessaires pour compiler et déployer à partir de la source, demandez à votre administrateur de vous accorder les rôles IAM suivants :

Cliquez ici pour afficher les rôles requis pour le compte de service Cloud Build

Cloud Build utilise automatiquement le compte de service Compute Engine par défaut comme compte de service Cloud Build par défaut pour compiler votre code source et votre ressource Cloud Run, sauf si vous remplacez ce comportement. Pour que Cloud Build puisse compiler vos sources, demandez à votre administrateur d'accorder le rôle Compilateur Cloud Run (roles/run.builder) au compte de service Compute Engine par défaut sur votre projet :

  gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
      --role=roles/run.builder
  

Remplacez PROJECT_NUMBER par votre Google Cloud numéro de projet et PROJECT_ID par votre Google Cloud ID de projet. Pour obtenir des instructions détaillées sur la recherche de votre ID et de votre numéro de projet, consultez Créer et gérer des projets.

L'attribution du rôle de compilateur Cloud Run au compte de service Compute Engine prend quelques minutes pour se propager.

Pour obtenir la liste des rôles et des autorisations IAM associés à Cloud Run, consultez les sections Rôles IAM Cloud Run et Autorisations IAM Cloud Run. Si votre service Cloud Run communique avec Google Cloud des API, telles que les bibliothèques clientes Cloud, consultez le guide de configuration de l'identité du service. Pour en savoir plus sur l'attribution de rôles, consultez les pages Autorisations de déploiement et Gérer les accès.

Processus de migration

Cette migration comprend les étapes suivantes :

  1. Déployez le service de transformation d'images sur Cloud Run pour obtenir l'URL de votre service.
  2. Configurez vos fichiers sources App Engine avec l' URL de votre service Cloud Run et les indicateurs de routage, puis déployez ou redéployez votre application App Engine.
  3. Testez votre application pour vérifier la fonctionnalité de traitement des images.

Déployer le service de transformation d'images sur Cloud Run

Pour déployer le service de transformation d'images et configurer son accès à Cloud Storage, procédez comme suit :

  1. Déployez le conteneur de service de transformation d'images prédéfini sur le service Cloud Run. Assurez-vous d'effectuer le déploiement avec l'authentification appliquée (--no-allow-unauthenticated). Le SDK des services App Engine gère l'authentification lors des appels à ce service :

    gcloud run deploy image-processing-service \
        --image=us-central1-docker.pkg.dev/gae-bundled-services-images/image-processing-service-staging/image-processing-service:public-image-d476f7ef9d1b \
        --no-allow-unauthenticated \
        --region=REGION
    

    Remplacez REGION par la région dans laquelle vous déployez le service Cloud Run. Nous vous recommandons de déployer le service dans la même région que votre service App Engine.

    Notez l'URL de service de votre service Cloud Run déployé, par exemple https://image-processing-service-xyz-uc.a.run.app.

  2. Attribuez le rôle Demandeur Cloud Run (roles/run.invoker) au compte de service App Engine par défaut. Cela permet à votre application App Engine d'autoriser et d'acheminer les appels vers le service Cloud Run privé :

    gcloud run services add-iam-policy-binding image-processing-service \
        --member="serviceAccount:PROJECT_ID@appspot.gserviceaccount.com" \
        --role="roles/run.invoker" \
        --region=REGION
    
  3. Attribuez le rôle Lecteur des objets de l'espace de stockage Cloud (roles/storage.objectViewer) au compte de service Compute Engine par défaut. Cela permet au service de transformation d'images de lire les images stockées dans Cloud Storage :

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
        --role="roles/storage.objectViewer"
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID du projet dans lequel vous déployez le service Cloud Run.
    • PROJECT_NUMBER : numéro du projet dans lequel vous déployez le service Cloud Run.

Configurer vos fichiers sources

Pour configurer votre application Python afin qu'elle utilise le service de transformation d'images sur Cloud Run, procédez comme suit :

  1. Ajoutez la dépendance suivante à votre fichier requirements.txt :

    appengine-python-standard>=3.0.0b0
    

    Vous pouvez également exécuter la commande suivante pour installer les dépendances localement :

    pip install --pre "appengine-python-standard>=3.0.0b0"
    
  2. Mettez à jour votre fichier app.yaml pour activer le proxy d'API et configurer les variables d'environnement requises :

    runtime: RUNTIME  # a supported python version
    
    # List the Images service
    app_engine_bundled_services:
    - images
    
    env_variables:
      # Enable the custom gRPC Images service
      APPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICE: "true"
    
      # The URL of the Cloud Run service you deployed
      APPENGINE_IMAGES_SERVICE_ENDPOINT: "RUN_SERVICE_URL"
    

    Remplacez les éléments suivants :

    • RUNTIME : version d'exécution Python compatible.
    • RUN_SERVICE_URL : URL de votre service Cloud Run déployé.
  3. Déployez votre application sur App Engine :

    gcloud app deploy
    

    Votre service App Engine est déployé sur https://PROJECT_ID.REGION_ID.r.appspot.com.

  4. Lancez votre navigateur et accédez à votre service Web en exécutant la commande suivante :

    gcloud app browse
    

Tester votre application

Pour vérifier que votre application utilise correctement le service de transformation d'images Cloud Run :

  1. Déclenchez la fonctionnalité de traitement d'images dans votre application.
  2. Consultez l'explorateur de journaux de votre application App Engine. Assurez-vous qu'aucune erreur n'est liée aux appels google.appengine.api.images.
  3. Consultez les journaux de votre Cloud Run image-processing-service pour vérifier que Cloud Run a reçu et traité les requêtes.

Étape suivante