标签: aws-lambda

使用 Jest 在 AWS Lambda 函数中模拟对 S3 的调用

我正在尝试使用 Jest 在本地 Node.JS AWS Lambda 函数中模拟对 putObject 的调用,但由于某种原因,我一直在期望中收到 0 次调用。

这是我的主要功能(index.js):

 const S3 = require("aws-sdk/clients/s3");
 const s3 = new S3();

 exports.handler = async (event) => {

   putFunction = async (params, callback) => {
     await s3.putObject(params, callback).promise();
   };

 const params = {
     Bucket: "some value",
     Key: "some key value",
     ContentType: "application/json",
     Body: "some body value",
   };

   const callback = {
     function(err, data) {
       console.log(JSON.stringify(err) + " " + JSON.stringify(data));
     },
   };
   putFunction(params, callback);
 }
Run Code Online (Sandbox Code Playgroud)

我尝试将 async 添加到我的测试函数中,因为我认为这是一个异步问题,但我似乎仍然收到相同的错误。这是我的测试代码(index.test.js):

 let myHandler = …
Run Code Online (Sandbox Code Playgroud)

mocking amazon-s3 node.js jestjs aws-lambda

0
推荐指数
1
解决办法
1020
查看次数

调用 post_to_connection 时 Lambda 超时

我将 WebSocket ApiGateway 与 AWS Lambda 集成一起使用。当我尝试使用Lambda 函数的post_to_connection方法将数据发布到客户端时,boto3.client('apigatewaymanagementapi')总是超时而没有任何错误消息。只有超时消息会记录在 CloudWatch 中:

3.00 秒后任务超时

我的代码:

import json
import boto3
import time
import urllib

api_client = boto3.client('apigatewaymanagementapi')

def lambda_handler(event, context):

    connectionId = event['requestContext']['connectionId']

    api_client.post_to_connection(ConnectionId=connectionId, Data=json.dumps({'test': '1'}))

    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
        }
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

websocket boto3 aws-lambda aws-api-gateway

0
推荐指数
1
解决办法
613
查看次数

AWS 如何在特定时间或日期为 n 个任务触发 lambda?

我有一个场景,当我将在特定时间执行一组任务。例如

task1: 28-06-2020 1:00 AM
task2: 30-06-2020 2:00 AM
task3: 01-07-2020 12:00 PM
.
.
.
n
Run Code Online (Sandbox Code Playgroud)

我想在这些指定的时间触发我的 lambda(定义我的逻辑)。可能我会将我的执行时间存储在数据库中,有人可以告诉我一种在指定时间执行 lambda 的方法。我知道我们在 dynamo 中有 TTL 机制,它可以触发 lambda,但它会将执行延迟 48 小时。我希望我的 lambda 在精确的时间执行

amazon-s3 amazon-web-services amazon-dynamodb aws-lambda

0
推荐指数
1
解决办法
1327
查看次数

如何使用 OpenAPI 为 AWS API Gateway 配置 CORS?

我有一个用于通过 CDK 部署的 api 的 OpenAPI 规范。规范看起来像:

openapi: 3.0.1
info:
  title: My API
  description: My REST API with CORS enabled
  version: 0.1.0

x-amazon-apigateway-cors:
  allowOrigins:
    - "*"
  allowCredentials: true
  exposeHeaders:
    - "x-apigateway-header"
    - "x-amz-date"
    - "content-type"
  maxAge: 3600
  allowMethods:
    - "*"
  allowHeaders":
    - "x-apigateway-header"
    - "x-amz-date"
    - "content-type"
    - "Authorization"

components:
  securitySchemes:
    lambda:
      type: "apiKey"
      name: "Authorization"
      in: "header"
      x-amazon-apigateway-authtype: "custom"
      x-amazon-apigateway-authorizer:
        authorizerUri: "{{my-lambda-authorizer}}"
        authorizerResultTtlInSeconds: 300
        type: "token" 

paths:
  /user/{id}:
    get:
      summary: Get info of specified user.
      parameters:
        - in: path …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-cloudformation aws-lambda aws-api-gateway aws-cdk

0
推荐指数
1
解决办法
2012
查看次数

将 Go 项目部署到 AWS Lambda 时出现“PathError”

在部署这个基于 Go 的 AWS Lambda 项目时,通过 AWS 控制台,我收到:

{
  "errorMessage": "fork/exec /var/task/main: exec format error",
  "errorType": "PathError"
}
Run Code Online (Sandbox Code Playgroud)

以下是我采取的步骤:

  • marriage-master从 Git下载项目
  • 在终端中,go get "github.com/aws/aws-lambda-go/lambda" 所以脚本可以由 Go 构建
  • 在终端中,go build main.go创建 Lambda 将用于执行的文件
  • 在终端中,zip main.zip main将文件存档为.zip 以部署到 Lambda
  • 在 AWS 控制台中,上传main.zipFunction code

