【问题标题】:AWS SAM with only SQS and Lambda只有 SQS 和 Lambda 的 AWS SAM
【发布时间】:2018-05-28 23:05:08
【问题描述】:

是否可以在没有 API 网关的情况下使用 AWS SAM 在 Lambda 函数前面启动 SQS 队列等基础设施?

我只看到sam local invoke "Lambda" -e event.jsonsam local start-api 的选项

当我运行试图从消息队列中读取消息的 lambda 时,它没有找到如下引用的消息队列 URL:

NotificationFunction:
    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:
        Handler: index.handler
        Runtime: nodejs8.10
        Role: !Sub ${ConsumerLambdaRole.Arn}
        Timeout: 10

        Environment: # More info about Env Vars: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#environment-object
            Variables:
                NODE_ENV: 'dev'
                MANDRILL_API_KEY: 'PUyIU3DAxJzIlt7KbBE5ow'
                SQS_URL: !Ref MessageQueue


MessageQueue: 
    Type: AWS::SQS::Queue
    Properties: 
        VisibilityTimeout: 60
        RedrivePolicy: 
        deadLetterTargetArn: !Sub ${DeadLetterQueue.Arn}
        maxReceiveCount: 10

# this is where any failed messages will go to
DeadLetterQueue: 
    Type: AWS::SQS::Queue

【问题讨论】:

  • sam local 仅启动 sam 规范的 lambda 部分。其余部分必须通过启动 docker 手动连接,检查 AWS_SAM_LOCAL 以更改代码中的端点等。

标签: amazon-web-services amazon-sqs sam


【解决方案1】:

正如评论所暗示的,sam local invoke 只会调用模板中您的 lambda 资源引用的代码 - 它本身不会创建任何资源。

您可以做的是启动模板并使用 CLI 或通过 sam local invoke 调用 lambda 函数(尽管您需要执行 STS 角色假设以获得本地调用函数的正确角色)。但是,我假设您尝试做的是本地测试。在这种情况下,您可以执行以下操作:

  1. 下载本地堆栈 [1]
  2. 使用本地堆栈运行 SQS 服务的本地实例
  3. 将您的函数配置为使用本地堆栈端点(其中有一些很好的示例可用 [2][3])

我个人更喜欢避免本地测试,并且倾向于启动模板并通过假定的凭据在本地调用以进行调试。我倾向于拥有一个集成测试套件,我将针对沙盒 AWS 环境执行测试以进行测试。也就是说,设置它需要付出相当大的努力。

[1]https://github.com/localstack/localstack

[2]https://github.com/billthelizard/aws-sam-localstack-example

[3]http://www.piotrnowicki.com/python/aws/2018/11/16/aws-local-lambda-invocation/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-04
    • 2019-07-01
    • 2020-06-14
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 2021-04-09
    • 2021-11-15
    相关资源
    最近更新 更多