Amazon web services SQS Lambda发布到同一堆栈中的同一SQS

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,那么我可以提供一个代码示例 另外,我不知道它的具体应用,但是要

我试图让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函数所用的语言像引用任何其他环境变量一样引用此环境变量。好的,团队和我正在尝试此方法,我们会让您知道我们得到了什么!