Aws lambda AWS CFN Lambda未向SQS发送所有消息

Aws lambda AWS CFN Lambda未向SQS发送所有消息,aws-lambda,amazon-cloudformation,amazon-sqs,Aws Lambda,Amazon Cloudformation,Amazon Sqs,我是AWS cloudformation的新手,我的堆栈有问题。我让这些工作,但某处出了问题 Asume我有一个ArtifactBucket堆栈,其中包含.Net核心lambdas的zip文件以及IAM用户、角色和KMS密钥 我有一个主堆栈,它有一个creatorlambda,它将向SQS队列发送一条消息。处理器功能将接收该消息并将其发送给SNS,然后SNS将向我发送电子邮件(请参阅订阅) 它在AWS控制台中部署得很好,但我发现,当我调用lambda时,我需要多次调用它,然后才能收到消息,其中一

我是AWS cloudformation的新手,我的堆栈有问题。我让这些工作,但某处出了问题

Asume我有一个ArtifactBucket堆栈,其中包含.Net核心lambdas的zip文件以及IAM用户、角色和KMS密钥

我有一个主堆栈,它有一个
creatorlambda
,它将向
SQS队列发送一条消息。处理器功能将接收该消息并将其发送给SNS,然后SNS将向我发送电子邮件(请参阅订阅)

它在AWS控制台中部署得很好,但我发现,当我调用lambda时,我需要多次调用它,然后才能收到消息,其中一些消息会丢失。例如我将一个接一个地发送5条消息,但只收到4条消息

我怀疑这是lambda和队列上的超时问题,但我正在努力找出原因

您是否发现此主模板中缺少任何明显的内容,或者队列属性和lambda时间值存在问题

   "DelaySeconds" : 0,
   "MessageRetentionPeriod" : 900,
   "ReceiveMessageWaitTimeSeconds" : 5,
   "VisibilityTimeout" : 120,
堆栈模板:

