Общая библиотека лямбда-слоя aws в node_modules недоступна в функции - PullRequest
0 голосов
/ 19 декабря 2018

Я недавно изменил свои лямбда-функции, чтобы использовать новые функциональные возможности Lambda Layer aws для совместного использования всех папок node_modules.Я создал zip со следующей структурой:

nodejs/node_modules/<libraries, like 'async' and others..>
nodejs/package.json

Я также связал лямбда-функцию со слоем, и это успешно (проверено как в CLI, так и в веб-консоли), см. Вывод ниже ... ново всяком случае, всегда лямбда-функция завершается с ошибкой по требованию:

in lambda: require('async')

output: "errorMessage":"Cannot find module 'async'"

вывод вызова функции обновления:

aws lambda update-function-configuration --function-name MY_LAMBDA --layers arn:aws:lambda:us-west-2:MY_ID:layer:MY_LAYER:4
{
"Layers": [
{
"CodeSize": 21482560,
"Arn": "arn:aws:lambda:us-west-2:MY_ID:layer:MY_LAYER:4"
}
],
"FunctionName": "MY_LAMBDA",
"LastModified": "2018-12-18T23:44:34.062+0000",
"RevisionId": "f55a6ab7-7b0b-494a-840c-87fb8371a117",
"MemorySize": 128,
"Version": "$LATEST",
"Role": "arn:aws:iam::MY_ID:role/service-role/MY_ROLE",
"Timeout": 30,
"Runtime": "nodejs4.3",
"TracingConfig": {
"Mode": "PassThrough"
},
"CodeSha256": "hajYdqb+...=",
"Description": "",
"VpcConfig": { ... lot of stuff here .. },
"CodeSize": 429123,
"FunctionArn": "arn:aws:lambda:MY_ZONE:MY_ID:function:MY_LAMBDA",
"Handler": "MY_HANDLER"
}

примечания: 1. мой слой в версии 4. 2.Я установил слой для всех трех сред node.js для поддержки.3. Я проверил zip-архив, и он имеет все содержимое node_modules, как и ожидалось.

приветствуется любое предложение о том, что еще проверять!

1 Ответ

0 голосов
/ 19 декабря 2018

Вы можете правильно создать Слой и его версию, а также получить информацию о них без проблем.

Даже после того, как функция Lambda не может использовать библиотеки из Слоя, похоже, чтоЛямбда-функция не может получить доступ к слою, потому что у нее нет разрешения на это.

Вы можете подтвердить это, проверив, имеет ли роль, связанная с лямбда, какую-либо политику, связанную с ним, которая разрешает lambda:GetLayerVersion разрешение.

Если вам не нужно создавать новую политику со следующим JSON и некоторым значимым именем.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "lambda:GetLayerVersion",
            "Resource": "*"
        }
    ]
}

Теперь вам нужно добавить присоединить эту политику к роли arn:aws:iam::MY_ID:role/service-role/MY_ROLE, котораясвязанный с функцией Lambda.

Оба вышеуказанных действия могут быть выполнены из Консоли AWS.

Как только это будет сделано, функция Lambda получит разрешение на получение версии уровня и сможетполучить доступ к библиотекам со слоя.

Я надеюсь, что это поможет вам решить вашу проблему.Не стесняйтесь спрашивать, если вам нужны какие-либо разъяснения.

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