Skip to content

Commit 3e5e327

Browse files
authored
chore(cloudfront): reference interfaces (#36420)
Reference interfaces for L2s, like #35271. "chore" because I plan to make a lot of these PRs and they're not adding value to the changelog. (Generated with AI) ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
1 parent 6b8ea86 commit 3e5e327

File tree

6 files changed

+45
-19
lines changed

6 files changed

+45
-19
lines changed

packages/aws-cdk-lib/aws-cloudfront-origins/lib/function-url-origin.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ export interface FunctionUrlOriginWithOACProps extends FunctionUrlOriginProps {
5555
*
5656
* @default - an Origin Access Control will be created.
5757
*/
58-
readonly originAccessControl?: cloudfront.IOriginAccessControl;
58+
readonly originAccessControl?: cloudfront.IOriginAccessControlRef;
5959

6060
}
6161

@@ -96,7 +96,7 @@ export class FunctionUrlOrigin extends cloudfront.OriginBase {
9696
* An Origin for a Lambda Function URL with OAC.
9797
*/
9898
class FunctionUrlOriginWithOAC extends cloudfront.OriginBase {
99-
private originAccessControl?: cloudfront.IOriginAccessControl;
99+
private originAccessControl?: cloudfront.IOriginAccessControlRef;
100100
private functionUrl: lambda.IFunctionUrl;
101101
private readonly props: FunctionUrlOriginWithOACProps;
102102

@@ -136,7 +136,7 @@ class FunctionUrlOriginWithOAC extends cloudfront.OriginBase {
136136
...originBindConfig,
137137
originProperty: {
138138
...originBindConfig.originProperty!,
139-
originAccessControlId: this.originAccessControl?.originAccessControlId,
139+
originAccessControlId: this.originAccessControl?.originAccessControlRef.originAccessControlId,
140140
},
141141
};
142142
}

packages/aws-cdk-lib/aws-cloudfront-origins/lib/s3-bucket-origin.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import * as iam from '../../aws-iam';
55
import { IKey } from '../../aws-kms';
66
import { IBucket } from '../../aws-s3';
77
import { Annotations, Aws, Names, Stack, UnscopedValidationError } from '../../core';
8+
import { IOriginAccessControlRef } from '../../interfaces/generated/aws-cloudfront-interfaces.generated';
89

910
interface BucketPolicyAction {
1011
readonly action: string;
@@ -38,7 +39,7 @@ export interface S3BucketOriginWithOACProps extends S3BucketOriginBaseProps {
3839
*
3940
* @default - an Origin Access Control will be created.
4041
*/
41-
readonly originAccessControl?: cloudfront.IOriginAccessControl;
42+
readonly originAccessControl?: IOriginAccessControlRef;
4243

4344
/**
4445
* The level of permissions granted in the bucket policy and key policy (if applicable)
@@ -58,7 +59,7 @@ export interface S3BucketOriginWithOAIProps extends S3BucketOriginBaseProps {
5859
*
5960
* @default - an Origin Access Identity will be created.
6061
*/
61-
readonly originAccessIdentity?: cloudfront.IOriginAccessIdentity;
62+
readonly originAccessIdentity?: cloudfront.ICloudFrontOriginAccessIdentityRef & iam.IGrantable;
6263
}
6364

6465
/**
@@ -108,7 +109,7 @@ export abstract class S3BucketOrigin extends cloudfront.OriginBase {
108109

109110
class S3BucketOriginWithOAC extends S3BucketOrigin {
110111
private readonly bucket: IBucket;
111-
private originAccessControl?: cloudfront.IOriginAccessControl;
112+
private originAccessControl?: IOriginAccessControlRef;
112113
private originAccessLevels?: cloudfront.AccessLevel[];
113114

114115
constructor(bucket: IBucket, props?: S3BucketOriginWithOACProps) {
@@ -160,7 +161,7 @@ class S3BucketOriginWithOAC extends S3BucketOrigin {
160161
...originBindConfig,
161162
originProperty: {
162163
...originBindConfig.originProperty!,
163-
originAccessControlId: this.originAccessControl.originAccessControlId,
164+
originAccessControlId: this.originAccessControl.originAccessControlRef.originAccessControlId,
164165
},
165166
};
166167
}
@@ -221,7 +222,7 @@ class S3BucketOriginWithOAC extends S3BucketOrigin {
221222

222223
class S3BucketOriginWithOAI extends S3BucketOrigin {
223224
private readonly bucket: IBucket;
224-
private originAccessIdentity?: cloudfront.IOriginAccessIdentity;
225+
private originAccessIdentity?: cloudfront.ICloudFrontOriginAccessIdentityRef & iam.IGrantable;
225226

226227
constructor(bucket: IBucket, props?: S3BucketOriginWithOAIProps) {
227228
super(bucket, { ...props });
@@ -265,6 +266,6 @@ class S3BucketOriginWithOAI extends S3BucketOrigin {
265266
if (!this.originAccessIdentity) {
266267
throw new UnscopedValidationError('Origin access identity cannot be undefined');
267268
}
268-
return { originAccessIdentity: `origin-access-identity/cloudfront/${this.originAccessIdentity.originAccessIdentityId}` };
269+
return { originAccessIdentity: `origin-access-identity/cloudfront/${this.originAccessIdentity.cloudFrontOriginAccessIdentityRef.cloudFrontOriginAccessIdentityId}` };
269270
}
270271
}

packages/aws-cdk-lib/aws-cloudfront-origins/lib/s3-origin.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export interface S3OriginProps extends cloudfront.OriginProps {
1414
*
1515
* @default - An Origin Access Identity will be created.
1616
*/
17-
readonly originAccessIdentity?: cloudfront.IOriginAccessIdentity;
17+
readonly originAccessIdentity?: cloudfront.ICloudFrontOriginAccessIdentityRef & iam.IGrantable;
1818
}
1919

2020
/**
@@ -49,7 +49,7 @@ export class S3Origin implements cloudfront.IOrigin {
4949
* Contains additional logic around bucket permissions and origin access identities.
5050
*/
5151
class S3BucketOrigin extends cloudfront.OriginBase {
52-
private originAccessIdentity!: cloudfront.IOriginAccessIdentity;
52+
private originAccessIdentity!: cloudfront.ICloudFrontOriginAccessIdentityRef & iam.IGrantable;
5353

5454
constructor(private readonly bucket: s3.IBucket, { originAccessIdentity, ...props }: S3OriginProps) {
5555
super(bucket.bucketRegionalDomainName, props);
@@ -86,6 +86,6 @@ class S3BucketOrigin extends cloudfront.OriginBase {
8686
}
8787

8888
protected renderS3OriginConfig(): cloudfront.CfnDistribution.S3OriginConfigProperty | undefined {
89-
return { originAccessIdentity: `origin-access-identity/cloudfront/${this.originAccessIdentity.originAccessIdentityId}` };
89+
return { originAccessIdentity: `origin-access-identity/cloudfront/${this.originAccessIdentity.cloudFrontOriginAccessIdentityRef.cloudFrontOriginAccessIdentityId}` };
9090
}
9191
}

packages/aws-cdk-lib/aws-cloudfront/lib/origin-access-control.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@ import { CfnOriginAccessControl } from './cloudfront.generated';
33
import { IResource, Resource, Names } from '../../core';
44
import { addConstructMetadata } from '../../core/lib/metadata-resource';
55
import { propertyInjectable } from '../../core/lib/prop-injectable';
6+
import { IOriginAccessControlRef, OriginAccessControlReference } from '../../interfaces/generated/aws-cloudfront-interfaces.generated';
67

78
/**
89
* Represents a CloudFront Origin Access Control
910
*/
10-
export interface IOriginAccessControl extends IResource {
11+
export interface IOriginAccessControl extends IResource, IOriginAccessControlRef {
1112
/**
1213
* The unique identifier of the origin access control.
1314
* @attribute
@@ -178,6 +179,12 @@ export abstract class OriginAccessControlBase extends Resource implements IOrigi
178179
* @attribute
179180
*/
180181
public abstract readonly originAccessControlId: string;
182+
183+
public get originAccessControlRef(): OriginAccessControlReference {
184+
return {
185+
originAccessControlId: this.originAccessControlId,
186+
};
187+
}
181188
}
182189

183190
/**
@@ -197,6 +204,12 @@ export class S3OriginAccessControl extends OriginAccessControlBase {
197204
class Import extends Resource implements IOriginAccessControl {
198205
public readonly originAccessControlId = originAccessControlId;
199206
public readonly originAccessControlOriginType = OriginAccessControlOriginType.S3;
207+
208+
public get originAccessControlRef(): OriginAccessControlReference {
209+
return {
210+
originAccessControlId: this.originAccessControlId,
211+
};
212+
}
200213
}
201214
return new Import(scope, id);
202215
}
@@ -245,6 +258,12 @@ export class FunctionUrlOriginAccessControl extends OriginAccessControlBase {
245258
class Import extends Resource implements IOriginAccessControl {
246259
public readonly originAccessControlId = originAccessControlId;
247260
public readonly originAccessControlOriginType = OriginAccessControlOriginType.LAMBDA;
261+
262+
public get originAccessControlRef(): OriginAccessControlReference {
263+
return {
264+
originAccessControlId: this.originAccessControlId,
265+
};
266+
}
248267
}
249268
return new Import(scope, id);
250269
}

packages/aws-cdk-lib/aws-cloudfront/lib/web-distribution.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@ import {
1313
} from './distribution';
1414
import { FunctionAssociation } from './function';
1515
import { GeoRestriction } from './geo-restriction';
16-
import { IKeyGroup } from './key-group';
17-
import { IOriginAccessIdentity } from './origin-access-identity';
1816
import { formatDistributionArn } from './private/utils';
1917
import * as certificatemanager from '../../aws-certificatemanager';
2018
import * as iam from '../../aws-iam';
@@ -23,6 +21,7 @@ import * as s3 from '../../aws-s3';
2321
import * as cdk from '../../core';
2422
import { addConstructMetadata, MethodMetadata } from '../../core/lib/metadata-resource';
2523
import { propertyInjectable } from '../../core/lib/prop-injectable';
24+
import { ICloudFrontOriginAccessIdentityRef, IKeyGroupRef } from '../../interfaces/generated/aws-cloudfront-interfaces.generated';
2625

2726
/**
2827
* HTTP status code to failover to second origin
@@ -321,7 +320,7 @@ export interface S3OriginConfig {
321320
*
322321
* @default No Origin Access Identity which requires the S3 bucket to be public accessible
323322
*/
324-
readonly originAccessIdentity?: IOriginAccessIdentity;
323+
readonly originAccessIdentity?: ICloudFrontOriginAccessIdentityRef & iam.IGrantable;
325324

326325
/**
327326
* The relative path to the origin root to use for sources.
@@ -397,7 +396,7 @@ export interface Behavior {
397396
* @default - no KeyGroups are associated with cache behavior
398397
* @see https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html
399398
*/
400-
readonly trustedKeyGroups?: IKeyGroup[];
399+
readonly trustedKeyGroups?: IKeyGroupRef[];
401400

402401
/**
403402
*
@@ -1062,7 +1061,7 @@ export class CloudFrontWebDistribution extends cdk.Resource implements IDistribu
10621061
forwardedValues: input.forwardedValues || { queryString: false, cookies: { forward: 'none' } },
10631062
maxTtl: input.maxTtl && input.maxTtl.toSeconds(),
10641063
minTtl: input.minTtl && input.minTtl.toSeconds(),
1065-
trustedKeyGroups: input.trustedKeyGroups?.map(key => key.keyGroupId),
1064+
trustedKeyGroups: input.trustedKeyGroups?.map(key => key.keyGroupRef.keyGroupId),
10661065
trustedSigners: input.trustedSigners,
10671066
targetOriginId: input.targetOriginId,
10681067
viewerProtocolPolicy: input.viewerProtocolPolicy || protoPolicy || ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
@@ -1176,7 +1175,7 @@ export class CloudFrontWebDistribution extends cdk.Resource implements IDistribu
11761175
}));
11771176

11781177
s3OriginConfig = {
1179-
originAccessIdentity: `origin-access-identity/cloudfront/${originConfig.s3OriginSource.originAccessIdentity.originAccessIdentityId}`,
1178+
originAccessIdentity: `origin-access-identity/cloudfront/${originConfig.s3OriginSource.originAccessIdentity.cloudFrontOriginAccessIdentityRef.cloudFrontOriginAccessIdentityId}`,
11801179
};
11811180
} else {
11821181
s3OriginConfig = {};

packages/awslint/lib/rules/api.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,13 @@ apiLinter.add({
108108
return;
109109
}
110110

111+
if (type.intersectionOfTypes) {
112+
for (const t of type.intersectionOfTypes) {
113+
assertType(t, docs, scope);
114+
}
115+
return;
116+
}
117+
111118
// interfaces are okay
112119
if (type.type && type.type.isInterfaceType()) {
113120
return assertInterface(type.type);

0 commit comments

Comments
 (0)