{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Description": "Template to create IntergrationQueue, Intergrator and use storage bucket",
  "Parameters": {
    "ArtifactBucketName": {
      "Type": "String"
    },
    "StorageBucketArn": {
      "Type": "String"
    },
    "JogDayIAMUserArn": {
      "Type": "String"
    },
    "JogDayIAMRoleArn": {
      "Type": "String"
    },
    "JogDayKMSKeyArn": {
      "Type": "String"
    }
  },
  "Resources": {  
    "DLQ": {
      "Type": "AWS::SQS::Queue",
      "DeletionPolicy": "Delete",
      "Properties": {
        "KmsMasterKeyId": {
          "Ref": "JogDayKMSKeyArn"
        }
      }
    },
    "Queue": {
      "Type": "AWS::SQS::Queue",
      "DeletionPolicy": "Delete",
      "DependsOn": "DLQ",
      "Properties": {
        "QueueName": "JogDayQueue",
        "DelaySeconds" : 0,
        "MessageRetentionPeriod" : 900,
        "ReceiveMessageWaitTimeSeconds" : 5,
        "VisibilityTimeout" : 120,
        "RedrivePolicy": {        
          "deadLetterTargetArn": {
            "Fn::GetAtt": [
              "DLQ",
              "Arn"
            ]
          },
          "maxReceiveCount" : 10          
        },
        "KmsMasterKeyId": {
          "Ref": "JogDayKMSKeyArn"
        },
        "Tags": [
          {
            "Key": "jogday",
            "Value": "jogday"
          }
        ]
      }
    },
    "JogDayTopic": {
      "Type": "AWS::SNS::Topic",      
      "DeletionPolicy": "Delete",
      "Properties": {
        "DisplayName": "JogDay topic",
        "KmsMasterKeyId" : {"Ref":"JogDayKMSKeyArn"},        
        "TopicName" : "JogDayEmailTopic",      
        "Tags": [
          {
            "Key": "jogday",
            "Value": "jogday"
          }
        ]
      }
    },
    "JogDayQueuePolicy": {
      "Type": "AWS::SQS::QueuePolicy",
      "Description" : "Intergration Queue Policy",
      "DependsOn" : ["Queue","CreatorLambdaFunction"],
      "DeletionPolicy" : "Delete",      
      "Properties": {      
        "Queues": [{ "Ref":"Queue" }],        
        "PolicyDocument": {
          "Statement": [
            {
              "Effect": "Allow",
              "Principal": {
                "Service": "sns.amazonaws.com"
              },
              "Action": [
                "SQS:SendMessage",
                "SQS:ReceiveMessage"
              ],
              "Resource": {
                "Fn::GetAtt": [
                  "Queue",
                  "Arn"
                ]
              },
              "Condition": {
                "ArnEquals": {
                  "aws:SourceArn":{
                    "Fn::GetAtt": [
                      "CreatorLambdaFunction",
                      "Arn"
                    ]
                  }
                }
              }
            }
          ]
        }
      }
    },
    "JogDaySubscription": {
      "Type": "AWS::SNS::Subscription",      
      "DeletionPolicy": "Delete",
      "Properties": {      
        "TopicArn": {
          "Ref": "JogDayTopic"
        },
        "Endpoint": "some.email@gmail.com",
        "Protocol": "email"
      },
      "DependsOn": [
        "JogDayTopic"
      ]
    },
    "CreatorLambdaFunction": {
      "Type": "AWS::Lambda::Function",
      "DeletionPolicy": "Delete",    
      "Properties": {
        "Runtime": "dotnetcore3.1",
        "FunctionName": "CreatorFunction",
        "Description": "Function that will take a message and send it to a SQS queue",
        "Code": {
          "S3Bucket": {
            "Ref": "ArtifactBucketName"
          },
          "S3Key": "CreatorFunction.zip"
        },
        "Handler": "CreatorFunction::CreatorFunction.Function::FunctionHandler",
        "Role": { "Ref": "JogDayIAMRoleArn" },
        "DeadLetterConfig": {
          "TargetArn": {
            "Fn::GetAtt": [
              "DLQ",
              "Arn"
            ]
          }
        },        
        "Tags": [
          {
            "Key": "jogday",
            "Value": "jogday"
          }
        ],
        "Timeout": 120,        
        "KmsKeyArn": {
          "Ref": "JogDayKMSKeyArn"
        },
        "Environment": {
          "Variables": {
            "QueueName": {
              "Fn::GetAtt": [
                "Queue",
                "QueueName"
              ]
            },
            "DLQName": {
              "Fn::GetAtt": [
                "DLQ",
                "QueueName"
              ]
            }
          }
        }
      }
    },
    "CreatorLambdaFunctionInvokePermission": {
      "Type": "AWS::Lambda::Permission",
      "DeletionPolicy": "Delete",
      "Properties": {
        "FunctionName": {
          "Fn::GetAtt": [
            "CreatorLambdaFunction",
            "Arn"
          ]
        },
        "Action": "lambda:InvokeFunction",
        "Principal": {
          "Ref": "JogDayIAMUserArn"
        },
        "SourceAccount": {
          "Ref": "AWS::AccountId"
        }
      }
    },
    "ProcessorLambdaFunction": {
      "Type": "AWS::Lambda::Function",
      "DeletionPolicy": "Delete",    
      "DependsOn" : ["Queue","DLQ","JogDayTopic"],
      "Properties": {
        "Runtime": "dotnetcore3.1",
        "FunctionName": "ProcessorFunction",
        "Description": "Function that will receive a message from sqs and send it to sns",
        "Code": {
          "S3Bucket": {
            "Ref": "ArtifactBucketName"
          },
          "S3Key": "ProcessorFunction.zip"
        },
        "Handler": "ProcessorFunction::ProcessorFunction.Function::FunctionHandler",        
        "Role": { "Ref": "JogDayIAMRoleArn" },
        "DeadLetterConfig": {
          "TargetArn": {
            "Fn::GetAtt": [
              "DLQ",
              "Arn"
            ]
          }
        },        
        "Tags": [
          {
            "Key": "jogday",
            "Value": "jogday"
          }
        ],
        "Timeout": 120,
        "KmsKeyArn": {
          "Ref": "JogDayKMSKeyArn"
        },
        "Environment": {
          "Variables": {
            "QueueName": {
              "Fn::GetAtt": [
                "Queue",
                "QueueName"
              ]
            },
            "DLQName": {
              "Fn::GetAtt": [
                "DLQ",
                "QueueName"
              ]
            },
            "JogDayTopicArn": {"Ref" : "JogDayTopic" },         
            "JogDayTopicName": {
              "Fn::GetAtt": [
                "JogDayTopic",
                "TopicName"
              ]
            }       
          }
        }
      }
    },
    "ProcessorLambdaFunctionInvokePermission": {
      "Type": "AWS::Lambda::Permission",
      "DeletionPolicy": "Delete",
      "Properties": {
        "FunctionName": {
          "Fn::GetAtt": [
            "ProcessorLambdaFunction",
            "Arn"
          ]
        },
        "Action": "lambda:InvokeFunction",
        "Principal": {
          "Ref": "JogDayIAMUserArn"
        },
        "SourceAccount": {
          "Ref": "AWS::AccountId"
        }
      }
    },
    "ProcessorLambdaEventSourceMapping": {
      "Type": "AWS::Lambda::EventSourceMapping",
      "DeletionPolicy": "Delete",
      "DependsOn": ["ProcessorLambdaFunction","Queue"],
      "Properties": {
       "BatchSize" : 10,
       "Enabled" : true,
       "EventSourceArn" : {
          "Fn::GetAtt": [
            "Queue",
            "Arn"
          ]
        },
        "FunctionName" : {
          "Fn::GetAtt": [
            "ProcessorLambdaFunction",
            "Arn"
          ]
        }     
      }
    }
  },
  "Outputs": {
    "QueueArn": {
      "Value": {
        "Fn::GetAtt": [
          "Queue",
          "Arn"
        ]
      }
    },
    "DLQArn": {
      "Value": {
        "Fn::GetAtt": [
          "DLQ",
          "Arn"
        ]
      }
    },
    "JogDayTopicName":{
     "Value": {
        "Fn::GetAtt": [
          "JogDayTopic",
          "TopicName"
        ]
      }
    }
  }
}

可能是lambda函数的问题,而不是模板的问题。嘿,谢谢你的回复。据我所知,lambda很好用。创建者lambda只需将消息发送到队列中,我可以看到消息始终在队列中结束。处理器功能然后从队列中获取消息,并将其发送到sns(假定是…)。。。。反复点击AWS控制台中的测试按钮最终会发送消息,但不是全部消息。。两周前我有一个工作的列克发条机,像你一样摆弄着一些东西,然后一切都结束了,我是一个,但现在卡住了…-)