Ce tutoriel explique comment utiliser Cloud Tasks dans une application App Engine pour déclencher une fonction Cloud Run et envoyer un e-mail planifié.
Comprendre le code
Cette section décrit le code de l'application et son fonctionnement.
Créer la tâche
La page d'index est diffusée à l'aide de gestionnaires dans app.yaml. Les variables nécessaires à la création de tâches sont transmises en tant que variables d'environnement.
Ce code crée le point de terminaison /send-email. Ce point de terminaison gère les envois de formulaires depuis la page d'index et transmet ces données au code de création de tâche.
Ce code crée la tâche et l'envoie à la file d'attente Cloud Tasks. Le code crée la tâche en effectuant ce qui suit :
- Spécifier le type de cible comme - HTTP Request.
- Spécifier la méthode - HTTP methodà utiliser et la valeur- URLde la cible.
- Définir l'en-tête - Content-Typesur- application/jsonpour que les applications en aval puissent analyser la charge utile structurée.
- Ajout d'une adresse e-mail de compte de service afin que Cloud Tasks puisse fournir des identifiants à la cible de la requête, ce qui nécessite une authentification. Le compte de service est créé séparément. 
- Vérifier que la date saisie par l'utilisateur est comprise dans la limite de 30 jours et l'ajouter à la requête en tant que champ - scheduleTime.
Création de l'e-mail
Ce code crée la fonction Cloud Run qui est la cible de la requête Cloud Tasks. Il utilise le corps de la requête pour créer un e-mail et l'envoyer via l'API SendGrid.
Préparer l'application
Configurer SendGrid
- Créer un compte SendGrid - Vous pouvez le faire manuellement via le site Web SendGrid.
- Vous pouvez également utiliser Google Cloud Launcher, qui vous permet de créer un compte et d'intégrer la facturation. Consultez la section Créer un compte SendGrid en utilisant Cloud Launcher.
 
- Créez une clé API SendGrid : - Connectez-vous à votre compte SendGrid. 
- Dans le panneau de navigation de gauche, ouvrez Paramètres et cliquez sur Clés API. 
- Cliquez sur Créer une clé API, puis sélectionnez l'accès restreint. Sous l'en-tête Mail Send (Envoi de courrier), sélectionnez Full Access (Accès complet). 
- Copiez la clé API lorsqu'elle est affichée (vous ne la verrez qu'une seule fois, assurez-vous de la coller quelque part pour pouvoir l'utiliser ultérieurement). 
 
Télécharger le code source
- Clonez le dépôt de l'exemple d'application sur votre machine locale : - git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
- Accédez au répertoire qui contient l'exemple de code : - cd cloud-tasks/
Déployer la fonction Cloud Run
- Accédez au répertoire - function/:- cd function/
- Déployez la fonction : - gcloud functions deploy sendEmail --runtime nodejs14 --trigger-http \ --no-allow-unauthenticated \ --set-env-vars SENDGRID_API_KEY=SENDGRID_API_KEY \ - Remplacez - SENDGRID_API_KEYpar votre clé API.- Cette commande utilise des options : - --trigger-httppour spécifier le type de déclencheur Cloud Run Functions.
- --no-allow-unauthenticatedpour spécifier que l'appel de la fonction nécessite une authentification.
- --set-env-varpour définir vos identifiants SendGrid
 
- Définissez le contrôle d'accès de la fonction pour autoriser uniquement les utilisateurs authentifiés. - Sélectionnez la fonction - sendEmaildans l'interface utilisateur de Cloud Run Functions.
- Si vous ne voyez pas les informations d'autorisation pour - sendEmail, cliquez sur AFFICHER LE PANNEAU D'INFORMATIONS dans l'angle supérieur droit.
- Cliquez sur le bouton Ajouter des comptes principaux. 
- Définissez le champ Nouveaux comptes principaux sur - allAuthenticatedUsers.
- Définissez le rôle. - Fonctions de 1re génération : définissez le rôle sur Cloud Function Invoker.
- Fonctions de deuxième génération : définissez le rôle sur Cloud Run Invoker.
 
- Fonctions de 1re génération : définissez le rôle sur 
- Cliquez sur ENREGISTRER. 
 
Créer une file d'attente Cloud Tasks
- Créez une file d'attente à l'aide de la commande - gcloudsuivante :- gcloud tasks queues create my-queue --location=LOCATION - Remplacez - LOCATIONpar votre emplacement préféré pour la file d'attente, par exemple- us-west2. Si vous ne spécifiez pas l'emplacement, la gcloud CLI choisit celui par défaut.
- Vérifiez qu'elle a bien été créée : - gcloud tasks queues describe my-queue --location=LOCATION - Remplacez - LOCATIONpar l'emplacement de la file d'attente.
Créer un compte de service
La requête Cloud Tasks doit fournir des identifiants dans l'en-tête Authorization pour que la fonction Cloud Run puisse authentifier la requête. Ce compte de service permet à Cloud Tasks de créer et d'ajouter un jeton OIDC à cette fin.
- Dans l'interface utilisateur Comptes de service, cliquez sur + CRÉER UN COMPTE DE SERVICE. 
- Ajoutez un nom de compte de service (nom à afficher convivial) et sélectionnez créer. 
- Définissez le rôle, puis cliquez sur Continuer. - Fonctions de 1re génération : définissez le rôle sur Cloud Function Invoker.
- Fonctions de deuxième génération : définissez le rôle sur Cloud Run Invoker.
 
- Fonctions de 1re génération : définissez le rôle sur 
- Sélectionnez OK. 
Déployer le point de terminaison et le créateur de tâches dans App Engine
- Accédez au répertoire - app/:- cd ../app/
- Mettez à jour les variables dans - app.yamlavec vos valeurs :- Pour trouver l'emplacement de la file d'attente, utilisez la commande suivante : - gcloud tasks queues describe my-queue --location=LOCATION - Remplacez - LOCATIONpar l'emplacement de la file d'attente.- Pour trouver l'URL de votre fonction, utilisez la commande suivante : - gcloud functions describe sendEmail 
- Déployez l'application dans l'environnement standard App Engine à l'aide de la commande suivante : - gcloud app deploy 
- Ouvrez l'application pour envoyer un courrier de validation par e-mail : - gcloud app browse