我在我的无服务器应用程序(避免混乱的最简单应用程序)中有一个类似于以下的目录结构,我使用 AWS SAM 和 Python 3.8 作为运行时创建了它:
??? common
? ??? a.py
??? hello_world
? ??? __init__.py
? ??? app.py
? ??? requirements.txt
??? template.yaml
Run Code Online (Sandbox Code Playgroud)
我想common/a.py在 Lambda 处理程序中导入模块 - hello_world/app.py。现在我知道我可以通过将路径添加到or来在 Python 中正常导入它,但是当代码在 Docker 容器内的 Lambda 中运行时它不起作用。调用时,Lambda 处理函数在目录内运行,不考虑文件夹结构。PYTHONPATHsys.path/var/task
我尝试插入/var/task/common, /var/common,/var甚至像这样/common以sys.path编程方式插入:
import sys
sys.path.insert(0, '/var/task/common')
from common.a import Alpha
Run Code Online (Sandbox Code Playgroud)
但我仍然收到错误:
ModuleNotFoundError: No module named 'common'
我知道Lambda 层,但鉴于我的场景,我想直接引用多个 Lambda 函数中的公共代码,而无需上传到层。我想serverless-python-requirements在无服务器框架中但在 …
我们即将开始使用 Lambda 函数。
我们有必须使用 TypeScript 的技术限制。
当从 Postman 调用相关端点时,我希望能够在 VS Code 中调试我的 ts 文件。
所以,我们有以下开发环境:
我已经使用sam initHello World 模板来生成初始文件夹结构。
我已经对其进行了增强(主要基于本文)以使用 TypeScript。
.
??? template.yaml
??? .aws-sam
??? .vscode
| ??? launch.json
??? events
??? hello-world
| ??? dist
| ??? app.js
| ??? app.js.map
| ??? src
| ??? app.ts
| ??? package.json
| ??? tsconfig.json
Run Code Online (Sandbox Code Playgroud)
template.yaml.
??? …Run Code Online (Sandbox Code Playgroud) amazon-web-services node.js typescript aws-lambda aws-sam-cli
我没有完全掌握使用 sam 发布/部署的流程。我最大的问题是我的 sam 模板声明了 aAWS::Serverless::Function并且 CodeUri 参数强制我输入 s3 存储桶 url。
我见过一些示例,其中 CodeUri 只是计算机上代码资源的路径。当我尝试这个时,萨姆抱怨道
“CodeUri”不是具有可选 versionId 查询参数的“s3://bucket/key”形式的有效 S3 Uri。
为了解决这个问题,我必须
这是非常令人讨厌的。
我缺少什么?
{
"Description" : "Serverless backend",
"Transform" : "AWS::Serverless-2016-10-31",
"Globals" : {
},
"Resources" : {
"db" : {
"Type": "AWS::RDS::DBInstance",
"Properties" : {
"AllocatedStorage": "20",
"DBInstanceClass": "db.t2.micro",
"DBName": "nameforthedb",
"DeleteAutomatedBackups": true,
"Engine": "postgres",
"MasterUsername": "masterUserName",
"MasterUserPassword": …Run Code Online (Sandbox Code Playgroud) 我正在 PyCharm 上开发 AWS Lambda 函数。当我执行“运行”按钮时,出现以下错误消息。
/usr/local/bin/sam build MyFunction --template /Users/miyashiiii/Works/myapp/myapp/template.yaml --build-dir /Users/miyashiiii/Works/myapp/myapp/.aws-sam/build
Building codeuri: myapp/ runtime: python3.7 metadata: {} functions: ['MyFunction']
Build Failed
Error: PythonPipBuilder:Validation - Binary validation failed for python, searched for python in following locations : ['/usr/bin/python'] which did not satisfy constraints for runtime: python3.7. Do you have python for runtime: python3.7 on your PATH?
Run Code Online (Sandbox Code Playgroud)
python3.7 在我的 PATH 上,其他一些位置在我的 PATH 上,但位置列表仅包含“/usr/bin/python”。
当我在终端上执行相同的命令(/usr/local/bin/sam build ~~)时,它成功了。
如何将 PATH 导出到“sam build”命令?
amazon-web-services pycharm aws-lambda aws-sam-cli aws-toolkit
我正在尝试在我的 M1 Mac 上使用 SAM CLI。
\n我按照这些文档中概述的步骤进行操作:
\nsam init\ncd sam-app\nsam build\nsam deploy --guided\nRun Code Online (Sandbox Code Playgroud)\n我没有修改代码或 yaml 文件。\n我可以按预期启动本地 Lambda 函数:
\n\xe2\x9e\x9c sam-app sam local start-api\nMounting HelloWorldFunction at http://127.0.0.1:3000/hello [GET]\nYou can now browse to the above endpoints to invoke your functions. You do not need to restart/reload SAM CLI while working on your functions, changes will be reflected instantly/automatically. If you used sam build before running local commands, you will need to re-run sam build for the changes …Run Code Online (Sandbox Code Playgroud) When setting the debug configurations for the default IntelliJ IDEA Java helloworld application (created upon making a new AWS Lambda project) the following response is shown:
Error: Cannot find handler 'helloworld.App::handleRequest' in project."
To fix this I've tried editing 'Handler' element inside template.yaml to include a filepath, though there had been no success.
Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: HelloWorldFunction
Handler: helloworld.App::handleRequest
Run Code Online (Sandbox Code Playgroud)
I noticed the Python AWS Lambda helloworld project (within the PyCharm counterpart) required me to change the root …
我用的是最新的Win10。安装 AWS-SAM-CLI 并使用以下命令测试安装后:
sam --version
Run Code Online (Sandbox Code Playgroud)
我收到消息
bash: sam: 命令未找到
但是,当我使用 Powershell、cmd 或 ConEmu 时,它们都可以解析“sam”。
路径是“e/Program Files/Amazon/AWSSAMCLI/bin”,但其他命令如“yarn”工作正常,也安装在“e/Program Files/...”
有任何想法吗?谢谢
我正在构建一些无服务器应用程序并尝试使用 SAM。我一直在浏览一些教程和一些使用sam build,而其他人使用sam package.
这些命令之间有什么区别?似乎 sam 包更难使用。
amazon-web-services aws-lambda aws-sam-cli aws-serverless aws-sam
使用 AWS SAM 在堆栈上进行部署并通过 GitHub 操作进行部署,并尝试使用 Config TOML 文件并在部署命令中指定配置环境,但我遇到了一个问题,它似乎只是忽略了我的情况在部署命令中指定。我只能猜测我做错的唯一一件事是我实际上无法使用这些或者我将它放在错误的位置,但我将非常感谢有关此事的任何帮助。在类似的示例或文档方面没有找到太多内容。
sam deploy --stack-name mySuperAwesomeStuff \
--region ${{ secrets.AWS_REGION }} \
--confirm-changeset \
--config-file ./functions/function1/function1.toml \
--config-env nonprod \
--template-file ./functions/function1/template.yaml
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望将该区域从那里取出并放入 TOML 文件以及堆栈名称中。
我的 TOML 文件如下所示:
[nonprod.deploy.parameters]
stack_name="super-awesome-stack-name"
region="us-east-2"
confirm_changeset=true
cababilities="CABILITIES_IAM"
Run Code Online (Sandbox Code Playgroud)
再次,似乎完全忽略了我尝试使用配置文件,我不确定我在这里缺少什么。
我正在使用 SAM CLI 开发 API Gateway Lambda 代理集成。根据文档,我应该能够sam local start-api在本地测试我的端点。该start-api命令允许“热重新加载”,如AWS SAM 文档中所述。但是,我没有看到这种行为。
我的template.yaml文件如下所示:
Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function
Properties:
PackageType: Image
Architectures:
- x86_64
Events:
HelloWorld:
Type: Api
Properties:
Path: /hello
Method: get
Metadata:
Dockerfile: Dockerfile
DockerContext: ./hello_world
DockerTag: python3.9-v1
Run Code Online (Sandbox Code Playgroud)
当我跑步时:
> sam build && sam local start-api
Run Code Online (Sandbox Code Playgroud)
我可以看到端点正在工作:
在http://127.0.0.1:3000/hello处安装 HelloWorldFunction
您现在可以浏览到上述端点来调用您的函数。您在使用功能时无需重新启动/重新加载 SAM CLI,更改将立即/自动反映。
lambda_handler但是,当我对内部的函数进行更改时./hello_world/app.py, 的响应curl http://localhost:3000保持不变。不会发生热重载。
我发现的唯一解决方案是针对每个代码更改运行sam build。这极大地减慢了开发时间——由于 内部的一些依赖关系requirements.txt,我必须等待 1-2 分钟来构建每个代码更改。我可以只处理 …
aws-sam-cli ×10
aws-lambda ×7
aws-sam ×4
aws-toolkit ×2
python ×2
docker ×1
git-bash ×1
java ×1
node.js ×1
pycharm ×1
python-3.x ×1
serverless ×1
typescript ×1