これはなに?
AWSLambdaからTwilio Fnctionsへ値を渡すときに使用した例です。
例えばですが、CloudWatchAlarmの発生をトリガーにLambdaが動き、
LambdaからTwilio Functionsが呼び出されSMSの通知内容でアラート名をお知らせするなど行えると思います。
Lambda側
下記にて紹介されているコードを転用して作成しております。
今回はCloudWatchAlarmよりアラートが上がった際のアラート名を連携するようにしています。
index.js
exports.handler = function (event, context, callback) {
const crypto = require('crypto');
const https = require('https');
// Twilio Account Sid and Auth Token
const authToken = process.env.TWILIO_AUTH_TOKEN;
// Twilio Function Domain
let functionDomain = process.env.FUNCTION_DOMAIN;
// Make a X-Twilio-Signature
const signature = crypto.createHmac('sha1', authToken)
.update(new Buffer.from(`https://${functionDomain}/serial-call-studio`, 'utf-8'))
.digest('Base64');
const message = JSON.parse(event.Records[0].Sns.Message);
const alarmName = message.AlarmName;
const data = JSON.stringify({
alarm_name: alarmName,
});
// HTTPS Options
const options = {
method: "POST",
hostname: functionDomain,
port: 443,
path: '/serial-call-studio',
headers: {
'X-Twilio-Signature': signature
}
};
// Function request
const req = https.request(options, (res) => {
let result = '';
res.setEncoding('utf8');
res.on('data', (chunk) => {
result = chunk;
});
res.on('end', () => {
callback(null, result);
})
});
// Error handling
req.on('error', (e) => {
callback(e);
});
req.write(data);
req.end();
}
Twilio Function側
下記のような形で、event.<パラメーター名>
で値を取得することが出来ます。
twilio_function.js
exports.handler = function (context, event, callback) {
let alarm_name = event.alarm_name;
console.log(alarm_name)
};