Skip to content

Commit d3df849

Browse files
Fix/issue 893 - Add optional user-data to Rsyslog config (#902)
* update rsyslog to support custom user data * update rsyslog to support custom user data * add other regex replacements Co-authored-by: hickeydh-aws <hickeydh@amazon.com>
1 parent 5bb1a36 commit d3df849

File tree

5 files changed

+28
-3
lines changed

5 files changed

+28
-3
lines changed

src/deployments/cdk/src/deployments/rsyslog/step-2.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,7 @@ export function createAsg(
226226
maxInstanceHosts: rsyslogConfig['max-rsyslog-hosts'],
227227
maxInstanceAge: rsyslogConfig['rsyslog-max-instance-age'],
228228
enforceImdsv2: rsyslogConfig['rsyslog-enforce-imdsv2'],
229+
userData: rsyslogConfig['user-data'],
229230
});
230231
}
231232

src/lib/cdk-constructs/src/vpc/asg.ts

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ export interface RsysLogAutoScalingGroupProps extends cdk.StackProps {
3232
maxInstanceHosts: number;
3333
maxInstanceAge: number;
3434
enforceImdsv2: boolean;
35+
userData?: string;
3536
}
3637

3738
export class RsysLogAutoScalingGroup extends cdk.Construct {
@@ -82,9 +83,23 @@ export class RsysLogAutoScalingGroup extends cdk.Construct {
8283
],
8384
});
8485

85-
launchConfig.userData = cdk.Fn.base64(
86-
`#!/bin/bash\necho "[v8-stable]\nname=Adiscon CentOS-6 - local packages for \\$basearch\nbaseurl=http://rpms.adiscon.com/v8-stable/epel-6/\\$basearch\nenabled=0\ngpgcheck=0\ngpgkey=http://rpms.adiscon.com/RPM-GPG-KEY-Adiscon\nprotect=1" >> /etc/yum.repos.d/rsyslog.repo\nyum update -y\nyum install -y rsyslog --enablerepo=v8-stable --setopt=v8-stable.priority=1\nchkconfig rsyslog on\naws s3 cp s3://${props.centralBucketName}/rsyslog/rsyslog.conf /etc/rsyslog.conf\nservice rsyslog restart\nwget https://s3.${cdk.Aws.REGION}.amazonaws.com/amazoncloudwatch-agent-${cdk.Aws.REGION}/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm\nrpm -U ./amazon-cloudwatch-agent.rpm\ninstanceid=$(curl http://169.254.169.254/latest/meta-data/instance-id)\necho "{\\"logs\\": {\\"logs_collected\\": {\\"files\\": {\\"collect_list\\": [{\\"file_path\\": \\"/var/log/messages\\",\\"log_group_name\\": \\"${props.logGroupName}\\",\\"log_stream_name\\": \\"$instanceid\\"}]}}}}" >> /opt/aws/amazon-cloudwatch-agent/bin/config.json\n/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -s -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json`,
87-
);
86+
let launchConfigUserData = `#!/bin/bash\necho "[v8-stable]\nname=Adiscon CentOS-6 - local packages for \\$basearch\nbaseurl=http://rpms.adiscon.com/v8-stable/epel-6/\\$basearch\nenabled=0\ngpgcheck=0\ngpgkey=http://rpms.adiscon.com/RPM-GPG-KEY-Adiscon\nprotect=1" >> /etc/yum.repos.d/rsyslog.repo\nyum update -y\nyum install -y rsyslog --enablerepo=v8-stable --setopt=v8-stable.priority=1\nchkconfig rsyslog on\naws s3 cp s3://${props.centralBucketName}/rsyslog/rsyslog.conf /etc/rsyslog.conf\nservice rsyslog restart\nwget https://s3.${cdk.Aws.REGION}.amazonaws.com/amazoncloudwatch-agent-${cdk.Aws.REGION}/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm\nrpm -U ./amazon-cloudwatch-agent.rpm\ninstanceid=$(curl http://169.254.169.254/latest/meta-data/instance-id)\necho "{\\"logs\\": {\\"logs_collected\\": {\\"files\\": {\\"collect_list\\": [{\\"file_path\\": \\"/var/log/messages\\",\\"log_group_name\\": \\"${props.logGroupName}\\",\\"log_stream_name\\": \\"$instanceid\\"}]}}}}" >> /opt/aws/amazon-cloudwatch-agent/bin/config.json\n/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -s -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json`;
87+
88+
if (props.userData) {
89+
/* eslint-disable no-template-curly-in-string */
90+
const replaceTokens = new Map([
91+
['\\${SEA:CUSTOM::RsyslogLogGroupName}', props.logGroupName],
92+
['\\${SEA:CUSTOM::Region}', cdk.Aws.REGION],
93+
['\\${SEA:CUSTOM::CentralBucket}', props.centralBucketName],
94+
]);
95+
96+
launchConfigUserData = props.userData;
97+
for (const replaceToken of replaceTokens.entries()) {
98+
launchConfigUserData = launchConfigUserData.replace(new RegExp(replaceToken[0], 'g'), replaceToken[1]);
99+
}
100+
}
101+
102+
launchConfig.userData = cdk.Fn.base64(launchConfigUserData);
88103
}
89104
}
90105

src/lib/config-i18n/src/en.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1540,6 +1540,10 @@ translate(c.RsyslogConfig, {
15401540
description:
15411541
'The number of days before the auto-scaling group replaces any instance. This ensures a clean image is always deployed and if the state machine has been executed, will deploy the most recent patch release of the AMI.',
15421542
},
1543+
'user-data': {
1544+
title: 'user data',
1545+
description: 'Override the default user data EC2 init script.',
1546+
},
15431547
},
15441548
});
15451549

src/lib/config-i18n/src/fr.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1417,6 +1417,10 @@ translate(c.RsyslogConfig, {
14171417
title: '',
14181418
description: '',
14191419
},
1420+
'user-data': {
1421+
title: '',
1422+
description: '',
1423+
},
14201424
},
14211425
});
14221426

src/lib/config/src/config.v2.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,7 @@ export const RsyslogConfig = t.interface({
474474
'rsyslog-enforce-imdsv2': t.defaulted(t.boolean, false),
475475
'rsyslog-root-volume-size': t.number,
476476
'rsyslog-max-instance-age': t.number,
477+
'user-data': t.optional(t.nonEmptyString),
477478
});
478479

479480
export type RsyslogConfig = t.TypeOf<typeof RsyslogConfig>;

0 commit comments

Comments
 (0)