diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-cloudfront/test/integ.distribution-policies-autonamed.ts b/packages/@aws-cdk-testing/framework-integ/test/aws-cloudfront/test/integ.distribution-policies-autonamed.ts new file mode 100644 index 0000000000000..e634763a5817f --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-cloudfront/test/integ.distribution-policies-autonamed.ts @@ -0,0 +1,74 @@ +import * as cdk from 'aws-cdk-lib'; +import { IntegTest } from '@aws-cdk/integ-tests-alpha'; +import { TestOrigin } from './test-origin'; +import * as cloudfront from 'aws-cdk-lib/aws-cloudfront'; +import { OriginRequestPolicy } from 'aws-cdk-lib/aws-cloudfront'; + +const app = new cdk.App(); +const stack = new cdk.Stack(app, 'integ-distribution-policies'); + +const cachePolicy = new cloudfront.CachePolicy(stack, 'CachePolicy', { + cachePolicyName: 'ACustomCachePolicy', +}); + +const paramMinTtl = new cdk.CfnParameter(stack, 'MinTtlParam', { + type: 'Number', + default: '1000', +}); +const paramDefaultTtl = new cdk.CfnParameter(stack, 'DefaultTtlParam', { + type: 'Number', + default: '2000', +}); +const paramMaxTtl = new cdk.CfnParameter(stack, 'MaxTtlParam', { + type: 'Number', + default: '3000', +}); +const cachePolicyWithRef = new cloudfront.CachePolicy(stack, 'CachePolicyWithRef', { + minTtl: cdk.Duration.seconds(paramMinTtl.valueAsNumber), + defaultTtl: cdk.Duration.seconds(paramDefaultTtl.valueAsNumber), + maxTtl: cdk.Duration.seconds(paramMaxTtl.valueAsNumber), +}); + +const originRequestPolicy = new cloudfront.OriginRequestPolicy(stack, 'OriginRequestPolicy', { + cookieBehavior: cloudfront.OriginRequestCookieBehavior.allowList('cookie1'), + headerBehavior: cloudfront.OriginRequestHeaderBehavior.all('CloudFront-Forwarded-Proto'), + queryStringBehavior: cloudfront.OriginRequestQueryStringBehavior.denyList('querystringparam'), +}); + +const responseHeadersPolicy = new cloudfront.ResponseHeadersPolicy(stack, 'ResponseHeadersPolicy', { + corsBehavior: { + accessControlAllowCredentials: false, + accessControlAllowHeaders: ['X-Custom-Header-1', 'X-Custom-Header-2'], + accessControlAllowMethods: ['GET', 'POST'], + accessControlAllowOrigins: ['*'], + accessControlExposeHeaders: ['X-Custom-Header-1', 'X-Custom-Header-2'], + accessControlMaxAge: cdk.Duration.seconds(600), + originOverride: true, + }, + removeHeaders: ['Server'], + serverTimingSamplingRate: 50, +}); + +new cloudfront.Distribution(stack, 'Dist', { + defaultBehavior: { + origin: new TestOrigin('www.example.com'), + cachePolicy, + originRequestPolicy, + responseHeadersPolicy, + }, +}); + +new cloudfront.Distribution(stack, 'Dist-2', { + defaultBehavior: { + origin: new TestOrigin('www.example-2.com'), + cachePolicy: cachePolicyWithRef, + originRequestPolicy: OriginRequestPolicy.ALL_VIEWER_EXCEPT_HOST_HEADER, + responseHeadersPolicy, + }, +}); + +new IntegTest(app, 'DistributionPolicies', { + testCases: [stack], +}); + +app.synth(); diff --git a/packages/aws-cdk-lib/aws-cloudfront/lib/origin-request-policy.ts b/packages/aws-cdk-lib/aws-cloudfront/lib/origin-request-policy.ts index 1b2cf143cea41..f6fc441da3a45 100644 --- a/packages/aws-cdk-lib/aws-cloudfront/lib/origin-request-policy.ts +++ b/packages/aws-cdk-lib/aws-cloudfront/lib/origin-request-policy.ts @@ -1,6 +1,6 @@ import { Construct } from 'constructs'; import { CfnOriginRequestPolicy } from './cloudfront.generated'; -import { Names, Resource, Token, UnscopedValidationError, ValidationError } from '../../core'; +import { Names, Resource, Stack, Token, UnscopedValidationError, ValidationError } from '../../core'; import { addConstructMetadata } from '../../core/lib/metadata-resource'; import { propertyInjectable } from '../../core/lib/prop-injectable'; @@ -98,7 +98,7 @@ export class OriginRequestPolicy extends Resource implements IOriginRequestPolic // Enhanced CDK Analytics Telemetry addConstructMetadata(this, props); - const originRequestPolicyName = props.originRequestPolicyName ?? Names.uniqueId(this); + const originRequestPolicyName = props.originRequestPolicyName ?? `${Names.uniqueId(this).slice(0, 110)}-${Stack.of(this).region}`; if (!Token.isUnresolved(originRequestPolicyName) && !originRequestPolicyName.match(/^[\w-]+$/i)) { throw new ValidationError(`'originRequestPolicyName' can only include '-', '_', and alphanumeric characters, got: '${props.originRequestPolicyName}'`, this); } diff --git a/packages/aws-cdk-lib/aws-cloudfront/test/origin-request-policy.test.ts b/packages/aws-cdk-lib/aws-cloudfront/test/origin-request-policy.test.ts index 234c406851bfa..f801e161ea5a8 100644 --- a/packages/aws-cdk-lib/aws-cloudfront/test/origin-request-policy.test.ts +++ b/packages/aws-cdk-lib/aws-cloudfront/test/origin-request-policy.test.ts @@ -24,7 +24,7 @@ describe('OriginRequestPolicy', () => { Template.fromStack(stack).hasResourceProperties('AWS::CloudFront::OriginRequestPolicy', { OriginRequestPolicyConfig: { - Name: 'StackOriginRequestPolicy6B17D9ED', + Name: 'StackOriginRequestPolicy6B17D9ED-testregion', CookiesConfig: { CookieBehavior: 'none', },