1
votes

Interroger l'API REST externe sans serveur depuis AWS et stocker les résultats dans S3?

Étant donné une API REST, en dehors de mon environnement AWS, qui peut être interrogée pour les données json :

https://someExternalApi.com/?date=20190814

Comment puis-je configurer une tâche sans serveur dans AWS pour atteindre le point de terminaison externe régulièrement et stocker les résultats dans S3?

Je sais que je peux instancier une instance EC2 et simplement configurer un cron. Mais je recherche une solution sans serveur, qui semble être plus idiomatique.

Merci d’avance pour votre considération et votre réponse.


0 commentaires

3 Réponses :


1
votes

Je vais sauter les détails de l'implémentation, car cela dépasse largement le cadre de votre question. En tant que tel, je vais supposer que votre fonction est déjà écrite et cible nodeJS.

AWS peut le faire seul, mais pour simplifier les choses, je vous recommande d'utiliser Serverless . Nous allons supposer que vous l'utilisez.

En supposant que vous soyez entièrement nouveau dans le domaine du sans serveur, la première chose à faire est de créer un gestionnaire:

functions:
  crawl:
    handler: handler.crawlSomeExternalApi
  events:
  - schedule: rate(3 hours)

Ceci crée un service basé sur le modèle aws-nodejs sur le chemin fourni. Vous y trouverez serverless.yml (la configuration de votre fonction) et handler.js (le code lui-même).

En supposant votre fonction est exporté en tant que crawlSomeExternalApi sur le handler export ( module.exports.crawlSomeExternalApi = () => {...} ), le functions de votre fichier sans serveur ressemblerait à ceci si vous vouliez l'invoquer toutes les 3 heures:

serverless create --template "aws-nodejs" --path my-service

C'est tout! Il ne vous reste plus qu'à le déployer via serverless deploy -v


Sous le capot, cela crée une entrée de planification CloudWatch sur votre fonction. Un exemple peut être trouvé sur la documentation


0 commentaires

3
votes

Oui, vous pouvez absolument le faire, et probablement de plusieurs manières! Les pièces que j'utiliserais seraient:

  1. Événement CloudWatch utilisant une planification de type cron, qui se déclenche ensuite ...
  2. Une fonction lambda (avec les autorisations IAM appropriées) qui appelle l'API à l'aide, par exemple, de requêtes python ou d'une bibliothèque http équivalente, puis utilise le kit AWS SDK pour écrire les résultats dans un compartiment S3 de votre choix:
  3. Un compartiment S3 prêt à recevoir!

Cela devrait être tout ce dont vous avez besoin pour réaliser ce que vous voulez.


0 commentaires

1
votes

La première chose dont vous avez besoin est une fonction Lambda . Implémentez votre logique, pour accéder à l'API et écrire des données dans S3 ou autre, dans la fonction Lambda. Ensuite, vous avez besoin d'un calendrier pour déclencher périodiquement votre fonction lambda. L'expression de planification peut être utilisée pour déclencher un événement périodiquement soit en utilisant une expression cron ou une expression de taux. La fonction lambda que vous avez créée précédemment doit être configurée comme cible pour cette règle CloudWatch.

Le flux résultant sera, CloudWatch appelle la fonction lambda chaque fois qu'il y a un déclencheur (en fonction de votre règle CloudWatch). Lambda exécute ensuite votre logique.


0 commentaires