Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | 2x 2x 2x 2x 6x 6x 6x 6x 6x 6x 6x 5x 4x 4x 6x 6x 6x 5x 2x 2x 2x 2x 4x 4x | import { APIGatewayProxyResult } from 'aws-lambda' import type { DeploymentSettings } from '../model/DeploymentSettings' import { LambdaClient, GetFunctionCommand } from '@aws-sdk/client-lambda' import { CloudFrontClient, GetDistributionCommand } from '@aws-sdk/client-cloudfront' import type { IntegrationStatus, LambdaFunctionInformation, CloudFrontDistributionInformation, } from '../model/IntegrationStatus' import { doesCacheBehaviorUseOrigins, getCacheBehaviorLambdaFunctionAssociations, getFPCDNOrigins, } from '../utils/cloudfrontUtils' export async function handleStatus( lambdaClient: LambdaClient, cloudFrontClient: CloudFrontClient, settings: DeploymentSettings ): Promise<APIGatewayProxyResult> { const lambdaFunctionInformation = await getLambdaFunctionInformation(lambdaClient, settings.LambdaFunctionName) const cloudFrontDistributionInformation = await getCloudFrontDistributionInformation( cloudFrontClient, settings.CFDistributionId, settings.LambdaFunctionName ) const result: IntegrationStatus = { lambdaFunction: lambdaFunctionInformation, cloudFrontDistribution: cloudFrontDistributionInformation, } return { statusCode: 200, body: JSON.stringify(result), headers: { 'content-type': 'application/json', }, } } async function getLambdaFunctionInformation( lambdaClient: LambdaClient, functionName: string ): Promise<LambdaFunctionInformation | undefined> { const command = new GetFunctionCommand({ FunctionName: functionName }) try { const result = await lambdaClient.send(command) return { functionName: result.Configuration?.FunctionName, lastModified: result.Configuration?.LastModified, lastUpdateStatus: result.Configuration?.LastUpdateStatus, lastUpdateStatusReason: result.Configuration?.LastUpdateStatusReason, lastUpdateStatusCode: result.Configuration?.LastUpdateStatusReasonCode, runtime: result.Configuration?.Runtime, version: result.Configuration?.Version, handler: result.Configuration?.Handler, } } catch (error) { console.error('Unable to get lambda function information', error) return undefined } } async function getCloudFrontDistributionInformation( cloudFrontClient: CloudFrontClient, distributionId: string, functionName: string ): Promise<CloudFrontDistributionInformation | undefined> { const command = new GetDistributionCommand({ Id: distributionId }) try { const result = await cloudFrontClient.send(command) const fpCDNOrigins = getFPCDNOrigins(result.Distribution?.DistributionConfig) let cacheBehaviorsWithFingerprintFunction = 0 Iif (doesCacheBehaviorUseOrigins(result.Distribution?.DistributionConfig?.DefaultCacheBehavior, fpCDNOrigins)) { const lambdaAssocList = getCacheBehaviorLambdaFunctionAssociations( result.Distribution?.DistributionConfig?.DefaultCacheBehavior, functionName ) cacheBehaviorsWithFingerprintFunction += lambdaAssocList.length } for (const cacheBehavior of result.Distribution?.DistributionConfig?.CacheBehaviors?.Items || []) { Iif (!doesCacheBehaviorUseOrigins(cacheBehavior, fpCDNOrigins)) { continue } const lambdaAssocList = getCacheBehaviorLambdaFunctionAssociations(cacheBehavior, functionName) cacheBehaviorsWithFingerprintFunction += lambdaAssocList.length } return { id: result.Distribution?.Id, enabled: result.Distribution?.DistributionConfig?.Enabled, status: result.Distribution?.Status, lastModifiedTime: result.Distribution?.LastModifiedTime, inProgressInvalidationBatches: result.Distribution?.InProgressInvalidationBatches, cacheBehaviorsWithFingerprintFunction: cacheBehaviorsWithFingerprintFunction, } } catch (error) { console.error('Unable to get CloudFront distribution information', error) return } } |