[PYTHON] Créez une reconnaissance faciale sans serveur avec Terraform (Amazon Rekognition)

Bonjour, je suis ingénieurs SRE, avez-vous @hayaosato. Auparavant, j'avais créé une application d'analyse de visage vidéo sans serveur à l'aide d'Amazon Rekognition (ci-après, reconnaissance). L'article à ce moment-là est ici Cette fois, en définissant l'infrastructure de l'application avec Terraform, nous essayons d'en faire une application sans serveur et entièrement codée à la fois. Le code est ici

application

Quel type de fonction sera mis en œuvre lors d'un examen de la dernière fois? Analysez la vidéo donnée dans S3 avec face_detection de reconnaissance. Après cela, dès que l'analyse est terminée, le JSON du résultat de l'analyse sera notifié par Slack.

Infrastructure

À partir de là, le sujet principal est de créer une application sans serveur avec Terraform à la fois. La configuration du système est la suivante. 顔面みっけ君システム.jpg Ici, le système est grossièrement divisé en deux, avant et après la reconnaissance, mais puisqu'il est nécessaire d'avoir SNS etc. au moment d'appeler l'analyse de reconnaissance. Je vais vous expliquer tout de suite.

Constitution

Système IAM

Dans cette configuration, IAM pour Lambda à exécuter et IAM pour Rekognition pour envoyer un message à SNS sont requis. Le rôle IAM pour la reconnaissance est également créé comme ceci. Un rôle IAM tel que l'appel de Rekognition à Lambda lui-même est également créé comme ceci Je vais. Vous devez également définir une politique de relance de livraison (HTTP / S) dans votre SNS, donc [comme ceci](https://github.com/hayaosato/advent-calendar-2019/blob/master/ face_detection / terraform / main.tf # L20-L36) Je l'ai fait. Le système IAM a beaucoup de mal à régler les politiques, il est donc différent de le gérer ou non, mais en pensant que je veux le gérer si possible, (je suppose)

Fonction Lambda

Lambda lui-même doit créer des ressources d'accompagnement, ainsi que le groupe CloudWatch Log comme celui-ci .tf # L45-L48) Faites-le.

Dans le cas de Lambda, vous pouvez utiliser le fournisseur d'archives ʻarchive_filepour compresser le code source et le télécharger tel quel. En faisant cela, vous pouvez mettre à jour le code source avecterraform apply` sans le recréer en incorporant la mise à jour du code source dans Terraform. La fonction Lambda a été créée comme ceci, et get_face_detection est presque Vous pouvez le créer de la même manière.

Système de déclenchement

Les ressources qui déclenchent la fonction Lambda cette fois sont S3 et SNS. S3 est comme ça, le sujet SNS est [comme ça](https://github.com/hayaosato/advent-calendar-2019/blob/master/face_detection/terraform/main.tf#L143- L152) Faites chacun. Cependant, la fonction Lambda ne démarre pas simplement en créant chaque ressource et le paramètre de déclenchement (ʻaws_lambda_permission`) du côté Lambda est requis. Le déclencheur S3 est comme ça, et le déclencheur SNS est [comme ça] À](https://github.com/hayaosato/advent-calendar-2019/blob/master/face_detection/terraform/main.tf#L135-L141) Créer. J'ai écrit un article sur la coopération entre SNS et Lambda plus tôt ici, alors jetez un œil.

résultat

C'est tout. Lancer l'analyse スクリーンショット 2019-12-07 23.44.01.png Analyse terminée スクリーンショット 2019-12-07 23.44.11.png Ensuite, le fichier JSON a été téléchargé sur Slack.

finalement

Cette fois, tout en créant une architecture sans serveur à l'aide des services AWS, nous avons également codé l'infrastructure avec Terraform. Le sans serveur est facile et la gestion du code facilite la vérification des modifications, n'est-ce pas?

référence

Recommended Posts

Créez une reconnaissance faciale sans serveur avec Terraform (Amazon Rekognition)
API de reconnaissance faciale sans serveur conçue avec Python
[Linux] Construction de l'environnement Docker avec Amazon Linux 2
Construisez AWS EC2 et RDS avec Terraform Terraform 3 minutes de cuisson