簡體   English   中英

使用 AWS CDK python 部署 node.js lambda

[英]Deploying node.js lambda with AWS CDK python

我嘗試使用 CDK python 部署 node.js lambda function。不幸的是,我找不到這個組合的任何教程。 這是我所做的。

mkdir hello
cd hello
cdk init app --language python
virtualenv -p python3.7 env
source env/bin/activate
pip install -r requirements.txt
(edit ./app.py and ./code/hello.js)
cdk diff

然后我收到以下錯誤。 我怎么解決這個問題?

  File "app.py", line 24, in <module>
    HelloStack(app, "HelloStack")
  File "/home/bitnami/hello/env/lib/python3.7/site-packages/jsii/_runtime.py", line 86, in __call__
    inst = super().__call__(*args, **kwargs)
  File "app.py", line 20, in __init__
    entry="./code/hello.js"
  File "/home/bitnami/hello/env/lib/python3.7/site-packages/jsii/_runtime.py", line 86, in __call__
    inst = super().__call__(*args, **kwargs)
  File "/home/bitnami/hello/env/lib/python3.7/site-packages/aws_cdk/aws_lambda_nodejs/__init__.py", line 1307, in __init__
    jsii.create(self.__class__, self, [scope, id, props])
  File "/home/bitnami/hello/env/lib/python3.7/site-packages/jsii/_kernel/__init__.py", line 297, in create
    for iface in getattr(klass, "__jsii_ifaces__", [])
  File "/home/bitnami/hello/env/lib/python3.7/site-packages/jsii/_kernel/providers/process.py", line 344, in create
    return self._process.send(request, CreateResponse)
  File "/home/bitnami/hello/env/lib/python3.7/site-packages/jsii/_kernel/providers/process.py", line 326, in send
    raise JSIIError(resp.error) from JavaScriptError(resp.stack)
jsii.errors.JSIIError: Cannot find a package lock file (`pnpm-lock.yaml`, `yarn.lock` or `package-lock.json`). Please specify it with `depsLockFilePath`.

這是文件。

應用程序.py

#!/usr/bin/env python3
import os

import aws_cdk as cdk

from aws_cdk import (
    # Duration,
    Stack,
    aws_lambda_nodejs as lamjs,
)
from constructs import Construct

class HelloStack(Stack):

    def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)

        helloFn = lamjs.NodejsFunction(
          self,"hello",
          entry="./code/hello.js"
        );

app = cdk.App()
HelloStack(app, "HelloStack")
app.synth()

代碼/hello.js

exports.handler = async(event, context) => {
    return 1;
};

這是我的環境。

cdk --version
2.24.1 (build 585f9ca)
npm --version
6.14.15

--- 2022 年 5 月 25 日更新 ---

我在 hello 目錄中添加了以下 package.json 並運行了“npm install”。

package.json

{
  "name": "hello",
  "version": "0.1.0",
  "bin": {
    "hello": "code/hello.js"
  },
  "scripts": {
    "build": "tsc",
    "watch": "tsc -w",
    "test": "jest",
    "cdk": "cdk"
  },
  "devDependencies": {
    "@types/jest": "^27.5.0",
    "@types/node": "10.17.27",
    "@types/prettier": "2.6.0",
    "jest": "^27.5.1",
    "ts-jest": "^27.1.4",
    "aws-cdk": "2.24.1",
    "ts-node": "^10.7.0",
    "typescript": "~3.9.7"
  },
  "dependencies": {
    "aws-cdk-lib": "2.24.1",
    "constructs": "^10.0.0",
    "source-map-support": "^0.5.21"
  }
}

這使得 package-lock.json 然后我運行“cdk diff”。 然后我收到以下錯誤。

jsii.errors.JavaScriptError:
  Error: spawnSync docker ENOMEM
      at Object.spawnSync (internal/child_process.js:1077:20)
      at Object.spawnSync (child_process.js:776:24)
      at dockerExec (/tmp/jsii-kernel-LhoMqm/node_modules/aws-cdk-lib/core/lib/bundling.js:1:4968)
      at Function.fromBuild (/tmp/jsii-kernel-LhoMqm/node_modules/aws-cdk-lib/core/lib/bundling.js:1:3553)
      at new Bundling (/tmp/jsii-kernel-LhoMqm/node_modules/aws-cdk-lib/aws-lambda-nodejs/lib/bundling.js:1:2057)
      at Function.bundle (/tmp/jsii-kernel-LhoMqm/node_modules/aws-cdk-lib/aws-lambda-nodejs/lib/bundling.js:1:2947)
      at new NodejsFunction (/tmp/jsii-kernel-LhoMqm/node_modules/aws-cdk-lib/aws-lambda-nodejs/lib/function.js:1:1361)
      at /tmp/tmp5utwlvy5/lib/program.js:8420:58
      at Kernel._wrapSandboxCode (/tmp/tmp5utwlvy5/lib/program.js:8848:24)
      at Kernel._create (/tmp/tmp5utwlvy5/lib/program.js:8420:34)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "app.py", line 24, in <module>
    HelloStack(app, "HelloStack")
  File "/home/bitnami/hello/env/lib/python3.7/site-packages/jsii/_runtime.py", line 86, in __call__
    inst = super().__call__(*args, **kwargs)
  File "app.py", line 20, in __init__
    entry="./code/hello.js"
  File "/home/bitnami/hello/env/lib/python3.7/site-packages/jsii/_runtime.py", line 86, in __call__
    inst = super().__call__(*args, **kwargs)
  File "/home/bitnami/hello/env/lib/python3.7/site-packages/aws_cdk/aws_lambda_nodejs/__init__.py", line 1307, in __init__
    jsii.create(self.__class__, self, [scope, id, props])
  File "/home/bitnami/hello/env/lib/python3.7/site-packages/jsii/_kernel/__init__.py", line 297, in create
    for iface in getattr(klass, "__jsii_ifaces__", [])
  File "/home/bitnami/hello/env/lib/python3.7/site-packages/jsii/_kernel/providers/process.py", line 344, in create
    return self._process.send(request, CreateResponse)
  File "/home/bitnami/hello/env/lib/python3.7/site-packages/jsii/_kernel/providers/process.py", line 326, in send
    raise JSIIError(resp.error) from JavaScriptError(resp.stack)
jsii.errors.JSIIError: spawnSync docker ENOMEM

我該如何解決這個問題?

文檔

NodejsFunction 需要依賴項鎖定文件(yarn.lock、pnpm-lock.yaml 或 package-lock.json)。 在 Docker 容器中捆綁時,包含此鎖定文件的路徑用作安裝在容器中的卷的源 (/asset-input)。

所以你需要你的 lambda 文件夾有一個支持格式之一的鎖文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM