我试图弄清楚如何使用引入here的新目标功能,通过Golang Lambda将数据从一个SQS队列传输到另一个。
在AWS文档之后,我已经构建了以下SAM模板:
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
helloworld
Resources:
helloworldFunction:
Type: AWS::Serverless::Function
Properties:
Timeout: 30
CodeUri: helloworld/
Handler: helloworld
Runtime: go1.x
Events:
QueueEvent:
Type: SQS
Properties:
Queue: !GetAtt Tohelloworld.Arn
Policies:
- SQSSendMessagePolicy:
QueueName:
!GetAtt Fromhelloworld.QueueName
EventInvokeConfig:
Type: AWS::Lambda::EventInvokeConfig
Properties:
FunctionName: !Ref helloworldFunction
Qualifier: "$LATEST"
MaximumEventAgeInSeconds: 60
MaximumRetryAttempts: 0
DestinationConfig:
OnSuccess:
Destination: !GetAtt Fromhelloworld.Arn
Tohelloworld:
Type: AWS::SQS::Queue
Properties:
VisibilityTimeout: 30
Fromhelloworld:
Type: AWS::SQS::Queue
Properties:
VisibilityTimeout: 30
我有一个简单的golang脚本,它总是成功的:
package main
import (
"context"
"fmt"
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
)
func handler(ctx context.Context, name events.SQSEvent) (int, error) {
return 1, nil
}
func main() {
lambda.Start(handler)
}
一切都通过AWS SAM部署,报告资源已正确创建。
对于在ToHelloWorldQueue
中进行的每个事件,我都希望在1
中收到一条以FromHelloWorldQueue
作为正文的消息。
通过SQS,我将事件手动放置在ToHelloworld
队列中,但是即使消息已正确处理(如CloudWatch所报告),消息也永远不会到达FromHelloworldQueue
。我什至尝试为此lambda手动将策略设置为SQS:*
,但问题仍然存在。
有人可以帮我弄清楚为什么我做错了吗?
当直接调用时,lambda函数实际上将消息发送到FromHelloWorld
队列。因此,当lambda由SQS ToHelloWorld
队列触发时,这是行不通的。