Amazon web services Can';t从lambda向aws sqs发送消息,aws sdk未返回任何错误

Amazon web services Can';t从lambda向aws sqs发送消息,aws sdk未返回任何错误,amazon-web-services,go,aws-sdk,amazon-sqs,aws-sdk-go,Amazon Web Services,Go,Aws Sdk,Amazon Sqs,Aws Sdk Go,我试图从lambda函数向已创建的sqs队列发送消息。当我运行代码时,它实际上停止了执行,aws sdk没有提供任何反馈 我还有一个函数,可以在手动插入消息时从队列中读取消息,我使用相同的代码创建会话。我相信这两种情况都可以使用 然后我尝试使用amazon提供的代码,但结果是一样的。 我的代码的唯一区别是如何创建会话。正如我上面提到的,这与我在手动将消息插入队列时读取消息的方式相同。在这个功能上,一切似乎都很完美 func sendToOrderQueue(rID string, c Cour

我试图从lambda函数向已创建的sqs队列发送消息。当我运行代码时,它实际上停止了执行,aws sdk没有提供任何反馈

我还有一个函数,可以在手动插入消息时从队列中读取消息,我使用相同的代码创建会话。我相信这两种情况都可以使用

然后我尝试使用amazon提供的代码,但结果是一样的。

我的代码的唯一区别是如何创建会话。正如我上面提到的,这与我在手动将消息插入队列时读取消息的方式相同。在这个功能上,一切似乎都很完美

func sendToOrderQueue(rID string, c Course) error {                            
  log.Println(1)
   var err error                                                                    
   sess := session.Must(session.New(&aws.Config{
      Region: aws.String("eu-central-1"),                                                                        
   }), err)                                            
   svc := sqs.New(sess)                                                              
   log.Println(2)                                                                    

   url := "https://sqs.eu-central-1.amazonaws.com/XXXXXX/myqueue"              

   log.Println(3)                                                                         
   result, err := svc.SendMessage(&sqs.SendMessageInput{                            
     DelaySeconds: aws.Int64(10),                                                    
     MessageAttributes: map[string]*sqs.MessageAttributeValue{                      
       "Title": &sqs.MessageAttributeValue{                                          
         DataType:    aws.String("String"),                                          
         StringValue: aws.String("The Whistler"),                                    
       },                                                                            
       "Author": &sqs.MessageAttributeValue{                                        
         DataType:    aws.String("String"),                                          
         StringValue: aws.String("John Grisham"),                                    
       },                                                                            
       "WeeksOn": &sqs.MessageAttributeValue{                                        
         DataType:    aws.String("Number"),                                          
         StringValue: aws.String("6"),                                              
       },                                                                            
     },                                                                              
     MessageBody: aws.String("Information about current NY Times fiction bestseller for week of 12/11/2016."),    
     QueueUrl:    &url,                                                              
   })
    log.Println(4)

   if err != nil {                                                              
     log.Println("Error", err)                                                  
      return err                                                                  
    }                                                                            

   log.Println(5, *result.MessageId, err)                                        
   return err                                                                    
  }
还有,我的serverless.yaml

service: client                                                          
  frameworkVersion: ">=1.28.0 <2.0.0"                                            

  provider:                                                                      
    name: aws                                                                    
    runtime: go1.x                                                                
    vpc: ${file(../security.yaml):vpc}                                            

  package:                                                                        
   exclude:                                                                      
     - ./**                                                                      
   include:                                                                      
     - ./bin/**                                                                  

  functions:
   postFunction:                                                    
    handler: bin/post                                                        
    environment:                                                                  
      REDIS_URL: ${file(../env.yaml):environment.REDIS_URL}                      
      HASH_KEY: ${file(../env.yaml):environment.HASH_KEY}
    events:                                                                      
     - http:                                                                      
        path: /func                                                            
        method: post                                                              
        cors: ${file(../cors.yaml):cors}
服务:客户端
框架版本:“>=1.28.0我也有同样的问题。
查看CloudWatch labmda的日志。出现如下错误

任务在10.01秒后超时

这是lambda的超时。关于sqs,您没有错误,因为lambda的超时小于http.Client in
svc.SendMessage
(SendMessage只是对aws api的POST请求)lambda在收到sqs的任何响应之前被终止。在我的例子中,lambda的响应时间为10秒,http请求的响应时间为30秒。将
LogLevel
添加到
aws.Config
,如下所示:

&aws.Config{
LogLevel:aws.LogLevel(aws.LogDebug),
}

您将在CloudWatch日志中看到此http请求。您还可以将lambda的超时设置为http.Client timeout的2-3倍,并在日志中看到重试(默认情况下为3次重试)

看起来lambda无法解析sqs或类似的主机,因为当VPC配置错误时,我会遇到相同的错误

UPD 修复了该问题。如果您在lambda中使用VPC,它应该具有从VPC访问SQS的特殊配置。请查看此处

我也有同样的问题。 查看CloudWatch labmda的日志。出现如下错误

任务在10.01秒后超时

这是lambda的超时。关于sqs,您没有错误,因为lambda的超时小于http.Client in
svc.SendMessage
(SendMessage只是对aws api的POST请求)lambda在收到sqs的任何响应之前被终止。在我的例子中,lambda的响应时间为10秒,http请求的响应时间为30秒。将
LogLevel
添加到
aws.Config
,如下所示:

&aws.Config{
LogLevel:aws.LogLevel(aws.LogDebug),
}

您将在CloudWatch日志中看到此http请求。您还可以将lambda的超时设置为http.Client timeout的2-3倍,并在日志中看到重试(默认情况下为3次重试)

看起来lambda无法解析sqs或类似的主机,因为当VPC配置错误时,我会遇到相同的错误

UPD
修复了该问题。如果您在lambda中使用VPC,它应该具有从VPC访问SQS的特殊配置。请查看此处

谢谢-这是一个很大的帮助。我需要确保有一个安全组,该组允许所有流量,而不仅仅是TCP进出。此安全组已分配给我的VPC中的SQS端点。谢谢-这是这是一个很大的帮助。我需要确保有一个安全组,允许所有流量,而不仅仅是TCP,进出。这个安全组被分配到我的vpc中的SQS端点。