标签: aws-sam-cli

如何使用 Dockerized SAM Local 设置调试

我正在处理一个使用 AWS Lambda 和 Node.js 的项目。我们将 Docker 容器用于我们的开发环境。

我们当前的设置在端口 :3000 上启动本地 AWS SAM。它运行 start-api 并将函数挂载到我的 template.yml 文件中。我使用邮递员测试这些功能以将 JSON 发送到已安装的 API 端点,如下所示:http : //127.0.0.1 : 3000/ foo

Docker 设置还在 :4000 上启动了一个单独的 Node.js 实例。

如上所述,我可以在本地测试 Lambda 内容。但是,我想激活调试,以便我可以单步执行该函数并检查变量,而不是使用console.log(). 我不知道如何编辑 Dockerfile / docker-compose.yml 来实现这一点。

这是我的 docker-compose 文件:

version: '3'
services:
  web:
    build: ./web
    container_name: someapp
    command: npm run dev
    volumes:
      - ./web:/usr/app/
      - /usr/app/node_modules
    ports:
      - "4000:4000"
    environment:
      DATABASE_URL: mongo://someapp:someapp@10.10.62.205:37017,10.10.62.205:37018,10.10.62.205:37019/somedb
  sam:
    build: serverless/.
    container_name: samlocal
    command: sam local start-api --host 0.0.0.0 …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services dockerfile aws-lambda docker-compose aws-sam-cli

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

AWS cli/sam-local软件包env.json

我正在使用aws-sam-local来编写,测试和部署一些Lambda函数.

使用该-env-var选项我可以在本地测试时传递env.json,所以我的lambdas获取属性,我没有源代码控制.

如何发布这些值?aws-sam-local cli似乎位于主要aws cli的顶部,我看到一个--parameter-override选项,但只接受一个key = value字符串.

是否可以传递文件以覆盖?如果没有,我如何格式化不同lambda的env变量字符串?

谢谢

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

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

如何从sam deploy命令中排除文件夹?

我运行此命令来部署我的lambda:

sam package --template-file prod_template.yaml --s3-bucket mybucket --output-template-file packaged-template.yaml
sam deploy --template-file packaged-template.yaml --stack-name mystack --capabilities CAPABILITY_IAM
Run Code Online (Sandbox Code Playgroud)

可以,但是此代码受版本控制,并且sam也上载.git文件夹。我如何让sam像使用gitignore一样忽略某些文件夹?

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

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

使用 SQS、SNS 和 APIGW 进行无服务器或 SAM 和本地开发

我正在评估无服务器 v AWS SAM CLI。我试图了解在使用以下内容进行开发时如何促进本地开发工作流程:-

  • Lambda 是用 Python 编写的
  • 由带有 SES 邮件负载的 SNS 通知触发
  • 读取 S3 对象
  • 读写dynamodb
  • 写入 SQS
  • 写到 SNS 话题

我可以从文档中看到无服务器具有以下本地选项:-

  • S3
  • 动态数据库
  • SNS 事件入站

如果有以下解决方案,则不明显:-

  • API 网关本地支持 python lambdas
  • 写入 SQS
  • 写入 SNS

我可以从 SAM 文档中看到,可以针对本地 DynamoDB 测试 python Lambdas。不清楚还有什么可能,或者您是否必须将其指向一个实际的 AWS 实例(S3、SQS 等)

任何指针?

amazon-web-services aws-sam-cli serverless

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

AWS SAM:请求的资源响应中不存在“Access-Control-Allow-Origin”标头

我正在努力让静态网站使用 CORS 调用 API 网关。我已经使用 SAM 本地运行了下面的代码,但是我在尝试从我的静态网站(本地托管)使用 jQuery 调用我的 API 时遇到以下 CORS 错误:

Failed to load http://localhost:3000/notify: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4000' is therefore not allowed access.
Run Code Online (Sandbox Code Playgroud)

我的template.yaml

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31

Globals:
  Api:
    # enable CORS; to make more specific, change the origin wildcard
    # to a particular domain name, e.g. "'www.example.com'"
    Cors: "'*'"

Parameters:
  RecaptchaSecret:
    Type: String

Resources:
  NotifierFunction:
    Type: AWS::Serverless::Function 
    Properties:
      CodeUri: notifier/build
      Handler: app.lambda_handler
      Runtime: python3.6
      Environment: 
        Variables: …
Run Code Online (Sandbox Code Playgroud)

cors aws-cloudformation aws-lambda aws-api-gateway aws-sam-cli

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

如何对使用分层方法的Lambda逻辑进行单元测试?

嗨,我有我的AWS Lambda,我想在上面添加一个图层。我希望能够仅测试lambda的单个方法。但是,他们中的许多人都使用层逻辑,因此在我看来这并不容易。最好的方法是什么?

一种方法是打包层,将主机放置在某个地方并将其用作依赖项。在那种情况下,为什么还要费心使用图层呢?

