web-dev-qa-db-fra.com

Comment augmenter la taille maximale du package de déploiement AWS Lambda (requestityToolargeException)?

Je télécharge mes sources de fonctions Lambda de AWS CodeBuild. Mon Python script utilise NLTK afin qu'il a besoin de nombreuses données. Mon package .zip est trop gros et un RequestEntityTooLargeException se produit. Je veux savoir comment augmenter la taille de la taille de la Paquet de déploiement envoyé via la commande updatefunctionCodeCode.

J'utilise AWS CodeBuild Pour transformer la source d'un référentiel GitHub à AWS Lambda. Voici le fichier BuildSpec associé:

version: 0.2
phases:
 install:
   commands:
     - echo "install step"
     - apt-get update
     - apt-get install Zip -y
     - apt-get install python3-pip -y
     - pip install --upgrade pip
     - pip install --upgrade awscli
     # Define directories
     - export HOME_DIR=`pwd`
     - export NLTK_DATA=$HOME_DIR/nltk_data
 pre_build:
   commands:
     - echo "pre_build step"
     - cd $HOME_DIR
     - virtualenv venv
     - . venv/bin/activate
     # Install modules
     - pip install -U requests
     # NLTK download
     - pip install -U nltk
     - python -m nltk.downloader -d $NLTK_DATA wordnet stopwords punkt
     - pip freeze > requirements.txt
 build:
   commands:
     - echo 'build step'
     - cd $HOME_DIR
     - mv $VIRTUAL_ENV/lib/python3.6/site-packages/* .
     - Sudo Zip -r9 algo.Zip .
     - aws s3 cp --recursive --acl public-read ./ s3://hilightalgo/
     - aws lambda update-function-code --function-name arn:aws:lambda:eu-west-3:671560023774:function:LaunchHilight --Zip-file fileb://algo.Zip
     - aws lambda update-function-configuration --function-name arn:aws:lambda:eu-west-3:671560023774:function:LaunchHilight --environment 'Variables={NLTK_DATA=/var/task/nltk_data}'
 post_build:
   commands:
     - echo "post_build step"

Lorsque je lance le pipeline, j'ai RequestEntityTooLargeException car il y a trop de données dans mon package .zip. Voir les journaux de construction ci-dessous:

[Container] 2019/02/11 10:48:35 Running command aws lambda update-function-code --function-name arn:aws:lambda:eu-west-3:671560023774:function:LaunchHilight --Zip-file fileb://algo.Zip
 An error occurred (RequestEntityTooLargeException) when calling the UpdateFunctionCode operation: Request must be smaller than 69905067 bytes for the UpdateFunctionCode operation
 [Container] 2019/02/11 10:48:37 Command did not exit successfully aws lambda update-function-code --function-name arn:aws:lambda:eu-west-3:671560023774:function:LaunchHilight --Zip-file fileb://algo.Zip exit status 255
[Container] 2019/02/11 10:48:37 Phase complete: BUILD Success: false
[Container] 2019/02/11 10:48:37 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: aws lambda update-function-code --function-name arn:aws:lambda:eu-west-3:671560023774:function:LaunchHilight --Zip-file fileb://algo.Zip. Reason: exit status 255

Tout fonctionne correctement lorsque je réduit les données NLTK à télécharger (j'ai essayé uniquement avec les packages stopwords et wordnet.

Est-ce que quelqu'un a une idée de résoudre ce "problème de la taille de taille"?

18
Louis Singer

Vous pouvez essayer la solution de contournement utilisée dans le fichier génial Configuration requise sans serveur-Python Plugin.

La solution idéale consiste à utiliser des couches Lambda si elle résout le but. Si la dépendance totale est supérieure à 250 Mo, vous pouvez afficher des dépendances d'utilisation inférieures à partir de S3 Seau lors du temps d'exécution en utilisant le répertoire /TMP. Les dépendances zippées sont stockées dans S3 et Lambda peuvent récupérer les fichiers de S3 lors de l'initialisation. Décompressez la dépendance pacabue et ajoutez le chemin du chemin SYS.

Veuillez noter que les python dépendances doivent être construites sur Amazon Linux, qui est le système d'exploitation pour les conteneurs Lambda. J'ai utilisé une instance EC2 pour créer le package ZIP.

Vous vérifiez le code utilisé dans les exigences sans serveur-Python ICI

0
Surakshith