Amazon web services SQS Lambda发布到同一堆栈中的同一SQS
我试图让lambda将SQS消息发布到lambda使用的同一个SQS Url。但是,我不知道如何在运行时获取队列url,也不想使用AWS机密。如何在运行时获取SQS Url?您最好在lamda函数中使用带有“QUEUE\u NAME”或“QUEUE\u Url”或类似内容的环境变量。别忘了确保lambda函数具有正确的策略,允许它在SQS队列上发布新消息 如果你能提供更多关于你正在使用的语言的细节,如果你正在使用像CDK这样的IaC,那么我可以提供一个代码示例 另外,我不知道它的具体应用,但是要小心无限的执行循环 编辑:在下面添加了代码示例:Amazon web services SQS Lambda发布到同一堆栈中的同一SQS,amazon-web-services,lambda,amazon-sqs,Amazon Web Services,Lambda,Amazon Sqs,我试图让lambda将SQS消息发布到lambda使用的同一个SQS Url。但是,我不知道如何在运行时获取队列url,也不想使用AWS机密。如何在运行时获取SQS Url?您最好在lamda函数中使用带有“QUEUE\u NAME”或“QUEUE\u Url”或类似内容的环境变量。别忘了确保lambda函数具有正确的策略,允许它在SQS队列上发布新消息 如果你能提供更多关于你正在使用的语言的细节,如果你正在使用像CDK这样的IaC,那么我可以提供一个代码示例 另外,我不知道它的具体应用,但是要
using Amazon.CDK;
using Amazon.CDK.AWS.Lambda;
using Amazon.CDK.AWS.SQS;
using Amazon.CDK.AWS.Events;
using Amazon.CDK.AWS.Events.Targets;
using Amazon.CDK.AWS.Lambda.EventSources;
...
// Function which gets called from cloudwatch event...
var scheduledFunction = new Function(this, "scheduled-function", new FunctionProps
{
// add props here
});
// SQS Queue which is consumed and added to...
var sqsQueue = new Queue(this, "sqs-queue", new QueueProps
{
// add props here
});
// Function which handles SQS messages from the queue...
var messageHandlerFunction = new Function(this, "code-function", new FunctionProps
{
// add props here
Environment = new Dictionary<string, string>
{
{"SQS_URL",sqsQueue.QueueUrl}
}
});
// Allow scheduler function to send SQS messages...
sqsQueue.GrantSendMessages(scheduledFunction);
// Allow scheduler function to consume and send SQS messages...
sqsQueue.GrantConsumeMessages(messageHandlerFunction);
sqsQueue.GrantSendMessages(messageHandlerFunction);
// Set event message handler function to consume messages...
messageHandlerFunction.AddEventSource(new SqsEventSource(sqsQueue));
// Scheduled event to run every 30 minutes...
var scheduledEvent = new Rule(this, "every-half-hour-rule", new RuleProps
{
Description = "Every 30 minutes.",
Enabled = true,
RuleName = "every-thirty-minutes",
Schedule = null,
Targets = new IRuleTarget[]
{
new LambdaFunction(scheduledFunction)
}
});
...
使用Amazon.CDK;
使用Amazon.CDK.AWS.Lambda;
使用Amazon.CDK.AWS.SQS;
使用Amazon.CDK.AWS.Events;
使用Amazon.CDK.AWS.Events.Targets;
使用Amazon.CDK.AWS.Lambda.EventSources;
...
//从cloudwatch事件调用的函数。。。
var scheduledFunction=新函数(此“预定函数”,新函数)
{
//在这里添加道具
});
//已使用并添加到的SQS队列。。。
var sqsQueue=new Queue(这是“sqs Queue”,new QueueProps
{
//在这里添加道具
});
//处理来自队列的SQS消息的函数。。。
var messageHandlerFunction=新函数(此“代码函数”,新函数)
{
//在这里添加道具
环境=新字典
{
{“SQS_URL”,sqsque.QueueUrl}
}
});
//允许计划程序功能发送SQS消息。。。
sqsque.GrantSendMessages(scheduledFunction);
//允许计划程序功能使用和发送SQS消息。。。
sqsque.GrantConsumeMessages(messageHandlerFunction);
GrantSendMessages(messageHandlerFunction);
//设置事件消息处理程序函数以使用消息。。。
AddEventSource(新的SqsEventSource(sqsQueue));
//计划每30分钟运行一次的事件。。。
var scheduledEvent=new Rule(这是“每半小时一次的规则”,new RuleProps
{
Description=“每30分钟一次。”,
启用=真,
RuleName=“每三十分钟”,
Schedule=null,
目标=新的IRuleTarget[]
{
新lambdfunction(scheduledFunction)
}
});
...
我不太明白你在问什么。你有URL要使用,你缺少什么?嘿,Alex,谢谢你的回复。我正在使用CDK来表示C#。我有两个lambda(一个是由速率触发的(每30分钟一次),另一个是基于SQS队列的事件驱动的)。由速率触发的lambda需要能够使用SQS(这是我们需要SQS Url的地方)将消息发布到lambda,这有帮助吗?哦,这真是梦幻。给我五分钟:)@SteveShort我认为上面的例子就是将SQS url放入环境变量所需的一切。您可以使用编写lambda函数所用的语言像引用任何其他环境变量一样引用此环境变量。好的,团队和我正在尝试此方法,我们会让您知道我们得到了什么!