看起来非常简单,但很难找到很好的例子. 因此,任务如下:AWS lambda向AWS-SQS发送一些消息. AWS lambda代码包含以下行: var QUEUE_URL = 'https://sqs.us-west-2.amazonaws.com/ID/QUEUE_NAME';", 为了摆脱这个代
因此,任务如下:AWS lambda向AWS-SQS发送一些消息.
AWS lambda代码包含以下行:
var QUEUE_URL = 'https://sqs.us-west-2.amazonaws.com/ID/QUEUE_NAME';",
为了摆脱这个代码,有两种选择:
>创建将根据区域和队列名称SQS has predictable names查找此队列的查询;
>创建Cloud Formaion脚本并在那里指定这些依赖项.
基于这一事实,周期性触发器(lambda)将每天工作多次,最好指定此依赖性duting部署.
通常,它看起来像是直接的任务和云编队脚本创建:
"Resources": { "LF2HNR1": { "Type": "AWS::Lambda::Function", "Properties": { "Description": "This is lambda trigger", "Handler": "index.myHandler", "Runtime": "nodejs", "Timeout": "300",
并且还指定了依赖于SQS的依赖:
"DependsOn": [ "SQSQ562D4" ] }, "SQSQ562D4": { "Type": "AWS::SQS::Queue", "Properties": {}, }
Hovewer如何以编程方式获取lambda代码中的SQS url,这不是直截了当的任务:
exports.handler = function(event, context) { var params = { MessageBody: JSON.stringify(event), var QUEUE_URL = ????我建议您检索SQS URL并将其用作CloudFormation输出:
"Outputs" : { "SQSQ562D4" : { "Description" : "URL of the source queue", "Value" : { "Ref" : "SQSQ562D4" } } }
授予您的Lambda函数cloudformation:DescribeStacks读取CloudFormation堆栈输出的权限,并在运行时在代码中加载此输出以访问SQS URL.
编辑:请勿使用以下答案中的方法.它在函数运行时加载资源配置(队列URI),而不是在Lambda Function部署时注入它.以下方法增加了延迟,可能存在AWS服务速率限制的随机问题,并且可能依赖于AWS CloudFormation API.