
Partager:
Adam est un développeur et un consultant qui aime l'ultra-course, les blogs, et qui aide les autres à apprivoiser la technologie pour accomplir des choses étonnantes avec un désir insatiable de mentorat et d'aide.
Déployer une fonction AWS Lambda pour les rappels vocaux de Vonage avec PHP
Le déploiement d'une application complète et accessible par le web sur AWS Lambda présente un ensemble unique d'exigences et d'obstacles. Parmi ceux-ci figurent les paramètres d'exécution et de permissions. Dans ce billet, je m'appuierai sur quelques billets précédents, en les rassemblant sous la forme d'un exemple pratique.
Ce billet utilise un exemple d'application de rappel provenant de "AWS Transcribe avec Nexmo Voice en utilisant PHP". Il s'appuie également sur "AWS Lambda avec PHP en utilisant Bref et Serverless Framework". J'applique également le modèle de permissions présenté dans "Comment les permissions fonctionnent dans AWS Lambda" pour AWS S3 et Amazon Transcribe. Ensemble, ces éléments vous permettent de créer votre propre AWS Lambda fonction, créant ainsi un microservice de transcription à utiliser dans vos Applications.
Note : Vous n'aurez pas besoin de lire les trois articles mentionnés ci-dessus pour suivre celui-ci. Je couvre en détail tout ce que vous devez savoir ci-dessous.
Conditions préalables
Dans cet exemple, les éléments suivants sont nécessaires :
PHP installé localement (version 7.3 de préférence)
Un clone local du fichier nexmo-community/voice-aws-speechtotext-php sur Github
Cadre sans serveur installé globalement. (plus d'informations à ce sujet ultérieurement)
Vonage API Account
To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.
This tutorial also uses a virtual phone number. To purchase one, go to Numbers > Buy Numbers and search for one that meets your needs.
Configuration d'AWS
Vous aurez besoin d'un Account AWS, ainsi que de informations d'identification IAM associés à un utilisateur disposant de privilèges suffisants. Cette autorisation garantit que Serverless peut créer la fonction Lambda et attribuer des autorisations selon les besoins.
Créer un S3 Bucket
Créez un Bucket S3 pour stocker les fichiers MP3 d'enregistrement vocal récupérés auprès de Vonage. Amazon Transcribe peut alors facilement accéder aux fichiers pour une transcription ultérieure.
Après l'avoir créé, veillez à cocher la case située à côté du nom du seau. Un panneau s'ouvre à droite, vous pouvez cliquer sur le bouton "Copy Bucket ARN" et l'enregistrer pour une utilisation ultérieure.
Création d'un utilisateur IAM
Sélectionnez la console de gestion IAM dans le panneau Services :
Select IAM Management Console
Dans la console de gestion IAM, ajoutez un nouvel utilisateur IAM en cliquant sur le bouton bleu Ajouter un utilisateur :
Add a new IAM user
Vous trouverez ci-dessous un extrait JSON permettant d'attribuer les autorisations nécessaires au nouvel utilisateur.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
} Cadre sans serveur
Les Bref s'appuie sur le Serverless Framework qui est une "solution complète pour construire et exploiter des applications sans serveur". Ainsi, notre première étape est d'installer ce framework sur le système de développement que vous utilisez. Je recommande de l'installer globalement, pour permettre une utilisation depuis n'importe où via CLI.
Références AWS
Une fois Serverless installé, assurez-vous que vous avez également configuré les identifiants AWS ci-dessus en tant qu'administrateur, pour que Serverless puisse interagir avec les différents services AWS. Vous pouvez en savoir plus à ce sujet sur serverless.com et bref.sh nous n'entrerons donc pas dans les détails ici.
Préparation de la demande
Ensuite, nous préparons l'application en utilisant Composer pour récupérer les dépendances. Une petite modification est nécessaire dans le code pour fonctionner correctement avec les URL Lambda.
Compositeur
La préparation de l'application nécessite quelques étapes avant de faire l'installation de Composer. Nous avons besoin de Bref pour exécuter les fonctionnalités Serverless. Tapez ce qui suit dans votre terminal après avoir navigué vers le répertoire du projet contenant le code.
La première commande installe les dépendances de l'application. La seconde commande ajoute Bref ainsi que les dépendances nécessaires. Vous pouvez également éditer le fichier composer.json pour qu'il nécessite Bref et ne lancer que la commande install et n'exécuter que la commande
Bref Init
Typiquement, pour une nouvelle application, vous commanderiez à Bref de initet de créer serverless.yml et index.php. Cependant, dans ce cas, vous devriez simplement créer un fichier nommé serverless.yml dans le répertoire racine, comme suit :
service: app
provider:
name: aws
region: us-east-1
runtime: provided
iamRoleStatements:
- Effect: Allow
Action:
- s3:PutObject
- s3:GetObject
- s3:DeleteObject
Resource: 'arn:aws:s3:::{{bucket-name}}/*'
- Effect: Allow
Action: transcribe:*
Resource: '*'
plugins:
- ./vendor/bref/bref
functions:
api:
handler: index.php
description: ''
timeout: 28 # in seconds (API Gateway has a timeout of 29 seconds)
layers:
- ${bref:layer.php-73-fpm}
events:
- http: 'ANY /'
- http: 'ANY /{proxy+}'
# Exclude files from deployment
package:
exclude:
- 'node_modules/**'
- 'tests/**'Note : Vous devez mettre à jour la région AWS et remplacer {{bucket-name}} pour répondre à vos besoins.
Remarquez également que iamRoleStatements définit les autorisations pour que la Lambda utilise AWS S3 ainsi qu'Amazon Transcribe. Voir l'article "Comment les permissions fonctionnent dans AWS Lambda"mentionné ci-dessus, pour plus de détails.
Variables d'environnement
Dans le cadre de la préparation, renommez le fichier .env.default pour qu'il devienne .envet mettez-le à jour si nécessaire pour qu'il corresponde aux informations de vos comptes AWS et Vonage. Bien que vous puissiez ignorer AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEYcar ils sont automatiquement ajoutés à l'environnement par Lambda.
Vous ne pourrez pas non plus remplir les champs VONAGE_APPLICATION_PRIVATE_KEY_PATH et VONAGE_APPLICATION_ID qu'APRÈS avoir déployé sur Lambda, ce qui nécessite de déployer sur Lambda deux fois. La première fois pour vous fournir les URL nécessaires à la création de l'Application Vonage. Ensuite, le deuxième déploiement contient un fichier .env mis à jour avec les valeurs de Vonage. Nous y reviendrons plus tard.
URL des événements
En raison de la différence de traitement de l'URI par Lambda, vous devrez également modifier le fichier index.php dans l'application. Plus précisément, vous devrez modifier les lignes 33 et 47 du fichier eventUrl aux lignes 33 et 47. Le résultat final ressemblera à ce qui suit, respectivement :
// Line 33
'https://'.$uri->getHost().'/dev/webhooks/fetch'
// Line 47
'https://'.$uri->getHost().'/dev/webhooks/transcribe'
La mise à jour est due au fait que le $request ne s'affiche pas avec httpset Lambda inclut également l'environnement dans les URL de la passerelle API.
Déploiement
Will toutes les étapes ci-dessus complétées, vous êtes maintenant prêt à déployer l'application à Lambda en utilisant Serverless. Dans votre terminal, lancez la commande suivante :
Après le déploiement, vous recevez l'URL nécessaire pour accéder à l'application via la passerelle API. Notez l'URL pour l'étape suivante.
IMPORTANT : L'exemple d'application, tel quel, ne comporte aucune authentification ou vérification. Toute personne ayant accès à l'URL fournie après le déploiement peut y accéder. Cela pourrait entraîner des frais inattendus sur vos comptes. Par conséquent, veuillez sécuriser l'application si vous avez l'intention de la laisser active.
Configuration de Vonage
Malheureusement, dans le cas du déploiement d'applications AWS Lambda, vous n'avez connu l'URL qu'après le déploiement. Cependant, vous devez quand même créer l'Application chez Vonage pour obtenir l'autorisation d'accès à l'application. VONAGE_APPLICATION_PRIVATE_KEY_PATH et VONAGE_APPLICATION_ID pour que l'application fonctionne.
À l'aide du CLI de Vonage, installé comme prérequis, entrez la commande suivante :
A titre d'exemple, la commande peut ressembler à ceci :
La réponse à la commande fournit le Application ID et le Private Keyà utiliser dans les étapes suivantes.
Mise à jour de la clé privée
Renommer le fichier private.key.default en private.key et enregistrez le Private Key dans le fichier.
Mise à jour du fichier .env
Mettre à jour le fichier .env avec les valeurs de VONAGE_APPLICATION_PRIVATE_KEY_PATH et VONAGE_APPLICATION_ID. Le fichier ressemblera à ceci :
Numbers Association
La dernière étape de la préparation de Vonage consiste à associer le numéro de Vonage loué à l'application nouvellement créée. Pour ce faire, utilisez la commande suivante :
Veillez à mettre à jour les variables ci-dessus avec votre numéro Vonage et le numéro de téléphone que vous avez reçu lors de la création de l'application. app_id donnée lors de la création de l'Applications. Veillez à faire précéder le code du pays afin d'éviter tout échec. Voici un exemple :
Plus de détails
En créant l'application Vonage et en y associant le numéro, vous demandez à Vonage d'effectuer des rappels lorsque des événements se produisent, et vous voulez que ces rappels pointent vers l'application nouvellement créée.
L'URL de l'événement est utilisée lorsqu'un événement modifie le statut d'un appel, tandis que l'URL de la réponse est demandée pour tout appel entrant afin de récupérer un objet NCCO (Nexmo Call Control Object).Objet de contrôle d'appel Nexmo).
Nous avons maintenant terminé l'installation de Vonage. Il est temps de redéployer vers Lambda avec la commande suivante :
Après quelques minutes, l'application mise à jour sera redéployée sur Lambda. Bien que le contenu de l'application aura changé, l'URL reste constante.
Essais
Il est maintenant temps de faire un appel test à votre numéro Vonage. Après l'appel, la voix automatisée devrait dire : "Veuillez laisser un message après la tonalité, puis appuyez sur #". à moins que vous n'ayez modifié ce message dans index.php. Ensuite, après avoir laissé un court message vocal et appuyé sur #la voix automatisée doit dire : "Merci pour votre message. Au revoir."
Pour confirmer que tout s'est déroulé comme prévu, vous devez pouvoir voir le fichier MP3 dans le panier S3 que vous avez spécifié. Une tâche de transcription doit également être en cours d'exécution sur Amazon Transcribe. Tout cela est accessible via la console AWS.
Félicitations ! Vous avez construit votre première Lambda !
Prochaines étapes
Il y a plusieurs étapes possibles, en fonction de vos besoins. Une solution possible peut être de créer un événement AWS Cloudwatch pour être alerté lorsqu'un travail Transcribe est "Terminé". L'événement pourrait appeler une autre fonction Lambda pour envoyer la transcription par email, ou ajouter la transcription à une base de données. En fin de compte, vous avez maintenant une version texte du message vocal laissé par un appelant. Si vous avez des questions ou si vous rencontrez des problèmes, vous pouvez contacter @VonageDev sur Twitter ou vous renseigner auprès de la Communauté des développeurs de Vonage l'équipe Slack.