在此处输入图片说明

  • 在 AWS 控制台中,更改Handlermain.

在此处输入图片说明

但我不断收到此路径错误。知道我做错了什么吗?

go amazon-web-services aws-lambda

0
推荐指数
2
解决办法
695
查看次数

AWS Lambda 与 SQS 的连接超时

我正在处理一项涉及在 VPC 内运行的Lambda 函数 的任务。

此函数应该将消息推送到SQS,并且 lambda 执行角色具有策略:添加了AWSLambdaSQSQueueExecutionRoleAWSLambdaVPCAccessExecutionRole

拉姆达函数:

# Create SQS client
sqs = boto3.client('sqs')

queue_url = 'https://sqs.ap-east-1a.amazonaws.com/073x08xx43xx37/xyz-queue'

# Send message to SQS queue
response = sqs.send_message(
    QueueUrl=queue_url,
    DelaySeconds=10,
    MessageAttributes={
        'Title': {
            'DataType': 'String',
            'StringValue': 'Tes1'
        },
        'Author': {
            'DataType': 'String',
            'StringValue': 'Test2'
        },
        'WeeksOn': {
            'DataType': 'Number',
            'StringValue': '1'
        }
    },
    MessageBody=(
        'Testing'
     )
)

print(response['MessageId'])
Run Code Online (Sandbox Code Playgroud)

测试执行结果如下:

{
  "errorMessage": "2020-07-24T12:12:15.924Z f8e794fc-59ba-43bd-8fee-57f417fa50c9 Task timed out after 3.00 seconds"
}
Run Code Online (Sandbox Code Playgroud)

我将超时从基本设置增加到 5 …

amazon-sqs amazon-web-services amazon-vpc boto3 aws-lambda

0
推荐指数
2
解决办法
1450
查看次数

用于 psycopg2 的 AWS Lambda 层

我正在尝试创建一个新的 lambda 层以使用 psycopg2 导入 zip 文件,因为该库使我的部署包超过 3MB,而且我再也看不到 lambda 函数中的内联代码。

我使用 Python 3.7 为以下两种情况创建了 lambda 层:

  • psycopg2_lib.zip(包含 psycopg2、psycopg2_binary.libs 和 psycopg2_binary-2.8.5.dist-info 文件夹)
  • psycopg2_only.zip 仅包含 psycopg2 文件夹。

我将他们新创建的层添加到我的 lambda 函数中。但是,在这两种情况下,我的 lambda_function 都会抛出如下错误:{ "errorMessage": "Unable to import module 'lambda_function': No module named 'psycopg2'", "errorType": "Runtime.ImportModuleError" }

该错误似乎是我的 zip 文件出了问题,无法识别。但是当它在我的部署包中运行良好时。

任何帮助或理由都会非常有用。谢谢!

psycopg2 aws-lambda python-3.7 aws-lambda-layers

0
推荐指数
3
解决办法
1893
查看次数

AWS 步骤功能:动态选择资源

我想根据上一步的结果动态选择 AWS Lambda 工作人员。类似的东西{"Resource": "$.worker_arn"}

"RunWorkers": {
      "Type": "Map",
      "MaxConcurrency": 0,
      "InputPath": "$.output",
      "ResultPath": "$.raw_result",
      "Iterator": {
        "StartAt": "CallWorkerLambda",
        "States": {
          "CallWorkerLambda": {
            "Type": "Task",
            "Resource": "$$.worker_arn",
            "End": true
          }
        }
      },
      "Next": "Aggregate"
    },
Run Code Online (Sandbox Code Playgroud)

上一步的输入预期如下: [{"worker_arn":..., "output":1}, {"worker_arn":..., "output":1}, ...],其中worker_arn所有工人都相同。

当我编写这样的管道时,linter 抱怨它需要一个 ARN。

有没有比将我的工人 lambda 包装到另一个 lambda 更好的选择?

aws-lambda aws-step-functions

0
推荐指数
1
解决办法
144
查看次数

为什么我在 vpc 中的 lambda 可以被 vpc 外部的 lambda 访问?

我在 AWS 中创建了一个 VPC。这是一个私有网络,互联网上的任何人都无法访问此 VPC。然后我将我的 lambda 放在这个 VPC 中。之后,我发现我可以从 外面的另一个 lambda 调用我的 lambda VPC。我还可以从我的本地笔记本电脑调用 lambda。

这是故意的吗?

amazon-web-services amazon-vpc aws-lambda

0
推荐指数
1
解决办法
217
查看次数

以编程方式编辑 AWS 事件调度程序持续时间

我们可以编辑 AWS 事件调度程序规则以通过程序、脚本或 lambda 更改持续时间吗?

在此处输入图片说明

scheduler amazon-web-services aws-lambda aws-event-bridge

0
推荐指数
1
解决办法
214
查看次数