Aws lambda AWS CFN Lambda未向SQS发送所有消息
我是AWS cloudformation的新手,我的堆栈有问题。我让这些工作,但某处出了问题 Asume我有一个ArtifactBucket堆栈,其中包含.Net核心lambdas的zip文件以及IAM用户、角色和KMS密钥 我有一个主堆栈,它有一个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时,我需要多次调用它,然后才能收到消息,其中一
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控制台中的测试按钮最终会发送消息,但不是全部消息。。两周前我有一个工作的列克发条机,像你一样摆弄着一些东西,然后一切都结束了,我是一个,但现在卡住了…-)