Sources du projet ayant servi d'exemple pour l'article sur le blog technique du Groupe La Centrale https://tech.carboatmedia.fr/2020/11/02/akka-streams/.
Le projet consiste en 2 jobs
- le premier DynamoInserter permet de créer des documents dans une table DynamoDB
- le deuxième DynamoUpdater va scanner les documents d'une table DynamoDB et les mettre à jour en rajoutant un attribut "updatedAt" avec la date de mise à jour. Il est prévu pour être lancé plusieurs fois en gardant un état d'avancement à passer entre chaque exécution afin de ne pas être limité par le temps d'exécution maximum d'une fonction AWS Lambda qui est de 15 minutes.
- JDK (testé avec JDK8)
- sbt
- NodeJs
- Yarn
- Un compte AWS avec des credentials configurés
- Une instance Izanami
Le projet est fait pour être déployé dans des fonctions AWS Lambda mais dispose également d'un Main qui permet de tester un peu le fonctionnement en local (et qui pourrait tout fait être modifié pour fonctionner en CLI).
Les ressources AWS sont définies une stack AWS CDK qui permet de définir ses ressources AWS en Typescript (Infra As Code) et elles seront ensuite déployées par Cloudformation. La stack est définie ici.
Elle consiste en
- une table DynamoDB
- 3 lambdas
- Une Stepfunction pour la tâche d'Update qui permet de la découper en plusieurs segments s'executant en parallèle
yarn install
sbt assembly
yarn cdk deploy --parameters vpcId=$vpcId --parameters subnetId1=$subnetId1 --parameters subnetId2=$subnetId2 --parameters subnetId3=$subnetId3 --parameters izanamiHost=$izanamiHost --parameters izanamiClientId=$izanamiClientId --parameters izanamiClientSecret=$izanamiClientSecret
yarn cdk deploy
(pour les déploiements suivant, on a plus besoin de passer les paramètres)