Aws lambda 使用无服务器从本地侦听远程AWS SQS

Aws lambda 使用无服务器从本地侦听远程AWS SQS,aws-lambda,event-handling,yaml,amazon-sqs,aws-serverless,Aws Lambda,Event Handling,Yaml,Amazon Sqs,Aws Serverless,我想在我的AWS帐户上的SQS事件上本地执行lambda函数。我已定义所需事件,但未触发此事件 sam local invoke -e sqs.input.json account-data-delta-test 如何做到这一点 我能够使用cron事件从本地服务器向同一队列发送消息 以下是我尝试过的几件事。。。但这对我不起作用 functions: account-data-delta-test: handler: functions/test/data/dataDeltates

我想在我的AWS帐户上的SQS事件上本地执行lambda函数。我已定义所需事件,但未触发此事件

sam local invoke -e sqs.input.json account-data-delta-test
如何做到这一点

我能够使用cron事件从本地服务器向同一队列发送消息

以下是我尝试过的几件事。。。但这对我不起作用


functions:
  account-data-delta-test:
    handler: functions/test/data/dataDeltatestGenerator.handler
    name: ${self:provider.stage}-account-data-delta-test
    description: account delta update  - ${self:provider.stage}-account-data-delta-test
    tags:
      Name: ${self:provider.stage}-account-data-delta-test
    # keeping 5 minute function timeout just in case large volume of data.
    timeout: 300
    events:
      - sqs:
          arn:
            Fn::GetAtt: [ testGenerationQueue, Arn ]
          batchSize: 10

----------

      Policies:
        - PolicyName: ${self:provider.stage}-test-sqs-policy
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
            - Effect: Allow
              Action:
              - sqs:ReceiveMessage
              - sqs:DeleteMessage
              - sqs:GetQueueAttributes
              - sqs:ChangeMessageVisibility
              - sqs:SendMessage
              - sqs:GetQueueUrl
              - sqs:ListQueues
              Resource: "*"     

---------------

---
Resources:
  testGenerationQueue:
    Type: AWS::SQS::Queue
    Properties:
      QueueName: ${self:provider.stage}-account-test-queue
      VisibilityTimeout: 60
      Tags:
        -
          Key: Name
          Value: ${self:provider.stage}-account-test-queue  

-------------

const sqs = new AWS.SQS({
    region: process.env.REGION,
});


exports.handler = async (event) => {
    console.error('------------ >>>>CRON:START: Test delta Job run.', event);
    log.error('------------ >>>>CRON:START: Test delta Job run.', event);
}); 



您无法从远程上下文触发本地Lambda函数,因为它们没有共同点

我想您的目标是测试Lambda函数的逻辑,如果是这样,您有两个选项

选择1 一种更快的方法是使用本地调用函数。通过这种方式,您可以向该命令提供一些参数,其中一个参数是事件源(即触发后SQS将发送给Lambda的事件信息)

您的sqs.input.json如下所示(使用
sam本地生成事件sqs接收消息生成)

因此,您将实际在本地测试Lambda

优点:速度很快 缺点:在AWS上部署时,仍然需要测试触发器 选择2 在第二个场景中,您将牺牲队列和Lambda之间的绑定。您必须以固定的时间间隔触发函数,并在代码中显式使用

Pro:您可以从真实队列中读取真实消息。
缺点:您必须定期调用函数,这并不方便。您不能从远程上下文触发本地Lambda函数,因为它们没有共同点

我想您的目标是测试Lambda函数的逻辑,如果是这样,您有两个选项

选择1 一种更快的方法是使用本地调用函数。通过这种方式,您可以向该命令提供一些参数,其中一个参数是事件源(即触发后SQS将发送给Lambda的事件信息)

您的sqs.input.json如下所示(使用
sam本地生成事件sqs接收消息生成)

因此,您将实际在本地测试Lambda

优点:速度很快 缺点:在AWS上部署时,仍然需要测试触发器 选择2 在第二个场景中,您将牺牲队列和Lambda之间的绑定。您必须以固定的时间间隔触发函数,并在代码中显式使用

Pro:您可以从真实队列中读取真实消息。
缺点:你必须定期调用函数,这并不方便。你说的“在本地执行lambda函数”是什么意思?您指的是
sam local
?尝试配置IAM用户和访问密钥,以访问本地计算机的SQS队列。@JohnRotenstein我正在尝试无服务器本地或npx sls本地调用…@Mdkhirulashik,我已配置访问密钥和配置文件。我能够通过在同一个项目中编写的cron将消息发送到队列。但不知何故,serverless.yml中定义的sqs事件没有调用代码段。是否尝试使用CLI执行相同的操作?Lambda local利用docker容器模拟Lambda环境。这可能是容器的权限问题。您所说的“在本地执行lambda函数”是什么意思?您指的是
sam local
?尝试配置IAM用户和访问密钥,以访问本地计算机的SQS队列。@JohnRotenstein我正在尝试无服务器本地或npx sls本地调用…@Mdkhirulashik,我已配置访问密钥和配置文件。我能够通过在同一个项目中编写的cron将消息发送到队列。但不知何故,serverless.yml中定义的sqs事件没有调用代码段。是否尝试使用CLI执行相同的操作?Lambda local利用docker容器模拟Lambda环境。这可能是容器的权限问题。