export async function handler()

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();
}