packages/cdk/lib/cloudquery-usage.ts (43 lines of code) (raw):
import { GuScheduledLambda } from '@guardian/cdk';
import type { GuStack } from '@guardian/cdk/lib/constructs/core';
import type { GuSecurityGroup } from '@guardian/cdk/lib/constructs/ec2';
import type { IVpc } from 'aws-cdk-lib/aws-ec2';
import { Schedule } from 'aws-cdk-lib/aws-events';
import { Architecture, Runtime } from 'aws-cdk-lib/aws-lambda';
import type { DatabaseInstance } from 'aws-cdk-lib/aws-rds';
import type { Secret as SecretsManager } from 'aws-cdk-lib/aws-secretsmanager/lib/secret';
interface CloudqueryUsageProps {
vpc: IVpc;
db: DatabaseInstance;
dbAccess: GuSecurityGroup;
cloudqueryApiKey: SecretsManager;
}
export function addCloudqueryUsageLambda(
scope: GuStack,
props: CloudqueryUsageProps,
) {
const app = 'cloudquery-usage';
const { vpc, dbAccess, db, cloudqueryApiKey } = props;
const lambda = new GuScheduledLambda(scope, 'CloudqueryUsage', {
app,
vpc,
fileName: `${app}.zip`,
handler: 'index.main',
monitoringConfiguration: { noMonitoring: true },
architecture: Architecture.ARM_64,
runtime: Runtime.NODEJS_20_X,
securityGroups: [dbAccess],
environment: {
DATABASE_HOSTNAME: db.dbInstanceEndpointAddress,
QUERY_LOGGING: 'false', // Set this to 'true' to enable SQL query logging
CQ_API_KEY_PATH: cloudqueryApiKey.secretName,
},
rules: [
{
schedule: Schedule.cron({ hour: '9', minute: '0' }),
},
],
});
cloudqueryApiKey.grantRead(lambda);
db.grantConnect(lambda, 'cloudquery_usage');
}