Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const logger = require('./logger'),
- AWS = require('aws-sdk'),
- CronJob = require('cron').CronJob;
- AWS.config.update({region: 'us-east-1'}); // change to your region
- var opts = {
- credentials: new AWS.EC2MetadataCredentials()// default to use the credentials for the ec2 instance
- };
- var elasticbeanstalk = new AWS.ElasticBeanstalk(opts);
- var ec2 = new AWS.EC2(opts);
- var metadata = new AWS.MetadataService(opts);
- function runTaskOnMaster(name, taskToRun) {
- logger.info('Beginning task: ' + name);
- return new Promise( (resolve, reject) => {
- metadata.request('/latest/meta-data/instance-id', (err, InstanceId) => {
- if (err) {return reject(err);}
- return resolve(InstanceId)
- });
- })
- .then((currentInstanceId) => {
- console.log('InstanceId', currentInstanceId);
- return new Promise( (resolve, reject) => {
- var params = {
- Filters: [
- {
- Name: 'resource-id',
- Values: [currentInstanceId]
- }
- ]
- };
- ec2.describeTags(params, (err, data) => {
- if (err) {return reject('dt' + err);}
- var envIdTag = data.Tags.find(t => t.Key === 'elasticbeanstalk:environment-id');
- if (envIdTag === null) {
- return reject('Failed to find the value of "elasticbeanstalk:environment-id" tag.');
- }
- elasticbeanstalk.describeEnvironmentResources({EnvironmentId: envIdTag.Value}, function (err, data) {
- if (err) { return reject('de' + err); }
- if (currentInstanceId !== data.EnvironmentResources.Instances[0].Id) { return resolve(false); }
- return resolve(true);
- });
- });
- });
- })
- .then( (isMaster) => {
- if (!isMaster) {
- logger.warn('Not running task as not master EB instance.');
- } else {
- logger.info('Identified as master EB instance. Running task.');
- taskToRun();
- }
- })
- .catch( (err) => logger.error(err));
- }
- logger.info('*** Starting Cron Jobs! ***');
- new CronJob('0 */5 * * * *', function() { //every 5 min
- runTaskOnMaster( 'Task 1', () => {
- //do cron work here.
- });
- }, null, true);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement