export async function handler()

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