我的另一个想法是使用sam-cli在本地部署lambda。我知道如何使用它来测试整个lambda逻辑,但是我看不到如何分别对测试方法进行单元测试; /您的经验是什么?KR

编辑。我的解决方案

  • 添加pytest

  • 将所有测试放在test目录中

  • 添加调用测试的测试lambda处理程序

import pytest def lambda_handler(event, _): res = pytest.main(['-x', './tests']) return res

  • 添加template.yml指向先前创建的lambda处理程序

Resources: MyFunction: Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction Properties: CodeUri: src/ Handler: test.lambda_handler Runtime: python3.6 Events: MyInfo: Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api Properties: Path: /my-service/test Method: get Environment: Variables: ELASTICSEARCH_DOC_TYPE: "article" ELASTICSEARCH_INDEX: "artilces" ELASTICSEARCH_HOST: "elastic" ELASTICSEARCH_PORT: "9200" ELASTICSEARCH_URL: "http://my_elastic.com:9200" Layers: - arn:aws:lambda:eu-west-1:XXXXXXXXXXXXX:layer:lambda_layer:37

  • sam local invoke --no-event

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

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

SAM Local 似乎没有运行授权程序功能

我刚刚开始使用SAM Local,但是在尝试为我的端点配置 Authorizer 功能时再次出现问题。

我一直在查看有关如何设置 Auth 函数的主要 SAM 文档,但是每当我尝试使用 本地运行 API 时sam local start-api,它运行良好,但好像它甚至没有尝试运行 auth 函数。

我已经尝试在 Global.API 中定义 Auth 以及在 SAM 的template.yaml的资源部分中定义一个 API 资源

# template.yaml
Globals:
  Function:
    Timeout: 3
    CodeUri: src/
    Runtime: nodejs8.10
  Api:
    Auth:                        # Option #1: Defining it globally
      DefaultAuthorizer: CustomJWTAuthorizer
      Authorizers:
        CustomJWTAuthorizer:
          FunctionArn: !GetAtt AuthFunction.Arn    
Resources:
  UserApi:
    Auth:                        # Option #2: Defining it as an API resource
      Authorizers:
        MyLambdaTokenAuth:
          FunctionPayloadType: TOKEN
          FunctionArn: !GetAtt AuthFunction.Arn
      DefaultAuthorizer: MyLambdaTokenAuth
  GetUserFunction: …
Run Code Online (Sandbox Code Playgroud)

localhost aws-sam-cli aws-sam

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

Lambda 无权访问 ECR 映像

随着最近发布的Lambda功能Docker 映像,我决定使用CloudFormation.

因此,下面的 lambda 考虑了存储在 中的 docker 图像Elastic Container Registry,并有权按照文档中的示例访问该图像。

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: lambda-docker-image

Globals:
  Function:
    Timeout: 180

Resources:
  DockerAsImage:
    Type: AWS::Serverless::Function 
    Properties:
      FunctionName: DockerAsImage
      ImageUri: ??????????????.dkr.ecr.us-west-2.amazonaws.com/????:latest
      PackageType: Image
      Policies: 
        - Version: '2012-10-17' 
          Statement:
            - Effect: Allow
              Action: 
                - ecr:*
                - ecr-public:*
                - sts:GetServiceBearerToken
              Resource: "*"
      Events:
        HelloWorld:
          Type: Api
          Properties:
            Path: /hello
            Method: post
Run Code Online (Sandbox Code Playgroud)

我使用的是sam部署在模板us-west-2

sam deploy -t template.yaml --capabilities "CAPABILITY_NAMED_IAM" --region "us-west-2" --stack-name "lambda-docker-example" …
Run Code Online (Sandbox Code Playgroud)

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

6
推荐指数
3
解决办法
3314
查看次数

“SSL: CERTIFICATE_VERIFY_FAILED” 发布 MQTT、AWS IoT 时出错

我收到以下错误:

[ERROR] SSLError: SSL validation failed for https://data.iot.ap-northeast-2.amazonaws.com/topics/app%2Ftest%2Fresponse?qos=1 [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1124)
Traceback (most recent call last):
  File "/var/task/app.py", line 197, in lambda_handler
    mqttcli.test('test', '11111', {}, 1, 200)
  File "/opt/python/lib/python3.8/site-packages/connectors/MQTTClient.py", line 40, in test
    response = self._iot_client.publish(
  File "/var/task/botocore/client.py", line 357, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/var/task/botocore/client.py", line 662, in _make_api_call
    http, parsed_response = self._make_request(
  File "/var/task/botocore/client.py", line 682, in _make_request
    return self._endpoint.make_request(operation_model, request_dict)
  File "/var/task/botocore/endpoint.py", line 102, in make_request
    return …
Run Code Online (Sandbox Code Playgroud)

python boto3 aws-lambda aws-sam-cli

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

等待命令超时:“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
查看次数