in source/custom-resource/index.ts [48:117]
export async function handler(event: CustomResourceRequest, context: LambdaContext) {
console.info('Received event:', JSON.stringify(event, null, 2));
const { RequestType, ResourceProperties } = event;
const response: CompletionStatus = {
Status: StatusTypes.SUCCESS,
Data: {}
};
try {
switch (ResourceProperties.CustomAction) {
case CustomResourceActions.SEND_ANONYMOUS_METRIC: {
const requestProperties: SendMetricsRequestProperties = ResourceProperties as SendMetricsRequestProperties;
if (requestProperties.AnonymousData === 'Yes') {
response.Data = await sendAnonymousMetric(requestProperties, RequestType);
}
break;
}
case CustomResourceActions.PUT_CONFIG_FILE:
if ([CustomResourceRequestTypes.CREATE, CustomResourceRequestTypes.UPDATE].includes(RequestType)) {
response.Data = await putConfigFile(ResourceProperties as PutConfigRequestProperties);
}
break;
case CustomResourceActions.COPY_S3_ASSETS:
if ([CustomResourceRequestTypes.CREATE, CustomResourceRequestTypes.UPDATE].includes(RequestType)) {
response.Data = await copyS3Assets(ResourceProperties as CopyS3AssetsRequestProperties);
}
break;
case CustomResourceActions.CREATE_UUID:
if ([CustomResourceRequestTypes.CREATE].includes(RequestType)) {
response.Data = await generateUUID();
}
break;
case CustomResourceActions.CHECK_SOURCE_BUCKETS:
if ([CustomResourceRequestTypes.CREATE, CustomResourceRequestTypes.UPDATE].includes(RequestType)) {
response.Data = await validateBuckets(ResourceProperties as CheckSourceBucketsRequestProperties);
}
break;
case CustomResourceActions.CHECK_SECRETS_MANAGER:
if ([CustomResourceRequestTypes.CREATE, CustomResourceRequestTypes.UPDATE].includes(RequestType)) {
response.Data = await checkSecretsManager(ResourceProperties as CheckSecretManagerRequestProperties);
}
break;
case CustomResourceActions.CHECK_FALLBACK_IMAGE:
if ([CustomResourceRequestTypes.CREATE, CustomResourceRequestTypes.UPDATE].includes(RequestType)) {
response.Data = await checkFallbackImage(ResourceProperties as CheckFallbackImageRequestProperties);
}
break;
case CustomResourceActions.CREATE_LOGGING_BUCKET:
if ([CustomResourceRequestTypes.CREATE].includes(RequestType)) {
response.Data = await createCloudFrontLoggingBucket(ResourceProperties as CreateLoggingBucketRequestProperties);
}
break;
default:
break;
}
} catch (error) {
console.error(`Error occurred at ${event.RequestType}::${ResourceProperties.CustomAction}`, error);
response.Status = StatusTypes.FAILED;
response.Data.Error = {
Code: error.code ?? 'CustomResourceError',
Message: error.message ?? 'Custom resource error occurred.'
};
} finally {
await sendCloudFormationResponse(event, context.logStreamName, response);
}
return response;
}