Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 26 additions & 7 deletions packages/@aws-cdk/aws-cloudfront/lib/web_distribution.ts
Original file line number Diff line number Diff line change
Expand Up @@ -101,17 +101,28 @@ export enum SecurityPolicyProtocol {
}

/**
* CloudFront supports logging of incoming requests and can log details to a given S3 Bucket.
*
* If you wish to configure logging you can configure details about it.
*
* @default bucket: if you do not pass a bucket for logging - we'll create one
* @default includeCookies: false by default
* @default prefix: no prefix is set by default.
* Logging configuration for incoming requests
*/
export interface LoggingConfiguration {
/**
* Bucket to log requests to
*
* @default A logging bucket is automatically created
*/
readonly bucket?: s3.BucketRef,

/**
* Whether to include the cookies in the logs
*
* @default false
*/
readonly includeCookies?: boolean,

/**
* Where in the bucket to store logs
*
* @default No prefix
*/
readonly prefix?: string
}

Expand Down Expand Up @@ -622,6 +633,14 @@ export class CloudFrontWebDistribution extends cdk.Construct {
};
}

if (props.loggingConfig) {
distributionConfig.logging = {
bucket: (props.loggingConfig.bucket || new s3.Bucket(parent, `${name}LoggingS3Bucket`)).domainName,
includeCookies: props.loggingConfig.includeCookies || false,
prefix: props.loggingConfig.prefix
};
}

