![](/img/trans.png)
[英]Error deploying a CDK stack with a Rest API with a Lambda Function Integration (AWS CDK 2 Python API)
[英]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.