En avril dernier, j’ai écrit un billet sur la gestion de boto3 dans les paquets déployés. (Voir Minimiser la taille de ses lambdas en évitant d’avoir boto3 et ses stubs dans le paquet à déployer.) Cette approche fonctionne lorsque toutes les dépendances peuvent être dans la section développement.
Mais, qu’en est-il lorsque des dépendances sont requises en production? Par exemple, nous avons récemment eu à déployer un lambda qui dépend d’awswrangler. La technique suggérée dans le précédent billet ne fonctionnait donc pas. Ici, je vais couvrir une approche différente qui permet de supprimer boto3 du paquet à déployer dans le contexte cité en exemple. Elle est cependant moins flexible et se base sur une technologie spécifique: serverless.
L’approche est simple: Il faut supprimer les fichiers indésirables, les répertoires boto3 et botocore, avant de téléverser le paquet vers AWS.
Merci à l’écosystème riche de serverless, car un plugin nous permet d’effectuer cette tâche: serverless-scriptable-plugin. Ce plugin permet d’exécuter du code arbitraire à différentes étape du processus de déploiement.
Il suffit donc de l’installer (npm install serverless-scriptable-plugin
) puis de mettre à jour la configuration serverless. Voici un exemple.
plugins:
- serverless-scriptable-plugin
custom:
scriptHooks:
before:package:createDeploymentArtifacts:
- "rm -r .serverless/requirements/boto3 || echo ERR: UNABLE TO REMOVE boto3"
- "rm -r .serverless/requirements/botocore || echo ERR: UNABLE TO REMOVE botocore"