Не удается импортировать модуль `yaml` из лямбда-слоя AWS - PullRequest
2 голосов
/ 31 мая 2019

У меня очень простая лямбда-функция Python3.6, единственная сложность в которой я хочу включить в нее pyyaml.index.py выглядит так -

import yaml

def handler(event, context):
    return event

Все работает нормально, если я связываю pyyaml в моей развертываемой Lambda, вот так -

(aws_layer_demo) justin@justin-XPS-13-9360:~/work/aws_demos/aws_layer_demo$ jar -tvf  tmp/layer-demo-dev/2019-05-31-06-27-41.zip 
    59 Fri May 31 06:27:13 BST 2019 index.py
     0 Fri May 31 06:19:32 BST 2019 __init__.py
  4881 Fri May 31 06:15:37 BST 2019 yaml/composer.py
 25554 Fri May 31 06:15:37 BST 2019 yaml/constructor.py
  3294 Fri May 31 06:15:37 BST 2019 yaml/cyaml.py
                                    {... etc ...}

Я могу пропинговать функцию Lambda и получитьответ, без проблем.

Теперь я хочу протестировать, включая pyyaml внутри слоя.Итак, теперь у меня есть две развертываемые программы, одна для приложения -

(aws_layer_demo) justin@justin-XPS-13-9360:~/work/aws_demos/aws_layer_demo$ jar -tvf  tmp/layer-demo-dev/2019-05-31-06-43-42.zip 
    59 Fri May 31 06:27:13 BST 2019 index.py
     0 Fri May 31 06:19:32 BST 2019 __init__.py

и одна для слоя -

(aws_layer_demo) justin@justin-XPS-13-9360:~/work/aws_demos/aws_layer_demo$ jar -tvf tmp/layer-demo-layer-dev/2019-05-31-06-43-42.zip 
     0 Fri May 31 06:43:42 BST 2019 __init__.py
  4881 Fri May 31 06:15:37 BST 2019 yaml/composer.py
 25554 Fri May 31 06:15:37 BST 2019 yaml/constructor.py
  3294 Fri May 31 06:15:37 BST 2019 yaml/cyaml.py
                                    {... etc ...}

Я развернул обе, используя стек Cloudformation (через S3), и онпохоже, что и функция, и слой были развернуты правильно -

(aws_layer_demo) justin@justin-XPS-13-9360:~/work/aws_demos/aws_layer_demo$ ./scripts/show_function_config.sh dev
------------------------------------------------------------------------------------------------
|                                   GetFunctionConfiguration                                   |
+--------------+-------------------------------------------------------------------------------+
|  CodeSha256  |  MImn7X/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=                                 |
|  CodeSize    |  372                                                                          |
|  Description |                                                                               |
|  FunctionArn |  arn:aws:lambda:eu-west-1:XXXXXXXXXXXX:function:layer-demo-dev                |
|  FunctionName|  layer-demo-dev                                                               |
|  Handler     |  index.handler                                                                |
|  LastModified|  2019-05-31T05:44:14.089+0000                                                 |
|  MemorySize  |  512                                                                          |
|  RevisionId  |  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                                         |
|  Role        |  arn:aws:iam::XXXXXXXXXXXX:role/layer-demo-dev-AppFunctionRole-XXXXXXXXXXXX   |
|  Runtime     |  python3.6                                                                    |
|  Timeout     |  5                                                                            |
|  Version     |  $LATEST                                                                      |
+--------------+-------------------------------------------------------------------------------+
||                                           Layers                                           ||
|+-------------+------------------------------------------------------------------------------+|
||  Arn        |  arn:aws:lambda:eu-west-1:XXXXXXXXXXXX:layer:layer-demo-dev:2                ||
||  CodeSize   |  41184                                                                       ||
|+-------------+------------------------------------------------------------------------------+|
||                                        TracingConfig                                       ||
|+-------------------------------+------------------------------------------------------------+|
||  Mode                         |  PassThrough                                               ||
|+-------------------------------+------------------------------------------------------------+|
||                                          VpcConfig                                         ||
|+---------------------------------------------------------------+----------------------------+|
||  VpcId                                                        |                            ||
|+---------------------------------------------------------------+----------------------------+|

В частности, обратите внимание на "Layers" в приведенном выше примере и тот факт, что CodeSize> 0 (т.е. я случайно не развернул нулевой размерzipfile)

Но когда я пингую свою недавно слоистую функцию Lambda, я получаю -

Unable to import module 'index'

И если я углублюсь немного глубже в журналы Cloudwatch, я получаю -

Unable to import module 'index': No module named 'yaml'

Итак.Такое ощущение, что я, вероятно, каким-то образом неправильно структурировал свой пакет слоев (с точки зрения структуры каталогов), так что Lambda не видит yaml на внутреннем AWS PYTHONPATH.Или что-то.Кто-нибудь может посоветовать мне, где я могу пойти не так?

Большое спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...