我在尝试通过 部署我的堆栈时遇到问题AWS SAM CLI。我正在使用我打包和部署的 SAM 简化模板。
我想要的只是创建一个 SQS 队列并隐式创建一个 API 网关,该网关仅将有效负载放入队列中。
这是我到目前为止所尝试的(我定义 Queue + Api 的代码段):
MyProjectQueue:
Type: AWS::SQS::Queue
Properties:
Events:
MyProjectApi:
Type: Api
Properties:
Path: /myproject/push
Method: post
Run Code Online (Sandbox Code Playgroud)
sam validate当我跑步时一切都很好sam package,但当我跑步时却失败了sam deploy。获取我使用的错误aws cloudformation describe-stack-events --stack-name myproject-stack
STACKEVENTS
MyProjectQueue-CREATE_FAILED-2018-10-30T16:33:29.764Z
MyProjectQueue
CREATE_FAILED
Encountered unsupported property Events AWS::SQS::Queue arn:aws:cloudformation:eu-west-1:<MY_AWS>:stack/myproject-stack/<GIUD>
myproject-stack 2018-10-30T16:33:29.764Z
Run Code Online (Sandbox Code Playgroud)
它清楚地表明了这一点Events it's not supported for AWS::SQS::Queue。但这适用于 Lambda(资源类型AWS::Serverless::Function),这就是我尝试这种方式的原因。
但是,如果可能的话,我想避免在网关和队列之间使用 lambda。
是否可以直接为SQS队列定义API网关?如何?
谢谢!
amazon-sqs amazon-web-services aws-cloudformation aws-sam-cli aws-sam
我正在使用 AWS SAM(无服务器应用程序模型)在 API 网关设置中构建 Python 3.6 lambda 代码。因此,我有一个template.yaml创建多个 Lambda 函数的文件。它们是用 lambda 函数组织的,每个函数都在项目中各自的子目录中。lambda 还共享我保存在共享文件夹中的几个常见文件。
project-home
-lambda_a_dir
-lambda_a.py
-lambda_b_dir
-lambda_b.py
-shared_dir
-shared.py
Run Code Online (Sandbox Code Playgroud)
问题是,虽然 Pycharm 可以清楚地看到shared.py,SAM 不能也拒绝识别共享文件,并出现以下错误:Unable to import module 'lambdaA': No module named 'shared'
如果我将shared.py文件的副本移动到每个 lambda 目录中,Pycharm 和 SAM 都很高兴,我可以构建/部署到 AWS。
我的问题:如何使用共享目录中的共享文件构建 SAM 模板?
到目前为止,我已经尝试过:
CodeUri方案__init__和 的本地包setup.py。(我不能使用公共包,因为代码是私有的,不能放在公共存储库中。)这是我的模板文件:
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
lambdaA:
Type: AWS::Serverless::Function
Properties:
CodeUri: ./lambda_a_dir/
Handler: lambda_a.lambda_handler
Runtime: python3.6
lambdaB: …Run Code Online (Sandbox Code Playgroud) 我也在使用 sam cli 构建和部署 AWS Lambdas:
sam build 命令遍历应用程序中的函数,查找包含依赖项的清单文件(例如 requirements.txt),并自动创建部署工件,您可以使用 sam package 和 sam deploy 命令将其部署到 Lambda。
很酷的是,我可以使用选项标志--use-container来构建在类似 AWS Lambda 的 Docker 容器中具有本地编译依赖项的函数。
AWS Lambda 层呢?
我有一个功能:
CreateImagesLambdaFunction:
Type: AWS::Serverless::Function
Properties:
Runtime: python3.7
Handler: lambda_function.create
CodeUri: ./functions/image_handler/
...
Layers:
- !Ref LayerPillow
Run Code Online (Sandbox Code Playgroud)
使用具有本机编译依赖项的层(因此必须安装在 linux 上):
LayerPillow:
Type: AWS::Serverless::LayerVersion
Properties:
...
ContentUri: ./functions/layer_pillow/
Run Code Online (Sandbox Code Playgroud)
我可以通过使用amazonlinux:latestdocker 映像安装依赖项并复制到我的存储库来解决这个问题,但是很好奇 SAM 是否支持此功能
我有一个 Maven 项目,其中有一个模块“AddUser”。该模块基本上是一个相同的应用程序。当尝试从项目根路径运行命令“sam build”时。我收到以下错误:-
in-iftekhar-04eb:UserPlanning iftekhar.khan$ sam build
2019-07-14 16:55:00 Building resource 'AddUserFunction'
2019-07-14 16:55:00 Running JavaMavenWorkflow:CopySource
2019-07-14 16:55:00 Running JavaMavenWorkflow:MavenBuild
Build Failed
Error: JavaMavenWorkflow:MavenBuild - Maven Failed: [INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.054 s
[INFO] Finished at: 2019-07-14T16:55:01+05:30
[INFO] ------------------------------------------------------------------------
[ERROR] The goal you specified requires a project to execute but there is no POM in this directory (/private/var/folders/f8/jgg9tzq97q39c_c2z1sn4blm0000gn/T/tmprn_uvw70). Please verify you invoked Maven from the correct directory. -> [Help …Run Code Online (Sandbox Code Playgroud) 我正在考虑通过 SAM 在本地运行一些 AWS lambda,包括写入 S3 存储桶的一个。有没有办法让 S3 在本地运行,或者与云中的 S3 存储桶通信并在本地运行 lamda 时写入该存储桶?
我有一个 AWS SAM 模板文件,其中包含托管在 github 上的一些资源,已设置代码管道来检测存储库中的更改,然后在 cloudformation 堆栈上创建/更新并执行更改。一切正常。但现在我需要在同一个模板中配置 stage 和 prod 环境。我发现如何正确地做到这一点很困难。
不同的方法也受到欢迎。
amazon-web-services aws-cloudformation aws-codepipeline aws-sam-cli aws-sam
我想使用 aws lambda 构建 .NET HTTP API。这些 lambda 表达式将由 UI 和其他一些系统通过 api 网关调用。显然,在本地环境中我想运行/调试这些。
我尝试过的:
a) 使用AWS Visual Studio模板附带的模拟工具。您可以调用单独的 lambda,但我不知道如何使用正常的休息调用从例如邮递员中调用它们。我不知道模拟工具如何进行这些调用,因为 chrome/firefox 不显示它们。
b) 使用 sam local start-api。这是我所做的:
sam --version
SAM CLI, version 1.22.0
sam init (choose aws quick start template, package type Image and amazon/dotnet5.0-base as base image)
Run Code Online (Sandbox Code Playgroud)
我可以使用 构建解决方案sam build,运行它,sam local start-api然后我可以浏览到它http://localhost:3000/hello并且它可以工作。问题是我需要在 VS 中构建 + 每次更改代码时都执行这些步骤。也没有简单的方法来附加调试器。
那么推荐的方法是什么?我知道你可以在 lambda 中运行整个 .NET Web api,但这听起来不是一个好的技术解决方案。我假设我不是第一个使用 lambda 构建 HTTP api 的人。
我正在尝试将 OpenApi 规范包含在我的代码中,AWS::Serverless::Api DefinitionBody如下所示:
MyApi:
Type: "AWS::Serverless::Api"
Properties:
StageName: 'dev'
Domain:
DomainName: 'mydomain.com'
CertificateArn: 'my-arn'
EndpointConfiguration: REGIONAL
Route53:
HostedZoneId: 'HOSTEDZONEID'
BasePath:
- /api
DefinitionBody:
'Fn::Transform':
Name: 'AWS::Include'
Parameters:
Location: !Sub 'open-api.yml'
Run Code Online (Sandbox Code Playgroud)
我曾经Fn:Transform确保我的速记符号得到评估。我正在使用一些 AWS API Gateway 扩展,如下所示open-api.yml:
...
x-amazon-apigateway-integration:
uri: !Sub 'arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:${FunctionName}/invocations'
responses:
default:
statusCode: "200"
passthroughBehavior: "when_no_templates"
httpMethod: "GET"
type: "aws_proxy"
Run Code Online (Sandbox Code Playgroud)
当我运行时,sam deploy --debug出现以下错误:
转换 AWS::Include 失败:指定的 S3 对象的内容应该是有效的 Yaml/JSON
我正在使用 AWS SAM 构建无服务器应用程序
SAM + VSCode + Docker 桌面
一切工作正常,但是当我运行调试时突然开始出现超时错误。
注意:sam 本地调用(无需调试)工作正常。
当我运行调试模式(即 F5)时出现问题,它停止如下所示。这可能是网络问题吗?蟒蛇版本?之前调试是可以的。
另请注意:我有主机 Windows 10 计算机,我在主机内运行 Windows 10 VM (HyperV),其中我有这是开发环境设置。
以下是日志:
2021-05-20 11:43:48 [INFO]: Preparing to debug locally: Lambda "qa.lambdaHandler"
2021-05-20 11:43:48 [INFO]: Building SAM application...
2021-05-20 11:43:48 [INFO]: Running command: (not started) [C:\Program Files\Amazon\AWSSAMCLI\bin\sam.cmd build --build-dir C:\Users\PK\AppData\Local\Temp\aws-toolkit-vscode\vsctkzhq0Ca\output
--template C:/Users/PK/code/GCMS-AWS/publish-dynamodb/cmsqa/app___vsctk___template.yaml
--base-dir C:/Users/PK/code/GCMS-AWS/publish-dynamodb/cmsqa]
2021-05-20 11:43:50 [INFO]: Building codeuri: C:/Users/PK/code/GCMS-AWS/publish-dynamodb/cmsqa runtime: nodejs12.x metadata: {} functions: ['cmsqa']
2021-05-20 11:43:50 [INFO]: Running NodejsNpmBuilder:NpmPack
2021-05-20 11:44:02 [INFO]: Running NodejsNpmBuilder:CopyNpmrc
2021-05-20 11:44:02 [INFO]: …Run Code Online (Sandbox Code Playgroud) 我正在学习如何在 aws 上创建 lambda。我正在关注这个官方教程。
我运行的命令:
sam init(所有内容的默认值,我选择模板 8 - webapp 后端)
cd sam-app
sam build
我得到的输出是:
Building codeuri: /home/sam-app runtime: nodejs14.x metadata: {} functions: ['getAllItemsFunction', 'getByIdFunction', 'putItemFunction']
Running NodejsNpmBuilder:NpmPack
Build Failed
Error: NodejsNpmBuilder:NpmPack - NPM Failed: npm ERR! code Z_DATA_ERROR
npm ERR! errno -3
npm ERR! zlib: invalid distance too far back
npm ERR! A complete log of this run can be found in:
npm ERR! /home/username/.npm/_logs/2021-05-20T14_02_59_425Z-debug.log
Run Code Online (Sandbox Code Playgroud)
节点版本:16.2.0
npm 版本:7.13.0
山姆版本:1.23.0
zlib版本:1:1.2.11-4
我没有修改任何文件 …
aws-sam-cli ×10
aws-sam ×6
aws-lambda ×5
.net-5 ×1
amazon-sqs ×1
java ×1
maven ×1
node.js ×1
npm ×1
yaml ×1