@gammarers/aws-sns-slack-message-lambda-subscription
Version:
This AWS CDK Construct is designed to post messages sent from an SNS topic to a Slack Webhook via a Lambda function.
51 lines • 7.24 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.handler = void 0;
const webhook_1 = require("@slack/webhook");
const axios_1 = require("axios");
const SECRET_MANAGER_GET_URL = 'http://localhost:2773/secretsmanager/get';
const AWS_SESSION_TOKEN = process.env.AWS_SESSION_TOKEN || '';
class NotSetSecretStringError extends Error {
constructor() {
super('get object is empty');
this.name = 'NotSetSecretStringError';
}
}
const handler = async (event, context) => {
console.log({ event, context });
const axiosRequestConfig = {
params: {
secretId: encodeURIComponent(process.env.SLACK_WEBOOK_SECRET_NAME), // require URI Encord "/"
// withDecryption: true,
},
headers: {
'X-Aws-Parameters-Secrets-Token': AWS_SESSION_TOKEN,
},
};
let slackWebhookSecrets = null;
return axios_1.default.get(SECRET_MANAGER_GET_URL, axiosRequestConfig)
.then((value) => {
slackWebhookSecrets = JSON.parse(value.data.SecretString);
if (!slackWebhookSecrets) {
throw new NotSetSecretStringError();
}
const webhook = new webhook_1.IncomingWebhook(`https://hooks.slack.com/services/${slackWebhookSecrets.Workspace}/${slackWebhookSecrets.Channel}/${slackWebhookSecrets.Webhook}`);
const promises = event.Records.map((record) => {
const id = record.Sns.MessageId;
console.log({ MessageId: id });
//const subject = record.Sns.Subject;
const message = record.Sns.Message;
const jsonMessage = JSON.parse(message);
return webhook.send(jsonMessage);
});
return Promise.all(promises);
})
.then((results) => {
console.info({ Succeed: 'Webhook Sent', results });
})
.catch((error) => {
throw error;
});
};
exports.handler = handler;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1zbGFjay1tZXNzYWdlLmxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mdW5jcy9zZW5kLXNsYWNrLW1lc3NhZ2UubGFtYmRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDRDQUFzRztBQUV0RyxpQ0FBMEI7QUFFMUIsTUFBTSxzQkFBc0IsR0FBRywwQ0FBMEMsQ0FBQztBQUMxRSxNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDO0FBUTlELE1BQU0sdUJBQXdCLFNBQVEsS0FBSztJQUN6QztRQUNFLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxJQUFJLEdBQUcseUJBQXlCLENBQUM7SUFDeEMsQ0FBQztDQUNGO0FBRU0sTUFBTSxPQUFPLEdBQUcsS0FBSyxFQUFFLEtBQWUsRUFBRSxPQUFnQixFQUFpQixFQUFFO0lBQ2hGLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUVoQyxNQUFNLGtCQUFrQixHQUFHO1FBQ3pCLE1BQU0sRUFBRTtZQUNOLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF5QixDQUFDLEVBQUUseUJBQXlCO1lBQzlGLHdCQUF3QjtTQUN6QjtRQUNELE9BQU8sRUFBRTtZQUNQLGdDQUFnQyxFQUFFLGlCQUFpQjtTQUNwRDtLQUNGLENBQUM7SUFFRixJQUFJLG1CQUFtQixHQUErQixJQUFJLENBQUM7SUFFM0QsT0FBTyxlQUFLLENBQUMsR0FBRyxDQUFDLHNCQUFzQixFQUFFLGtCQUFrQixDQUFDO1NBQ3pELElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ2QsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSx1QkFBdUIsRUFBRSxDQUFDO1FBQ3RDLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLHlCQUFlLENBQUMsb0NBQW9DLG1CQUFtQixDQUFDLFNBQVMsSUFBSSxtQkFBbUIsQ0FBQyxPQUFPLElBQUksbUJBQW1CLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUV2SyxNQUFNLFFBQVEsR0FBcUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFzQixFQUFFLEVBQUU7WUFDOUYsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7WUFDaEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQy9CLHFDQUFxQztZQUNyQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztZQUNuQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBaUMsQ0FBQztZQUN4RSxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0IsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUFDLENBQUMsT0FBZ0MsRUFBRSxFQUFFO1FBQ3pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDckQsQ0FBQyxDQUFDO1NBQ0QsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDZixNQUFNLEtBQUssQ0FBQztJQUNkLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDO0FBeENXLFFBQUEsT0FBTyxXQXdDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmNvbWluZ1dlYmhvb2ssIEluY29taW5nV2ViaG9va1Jlc3VsdCwgSW5jb21pbmdXZWJob29rU2VuZEFyZ3VtZW50cyB9IGZyb20gJ0BzbGFjay93ZWJob29rJztcbmltcG9ydCB7IENvbnRleHQsIFNOU0V2ZW50LCBTTlNFdmVudFJlY29yZCB9IGZyb20gJ2F3cy1sYW1iZGEnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcblxuY29uc3QgU0VDUkVUX01BTkFHRVJfR0VUX1VSTCA9ICdodHRwOi8vbG9jYWxob3N0OjI3NzMvc2VjcmV0c21hbmFnZXIvZ2V0JztcbmNvbnN0IEFXU19TRVNTSU9OX1RPS0VOID0gcHJvY2Vzcy5lbnYuQVdTX1NFU1NJT05fVE9LRU4gfHwgJyc7XG5cbmludGVyZmFjZSBTbGFja1dlYmhvb2tTZWNyZXRzIHtcbiAgcmVhZG9ubHkgV29ya3NwYWNlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IENoYW5uZWw6IHN0cmluZztcbiAgcmVhZG9ubHkgV2ViaG9vazogc3RyaW5nO1xufVxuXG5jbGFzcyBOb3RTZXRTZWNyZXRTdHJpbmdFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ2dldCBvYmplY3QgaXMgZW1wdHknKTtcbiAgICB0aGlzLm5hbWUgPSAnTm90U2V0U2VjcmV0U3RyaW5nRXJyb3InO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVyID0gYXN5bmMgKGV2ZW50OiBTTlNFdmVudCwgY29udGV4dDogQ29udGV4dCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zb2xlLmxvZyh7IGV2ZW50LCBjb250ZXh0IH0pO1xuXG4gIGNvbnN0IGF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICBwYXJhbXM6IHtcbiAgICAgIHNlY3JldElkOiBlbmNvZGVVUklDb21wb25lbnQocHJvY2Vzcy5lbnYuU0xBQ0tfV0VCT09LX1NFQ1JFVF9OQU1FISksIC8vIHJlcXVpcmUgVVJJIEVuY29yZCBcIi9cIlxuICAgICAgLy8gd2l0aERlY3J5cHRpb246IHRydWUsXG4gICAgfSxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAnWC1Bd3MtUGFyYW1ldGVycy1TZWNyZXRzLVRva2VuJzogQVdTX1NFU1NJT05fVE9LRU4sXG4gICAgfSxcbiAgfTtcblxuICBsZXQgc2xhY2tXZWJob29rU2VjcmV0czogU2xhY2tXZWJob29rU2VjcmV0cyB8IG51bGwgPSBudWxsO1xuXG4gIHJldHVybiBheGlvcy5nZXQoU0VDUkVUX01BTkFHRVJfR0VUX1VSTCwgYXhpb3NSZXF1ZXN0Q29uZmlnKVxuICAgIC50aGVuKCh2YWx1ZSkgPT4ge1xuICAgICAgc2xhY2tXZWJob29rU2VjcmV0cyA9IEpTT04ucGFyc2UodmFsdWUuZGF0YS5TZWNyZXRTdHJpbmcpO1xuICAgICAgaWYgKCFzbGFja1dlYmhvb2tTZWNyZXRzKSB7XG4gICAgICAgIHRocm93IG5ldyBOb3RTZXRTZWNyZXRTdHJpbmdFcnJvcigpO1xuICAgICAgfVxuICAgICAgY29uc3Qgd2ViaG9vayA9IG5ldyBJbmNvbWluZ1dlYmhvb2soYGh0dHBzOi8vaG9va3Muc2xhY2suY29tL3NlcnZpY2VzLyR7c2xhY2tXZWJob29rU2VjcmV0cy5Xb3Jrc3BhY2V9LyR7c2xhY2tXZWJob29rU2VjcmV0cy5DaGFubmVsfS8ke3NsYWNrV2ViaG9va1NlY3JldHMuV2ViaG9va31gKTtcblxuICAgICAgY29uc3QgcHJvbWlzZXM6IFByb21pc2U8SW5jb21pbmdXZWJob29rUmVzdWx0PltdID0gZXZlbnQuUmVjb3Jkcy5tYXAoKHJlY29yZDogU05TRXZlbnRSZWNvcmQpID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSByZWNvcmQuU25zLk1lc3NhZ2VJZDtcbiAgICAgICAgY29uc29sZS5sb2coeyBNZXNzYWdlSWQ6IGlkIH0pO1xuICAgICAgICAvL2NvbnN0IHN1YmplY3QgPSByZWNvcmQuU25zLlN1YmplY3Q7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSByZWNvcmQuU25zLk1lc3NhZ2U7XG4gICAgICAgIGNvbnN0IGpzb25NZXNzYWdlID0gSlNPTi5wYXJzZShtZXNzYWdlKSBhcyBJbmNvbWluZ1dlYmhvb2tTZW5kQXJndW1lbnRzO1xuICAgICAgICByZXR1cm4gd2ViaG9vay5zZW5kKGpzb25NZXNzYWdlKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgIH0pXG4gICAgLnRoZW4oKHJlc3VsdHM6IEluY29taW5nV2ViaG9va1Jlc3VsdFtdKSA9PiB7XG4gICAgICBjb25zb2xlLmluZm8oeyBTdWNjZWVkOiAnV2ViaG9vayBTZW50JywgcmVzdWx0cyB9KTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xufTsiXX0=