in src/backend/deny-list/prune-handler.lambda.ts [15:81]
export async function handler(event: unknown) {
console.log(`Event: ${JSON.stringify(event)}`);
const client = await DenyListClient.newClient();
await metricScope((metrics) => async () => {
metrics.setDimensions();
const ruleCount = Object.keys(client.map).length;
metrics.putMetric(MetricName.DENY_LIST_RULE_COUNT, ruleCount, Unit.Count);
})();
const packageData = requireEnv(ENV_PRUNE_PACKAGE_DATA_BUCKET_NAME);
const pruneQueue = requireEnv(ENV_PRUNE_QUEUE_URL);
const keyPrefix = requireEnv(ENV_PRUNE_PACKAGE_DATA_KEY_PREFIX);
const objectsFound = new Array<string>();
for (const nameVersion of Object.keys(client.map)) {
const prefix = `${keyPrefix}${nameVersion}/`;
console.log(`Querying bucket ${packageData} for all objects with prefix ${prefix}`);
// for each prefix, query the package data bucket for all objects with that
// prefix and delete them
let continuation = undefined;
do {
const req: AWS.S3.ListObjectsV2Request = {
Bucket: packageData,
Prefix: prefix,
ContinuationToken: continuation,
};
const result = await s3.listObjectsV2(req).promise();
continuation = result.NextContinuationToken;
// queue all objects for deletion
for (const object of result.Contents ?? []) {
if (!object.Key) {
continue;
}
const sendMessageRequest: AWS.SQS.SendMessageRequest = {
QueueUrl: pruneQueue,
MessageBody: object.Key,
};
console.log(JSON.stringify({ sendMessageRequest }));
const sendMessageResponse = await sqs.sendMessage(sendMessageRequest).promise();
console.log(JSON.stringify({ sendMessageResponse }));
objectsFound.push(object.Key);
}
} while (continuation);
// trigger the "on change" handler objects were found and we have a handler
const onChangeFunctionName = process.env[ENV_PRUNE_ON_CHANGE_FUNCTION_NAME];
if (onChangeFunctionName && objectsFound.length > 0) {
console.log(`Triggering a on-change handler: ${onChangeFunctionName}`);
const onChangeCallbackRequest: AWS.Lambda.InvocationRequest = {
FunctionName: onChangeFunctionName,
InvocationType: 'Event',
};
console.log(JSON.stringify({ onChangeCallbackRequest }));
const onChangeCallbackResponse = await lambda.invoke(onChangeCallbackRequest).promise();
console.log(JSON.stringify({ onChangeCallbackResponse }));
}
}
}