在内联 Lambda nodejs 代码中使用 GetAtt
Using GetAtt in inline Lambda nodejs code
我创建了一个简单的云形成模板,该模板将一个 "message splitter" 用于一个 SQS 队列,并将消息分发到其他 4 个队列中。
Cloudformation 模板的相关部分是
ProdSqsDistributor:
Type: 'AWS::Lambda::Function'
Properties:
Code:
ZipFile: |
var AWS = require('aws-sdk');
var sqs = new AWS.SQS({region : 'us-east-1'});
var sns = new AWS.SNS({region : 'us-east-1'});
exports.handler = async (event) => {
//console.log('Received event:', JSON.stringify(event, null, 2));
const promises = event.Records.map( async message => {
var messageId = message.messageId;
var body = message.body;
console.log('SQS message %s: %j', messageId, body);
if (body.indexOf('App\\Jobs\\CNC\\ConvertFile') !== -1){
console.log('cnc1 matched');
await sqs.sendMessage({MessageBody: body, QueueUrl: '!GetAtt ProdCnc.Arn'})
...
ProdCnc:
Type: 'AWS::SQS::Queue'
Properties:
DelaySeconds: 0
VisibilityTimeout: 120
ReceiveMessageWaitTimeSeconds: 20
根据模板,我想将目标队列的 arn 嵌入到内联 Lambda nodejs 代码中。
Cloudformation 模板成功运行,但队列拆分不起作用。当我查看创建的 lambda 函数时,似乎 GetAtt 调用尚未解析:
我正在寻找一种方法来 resolve/execute 内联 Lambda 代码中的 GetAtt 调用。
尝试 !Sub
:
ProdSqsDistributor:
Type: 'AWS::Lambda::Function'
Properties:
Code:
ZipFile: !Sub
- |
var AWS = require('aws-sdk');
var sqs = new AWS.SQS({region : 'us-east-1'});
var sns = new AWS.SNS({region : 'us-east-1'});
exports.handler = async (event) => {
//console.log('Rcvd event:', JSON.stringify(event, null, 2));
const promises = event.Records.map( async message => {
var messageId = message.messageId;
var body = message.body;
console.log('SQS message %s: %j', messageId, body);
if (body.indexOf('App\\Jobs\\CNC\\ConvertFile') !== -1){
console.log('cnc1 matched');
await sqs.sendMessage({MessageBody: body, QueueUrl: '${ProdCncArb}'})
- ProdCncArb: !GetAtt ProdCnc.Arn
我创建了一个简单的云形成模板,该模板将一个 "message splitter" 用于一个 SQS 队列,并将消息分发到其他 4 个队列中。
Cloudformation 模板的相关部分是
ProdSqsDistributor:
Type: 'AWS::Lambda::Function'
Properties:
Code:
ZipFile: |
var AWS = require('aws-sdk');
var sqs = new AWS.SQS({region : 'us-east-1'});
var sns = new AWS.SNS({region : 'us-east-1'});
exports.handler = async (event) => {
//console.log('Received event:', JSON.stringify(event, null, 2));
const promises = event.Records.map( async message => {
var messageId = message.messageId;
var body = message.body;
console.log('SQS message %s: %j', messageId, body);
if (body.indexOf('App\\Jobs\\CNC\\ConvertFile') !== -1){
console.log('cnc1 matched');
await sqs.sendMessage({MessageBody: body, QueueUrl: '!GetAtt ProdCnc.Arn'})
...
ProdCnc:
Type: 'AWS::SQS::Queue'
Properties:
DelaySeconds: 0
VisibilityTimeout: 120
ReceiveMessageWaitTimeSeconds: 20
根据模板,我想将目标队列的 arn 嵌入到内联 Lambda nodejs 代码中。
Cloudformation 模板成功运行,但队列拆分不起作用。当我查看创建的 lambda 函数时,似乎 GetAtt 调用尚未解析:
我正在寻找一种方法来 resolve/execute 内联 Lambda 代码中的 GetAtt 调用。
尝试 !Sub
:
ProdSqsDistributor:
Type: 'AWS::Lambda::Function'
Properties:
Code:
ZipFile: !Sub
- |
var AWS = require('aws-sdk');
var sqs = new AWS.SQS({region : 'us-east-1'});
var sns = new AWS.SNS({region : 'us-east-1'});
exports.handler = async (event) => {
//console.log('Rcvd event:', JSON.stringify(event, null, 2));
const promises = event.Records.map( async message => {
var messageId = message.messageId;
var body = message.body;
console.log('SQS message %s: %j', messageId, body);
if (body.indexOf('App\\Jobs\\CNC\\ConvertFile') !== -1){
console.log('cnc1 matched');
await sqs.sendMessage({MessageBody: body, QueueUrl: '${ProdCncArb}'})
- ProdCncArb: !GetAtt ProdCnc.Arn