in src/detect-drift.lambda.ts [10:47]
export async function handler() {
if (!process.env.metricNamespace) {
throw new Error(`Missing environment variables. metricNamespace: ${process.env.metricNamespace}`);
}
const requestedStackNames = process.env.stackNames?.split(',');
const metricNamespace = process.env.metricNamespace;
console.log(`requestedStackNames: ${requestedStackNames}`);
const stacks = await getStacks(requestedStackNames);
const notFoundStacks = requestedStackNames?.filter(stackName => !stacks.map(x => x.StackName).includes(stackName));
if (notFoundStacks?.length ?? 0 >= 1) {
throw new Error(`One or more stacks not found: ${notFoundStacks}`);
}
const eligibleStacks = stacks.filter(isEligibleStatus);
console.log(`eligibleStacks: ${eligibleStacks.map(x => x.StackName)}`);
let driftStatusList: (StackDriftStatus | undefined)[] = [];
for (const stack of eligibleStacks) {
const driftDetectionId = await detectDriftAndGetDetectionId(stack);
const driftStatus = await getDriftStatus(stack, driftDetectionId);
driftStatusList = [...driftStatusList, driftStatus];
}
const numOfDriftedStacks = driftStatusList.filter(status => status === 'DRIFTED').length;
console.log(`found ${numOfDriftedStacks} drifted stacks`);
await cloudwatch.putMetricData({
MetricData: [
{
MetricName: 'DriftedStacks',
Unit: 'Count',
Value: numOfDriftedStacks,
},
],
Namespace: metricNamespace,
}).promise();
}