簡體   English   中英

無法從 AWS lambda 函數 Nodejs 獲取實例

[英]Unable to get Instance from AWS lambda function Nodejs

我創建了一個 SNS 主題,一個雲監視事件(用於在任何實例狀態更改時觸發警報)和一個 lambda 函數,用於在觸發任何此類事件時向 3rd 方應用程序發送通知。

以下是我的 Lambda 代碼 -:

var https = require('https');
var util = require('util');

exports.handler = function(event, context) {
    console.log(JSON.stringify(event, null, 2));
    console.log('From SNS:', event.Records[0].Sns.Message);

    var message = event.Records[0].Sns.Message;
    
    var postData = {
        "text": message
    };

    var options = {
        method: 'POST',
        hostname: 'hooks.slack.com',
        port: 443,
        path: process.env.CHAT_API_PATH
    };

    var req = https.request(options, function(res) {
      res.setEncoding('utf8');
      res.on('data', function (chunk) {
        context.done(null);
      });
    });
    
    req.on('error', function(e) {
      console.log('problem with request: ' + e.message);
    });    

    req.write(util.format("%j", postData));
    req.end();
};

上面的代碼成功觸發了第 3 方應用程序(在 Slack 頻道上說)上的通知消息,並在任何實例狀態更改時顯示如下消息 -:

{"version":"0","id":"c15cd3c9-d0aa-ca2e-71bb-c9b892c562c7","detail-type":"EC2 Instance State-change Notification","source":"aws.ec2","account":"288468818145","time":"2021-07-14T07:05:31Z","region":"us-east-1","resources":["arn:aws:ec2:us-east-1:288468818145:instance/i-0a3305ab8922ad61a"],"detail":{"instance-id":"i-0a3305ab8922ad61a","state":"stopping"}}

唯一的問題是,我只想在通知消息中顯示我的實例的“實例 ID”和“狀態”,並希望我的 lambda 只傳遞這些值怎么辦?

PS -:我不想在 cloudwatch 目標中觸摸 SNS,即通過“輸入轉換器”來格式化我的消息,而是想純粹從 Lambda 處理它。

進一步研究后,通過在cloudwatch目標的“Input Transformer”中添加json組件得到了方法。

這將簡單地從 cloudwatch 警報消息中提取實例 id 和狀態,並將其傳遞給 SNS,后者進一步進入現有的 lambda 函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM