标签: aws-sam-cli

AWS SAM 模板 - 定义由 API Gateway 触发的 SQS 队列

我在尝试通过 部署我的堆栈时遇到问题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

6
推荐指数
2
解决办法
2661
查看次数

AWS SAM:跨 Lambda 函数共享文件

我正在使用 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 模板?
到目前为止,我已经尝试过:

  • 符号链接和 MacOS 别名。
  • 的各种组合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)

amazon-web-services aws-cloudformation aws-sam-cli

6
推荐指数
1
解决办法
3109
查看次数

AWS SAM 使用`--use-container` 标志在本地构建层?

我也在使用 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 是否支持此功能

aws-lambda aws-sam-cli

6
推荐指数
0
解决办法
442
查看次数

sam build 无法找到 pom.xml 文件

我有一个 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)

java amazon-web-services maven aws-sam-cli aws-sam

6
推荐指数
1
解决办法
1964
查看次数

如何通过 SAM local 运行写入 S3 存储桶的 AWS lambda?

我正在考虑通过 SAM 在本地运行一些 AWS lambda,包括写入 S3 存储桶的一个。有没有办法让 S3 在本地运行,或者与云中的 S3 存储桶通信并在本地运行 lamda 时写入该存储桶?

amazon-web-services aws-lambda aws-sam-cli

6
推荐指数
1
解决办法
3371
查看次数

在 AWS SAM/Cloudformation 模板中管理阶段和生产环境以及 CI/CD 支持

我有一个 AWS SAM 模板文件,其中包含托管在 github 上的一些资源,已设置代码管道来检测存储库中的更改,然后在 cloudformation 堆栈上创建/更新并执行更改。一切正常。但现在我需要在同一个模板中配置 stage 和 prod 环境。我发现如何正确地做到这一点很困难。

不同的方法也受到欢迎。

amazon-web-services aws-cloudformation aws-codepipeline aws-sam-cli aws-sam

6
推荐指数
1
解决办法
2501
查看次数

如何在本地调试和运行多个 lambda

我想使用 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 的人。

aws-lambda aws-sam-cli .net-5

6
推荐指数
1
解决办法
1318
查看次数

如何解决 SAM 模板中的“转换 AWS::Include 失败:指定的 S3 对象的内容应该是有效的 Yaml/JSON”

我正在尝试将 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

yaml amazon-web-services aws-sam-cli aws-sam

6
推荐指数
1
解决办法
4023
查看次数

等待命令超时:“sam local invoke”

我正在使用 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)

amazon-web-services aws-lambda aws-sam-cli aws-sam

6
推荐指数
1
解决办法
3862
查看次数

Sam 构建失败并显示:构建失败错误:NodejsNpmBuilder:NpmPack - NPM 失败:npm ERR!代码 Z_DATA_ERROR

我正在学习如何在 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

我没有修改任何文件 …

node.js npm aws-lambda aws-sam-cli aws-sam

6
推荐指数
2
解决办法
6725
查看次数