Chez Ynpact, nous cherchons sans cesse des solutions innovantes pour simplifier et optimiser le développement cloud sur AWS. Dans cette optique, nous pratiquons une culture DevOps, en utilisant largement les outils d’automatisation et l’infrastructure as code (IaC). En tant qu’utilisateurs expérimentés d’Open Tofu (Terraform) et du framework Serverless, nous avons constaté une lacune : l’absence d’itérateurs dans le framework Serverless, contrairement à Open Tofu.
Pour pallier cette insuffisance, nous avons développé un nouveau plugin pour le framework Serverless, introduisant deux opérateurs puissants et faciles à utiliser : « repeat » et « foreach ». Inspirés des opérateurs « count » et « foreach » de Terraform, ces outils permettent de répéter et d’itérer des blocs YAML de manière dynamique et efficace.
Un plugin pour booster votre productivité
Notre plugin @ynpact/serverless-plugin-foreach permet d’intégrer deux nouveaux opérateurs dans vos templates serverless : « repeat » et « foreach ». Ces opérateurs vous offrent la flexibilité nécessaire pour gérer des ressources répétitives sans complexité, améliorant ainsi la lisibilité, la cohérence et la maintenance de vos configurations.
L’opérateur « repeat »
L’opérateur « repeat » vous permet de répéter un bloc YAML un certain nombre de fois. Vous pouvez utiliser la variable {{i}} à l’intérieur de ce bloc, qui sera remplacée par l’index de répétition.
Exemple :
plugins:
- '@ynpact/serverless-plugin-foreach'
custom:
template:
bucket{{i}}:
Type: AWS::S3::Bucket
Properties:
BucketName: bucket_{{i}}
resources:
- ${repeat(${self:custom.template}, 3)}
Résultat généré :
Resources:
bucket0:
Type: AWS::S3::Bucket
Properties:
BucketName: bucket_0
bucket1:
Type: AWS::S3::Bucket
Properties:
BucketName: bucket_1
bucket2:
Type: AWS::S3::Bucket
Properties:
BucketName: bucket_2
Vous pouvez également personnaliser la valeur initiale de l’index et ajouter un padding aux indices.
L’opérateur « foreach »
L’opérateur « foreach » permet de répéter un bloc YAML pour chaque élément d’une liste de valeurs. À l’intérieur de ce bloc, vous pouvez utiliser {{i}} pour l’index et {{i.<key>}} pour les valeurs spécifiques des éléments de la liste.
Exemple :
plugins:
- '@ynpact/serverless-plugin-foreach'
custom:
template:
bucket{{i}}:
Type: AWS::S3::Bucket
Properties:
BucketName: "{{i.name}}"
PublicAccessBlockConfiguration:
BlockPublicAcls: "{{i.blockPublicAcls}}"
bucketParams:
- name: my-public-bucket
blockPublicAcls: false
- name: my-private-bucket
blockPublicAcls: true
resources:
- ${foreach(${self:custom.template}, ${self:custom.bucketParams})}
Résultat généré :
Resources:
bucket0:
Type: AWS::S3::Bucket
Properties:
BucketName: my-public-bucket
PublicAccessBlockConfiguration:
BlockPublicAcls: false
bucket1:
Type: AWS::S3::Bucket
Properties:
BucketName: my-private-bucket
PublicAccessBlockConfiguration:
BlockPublicAcls: true
Installation et utilisation
L’installation de notre plugin est simple et rapide :
npm install @ynpact/serverless-plugin-foreach --save-dev
Ensuite, ajoutez-le à votre fichier serverless.yml :
plugins:
- '@ynpact/serverless-plugin-foreach'
Et utilisez les opérateurs « repeat » et « foreach » selon vos besoins.
Tips: vous pouvez également utiliser les 2 opérateurs conjointement avec l’opérateur “file” pour externaliser vos template et configuration dans des fichiers séparé de la manière suivante :
plugins:
- '@ynpact/serverless-plugin-foreach'
resources:
- ${foreach( ${file(template/bucketTemplate.yml.tpl)}, ${file(conf/${opt:stage}.yml):buketsParams} )}
Consultez la documentation complete sur le repository Github ou npm du plugin
Pourquoi choisir Ynpact ?
Chez Ynpact, nous mettons un point d’honneur à offrir des solutions qui facilitent le quotidien des développeurs cloud. Notre expertise sur AWS nous permet de comprendre les défis auxquels vous faites face et de développer des outils adaptés pour les surmonter. Le plugin « Serverless foreach » en est une parfaite illustration : simple à utiliser, puissant et flexible, il vous aide à automatiser et à optimiser vos déploiements Serverless.
Nous vous invitons à tester notre plugin et à nous faire part de vos retours. Pour toute question ou suggestion, n’hésitez pas à nous contacter. Nous sommes également ouverts aux contributions via des pull requests sur notre dépôt GitHub.
Ensemble, simplifions le cloud.
L’équipe Ynpact