【问题标题】:Using GetAtt in inline Lambda nodejs code在内联 Lambda nodejs 代码中使用 GetAtt
【发布时间】:2019-11-29 23:06:14
【问题描述】:

我创建了一个简单的云形成模板,它为一个 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 调用尚未解决:

我正在寻找一种方法来解决/执行内联 Lambda 代码中的 GetAtt 调用。

【问题讨论】:

    标签: aws-lambda amazon-cloudformation amazon-sqs


    【解决方案1】:

    试试!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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-12
      • 1970-01-01
      • 2014-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多