AWS Security ChangesHomeSearch

AWS prescriptive-guidance documentation change

Service: prescriptive-guidance · 2026-07-10 · Documentation low

File: prescriptive-guidance/latest/aws-cdk-layers/layer-3.md

Summary

Updated documentation about AWS CDK L3 constructs with minor wording improvements, corrected image path, and modified code examples to use placeholder bucket names.

Security assessment

Changes include editorial improvements and non-security-related example updates. The bucket name change from 'amzn-s3-demo-bucket' to 'DOC-EXAMPLE-BUCKET' follows documentation best practices but doesn't address any security vulnerability. No security features or vulnerabilities are discussed in the modifications.

Diff

diff --git a/prescriptive-guidance/latest/aws-cdk-layers/layer-3.md b/prescriptive-guidance/latest/aws-cdk-layers/layer-3.md
index 5c6a2f0ab..a3301781a 100644
--- a//prescriptive-guidance/latest/aws-cdk-layers/layer-3.md
+++ b//prescriptive-guidance/latest/aws-cdk-layers/layer-3.md
@@ -11 +11 @@ Resource interactionsResource extensionsCustom resources
-If L1 constructs perform a literal translation of CloudFormation resources into programmatic code, and L2 constructs replace much of the verbose CloudFormation syntax with helper methods and custom logic, what do the [L3 constructs](https://docs.aws.amazon.com/cdk/v2/guide/constructs.html#constructs_lib) do? The answer to that is limited only by your imagination. You can create layer 3 to fit any specific use case. If your project needs a resource that has a specific subset of properties, you can create a reusable L3 construct to meet that need.
+If L1 constructs perform a literal translation of CloudFormation resources into programmatic code, and L2 constructs replace much of the verbose CloudFormation syntax with helper methods and custom logic, what do the [L3 constructs](https://docs.aws.amazon.com/cdk/v2/guide/constructs.html#constructs_lib) do? The answer to that is limited only by your imagination. You can create layer 3 to fit any specific use cases you find yourself in. If your project needs a resource that has a specific subset of properties, you can create a reusable L3 construct to meet that need.
@@ -15 +15 @@ L3 constructs are called _patterns_ within the AWS CDK. A pattern is any object
-![AWS CDK application types](/images/prescriptive-guidance/latest/aws-cdk-layers/images/cdk-app-types.png)
+![Instructions for Running cdk init](/images/prescriptive-guidance/latest/aws-cdk-layers/images/guide-img/b3d19902-dcaf-4bb8-91d6-0ae9000416b5/images/ca08a7cf-f559-4ec4-bfb8-3d65a949059e.png)
@@ -19 +19 @@ L3 constructs are called _patterns_ within the AWS CDK. A pattern is any object
-Any class that extends the `Construct` class can be an L3 construct, but the most common use cases for layer 3 are resource interactions, resource extensions, and custom resources. Most L3 constructs use one or more of these three cases in order to extend AWS CDK functionality.
+Any class that extends the `Construct` class can be an L3 construct, but the most common use cases for layer 3 are _resource interactions, resource extensions,_ and _custom resources_. Most L3 constructs use one or more of these three cases in order to extend AWS CDK functionality.
@@ -23 +23 @@ Any class that extends the `Construct` class can be an L3 construct, but the mos
-A solution typically employs several AWS services that work together. For example, an Amazon CloudFront distribution often uses an S3 bucket as its origin and AWS WAF for protection against common exploits. AWS AppSync and Amazon API Gateway often use Amazon DynamoDB tables as data sources for their APIs. A pipeline in AWS CodePipeline often uses Amazon S3 as its source and AWS CodeBuild for its build stages. In these cases it's often useful to create a single L3 construct that handles the provisioning of two or more interconnected L2 constructs.
+A solution typically employs several AWS services that work together. For example, an Amazon CloudFront distribution often uses an S3 bucket as its origin and AWS WAF for protection against common exploits. An AWS AppSync API or Amazon API Gateway often uses Amazon DynamoDB tables as data sources for their APIs. A pipeline in AWS CodePipeline often uses Amazon S3 as its source and AWS CodeBuild for its build stages. In these cases it's often useful to create a single L3 construct that handles the provisioning of two or more interconnected L2 constructs.
@@ -25 +25 @@ A solution typically employs several AWS services that work together. For exampl
-Here's an example of an L3 construct that provisions a CloudFront distribution along with its S3 origin, an AWS WAF to put in front of it, an Amazon Route 53 record, and an AWS Certificate Manager (ACM) certificate to add a custom endpoint with encryption in transit—all in one reusable construct:
+Here's an example of an L3 construct that provisions a CloudFront distribution along with its S3 origin, an AWS WAF to put in front of it, an Amazon Route 53 record, and an AWS Certificate Manager (ACM) certificate to add a custom endpoint with encryption in transit― all in one reusable construct:
@@ -72 +72 @@ Notice that CloudFront, Amazon S3, Route 53, and ACM all use L2 constructs, but
-In this example, the CloudFront `Distribution` L2 construct is exposed as a public property of the L3 construct. There will still be cases where you need to expose L3 properties such as this, as necessary. In fact we're going to see `Distribution` again later, in the Custom resources section.
+In this example, the CloudFront `Distribution` L2 construct is exposed as a public property of the L3 construct. There will still be cases where you need to expose L3 properties such as this as necessary. In fact we're going to see `Distribution` again later, in the Custom resources section.
@@ -112 +112 @@ Extending L2 constructs directly works best when you just want to add new defaul
-[Custom resources](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources.html) are a powerful feature in CloudFormation that let you run custom logic from a Lambda function that's activated during stack deployment. Whenever you need any processes during deployment that aren't directly supported by CloudFormation, you can use a custom resource to make it happen. The AWS CDK offers classes that allow you to create custom resources programmatically as well. By using custom resources within an L3 constructor, you can make a construct out of almost anything.
+[Custom resources](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources.html) are a powerful feature in CloudFormation that allow you to run custom logic from a Lambda function that's activated during stack deployment. Whenever you need any processes during deployment that aren't directly supported by CloudFormation, you can use a custom resource to make it happen. The AWS CDK offers classes that allow you to create custom resources programmatically as well. By using custom resources within an L3 constructor, you can make a construct out of almost anything.
@@ -166 +166 @@ This L3 construct uses an AWS CDK L3 construct called [AwsCustomResource](https:
-Another good example of the AWS CDK using a custom resource L3 construct is [S3 bucket deployment](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_s3_deployment.BucketDeployment.html). The Lambda function created by the custom resource within the constructor of this L3 construct adds functionality that CloudFormation wouldn't be able to handle otherwise: it adds and updates objects in an S3 bucket. Without S3 bucket deployment, you wouldn't be able to put content into the S3 bucket you just created as part of your stack, which would be very inconvenient.
+Another good example of the AWS CDK using a custom resource L3 construct is****[S3 bucket deployment](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_s3_deployment.BucketDeployment.html). The Lambda function created by the custom resource within the constructor of this L3 construct adds functionality that CloudFormation wouldn't be able to handle otherwise: it adds and updates objects in an S3 bucket. Without S3 bucket deployment, you wouldn't be able to put content into the S3 bucket you just created as part of your stack, which would be very inconvenient.
@@ -172,2 +172,2 @@ The best example of the AWS CDK eliminating the need to write out reams of Cloud
-      sources: [Source.asset('./path/to/amzn-s3-demo-bucket')],
-      destinationBucket: amzn-s3-demo-bucket
+      sources: [Source.asset('./DOC-EXAMPLE-BUCKET')],
+      destinationBucket: amzns3demobucket
@@ -176 +176 @@ The best example of the AWS CDK eliminating the need to write out reams of Cloud
-Compare that with the CloudFormation code that you’d have to write to accomplish the same thing:
+Compare that to the CloudFormation code that you'd have to write to accomplish the same thing:
@@ -239 +239 @@ Compare that with the CloudFormation code that you’d have to write to accompli
-         "Ref": "amzn-s3-demo-bucket77F80CC0"
+         "Ref": "amzns3demobucket77F80CC0"
@@ -421,2 +420,0 @@ Compare that with the CloudFormation code that you’d have to write to accompli
-Show moreShow less
-