const distribution = new cloudformation.DistributionResource(this, 'CFDistribution', {distributionConfig});
this.domainName = distribution.distributionDomainName;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
{
"Resources": {
"Bucket83908E77": {
"Type": "AWS::S3::Bucket"
},
"AnAmazingWebsiteProbably2LoggingS3BucketB2C21612": {
"Type": "AWS::S3::Bucket"
},
"AnAmazingWebsiteProbablyCFDistribution47E3983B": {
"Type": "AWS::CloudFront::Distribution",
"Properties": {
"DistributionConfig": {
"CacheBehaviors": [],
"DefaultCacheBehavior": {
"AllowedMethods": [
"GET",
"HEAD"
],
"CachedMethods": [
"GET",
"HEAD"
],
"ForwardedValues": {
"Cookies": {
"Forward": "none"
},
"QueryString": false
},
"TargetOriginId": "origin1",
"ViewerProtocolPolicy": "redirect-to-https"
},
"DefaultRootObject": "index.html",
"Enabled": true,
"HttpVersion": "http2",
"IPV6Enabled": true,
"Origins": [
{
"CustomOriginConfig": {
"HTTPPort": 80,
"HTTPSPort": 443,
"OriginKeepaliveTimeout": 5,
"OriginProtocolPolicy": "https-only",
"OriginReadTimeout": 30,
"OriginSSLProtocols": [
"TLSv1.2"
]
},
"DomainName": "brelandm.a2z.com",
"Id": "origin1",
"OriginCustomHeaders": [
{
"HeaderName": "X-Custom-Header",
"HeaderValue": "somevalue"
}
]
}
],
"PriceClass": "PriceClass_100",
"ViewerCertificate": {
"CloudFrontDefaultCertificate": true
},
"Logging": {
"Bucket": {
"Fn::ImportValue":"aws-cdk-cloudfront-custom:BucketBucketDomain3E81AE28"
},
"IncludeCookies": true,
"Prefix": "test-prefix"
}
}
}
},
"AnAmazingWebsiteProbably2CFDistribution7C1CCD12": {
"Type": "AWS::CloudFront::Distribution",
"Properties": {
"DistributionConfig": {
"CacheBehaviors": [],
"DefaultCacheBehavior": {
"AllowedMethods": [
"GET",
"HEAD"
],
"CachedMethods": [
"GET",
"HEAD"
],
"ForwardedValues": {
"Cookies": {
"Forward": "none"
},
"QueryString": false
},
"TargetOriginId": "origin1",
"ViewerProtocolPolicy": "redirect-to-https"
},
"DefaultRootObject": "index.html",
"Enabled": true,
"HttpVersion": "http2",
"IPV6Enabled": true,
"Origins": [
{
"CustomOriginConfig": {
"HTTPPort": 80,
"HTTPSPort": 443,
"OriginKeepaliveTimeout": 5,
"OriginProtocolPolicy": "https-only",
"OriginReadTimeout": 30,
"OriginSSLProtocols": [
"TLSv1.2"
]
},
"DomainName": "brelandm.a2z.com",
"Id": "origin1",
"OriginCustomHeaders": [
{
"HeaderName": "X-Custom-Header",
"HeaderValue": "somevalue"
}
]
}
],
"PriceClass": "PriceClass_100",
"ViewerCertificate": {
"CloudFrontDefaultCertificate": true
},
"Logging": {
"Bucket": {
"Fn::ImportValue":"aws-cdk-cloudfront-custom:AnAmazingWebsiteProbably2LoggingS3BucketBucketDomain99064878"
},
"IncludeCookies": false
}
}
}
}
},
"Outputs": {
"BucketBucketDomain3E81AE28": {
"Value": {
"Fn::GetAtt": [
"Bucket83908E77",
"DomainName"
]
},
"Export": {
"Name": "aws-cdk-cloudfront-custom:BucketBucketDomain3E81AE28"
}
},
"AnAmazingWebsiteProbably2LoggingS3BucketBucketDomain99064878": {
"Value": {
"Fn::GetAtt": [
"AnAmazingWebsiteProbably2LoggingS3BucketB2C21612",
"DomainName"
]
},
"Export": {
"Name": "aws-cdk-cloudfront-custom:AnAmazingWebsiteProbably2LoggingS3BucketBucketDomain99064878"
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import s3 = require('@aws-cdk/aws-s3');
import cdk = require('@aws-cdk/cdk');
import cloudfront = require('../lib');

const app = new cdk.App(process.argv);

const stack = new cdk.Stack(app, 'aws-cdk-cloudfront-custom');

const loggingBucket = new s3.Bucket(stack, 'Bucket');

new cloudfront.CloudFrontWebDistribution(stack, 'AnAmazingWebsiteProbably', {
originConfigs: [
{
originHeaders: {
"X-Custom-Header": "somevalue",
},
customOriginSource: {
domainName: "brelandm.a2z.com",
},
behaviors: [
{
isDefaultBehavior: true,
}
]
}
],
loggingConfig: {
bucket: loggingBucket,
includeCookies: true,
prefix: 'test-prefix'
}
});

new cloudfront.CloudFrontWebDistribution(stack, 'AnAmazingWebsiteProbably2', {
originConfigs: [
{
originHeaders: {
"X-Custom-Header": "somevalue",
},
customOriginSource: {
domainName: "brelandm.a2z.com",
},
behaviors: [
{
isDefaultBehavior: true,
}
]
}
],
loggingConfig: {}
});

process.stdout.write(app.run());
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,7 @@
"Origins": [
{
"DomainName": {
"Fn::GetAtt": [
"Bucket83908E77",
"DomainName"
]
"Fn::ImportValue":"aws-cdk-cloudfront:BucketBucketDomain3E81AE28"
},
"Id": "origin1",
"S3OriginConfig": {}
Expand All @@ -49,5 +46,18 @@
}
}
}
},
"Outputs": {
"BucketBucketDomain3E81AE28": {
"Value": {
"Fn::GetAtt": [
"Bucket83908E77",
"DomainName"
]
},
"Export": {
"Name": "aws-cdk-cloudfront:BucketBucketDomain3E81AE28"
}
}
}
}
44 changes: 32 additions & 12 deletions packages/@aws-cdk/aws-cloudfront/test/test.basic.ts
Original file line number Diff line number Diff line change
Expand Up @@ -127,10 +127,7 @@ export = {
"Origins": [
{
"DomainName": {
"Fn::GetAtt": [
"Bucket83908E77",
"DomainName"
]
"Fn::ImportValue": "BucketBucketDomain3E81AE28"
},
"Id": "origin1",
"S3OriginConfig": {}
Expand Down Expand Up @@ -163,6 +160,19 @@ export = {
}
}
}
},
"Outputs": {
"BucketBucketDomain3E81AE28": {
"Value": {
"Fn::GetAtt": [
"Bucket83908E77",
"DomainName"
]
},
"Export": {
"Name": "BucketBucketDomain3E81AE28"
}
}
}
});
test.done();
Expand Down Expand Up @@ -191,7 +201,7 @@ export = {
expect(stack).toMatch({
"Resources": {
"Bucket83908E77": {
"Type": "AWS::S3::Bucket"
"Type": "AWS::S3::Bucket"
},
"AnAmazingWebsiteProbablyCFDistribution47E3983B": {
"Type": "AWS::CloudFront::Distribution",
Expand All @@ -201,10 +211,7 @@ export = {
"Origins": [
{
"DomainName": {
"Fn::GetAtt": [
"Bucket83908E77",
"DomainName"
]
"Fn::ImportValue": "BucketBucketDomain3E81AE28"
},
"Id": "origin1",
"S3OriginConfig": {}
Expand All @@ -217,9 +224,9 @@ export = {
"DefaultCacheBehavior": {
"AllowedMethods": [
"GET",
"HEAD"
],
"CachedMethods": [
"HEAD"
],
"CachedMethods": [
"GET",
"HEAD"
],
Expand All @@ -240,6 +247,19 @@ export = {
}
}
}
},
"Outputs": {
"BucketBucketDomain3E81AE28": {
"Value": {
"Fn::GetAtt": [
"Bucket83908E77",
"DomainName"
]
},
"Export": {
"Name": "BucketBucketDomain3E81AE28"
}
}
}
});
test.done();
Expand Down
Loading