<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Praneeta Prakash</title>
    <description>The latest articles on Forem by Praneeta Prakash (@praneetaprakash).</description>
    <link>https://forem.com/praneetaprakash</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F985752%2F6af16862-5e91-41f7-bedb-de0234e3ab3c.jpg</url>
      <title>Forem: Praneeta Prakash</title>
      <link>https://forem.com/praneetaprakash</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/praneetaprakash"/>
    <language>en</language>
    <item>
      <title>CDK update - March 2026</title>
      <dc:creator>Praneeta Prakash</dc:creator>
      <pubDate>Thu, 09 Apr 2026 15:38:45 +0000</pubDate>
      <link>https://forem.com/aws/cdk-update-march-2026-1ga8</link>
      <guid>https://forem.com/aws/cdk-update-march-2026-1ga8</guid>
      <description>&lt;h2&gt;
  
  
  Index
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;TL;DR&lt;/li&gt;
&lt;li&gt;
Major Features

&lt;ul&gt;
&lt;li&gt;CDK Mixins — From Preview to Stable&lt;/li&gt;
&lt;li&gt;EKS v2 Graduates to Stable&lt;/li&gt;
&lt;li&gt;CLI Improvements&lt;/li&gt;
&lt;li&gt;New L2 Constructs&lt;/li&gt;
&lt;li&gt;Service Enhancements&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Community Highlights&lt;/li&gt;

&lt;li&gt;Community Content &amp;amp; Resources&lt;/li&gt;

&lt;li&gt;How Can You Be Involved&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Hey CDK community! Here’s an update on all the changes that happened last month. &lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;CDK Mixins are now stable in &lt;code&gt;aws-cdk-lib&lt;/code&gt; — compose reusable infrastructure behaviors across any construct without extra packages. EKS v2 graduated to stable with production-ready APIs. And the CLI shipped &lt;code&gt;--revert-drift&lt;/code&gt; to fix drifted resources in a single command.&lt;/p&gt;

&lt;p&gt;These features are available in &lt;code&gt;aws-cdk-lib&lt;/code&gt; v2.233.0 through v2.248.0 and &lt;code&gt;aws-cdk&lt;/code&gt; CLI v2.1099.0 through v2.1117.0. Full changelogs on &lt;a href="https://github.com/aws/aws-cdk/releases" rel="noopener noreferrer"&gt;GitHub Releases&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Major Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  CDK Mixins — From Preview to Stable
&lt;/h3&gt;

&lt;p&gt;If you've been waiting to adopt Mixins, the wait is over. The core Mixins API (&lt;code&gt;Mixins.of()&lt;/code&gt;, &lt;code&gt;Mixin&lt;/code&gt;, &lt;code&gt;ConstructSelector&lt;/code&gt;) landed in &lt;code&gt;aws-cdk-lib&lt;/code&gt; in February, and the &lt;code&gt;@aws-cdk/cfn-property-mixins&lt;/code&gt; package graduated to stable in March. That means the fluent &lt;code&gt;.with()&lt;/code&gt; method now works on any construct — L1, L2, or custom — directly from &lt;code&gt;aws-cdk-lib&lt;/code&gt;, no extra packages needed.&lt;/p&gt;

&lt;p&gt;Several service mixins ship directly in &lt;code&gt;aws-cdk-lib&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Apply mixins fluently with .with() — works on L1, L2, and custom constructs&lt;/span&gt;
&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CfnBucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;scope&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MyL1Bucket&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;with&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mixins&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;BucketBlockPublicAccess&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;with&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mixins&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;BucketAutoDeleteObjects&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="c1"&gt;// Auto-delete ECR images on repository removal&lt;/span&gt;
&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;ecr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CfnRepository&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Repo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;with&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;ecr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mixins&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;RepositoryAutoDeleteImages&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="c1"&gt;// Apply cluster settings to L1 constructs&lt;/span&gt;
&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;ecs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CfnCluster&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Cluster&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;with&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;ecs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mixins&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ClusterSettings&lt;/span&gt;&lt;span class="p"&gt;([{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;containerInsights&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;enhanced&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}]));&lt;/span&gt;

&lt;span class="c1"&gt;// .with() works on L2 constructs too&lt;/span&gt;
&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MyL2Bucket&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;with&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mixins&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;BucketBlockPublicAccess&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Already using Aspects? The new &lt;code&gt;Shims&lt;/code&gt; class lets you convert between Aspects and Mixins, so you can adopt incrementally without rewriting existing code.&lt;/p&gt;

&lt;p&gt;Also new in the Mixins Preview package: EventBridge pattern generation for all events, custom merge strategies via &lt;code&gt;IMergeStrategy&lt;/code&gt;, cross-account Vended Log delivery destinations, and the ability to pass resource objects directly into CFN Property mixin properties.&lt;/p&gt;

&lt;h3&gt;
  
  
  EKS v2 Graduates to Stable 🚀
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;@aws-cdk/aws-eks-v2-alpha&lt;/code&gt; module is now &lt;code&gt;aws-cdk-lib/aws-eks-v2&lt;/code&gt; — stable APIs, no more alpha imports, production-ready. If you've been holding off on EKS v2 because of the alpha label, it's time to upgrade.&lt;/p&gt;

&lt;p&gt;Alongside graduation, February brought Kubernetes 1.35 support, hybrid nodes for on-premises and edge infrastructure, EC2/HYBRID_LINUX/HYPERPOD_LINUX access entry types, removal policies for all EKS constructs, and &lt;code&gt;bootstrapSelfManagedAddons&lt;/code&gt; support.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;KubectlV35Layer&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@aws-cdk/lambda-layer-kubectl-v35&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cluster&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;eks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Cluster&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Cluster&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;eks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;KubernetesVersion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;V1_35&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;kubectlLayer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;KubectlV35Layer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;KubectlLayer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;remoteNodeNetworks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;cidrs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;10.0.0.0/16&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;remotePodNetworks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;cidrs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;192.168.0.0/16&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  CLI Improvements
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;--revert-drift&lt;/code&gt; Option
&lt;/h4&gt;

&lt;p&gt;Drifted resources used to mean manual remediation. Now a single flag on &lt;code&gt;cdk deploy&lt;/code&gt; creates a drift-aware change set that brings your actual resource state back in line with your template:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;cdk deploy &lt;span class="nt"&gt;--revert-drift&lt;/span&gt; MyStack
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Concurrent Asset Builds &amp;amp; &lt;code&gt;publish-assets&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Two features that speed up CI/CD pipelines. Build assets in parallel with &lt;code&gt;--asset-build-concurrency&lt;/code&gt;, and separate asset publishing from deployment with the new &lt;code&gt;publish-assets&lt;/code&gt; command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;cdk deploy &lt;span class="nt"&gt;--asset-build-concurrency&lt;/span&gt; 4
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;cdk publish-assets MyStack &lt;span class="nt"&gt;--unstable&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;publish-assets
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;code&gt;cdk diff --method&lt;/code&gt; &amp;amp; &lt;code&gt;cdk destroy --concurrency&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;cdk diff&lt;/code&gt; now supports &lt;code&gt;--method=change-set&lt;/code&gt; to always use a change set (and fail if it can't), replacing the deprecated &lt;code&gt;--change-set&lt;/code&gt; flag. And &lt;code&gt;cdk destroy&lt;/code&gt; gained &lt;code&gt;--concurrency&lt;/code&gt; for parallel stack destruction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Contributed by:&lt;/strong&gt; &lt;a href="https://github.com/mikevoets" rel="noopener noreferrer"&gt;Mike Voets&lt;/a&gt; (&lt;code&gt;destroy --concurrency&lt;/code&gt;)&lt;/p&gt;

&lt;h4&gt;
  
  
  Additional CLI Updates
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Guard Hook failure details&lt;/strong&gt; — the CLI now fetches and displays detailed failure annotations automatically (&lt;a href="https://github.com/jkelley-godaddy" rel="noopener noreferrer"&gt;jkelley-godaddy&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;Fn::ForEach&lt;/code&gt; diff support&lt;/strong&gt; — ForEach loops are no longer invisible in &lt;code&gt;cdk diff&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Metadata in separate files&lt;/strong&gt; — avoids the 512MB NodeJS string limit for extremely large apps&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Changeset-based diff for nested stacks&lt;/strong&gt; — accurate diffs including &lt;code&gt;--security-only&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;cdk import&lt;/code&gt; fix&lt;/strong&gt; — &lt;code&gt;--role-arn&lt;/code&gt; no longer conflicts with &lt;code&gt;--record-resource-mapping&lt;/code&gt; (&lt;a href="https://github.com/abhu85" rel="noopener noreferrer"&gt;Abhishek Chauhan&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker &lt;code&gt;buildSecrets&lt;/code&gt; fix&lt;/strong&gt; — secrets are now correctly passed to docker build (&lt;a href="https://github.com/cartmanez" rel="noopener noreferrer"&gt;cartmanez&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  New L2 Constructs
&lt;/h3&gt;

&lt;h4&gt;
  
  
  MediaPackage V2 (Alpha)
&lt;/h4&gt;

&lt;p&gt;A full-featured L2 for AWS Elemental MediaPackage V2 — channel groups, channels, origin endpoints, manifests (HLS, DASH, LL-HLS, MSS), encryption/DRM, type-safe manifest filtering, grants, and CloudWatch metrics. Everything you need to set up a streaming pipeline in CDK:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ChannelGroup&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Channel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;OriginEndpoint&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;InputConfiguration&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Segment&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Manifest&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@aws-cdk/aws-mediapackagev2-alpha&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;group&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ChannelGroup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MyChannelGroup&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;channelGroupName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my-channel-group&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;channel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;group&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addChannel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MyChannel&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;channelName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my-channel&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;input&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;InputConfiguration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cmaf&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;endpoint&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addOriginEndpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MyEndpoint&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;originEndpointName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my-endpoint&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;segment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Segment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cmaf&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="na"&gt;manifests&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Manifest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hls&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;manifestName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;index&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;})],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Grant MediaLive permission to ingest content&lt;/span&gt;
&lt;span class="nx"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;grants&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ingest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mediaLiveRole&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;See the &lt;a href="https://github.com/aws/aws-cdk/tree/main/packages/%40aws-cdk/aws-mediapackagev2-alpha" rel="noopener noreferrer"&gt;full README&lt;/a&gt; for manifest filtering, encryption, and DRM examples.&lt;/p&gt;

&lt;h3&gt;
  
  
  Service Enhancements
&lt;/h3&gt;

&lt;h4&gt;
  
  
  DynamoDB Cross-Account Global Tables
&lt;/h4&gt;

&lt;p&gt;Replicate tables across AWS accounts for multi-tenant architectures and disaster recovery. Permissions are automatically configured when both tables are in the same CDK app:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sourceTable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;dynamodb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;TableV2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sourceStack&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;SourceTable&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;tableName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MyMultiAccountTable&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;partitionKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pk&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;dynamodb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AttributeType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;STRING&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;globalTableSettingsReplicationMode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;dynamodb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;GlobalTableSettingsReplicationMode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ALL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Replica in Account B — resource policies and KMS permissions handled for you&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;replica&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;dynamodb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;TableV2MultiAccountReplica&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;replicaStack&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ReplicaTable&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;tableName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MyMultiAccountTable&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;replicaSourceTable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;sourceTable&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;globalTableSettingsReplicationMode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;dynamodb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;GlobalTableSettingsReplicationMode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ALL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  ALB JWT Authentication
&lt;/h4&gt;

&lt;p&gt;Verify JWTs directly at the load balancer for service-to-service auth — no custom Lambda authorizers needed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;listener&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;lb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Listener&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;elbv2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ApplicationProtocol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;HTTPS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;443&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;certificates&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;certificate&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;defaultAction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;elbv2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ListenerAction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;authenticateJwt&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;issuer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://issuer.example.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;jwksEndpoint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://issuer.example.com/.well-known/jwks.json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;next&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;elbv2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ListenerAction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forward&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nx"&gt;myTargetGroup&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
  &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Contributed by:&lt;/strong&gt; &lt;a href="https://github.com/badmintoncryer" rel="noopener noreferrer"&gt;Kazuho Cryer-Shinozuka&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  OpenSearch S3 Vectors Engine
&lt;/h4&gt;

&lt;p&gt;Sub-second vector search at lower cost by offloading vector data to S3:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;domain&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Domain&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Domain&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;EngineVersion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;OPENSEARCH_2_19&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;s3VectorsEngineEnabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;capacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;dataNodeInstanceType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;or1.medium.search&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;encryptionAtRest&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Contributed by:&lt;/strong&gt; &lt;a href="https://github.com/badmintoncryer" rel="noopener noreferrer"&gt;Kazuho Cryer-Shinozuka&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Kinesis Firehose Dynamic Partitioning
&lt;/h4&gt;

&lt;p&gt;Partition streaming data on the fly using JQ expressions — no Lambda required:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;s3Destination&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;firehose&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;S3Bucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;dynamicPartitioning&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;processors&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nx"&gt;firehose&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;MetadataExtractionProcessor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;jq16&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;customer_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.customer_id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;year&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.event_timestamp|strftime("%Y")&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;dataOutputPrefix&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;!{partitionKeyFromQuery:year}/!{partitionKeyFromQuery:customer_id}/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Contributed by:&lt;/strong&gt; &lt;a href="https://github.com/Tietew" rel="noopener noreferrer"&gt;Tietew&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Glue Typed Partition Projection (Alpha)
&lt;/h4&gt;

&lt;p&gt;Type-safe partition projection for Glue tables — no more raw strings for integer, date, enum, and injected types:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;glue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;S3Table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MyTable&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;database&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;myDatabase&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;data&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;glue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Schema&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;STRING&lt;/span&gt; &lt;span class="p"&gt;}],&lt;/span&gt;
  &lt;span class="na"&gt;partitionKeys&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;year&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;glue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Schema&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;INTEGER&lt;/span&gt; &lt;span class="p"&gt;}],&lt;/span&gt;
  &lt;span class="na"&gt;dataFormat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;glue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DataFormat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;partitionProjection&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;year&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;glue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PartitionProjectionConfiguration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;integer&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;min&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2020&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;max&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2023&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;digits&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Contributed by:&lt;/strong&gt; &lt;a href="https://github.com/badmintoncryer" rel="noopener noreferrer"&gt;Kazuho Cryer-Shinozuka&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Bedrock AgentCore: &lt;code&gt;fromCodeAsset&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Deploy agent runtimes from local code with automatic S3 packaging — no pre-built container required:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;artifact&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;agentcore&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AgentRuntimeArtifact&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromCodeAsset&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;__dirname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;path/to/agent/code&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;runtime&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;agentcore&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AgentCoreRuntime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PYTHON_3_12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;entrypoint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;opentelemetry-instrument&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;main.py&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;agentcore&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Runtime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MyAgentRuntime&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;runtimeName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;myAgent&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;agentRuntimeArtifact&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;artifact&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Contributed by:&lt;/strong&gt; &lt;a href="https://github.com/go-to-k" rel="noopener noreferrer"&gt;Kenta Goto&lt;/a&gt; (fromCodeAsset)&lt;/p&gt;

&lt;h4&gt;
  
  
  More Service Updates
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;API Gateway&lt;/strong&gt;: TLS 1.3 enhanced security policies with post-quantum cryptography support&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EC2&lt;/strong&gt;: VPC flow logs to Amazon Data Firehose (&lt;a href="https://github.com/Tietew" rel="noopener noreferrer"&gt;Tietew&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ECS&lt;/strong&gt;: &lt;code&gt;forceNewDeployment()&lt;/code&gt; to trigger redeployment without definition changes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AutoScaling&lt;/strong&gt;: Deletion protection and instance lifecycle policy with retention triggers (&lt;a href="https://github.com/matoom-nomu" rel="noopener noreferrer"&gt;Masatomo Nomura&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RDS&lt;/strong&gt;: Standalone &lt;code&gt;ParameterGroup.forInstance()&lt;/code&gt; / &lt;code&gt;ParameterGroup.forCluster()&lt;/code&gt; factory methods&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;S3&lt;/strong&gt;: Blocked encryption types to control allowed upload encryption (&lt;a href="https://github.com/ysthakur" rel="noopener noreferrer"&gt;Yash Thakur&lt;/a&gt;), ABAC support (&lt;a href="https://github.com/badmintoncryer" rel="noopener noreferrer"&gt;Kazuho Cryer-Shinozuka&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ECR Assets&lt;/strong&gt;: Docker &lt;code&gt;buildContexts&lt;/code&gt; for multi-context builds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CloudFront&lt;/strong&gt;: JS runtime 2.0 as default for new projects (&lt;a href="https://github.com/badmintoncryer" rel="noopener noreferrer"&gt;Kazuho Cryer-Shinozuka&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;S3 Tables (Alpha)&lt;/strong&gt;: Tagging, metrics, partition specs, sort orders (&lt;a href="https://github.com/mgarbvs" rel="noopener noreferrer"&gt;Michael Garbus&lt;/a&gt;, &lt;a href="https://github.com/olenarostotskyy" rel="noopener noreferrer"&gt;Olena R&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Gateway V2&lt;/strong&gt;: Role support for Lambda authorizers (&lt;a href="https://github.com/eliasbrange" rel="noopener noreferrer"&gt;Elias Brange&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Synthetics&lt;/strong&gt;: Canary NodeJS 3.1 runtime (&lt;a href="https://github.com/bilalq" rel="noopener noreferrer"&gt;Bilal Quadri&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Community Highlights
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Top External Contributors
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/badmintoncryer" rel="noopener noreferrer"&gt;Kazuho Cryer-Shinozuka&lt;/a&gt;&lt;/strong&gt; — 8 contributions across ALB JWT auth, OpenSearch S3 Vectors, S3 ABAC, Glue typed partition projection, CloudFront JS 2.0 default, and more. A driving force behind CDK's service coverage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/go-to-k" rel="noopener noreferrer"&gt;Kenta Goto&lt;/a&gt;&lt;/strong&gt; — Three high-impact features: &lt;code&gt;publish-assets&lt;/code&gt; CLI command, concurrent asset builds, and Bedrock AgentCore &lt;code&gt;fromCodeAsset&lt;/code&gt;. Consistently shipping features that improve developer velocity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/aki-kii" rel="noopener noreferrer"&gt;aki-kii&lt;/a&gt;&lt;/strong&gt; — Built &lt;code&gt;--revert-drift&lt;/code&gt; for the CLI and added AppSync enhanced metrics. Contributions spanning both CLI and construct library.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/Tietew" rel="noopener noreferrer"&gt;Tietew&lt;/a&gt;&lt;/strong&gt; — Kinesis Firehose dynamic partitioning and EC2 flow log Firehose destinations — two highly requested features.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/matoom-nomu" rel="noopener noreferrer"&gt;Masatomo Nomura&lt;/a&gt;&lt;/strong&gt; — AutoScaling deletion protection and instance lifecycle policy across both months.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/olenarostotskyy" rel="noopener noreferrer"&gt;Olena R&lt;/a&gt;&lt;/strong&gt; — S3 Tables metrics, partition specs, sort orders, and table properties.&lt;/p&gt;

&lt;h3&gt;
  
  
  Additional Contributors
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/AndreKurait" rel="noopener noreferrer"&gt;Andre Kurait&lt;/a&gt;, &lt;a href="https://github.com/0xdsqr" rel="noopener noreferrer"&gt;Dave Dennis&lt;/a&gt;, &lt;a href="https://github.com/mikevoets" rel="noopener noreferrer"&gt;Mike Voets&lt;/a&gt;, &lt;a href="https://github.com/eliasbrange" rel="noopener noreferrer"&gt;Elias Brange&lt;/a&gt;, &lt;a href="https://github.com/davidkonigsberg" rel="noopener noreferrer"&gt;David Konigsberg&lt;/a&gt;, &lt;a href="https://github.com/mgarbvs" rel="noopener noreferrer"&gt;Michael Garbus&lt;/a&gt;, &lt;a href="https://github.com/mazyu36" rel="noopener noreferrer"&gt;Yuki Matsuda&lt;/a&gt;, &lt;a href="https://github.com/ysthakur" rel="noopener noreferrer"&gt;Yash Thakur&lt;/a&gt;, &lt;a href="https://github.com/bilalq" rel="noopener noreferrer"&gt;Bilal Quadri&lt;/a&gt;, &lt;a href="https://github.com/bk5115545" rel="noopener noreferrer"&gt;Bryan Koch&lt;/a&gt;, &lt;a href="https://github.com/syukawa-gh" rel="noopener noreferrer"&gt;syukawa-gh&lt;/a&gt;, &lt;a href="https://github.com/jkelley-godaddy" rel="noopener noreferrer"&gt;jkelley-godaddy&lt;/a&gt;, &lt;a href="https://github.com/juho9000" rel="noopener noreferrer"&gt;Juho Majasaari&lt;/a&gt;, &lt;a href="https://github.com/abhu85" rel="noopener noreferrer"&gt;Abhishek Chauhan&lt;/a&gt;, &lt;a href="https://github.com/cartmanez" rel="noopener noreferrer"&gt;cartmanez&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Community Content &amp;amp; Resources
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;From the Community:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://dev.to/aws-heroes/aws-cdk-tips-how-to-centrally-apply-configurations-to-multiple-resources-i3g"&gt;AWS CDK Tips: How to Centrally Apply Configurations to Multiple Resources&lt;/a&gt;&lt;/strong&gt; — Kenta Goto walks through patterns for applying configurations at scale — timely with Mixins going stable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://dev.to/aws-builders/cdk-mixin-for-deletion-protection-50b7"&gt;CDK Mixin for Deletion Protection&lt;/a&gt;&lt;/strong&gt; — Hands-on walkthrough of building a custom Mixin, by johanneskonings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://dev.to/aws-heroes/why-is-cdkout-cloud-assembly-necessary-in-aws-cdk-n5f"&gt;Why is cdk.out (Cloud Assembly) Necessary in AWS CDK?&lt;/a&gt;&lt;/strong&gt; — Kenta Goto explains the Cloud Assembly and why it matters for your workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://dev.to/tyckofranklin/cdk-using-central-register-pattern-for-resource-sharing-27k2"&gt;CDK - Using Central Register Pattern for Resource Sharing&lt;/a&gt;&lt;/strong&gt; — A practical pattern for sharing resources across stacks, by tyckofranklin.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://dev.to/rajmurugan/part-2-cdk-infrastructure-for-amazon-bedrock-agentcore-and-every-gotcha-youll-hit-393h"&gt;CDK Infrastructure for Amazon Bedrock AgentCore (And Every Gotcha You'll Hit)&lt;/a&gt;&lt;/strong&gt; — Real-world guide to deploying Bedrock AgentCore with CDK, by rajmurugan.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://dev.to/aws-heroes/zero-orphaned-resources-force-deleting-any-cloudformation-stack-3b1h"&gt;Zero Orphaned Resources: Force Deleting Any CloudFormation Stack&lt;/a&gt;&lt;/strong&gt; — Kenta Goto on cleaning up stuck stacks without leaving orphaned resources.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://dev.to/mianzubair/what-really-happens-when-you-deploy-with-aws-cdk-4kli"&gt;What Really Happens When You Deploy with AWS CDK?&lt;/a&gt;&lt;/strong&gt; — A look under the hood at the CDK deployment process, by mianzubair.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://dev.to/katevu/building-a-serverless-llm-pipeline-with-amazon-bedrock-and-sagemaker-fine-tuning-using-aws-cdk-4125"&gt;Building a Serverless LLM Pipeline with Bedrock and SageMaker using CDK&lt;/a&gt;&lt;/strong&gt; — End-to-end CDK pipeline for LLM fine-tuning, by katevu.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resources:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://awslabs.github.io/mcp/servers/aws-iac-mcp-server" rel="noopener noreferrer"&gt;AWS IaC MCP Server&lt;/a&gt; — AI-powered CDK development via Model Context Protocol.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://construct.dev/" rel="noopener noreferrer"&gt;CDK Construct Hub&lt;/a&gt; — Discover community-built constructs.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/cdk/api/v2/" rel="noopener noreferrer"&gt;AWS CDK API Reference&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How Can You Be Involved
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Report Issues
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/aws/aws-cdk/issues/new/choose" rel="noopener noreferrer"&gt;Open an issue&lt;/a&gt; on GitHub.&lt;/p&gt;

&lt;h3&gt;
  
  
  Contribute Code
&lt;/h3&gt;

&lt;p&gt;Check our &lt;a href="https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md" rel="noopener noreferrer"&gt;contributing guide&lt;/a&gt; and look for &lt;a href="https://github.com/aws/aws-cdk/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22" rel="noopener noreferrer"&gt;&lt;code&gt;good first issue&lt;/code&gt;&lt;/a&gt; or &lt;a href="https://github.com/aws/aws-cdk/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22" rel="noopener noreferrer"&gt;&lt;code&gt;help wanted&lt;/code&gt;&lt;/a&gt; labels.&lt;/p&gt;

&lt;h3&gt;
  
  
  Join the Conversation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Slack&lt;/strong&gt;: &lt;a href="https://cdk.dev" rel="noopener noreferrer"&gt;CDK.dev community&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/aws/aws-cdk/discussions" rel="noopener noreferrer"&gt;Discussions&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stack Overflow&lt;/strong&gt;: &lt;a href="https://stackoverflow.com/questions/tagged/aws-cdk" rel="noopener noreferrer"&gt;&lt;code&gt;aws-cdk&lt;/code&gt; tag&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Star the Repo
&lt;/h3&gt;

&lt;p&gt;Give us a star on &lt;a href="https://github.com/aws/aws-cdk" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;! ⭐&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Feedback? Share in &lt;a href="https://github.com/aws/aws-cdk/discussions" rel="noopener noreferrer"&gt;GitHub Discussions&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cdk</category>
      <category>infrastructureascode</category>
      <category>devtools</category>
    </item>
    <item>
      <title>From One Prompt to a Deployed Full-Stack App on AWS</title>
      <dc:creator>Praneeta Prakash</dc:creator>
      <pubDate>Wed, 11 Mar 2026 19:56:49 +0000</pubDate>
      <link>https://forem.com/aws/from-one-prompt-to-a-deployed-full-stack-app-on-aws-64i</link>
      <guid>https://forem.com/aws/from-one-prompt-to-a-deployed-full-stack-app-on-aws-64i</guid>
      <description>&lt;p&gt;By &lt;a href="https://www.linkedin.com/in/hfurkanbozkurt" rel="noopener noreferrer"&gt;H. Furkan Bozkurt&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Let's build a travel journal app. The kind where users sign in, create trips, write journal entries, upload photos, and chat with an AI companion that knows about their travels. Auth, data modelling, file storage, AI conversation, a Next.js frontend, and a production deployment. The usual full-stack checklist together with some AI features that takes a weekend to wire up manually. &lt;/p&gt;

&lt;p&gt;We'll do it with one prompt. The agent will work through a 4-phase plan (backend, sandbox, frontend, production), pausing between each phase to ask for the go-ahead before continuing with the help of AWS Amplify Power! &lt;/p&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Node.js 18.x or later &lt;/li&gt;
&lt;li&gt;npm available &lt;/li&gt;
&lt;li&gt;AWS credentials configured (&lt;code&gt;aws configure&lt;/code&gt; or &lt;code&gt;aws sso login&lt;/code&gt;) 

&lt;ul&gt;
&lt;li&gt;For setting up AWS account with Amplify permissions, see the &lt;a href="https://docs.amplify.aws/react/start/account-setup/" rel="noopener noreferrer"&gt;Amplify account setup guide&lt;/a&gt; and the &lt;a href="https://docs.aws.amazon.com/aws-mcp/" rel="noopener noreferrer"&gt;AWS MCP prerequisites&lt;/a&gt;. &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Kiro IDE installed &lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  What's a Kiro Power?
&lt;/h3&gt;

&lt;p&gt;Before we move forward with implementation, let’s talk about Kiro Powers. Kiro Powers are packaged workflows for the Kiro IDE. They bundle tools, instructions, and structured execution plans into a single installable unit. You don't configure them manually or edit JSON files. You install one from the sidebar with a click, and it activates automatically when your prompt is relevant. &lt;/p&gt;

&lt;h3&gt;
  
  
  Setup
&lt;/h3&gt;

&lt;p&gt;Now you are ready to build the application. Let’s get started with installing the Kiro Power. &lt;/p&gt;

&lt;h4&gt;
  
  
  Installation
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Click the Powers icon (lightning bolt) in Kiro IDE's right sidebar &lt;/li&gt;
&lt;li&gt;Click Build full-stack apps with AWS Amplify &lt;/li&gt;
&lt;li&gt;Click Install &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0qgpifzfzttbl1vyv6f3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0qgpifzfzttbl1vyv6f3.png" alt=" " width="800" height="354"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's it. No JSON config files, no manual server setup. Let's build something. &lt;/p&gt;

&lt;h3&gt;
  
  
  The Prompt
&lt;/h3&gt;

&lt;p&gt;Here's what we'll give the agent. Notice there's no mention of Cognito, S3, DynamoDB, or deployment pipelines. We just describe the app we want: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Build "Leafer", a travel journal app where users sign in, create trips, write journal entries, and upload photos. Include a chat feature that can answer questions about the user's trips and entries, things like "summarize my Barcelona trip" or "what restaurants did I mention in Japan?" Use Next.js with TypeScript for the frontend. For the backend, set up auth, a data model, file storage, and a conversational AI backend. Make the UI clean and deploy it to production.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Hit enter. The agent activates the Amplify Power as the first thing. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv3q62our8ku2qhxa7fm3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv3q62our8ku2qhxa7fm3.png" alt=" " width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then it validates prerequisites (Node.js, AWS credentials), and presents a plan: the features it identified, the framework it will use, and the phases it will execute. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvgqocyh5sroyj8bqe97w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvgqocyh5sroyj8bqe97w.png" alt="3" width="800" height="676"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Phase 1: Backend Setup
&lt;/h4&gt;

&lt;p&gt;The agent starts by building the backend. It retrieves the relevant Amplify backend SOP and creates the resources: authentication (Cognito), a data model (trips, journal entries), file storage (S3 for photos), and an AI conversation route that has context about the user's trips and entries. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5dghtl4en2dmcfj1o4pd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5dghtl4en2dmcfj1o4pd.png" alt=" " width="800" height="549"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once done, it lists everything it created and asks for confirmation before moving forward. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwp6uc7scwv0pfzfsg9wb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwp6uc7scwv0pfzfsg9wb.png" alt="5" width="800" height="273"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Not every task triggers all four phases. If you'd asked "add auth to my existing backend," the agent would run only this phase and the sandbox deployment, skipping frontend and production entirely. The Power is context-aware: it reads the prompt and the project's current state to decide which phases apply. &lt;/p&gt;

&lt;h4&gt;
  
  
  Phase 2: Sandbox Deployment
&lt;/h4&gt;

&lt;p&gt;With the backend defined, the agent deploys everything to a sandbox environment. This is where you catch issues like schema problems, permission misconfigurations, or missing environment variables before anything touches production. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp0cl4cdfa37i5lu16j6d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp0cl4cdfa37i5lu16j6d.png" alt="6" width="800" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The agent follows the Amplify deployment SOP, runs the sandbox deployment, and pauses again for confirmation. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff754isnyi7ptlwr1o2pr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff754isnyi7ptlwr1o2pr.png" alt="7" width="800" height="223"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Phase 3: Frontend &amp;amp; Testing
&lt;/h4&gt;

&lt;p&gt;With the sandbox running, the agent moves to the frontend. It scaffolds the Next.js app, installs the Amplify client libraries, and builds the UI: an authentication flow, trip management pages, journal entry forms with photo uploads, and the AI companion chat interface. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fof945mf0gq1lcfbhnqtm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fof945mf0gq1lcfbhnqtm.png" alt="8" width="800" height="213"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After the build succeeds, the agent generates a testing checklist based on the specific resources that were created. Not a generic list: if you didn't add storage, storage tests won't appear. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi77uowhl3tqtz87wietu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi77uowhl3tqtz87wietu.png" alt="9" width="800" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the phase where you open the app locally, click through the flows, and verify everything works before shipping. &lt;/p&gt;

&lt;h4&gt;
  
  
  Phase 4: Production Deployment
&lt;/h4&gt;

&lt;p&gt;The final phase sets up CI/CD deployment through Amplify Hosting. The agent follows the deployment SOP again, this time configuring a production pipeline connected to the repository. &lt;/p&gt;

&lt;p&gt;Future updates just need a git push to main. Amplify picks up the change and auto-deploys. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fto82pdaqhkz2r1ko32f6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fto82pdaqhkz2r1ko32f6.png" alt="10" width="800" height="254"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One thing worth noting: the generated frontend gives you a working app with all the right integrations, but it's a starting point. For a production app, you'll want to spend time refining the UI, tightening up the layout, and making it your own. The value is in the wiring, not the pixel-perfect design. &lt;/p&gt;

&lt;p&gt;One prompt, four phases, and a few confirmation clicks later: Leafer is live! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjdhsg6a1i1ry60gtjoyh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjdhsg6a1i1ry60gtjoyh.png" alt=" " width="800" height="222"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Cleanup
&lt;/h3&gt;

&lt;p&gt;When you no longer need the environments: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Delete sandbox: &lt;code&gt;npx ampx sandbox delete&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;Delete production: &lt;code&gt;aws amplify delete-app --app-id &amp;lt;your-app-id&amp;gt;&lt;/code&gt; or remove the app from the AWS Amplify Console &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Links
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/kirodotdev/powers/tree/main/aws-amplify" rel="noopener noreferrer"&gt;AWS Amplify Kiro Power on GitHub&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://kiro.dev/launch/powers/aws-amplify" rel="noopener noreferrer"&gt;Kiro Powers&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.amplify.aws/react/start/quickstart/" rel="noopener noreferrer"&gt;AWS Amplify Documentation &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>amplify</category>
      <category>webdev</category>
      <category>ai</category>
      <category>aws</category>
    </item>
    <item>
      <title>AWS CDK Community Update: Jan/Feb 2026!</title>
      <dc:creator>Praneeta Prakash</dc:creator>
      <pubDate>Tue, 17 Feb 2026 20:20:33 +0000</pubDate>
      <link>https://forem.com/aws/aws-cdk-community-update-janfeb-2026-51jb</link>
      <guid>https://forem.com/aws/aws-cdk-community-update-janfeb-2026-51jb</guid>
      <description>&lt;h2&gt;
  
  
  What's New
&lt;/h2&gt;

&lt;p&gt;Hello! So excited to get the regular blogpost updates on AWS CDK going for 2026! This update covers CDK updates from December 2025 through February 2026. The community delivered 150+ pull requests spanning EKS, Bedrock, ECS, and 15+ other AWS services. Whether you're new to CDK or a seasoned user, you'll find new capabilities that make infrastructure as code more powerful and easier to maintain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Community at a Glance
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;150+ pull requests&lt;/strong&gt; merged from external contributors&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;25+ first-time contributors&lt;/strong&gt; joined the project&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;17 top contributors&lt;/strong&gt; driving major features&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Active development&lt;/strong&gt; across EKS, Bedrock, ECS, and 15+ other services&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Upgrade Now
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; aws-cdk@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Top features to try this week:&lt;/strong&gt; &lt;br&gt;
&lt;strong&gt;CDK Mixins (Preview)&lt;/strong&gt;: Add capabilities to constructs without rebuilding them &lt;a href="https://dev.to/aws/announcing-aws-cdk-mixins-composable-abstractions-for-aws-resources-588m"&gt;link&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Kiro Power for AWS IaC&lt;/strong&gt;: AI-powered CDK and CloudFormation development assistance &lt;a href="https://github.com/kirodotdev/powers/tree/main/aws-infrastructure-as-code" rel="noopener noreferrer"&gt;link&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;ECS Deployments&lt;/strong&gt;: Built-in Linear/Canary strategies for safer rollouts &lt;a href="https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ecs.ManagedInstancesCapacityProvider.html" rel="noopener noreferrer"&gt;link&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;CloudWatch Logs&lt;/strong&gt;: Deletion protection prevents accidental data loss &lt;a href="https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_logs.RetentionDays.html" rel="noopener noreferrer"&gt;link&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;EKS Hybrid Nodes&lt;/strong&gt;: Integrate on-premises infrastructure with EKS clusters &lt;a href="https://docs.aws.amazon.com/cdk/api/v2/docs/aws-eks-v2-alpha-readme.html" rel="noopener noreferrer"&gt;link&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Bedrock AgentCore&lt;/strong&gt;: API Gateway integration and episodic memory for AI agents &lt;a href="https://docs.aws.amazon.com/cdk/api/v2/docs/aws-bedrock-agentcore-alpha-readme.html" rel="noopener noreferrer"&gt;link&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Also new:&lt;/strong&gt; Glue typed partition projection, Synthetics Playwright 5.0, RDS enhanced metrics&lt;/p&gt;
&lt;h2&gt;
  
  
  Major Features
&lt;/h2&gt;
&lt;h3&gt;
  
  
  CDK Mixins (Preview) - Add Features to Any Construct
&lt;/h3&gt;

&lt;p&gt;Mixins let you compose functionality onto existing constructs. Think of them as reusable "add-ons" that can be applied to any compatible construct. This means that you don't need to wait for a property to be supported in L2 constructs anymore. For example, using an unsupported &lt;code&gt;AnalyticsConfigurationProperty&lt;/code&gt; on S3 L2 construct, becomes simple with the &lt;code&gt;CfnBucketPropsMixin&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;l2bucket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;L2 Bucket&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;with&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;CfnBucketPropsMixin&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;analyticsConfigurations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;
            &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my-analytics&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;storageClassAnalysis&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="na"&gt;dataExport&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="na"&gt;destination&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{....},&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}]&lt;/span&gt;
    &lt;span class="p"&gt;}))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Try it:&lt;/strong&gt; &lt;code&gt;npm install @aws-cdk/mixins-preview&lt;/code&gt; - &lt;a href="https://github.com/aws/aws-cdk/tree/main/packages/@aws-cdk/mixins-preview#readme" rel="noopener noreferrer"&gt;Read the docs&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Note&lt;/strong&gt;: Preview feature API may change. Currently TypeScript/JavaScript only.&lt;br&gt;
&lt;a href="https://dev.to/aws/announcing-aws-cdk-mixins-composable-abstractions-for-aws-resources-588m"&gt;Read blogpost about CDK Mixins&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Amazon EKS Enhancements
&lt;/h3&gt;

&lt;p&gt;The EKS module received significant love this quarter with multiple community-driven improvements:&lt;br&gt;
&lt;strong&gt;EKS Hybrid Nodes Support&lt;/strong&gt; You can now seamlessly integrate on-premises and edge infrastructure with your EKS clusters. This opens up hybrid cloud architectures with consistent Kubernetes management.&lt;br&gt;
&lt;strong&gt;Native OIDC Provider&lt;/strong&gt; We've introduced &lt;code&gt;OidcProviderNative&lt;/code&gt; using L1 constructs, providing a more efficient alternative to the custom resource-based &lt;code&gt;OpenIdConnectProvider&lt;/code&gt;. This improves deployment speed and reduces complexity.&lt;br&gt;
&lt;strong&gt;New Access Entry Types&lt;/strong&gt; Support for &lt;code&gt;EC2&lt;/code&gt;, &lt;code&gt;HYBRID_LINUX&lt;/code&gt;, and &lt;code&gt;HYPERPOD_LINUX&lt;/code&gt; access entry types gives you more granular control over cluster access patterns.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;declare&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cluster&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;eks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Cluster&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kr"&gt;declare&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nodeRole&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;iam&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Role&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Grant access with EC2 type for Auto Mode node role&lt;/span&gt;
&lt;span class="nx"&gt;cluster&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;grantAccess&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;nodeAccess&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;nodeRole&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;roleArn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="nx"&gt;eks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AccessPolicy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromAccessPolicyName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;AmazonEKSAutoNodePolicy&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;accessScopeType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;eks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AccessScopeType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CLUSTER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;accessEntryType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;eks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AccessEntryType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;EC2&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/cdk/api/v2/docs/aws-eks-v2-alpha-readme.html" rel="noopener noreferrer"&gt;Read more in the EKS module documentation&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Bedrock AgentCore Expansion
&lt;/h3&gt;

&lt;p&gt;Thanks to &lt;a href="https://github.com/dineshSajwan" rel="noopener noreferrer"&gt;&lt;strong&gt;Dinesh Sajwan&lt;/strong&gt;&lt;/a&gt; and &lt;a href="https://github.com/mazyu36" rel="noopener noreferrer"&gt;&lt;strong&gt;Yuki Matsuda&lt;/strong&gt;&lt;/a&gt;, Bedrock AgentCore received powerful new capabilities:&lt;br&gt;
&lt;strong&gt;API Gateway Target Support&lt;/strong&gt; Integrate your AgentCore gateways directly with API Gateway, enabling more flexible routing and integration patterns.&lt;br&gt;
&lt;strong&gt;Gateway Interceptors&lt;/strong&gt; Add custom logic to intercept and transform requests/responses flowing through your AgentCore gateways.&lt;br&gt;
&lt;strong&gt;Episodic Memory Strategy&lt;/strong&gt; Implement sophisticated memory patterns for your AI agents, allowing them to maintain context across interactions.&lt;br&gt;
&lt;a href="https://docs.aws.amazon.com/cdk/api/v2/docs/aws-bedrock-agentcore-alpha-readme.html" rel="noopener noreferrer"&gt;Read more in the Bedrock AgentCore module documentation&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  ECS Deployment Strategies
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/mazyu36" rel="noopener noreferrer"&gt;&lt;strong&gt;Yuki Matsuda&lt;/strong&gt;&lt;/a&gt; contributed builtin support for Linear and Canary deployment strategies in ECS. These strategies reduce risk when rolling out changes by gradually shifting traffic to new versions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;declare&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cluster&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ecs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Cluster&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kr"&gt;declare&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;taskDefinition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ecs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;TaskDefinition&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kr"&gt;declare&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;blueTargetGroup&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;elbv2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ApplicationTargetGroup&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kr"&gt;declare&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;greenTargetGroup&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;elbv2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ApplicationTargetGroup&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kr"&gt;declare&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;prodListenerRule&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;elbv2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ApplicationListenerRule&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;service&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;ecs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;FargateService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Service&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;cluster&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;taskDefinition&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;deploymentStrategy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ecs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DeploymentStrategy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;LINEAR&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;linearConfiguration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;stepPercent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;10.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;stepBakeTime&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Duration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;minutes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loadBalancerTarget&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;containerName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;web&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;containerPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;alternateTarget&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;ecs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;AlternateTarget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;AlternateTarget&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;alternateTargetGroup&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;greenTargetGroup&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;productionListener&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ecs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ListenerRuleConfiguration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;applicationListenerRule&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;prodListenerRule&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;attachToApplicationTargetGroup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;blueTargetGroup&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Spot Instance Support&lt;/strong&gt; &lt;a href="https://github.com/djglaser" rel="noopener noreferrer"&gt;&lt;strong&gt;David Glaser&lt;/strong&gt;&lt;/a&gt; added &lt;code&gt;capacityOptionType&lt;/code&gt; to &lt;code&gt;ManagedInstancesCapacityProvider&lt;/code&gt;, enabling costeffective Spot instance usage for your ECS workloads.&lt;br&gt;
&lt;a href="https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ecs.ManagedInstancesCapacityProvider.html" rel="noopener noreferrer"&gt;Read more in the ECS module documentation&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  AWS Glue Typed Partition Projection
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/badmintoncryer" rel="noopener noreferrer"&gt;&lt;strong&gt;Kazuho CryerShinozuka&lt;/strong&gt;&lt;/a&gt; introduced typed partition projection for Glue tables, bringing type safety to your data catalog definitions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;declare&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;myDatabase&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;glue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Database&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;glue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;S3Table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MyTable&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;database&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;myDatabase&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;data&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;glue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Schema&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;STRING&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;}],&lt;/span&gt;
  &lt;span class="na"&gt;partitionKeys&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;date&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;glue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Schema&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;STRING&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;}],&lt;/span&gt;
  &lt;span class="na"&gt;dataFormat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;glue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DataFormat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;partitionProjection&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;glue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PartitionProjectionConfiguration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;date&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;min&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2020-01-01&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;max&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2023-12-31&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;yyyy-MM-dd&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;// optional, defaults to 1&lt;/span&gt;
      &lt;span class="na"&gt;intervalUnit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;glue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DateIntervalUnit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DAYS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;// optional: YEARS, MONTHS, WEEKS, DAYS, HOURS, MINUTES, SECONDS&lt;/span&gt;
    &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/cdk/api/v2/docs/@aws-cdk_aws-glue-alpha.PartitionProjectionConfiguration.html" rel="noopener noreferrer"&gt;Read more in the Glue module documentation&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  RDS Enhancements
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Enhanced Metrics&lt;/strong&gt; &lt;a href="https://github.com/jasdeepbhalla" rel="noopener noreferrer"&gt;&lt;strong&gt;Jasdeep Singh Bhalla&lt;/strong&gt;&lt;/a&gt; added Read/Write IOPS metrics to &lt;code&gt;DatabaseInstance&lt;/code&gt; and Volume Read/Write IOPS metrics to &lt;code&gt;DatabaseCluster&lt;/code&gt;, giving you better visibility into database performance.&lt;br&gt;
&lt;strong&gt;RDS Proxy Auth Scheme&lt;/strong&gt; &lt;a href="https://github.com/mazyu36" rel="noopener noreferrer"&gt;&lt;strong&gt;Yuki Matsuda&lt;/strong&gt;&lt;/a&gt; added support for default authentication schemes in RDS Proxy, simplifying proxy configuration.&lt;br&gt;
&lt;a href="https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_rds.DatabaseInstance.html" rel="noopener noreferrer"&gt;Read more in the RDS module documentation&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  CloudWatch Logs Deletion Protection
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/robert-hanuschke" rel="noopener noreferrer"&gt;&lt;strong&gt;Robert Hanuschke&lt;/strong&gt;&lt;/a&gt; contributed deletion protection configuration for CloudWatch Log Groups. This prevents accidental data loss by blocking log group deletion until protection is explicitly disabled.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;logs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;LogGroup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;LogGroup&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;deletionProtectionEnabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_logs.RetentionDays.html" rel="noopener noreferrer"&gt;Read more in the CloudWatch Logs module documentation&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  EC2 VPC Flow Logs to Firehose
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/tietew" rel="noopener noreferrer"&gt;&lt;strong&gt;Tietew&lt;/strong&gt;&lt;/a&gt; added support for using Firehose &lt;code&gt;IDeliveryStreamRef&lt;/code&gt; as a flow log destination, enabling realtime log streaming and transformation.&lt;/p&gt;

&lt;h3&gt;
  
  
  API Gateway v2 EventBridge Integration
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/jasdeepbhalla" rel="noopener noreferrer"&gt;&lt;strong&gt;Jasdeep Singh Bhalla&lt;/strong&gt;&lt;/a&gt; added &lt;code&gt;PutEvents&lt;/code&gt; support for EventBridge integration in API Gateway v2, making eventdriven architectures even easier to build.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kiro Power for AWS Infrastructure as Code
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The challenge:&lt;/strong&gt; CDK and CloudFormation development requires constantly referencing documentation, understanding best practices, validating templates, and troubleshooting deployments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The solution:&lt;/strong&gt; Kiro's AWS Infrastructure as Code Power provides AI-powered assistance for CDK and CloudFormation development. It dynamically loads specialized tools and context only when needed, avoiding MCP context overload.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Latest Documentation Access&lt;/strong&gt;: Search CDK docs, API references, and CloudFormation specs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code Generation&lt;/strong&gt;: Generate well-architected infrastructure following AWS best practices&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Template Validation&lt;/strong&gt;: Check CloudFormation templates for errors and compliance issues&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment Troubleshooting&lt;/strong&gt;: Analyze CloudTrail logs and diagnose deployment failures&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Practices&lt;/strong&gt;: Apply CDK-NAG rules and security configurations automatically&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Try it:&lt;/strong&gt; Install the power in Kiro and activate it when working on infrastructure code. The power uses the AWS IaC MCP Server under the hood, providing the same capabilities with better context management.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/kirodotdev/powers/tree/main/aws-infrastructure-as-code" rel="noopener noreferrer"&gt;Learn more about Kiro Powers&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  More Features
&lt;/h3&gt;

&lt;p&gt;Additional improvements this quarter: &lt;br&gt;
&lt;strong&gt;Hotswap Support for Bedrock AgentCore&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/go-to-k" rel="noopener noreferrer"&gt;&lt;strong&gt;Kenta Goto&lt;/strong&gt;&lt;/a&gt; added hotswap support for &lt;code&gt;AWS::BedrockAgentCore::Runtime&lt;/code&gt;, enabling faster development iterations.&lt;br&gt;
&lt;strong&gt;EC2 VPC Flow Logs to Firehose&lt;/strong&gt; (&lt;a href="https://github.com/tietew" rel="noopener noreferrer"&gt;&lt;strong&gt;Tietew&lt;/strong&gt;&lt;/a&gt;) - Real-time log streaming and transformation &lt;br&gt;
&lt;strong&gt;API Gateway v2 EventBridge Integration&lt;/strong&gt; (&lt;a href="https://github.com/jasdeepbhalla" rel="noopener noreferrer"&gt;&lt;strong&gt;Jasdeep Singh Bhalla&lt;/strong&gt;&lt;/a&gt;) - PutEvents support for event-driven architectures &lt;br&gt;
&lt;strong&gt;SageMaker Health Check Timeout&lt;/strong&gt; (&lt;a href="https://github.com/amandladev" rel="noopener noreferrer"&gt;&lt;strong&gt;Сергей&lt;/strong&gt;&lt;/a&gt;) - More control over endpoint health checks &lt;br&gt;
&lt;strong&gt;IoT Actions HTTP Batching&lt;/strong&gt; (&lt;a href="https://github.com/badmintoncryer" rel="noopener noreferrer"&gt;&lt;strong&gt;Kazuho Cryer-Shinozuka&lt;/strong&gt;&lt;/a&gt;) - Improved efficiency for high-volume IoT workloads &lt;br&gt;
&lt;strong&gt;Step Functions JSONata Support&lt;/strong&gt; (&lt;a href="https://github.com/mu7889yoon" rel="noopener noreferrer"&gt;&lt;strong&gt;Y.Nakamura&lt;/strong&gt;&lt;/a&gt;) - Dynamic control over parallel execution &lt;/p&gt;

&lt;h2&gt;
  
  
  Community Highlights
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Top External Contributors
&lt;/h3&gt;

&lt;p&gt;We want to give a special shoutout to our most active external contributors this quarter:&lt;br&gt;
&lt;a href="https://github.com/mazyu36" rel="noopener noreferrer"&gt;&lt;strong&gt;Yuki Matsuda (mazyu36)&lt;/strong&gt;&lt;/a&gt; - ECS deployment strategies, RDS Proxy auth, Bedrock AgentCore improvements, and EventScheduler fixes &lt;br&gt;
&lt;a href="https://github.com/jasdeepbhalla" rel="noopener noreferrer"&gt;&lt;strong&gt;Jasdeep Singh Bhalla&lt;/strong&gt;&lt;/a&gt; - RDS metrics, ECS log driver options, and API Gateway v2 EventBridge integration &lt;br&gt;
&lt;a href="https://github.com/badmintoncryer" rel="noopener noreferrer"&gt;&lt;strong&gt;Kazuho Cryer-Shinozuka&lt;/strong&gt;&lt;/a&gt; - Glue typed partition projection, IoT Actions batching, and Redshift improvements &lt;br&gt;
&lt;a href="https://github.com/go-to-k" rel="noopener noreferrer"&gt;&lt;strong&gt;Kenta Goto (go-to-k)&lt;/strong&gt;&lt;/a&gt; - Mixins preview improvements and documentation fixes, hotswap on AgentCore&lt;br&gt;
&lt;a href="https://github.com/tietew" rel="noopener noreferrer"&gt;&lt;strong&gt;Tietew&lt;/strong&gt;&lt;/a&gt; - EC2 Flow Logs Firehose destination support &lt;br&gt;
&lt;a href="https://github.com/yatakemi" rel="noopener noreferrer"&gt;&lt;strong&gt;yatakemi&lt;/strong&gt;&lt;/a&gt; - Synthetics Playwright runtimes &lt;/p&gt;

&lt;h2&gt;
  
  
  Get Involved
&lt;/h2&gt;

&lt;p&gt;The AWS CDK is powered by the AWS developer community. Here's how to contribute:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Join &lt;a href="https://join.slack.com/t/cdk-dev/shared_invite/zt-37hzafo82-8x6OQ3voSlMHd2DUG1puzw" rel="noopener noreferrer"&gt;cdk.dev on Slack&lt;/a&gt; and introduce yourself&lt;/li&gt;
&lt;li&gt;Try the CDK Workshop &lt;a href="https://www.youtube.com/playlist?list=PLp1wJE9SAACOLvdtKL2P2Kq_N_AiYIj8N" rel="noopener noreferrer"&gt;Video Series&lt;/a&gt; or &lt;a href="http://cdkworkshop.com/" rel="noopener noreferrer"&gt;Hands-on session&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Pick a &lt;a href="https://github.com/aws/awscdk/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22" rel="noopener noreferrer"&gt;good first issue&lt;/a&gt; - we'll help you through it&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Ongoing
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Answer questions&lt;/strong&gt;: Help others on &lt;a href="https://stackoverflow.com/questions/tagged/aws-cdk" rel="noopener noreferrer"&gt;Stack Overflow&lt;/a&gt; &lt;br&gt;
&lt;strong&gt;Share your work&lt;/strong&gt;: Publish constructs to &lt;a href="https://constructs.dev/" rel="noopener noreferrer"&gt;Construct Hub&lt;/a&gt; &lt;br&gt;
&lt;strong&gt;Report bugs&lt;/strong&gt;: &lt;a href="https://github.com/aws/aws-cdk/issues/new/choose" rel="noopener noreferrer"&gt;Open an issue&lt;/a&gt; with reproduction steps&lt;br&gt;
&lt;strong&gt;Stay updated:&lt;/strong&gt; Star the &lt;a href="https://github.com/aws/aws-cdk" rel="noopener noreferrer"&gt;aws-cdk repo&lt;/a&gt; for release notifications Join our quarterly community meetings (&lt;a href="https://www.youtube.com/@cdkdev" rel="noopener noreferrer"&gt;videos available here&lt;/a&gt;)&lt;/p&gt;




&lt;h2&gt;
  
  
  Community Showcase
&lt;/h2&gt;

&lt;p&gt;The CDK community continues to build, share, and teach. Here's how developers are using CDK in production and contributing back:&lt;/p&gt;

&lt;h3&gt;
  
  
  Learning &amp;amp; Best Practices
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://dev.to/awsheroes/aws-cdk-iam-role-management-preventing-automatic-policy-updates-ibk"&gt;&lt;strong&gt;Manage IAM Policies Manually&lt;/strong&gt;&lt;/a&gt; - &lt;strong&gt;Kenta Goto:&lt;/strong&gt; Prevent CDK from automatically updating IAM role policies when you need full control&lt;br&gt;
&lt;a href="https://dev.to/aws-builders/aws-the-best-cdk-code-that-anyone-can-write-with-the-power-of-kiro-kiro-3men"&gt;&lt;strong&gt;AIPowered CDK Development with Kiro&lt;/strong&gt;&lt;/a&gt; - &lt;strong&gt;Nao San:&lt;/strong&gt; Generate CDK code with latest best practices using AI assistance&lt;br&gt;
&lt;a href="https://github.com/dixitrathod16/awsserverless-website-tutorial" rel="noopener noreferrer"&gt;&lt;strong&gt;Build a Serverless Website from Scratch&lt;/strong&gt;&lt;/a&gt; - &lt;strong&gt;Dixit Rathod:&lt;/strong&gt; 4 part tutorial: S3 hosting, API Gateway, DynamoDB, full integration&lt;/p&gt;

&lt;h3&gt;
  
  
  Monitoring &amp;amp; Operations
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://johanneskonings.dev/blog/2025-12-13-cdk-monitor-multiple-resources-using-single-alarm/" rel="noopener noreferrer"&gt;&lt;strong&gt;One Alarm for Many Resources&lt;/strong&gt;&lt;/a&gt; - &lt;strong&gt;Johannes Konings:&lt;/strong&gt; Use CloudWatch Metrics Insights to monitor 100 resources with one alarm instead of 100&lt;br&gt;
&lt;a href="https://johanneskonings.dev/blog/2026-01-11-aws-cdk-nag-log-bucket-tagger/" rel="noopener noreferrer"&gt;&lt;strong&gt;Tag Log Buckets for Security Scanners&lt;/strong&gt;&lt;/a&gt; - &lt;strong&gt;Johannes Konings:&lt;/strong&gt; Make cdknag work with third-party security tools through tagging&lt;br&gt;
&lt;a href="https://dev.to/awsheroes/aws-cdk-hotswap-deployments-now-support-bedrock-agentcore-runtime-42c7"&gt;&lt;strong&gt;Faster AgentCore Deployments&lt;/strong&gt;&lt;/a&gt; - &lt;strong&gt;Kenta Goto:&lt;/strong&gt; Skip CloudFormation for faster AI agent development cycles&lt;/p&gt;

&lt;h3&gt;
  
  
  Infrastructure Patterns
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/posts/open-construct-foundation_cdk-activity-7416812976667553793-xYin?utm_source=share&amp;amp;utm_medium=member_desktop&amp;amp;rcm=ACoAAAOGaNUBhU6dMgbRygOnTSqV7AGGkevSn8w" rel="noopener noreferrer"&gt;&lt;strong&gt;CDK Terrain Announcement&lt;/strong&gt;&lt;/a&gt; Open Constructs Foundation has announced a community-driven continuation of the Cloud Development Kit for Terraform (CDKTF), with the new name of CDK Terrain.&lt;br&gt;
&lt;a href="https://dev.to/awsbuilders/self-hosted-n8n-on-aws-ecs-with-aws-cdk-typescript-l6d"&gt;&lt;strong&gt;Workflow Automation on ECS&lt;/strong&gt;&lt;/a&gt; - &lt;strong&gt;Vu Dao:&lt;/strong&gt; Deploy N8N workflow platform with Fargate, RDS, and ElastiCache&lt;br&gt;
&lt;a href="https://dev.to/awsbuilders/building-an-ab-testing-system-with-cloudfront-functions-using-aws-cdk-omo"&gt;&lt;strong&gt;A/B Testing at the Edge&lt;/strong&gt;&lt;/a&gt; - &lt;strong&gt;Kihara Takuya:&lt;/strong&gt; Switch between S3 origins using CloudFront Functions for experimentation&lt;br&gt;
&lt;a href="https://datajammers.com/2026/01/31/create-an-aws-client-vpn-and-work-remote/" rel="noopener noreferrer"&gt;&lt;strong&gt;Remote Access with Client VPN&lt;/strong&gt;&lt;/a&gt; - &lt;strong&gt;Andrew Dunn:&lt;/strong&gt; Set up secure VPN access to private AWS resources&lt;br&gt;
&lt;a href="https://johanneskonings.dev/blog/2025-11-30-tanstack-start-aws-serverless/" rel="noopener noreferrer"&gt;&lt;strong&gt;Deploy TanStack Start Serverless&lt;/strong&gt;&lt;/a&gt; - &lt;strong&gt;Johannes Konings:&lt;/strong&gt; Full-stack React framework on Lambda with API Gateway streaming&lt;br&gt;
&lt;a href="https://johanneskonings.dev/blog/2025-12-31-cdk-bootstrap-customized-template/" rel="noopener noreferrer"&gt;&lt;strong&gt;Customize CDK Bootstrap&lt;/strong&gt;&lt;/a&gt; - &lt;strong&gt;Johannes Konings:&lt;/strong&gt; Add encryption and access logging to CDK staging bucket&lt;/p&gt;

&lt;h3&gt;
  
  
  Developer Tools
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/CloudSnorkel/cdk-github-runners" rel="noopener noreferrer"&gt;&lt;strong&gt;Self-Hosted GitHub Actions Runners&lt;/strong&gt;&lt;/a&gt; - &lt;strong&gt;Amir Szekely (CloudSnorkel)&lt;/strong&gt;: Ephemeral runners on EC2, Fargate, Lambda, CodeBuild, or ECS&lt;br&gt;
&lt;a href="https://www.cdkbooster.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Parallel Lambda Bundling&lt;/strong&gt;&lt;/a&gt; &lt;strong&gt;Marko (ServerlessLife):&lt;/strong&gt; Bundle all Lambda functions at once instead of sequentially&lt;br&gt;
&lt;a href="https://github.com/marketplace/cloudburn-io" rel="noopener noreferrer"&gt;&lt;strong&gt;Cost Analysis in Pull Requests&lt;/strong&gt;&lt;/a&gt; - &lt;strong&gt;towardsthecloud:&lt;/strong&gt; See AWS cost impact before merging infrastructure changes&lt;br&gt;
&lt;a href="https://github.com/go-to-k/cdk-agc" rel="noopener noreferrer"&gt;&lt;strong&gt;Clean Up CDK Assets&lt;/strong&gt;&lt;/a&gt; - &lt;strong&gt;Kenta Goto:&lt;/strong&gt; Remove unused assets and Docker images from cdk.out directory&lt;br&gt;
&lt;a href="https://cdkinsights.dev/#how-it-works" rel="noopener noreferrer"&gt;&lt;strong&gt;Visualize CDK Applications&lt;/strong&gt;&lt;/a&gt; - Analyze and understand CDK app structure&lt;/p&gt;

&lt;h3&gt;
  
  
  AI &amp;amp; Advanced Use Cases
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://martinmueller.dev/aws-agentcore/" rel="noopener noreferrer"&gt;&lt;strong&gt;Build AI Agents with AgentCore&lt;/strong&gt;&lt;/a&gt; - Martin Mueller Local development to cloud deployment for Bedrock AI agents&lt;br&gt;
&lt;a href="https://blog.serverlessadvocate.com/amazon-cognito-custom-email-lambda-trigger-f4b1f72ded10" rel="noopener noreferrer"&gt;&lt;strong&gt;Custom Cognito Email Flows&lt;/strong&gt;&lt;/a&gt; - Lee Gilmore Customize authentication emails with Lambda triggers&lt;/p&gt;

&lt;h3&gt;
  
  
  Video Content
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=N7Fpo6npQZA" rel="noopener noreferrer"&gt;&lt;strong&gt;CDK Development Workflows&lt;/strong&gt;&lt;/a&gt; Practical development techniques and patterns&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=95bIBoIHer8" rel="noopener noreferrer"&gt;&lt;strong&gt;Advanced CDK Patterns&lt;/strong&gt;&lt;/a&gt; Deep dive into CDK architecture&lt;/p&gt;




&lt;h2&gt;
  
  
  Thank You!
&lt;/h2&gt;

&lt;p&gt;A huge thank you to everyone who contributed this quarter. Whether you submitted code, reported bugs, answered questions, or shared your knowledge you're making infrastructure as code better for everyone.&lt;br&gt;
&lt;strong&gt;Special recognition&lt;/strong&gt; to our top external contributors who drove major features and fixes. Your work impacts thousands of CDK users worldwide.&lt;br&gt;
We're excited to see what the community builds next. Happy coding!&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cdk</category>
      <category>opensource</category>
      <category>devops</category>
    </item>
    <item>
      <title>re:Invent Special Update from AWS CDK</title>
      <dc:creator>Praneeta Prakash</dc:creator>
      <pubDate>Wed, 10 Dec 2025 18:22:15 +0000</pubDate>
      <link>https://forem.com/aws/reinvent-special-update-from-aws-cdk-2af9</link>
      <guid>https://forem.com/aws/reinvent-special-update-from-aws-cdk-2af9</guid>
      <description>&lt;h2&gt;
  
  
  Index
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;TL;DR&lt;/li&gt;
&lt;li&gt;A Message of Gratitude&lt;/li&gt;
&lt;li&gt;Major Features&lt;/li&gt;
&lt;li&gt;CDK Mixins - Developer Preview&lt;/li&gt;
&lt;li&gt;AI-Powered Development&lt;/li&gt;
&lt;li&gt;Service L2 Constructs&lt;/li&gt;
&lt;li&gt;Community Highlights&lt;/li&gt;
&lt;li&gt;Community Meetings&lt;/li&gt;
&lt;li&gt;Community Generated Content&lt;/li&gt;
&lt;li&gt;Content from AWS&lt;/li&gt;
&lt;li&gt;How Can You Be Involved&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;As we close out 2025, we're filled with gratitude for our incredible CDK community! This year brought exciting updates: &lt;strong&gt;CDK Mixins&lt;/strong&gt; in developer preview, the &lt;strong&gt;AWS IaC MCP Server&lt;/strong&gt; for AI-powered assistance, comprehensive &lt;strong&gt;EC2 Image Builder L2&lt;/strong&gt; support, &lt;strong&gt;Bedrock AgentCore&lt;/strong&gt; constructs, and powerful new patterns like &lt;strong&gt;L1 constructs accepting other constructs as parameters&lt;/strong&gt;. We've seen amazing contributions from our community (both internal AWS and external), launched new &lt;strong&gt;Grants patterns&lt;/strong&gt;, added L2 constructs for &lt;strong&gt;Lambda Managed Instances&lt;/strong&gt;, &lt;strong&gt;Lambda durable functions&lt;/strong&gt;, &lt;strong&gt;Lambda multi-tenancy&lt;/strong&gt;, &lt;strong&gt;Route53 failover routing&lt;/strong&gt;, &lt;strong&gt;DynamoDB compound keys for GSIs&lt;/strong&gt;, &lt;strong&gt;VPC Endpoints for ACM/ACM-PCA&lt;/strong&gt;, and so much more. Thank you for making CDK better every day!&lt;/p&gt;

&lt;h2&gt;
  
  
  A Message of Gratitude
&lt;/h2&gt;

&lt;p&gt;As we wrap up 2025, we want to take a moment to thank our amazing CDK community. This year has been extraordinary—not just because of the features we've shipped, but because of the incredible people who make CDK what it is.&lt;/p&gt;

&lt;p&gt;To our &lt;strong&gt;external contributors&lt;/strong&gt;: You've submitted PRs, filed issues, answered questions, and built amazing things with CDK. Your contributions—from major L2 constructs to small bug fixes—make CDK better for everyone. Thank you for your time, expertise, and dedication.&lt;/p&gt;

&lt;p&gt;To our &lt;strong&gt;community members&lt;/strong&gt;: Whether you're asking questions on Stack Overflow, sharing knowledge on Slack, or helping others in GitHub Discussions, you're building the welcoming, collaborative community that makes CDK special.&lt;/p&gt;

&lt;p&gt;As we head into the holidays, we're grateful for each of you. Here's to an amazing 2026! 🎄✨&lt;/p&gt;

&lt;h2&gt;
  
  
  Major Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  CDK Mixins - Developer Preview
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;CDK Mixins&lt;/strong&gt; fundamentally transform how you compose and reuse infrastructure abstractions. Apply sophisticated features to any construct—L1, L2, or custom—without being locked into specific implementations.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Mixins&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@aws-cdk/mixins-preview&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@aws-cdk/mixins-preview/with&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;EncryptionAtRest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;AutoDeleteObjects&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@aws-cdk/mixins-preview/aws-s3/mixins&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;s3&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws-cdk-lib/aws-s3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;logs&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws-cdk-lib/aws-logs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Fluent syntax&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bucket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CfnBucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Bucket&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;with&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;EncryptionAtRest&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;with&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;AutoDeleteObjects&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="c1"&gt;// Cross-service abstractions&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;logGroup&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;logs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CfnLogGroup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;LogGroup&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;Mixins&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;logGroup&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;apply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;EncryptionAtRest&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="c1"&gt;// Apply at scale&lt;/span&gt;
&lt;span class="nx"&gt;Mixins&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;apply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;EncryptionAtRest&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Vended Log Deliveries&lt;/strong&gt; - Automatically configure log delivery for 47+ AWS resources:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;LogDelivery&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@aws-cdk/mixins-preview&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Automatically configure S3 bucket logging&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bucket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CfnBucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Bucket&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;Mixins&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bucket&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;apply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;LogDelivery&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;EventBridge Event Patterns&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Helpers to generate type-safe EventBridge event patterns for 26 services:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;BucketEvents&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@aws-cdk/mixins-preview/aws-s3/events&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;events&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws-cdk-lib/aws-events&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;targets&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws-cdk-lib/aws-events-targets&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Works with L2 constructs&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bucket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Bucket&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bucketEvents&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;BucketEvents&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromBucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bucket&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;events&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Rule&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Rule&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;eventPattern&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;bucketEvents&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;objectCreatedPattern&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;object&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;uploads/*&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="na"&gt;targets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;targets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;LambdaFunction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;)],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Also works with L1 constructs&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cfnBucket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CfnBucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;CfnBucket&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cfnBucketEvents&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;BucketEvents&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromBucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cfnBucket&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;events&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CfnRule&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;CfnRule&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ENABLED&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;eventPattern&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;cfnBucketEvents&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;objectCreatedPattern&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="na"&gt;targets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="na"&gt;arn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;functionArn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Target&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;New Grants Pattern&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Simplified permission management with dedicated grant classes! Now available for S3, DynamoDB, Step Functions, and Route53.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// S3&lt;/span&gt;
&lt;span class="nx"&gt;bucket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;grants&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;bucket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;grants&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// DynamoDB&lt;/span&gt;
&lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;grants&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;readData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;grants&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writeData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;streamGrants&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Step Functions&lt;/span&gt;
&lt;span class="nx"&gt;stateMachine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;grants&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;startExecution&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;stateMachine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;grants&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Route53&lt;/span&gt;
&lt;span class="nx"&gt;hostedZone&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;grants&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;delegation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Get started: &lt;code&gt;npm install @aws-cdk/mixins-preview&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;L1 Constructs Accept Constructs as Parameters&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Major DX improvement! Pass constructs directly instead of extracting ARNs/IDs for known resource relationships.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Before&lt;/span&gt;
&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;lambda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CfnFunction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Function&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;roleArn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;// Manual extraction&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// After&lt;/span&gt;
&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;lambda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CfnFunction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Function&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;// Pass construct directly!&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This pattern works across all L1 constructs, making your code cleaner and more intuitive.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI-Powered Development
&lt;/h3&gt;

&lt;h4&gt;
  
  
  AWS IaC MCP Server
&lt;/h4&gt;

&lt;p&gt;The &lt;a href="https://github.com/awslabs/mcp/tree/main/src/aws-iac-mcp-server#readme" rel="noopener noreferrer"&gt;AWS IaC MCP Server&lt;/a&gt; brings Model Context Protocol to your CDK workflow, integrating with AI assistants like Amazon Q Developer, Claude Desktop, Cursor, and VS Code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build CDK with latest documentation, API references, and best practices&lt;/li&gt;
&lt;li&gt;Find CDK code samples across TypeScript, Python, Java, C#, Go&lt;/li&gt;
&lt;li&gt;Validate CloudFormation templates with cfn-lint&lt;/li&gt;
&lt;li&gt;Check compliance with cfn-guard&lt;/li&gt;
&lt;li&gt;Troubleshoot deployments with pattern matching&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Configuration&lt;/strong&gt; (&lt;code&gt;~/.aws/amazonq/mcp.json&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"awslabs.aws-iac-mcp-server"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"uvx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"awslabs.aws-iac-mcp-server@latest"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"AWS_PROFILE"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your-named-profile"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://awslabs.github.io/mcp/servers/aws-iac-mcp-server" rel="noopener noreferrer"&gt;Documentation&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Service L2 Constructs
&lt;/h3&gt;

&lt;h4&gt;
  
  
  EC2 Image Builder (Alpha)
&lt;/h4&gt;

&lt;p&gt;Comprehensive L2 support for EC2 Image Builder with constructs for components, recipes, pipelines, workflows, and lifecycle policies!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;imagebuilder&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@aws-cdk/aws-imagebuilder-alpha&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;component&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;imagebuilder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Component&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Component&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;platform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;imagebuilder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Platform&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;LINUX&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;imagebuilder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ComponentData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromAsset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ComponentAsset&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;component.yaml&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;recipe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;imagebuilder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ImageRecipe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Recipe&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;parentImage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ami-12345678&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;components&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;component&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pipeline&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;imagebuilder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ImagePipeline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Pipeline&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;imageRecipe&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;recipe&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;infrastructureConfiguration&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;schedule&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;imagebuilder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Schedule&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cron&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;hour&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;minute&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;lifecycle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;imagebuilder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;LifecyclePolicy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Lifecycle&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;imagebuilder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;LifecycleResource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AMI&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;
    &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;imagebuilder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;LifecycleAction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DELETE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;selection&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;imagebuilder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SelectionType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AGE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;90&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;unit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;imagebuilder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;TimeUnit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DAYS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;}],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Bedrock AgentCore (Alpha)
&lt;/h4&gt;

&lt;p&gt;Build complete AI agents with runtime, gateway, memory, and tool integrations!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Runtime&lt;/strong&gt; - Container-based agent execution with ECR and image URI support:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;agentcore&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@aws-cdk/aws-bedrock-agentcore-alpha&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// From ECR repository&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;runtime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;agentcore&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Runtime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Runtime&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;runtimeName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my-agent-runtime&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;agentRuntimeArtifact&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;agentcore&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AgentRuntimeArtifact&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromEcrRepository&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;repository&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;v1.0.0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// From image URI&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;runtime2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;agentcore&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Runtime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Runtime2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;runtimeName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my-agent-runtime-2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;agentRuntimeArtifact&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;agentcore&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AgentRuntimeArtifact&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromImageUri&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;123456789012.dkr.ecr.us-east-1.amazonaws.com/my-image:latest&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Gateway&lt;/strong&gt; - Tool integrations with Lambda, OpenAPI, Smithy, and MCP servers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;gateway&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;agentcore&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Gateway&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Gateway&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;gatewayName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my-gateway&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Add Lambda target&lt;/span&gt;
&lt;span class="nx"&gt;gateway&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addLambdaTarget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;LambdaTarget&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;gatewayTargetName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my-lambda-target&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;lambdaFunction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;myFunction&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;toolSchema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;agentcore&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ToolSchema&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromAsset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;schema.json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Add MCP server target&lt;/span&gt;
&lt;span class="nx"&gt;gateway&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addMcpServerTarget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;McpTarget&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;gatewayTargetName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my-mcp-server&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://my-mcp-server.example.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Memory, Browser &amp;amp; Code Interpreter&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;memory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;agentcore&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Memory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Memory&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;memoryName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;conversation-memory&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;agentcore&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Browser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Browser&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;browserName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my-browser&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;codeInterpreter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;agentcore&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CodeInterpreter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;CodeInterpreter&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;codeInterpreterName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my-code-interpreter&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Lambda Updates
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Lambda Managed Instances&lt;/strong&gt; - Managed instances for predictable performance:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;lambda&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws-cdk-lib/aws-lambda&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;ec2&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws-cdk-lib/aws-ec2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Create VPC and security group (required)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;vpc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Vpc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MyVpc&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;securityGroup&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;SecurityGroup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;SecurityGroup&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;vpc&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Create capacity provider with scaling configuration&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;capacityProvider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;lambda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CapacityProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MyCapacityProvider&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;capacityProviderName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my-capacity-provider&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;subnets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;vpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;privateSubnets&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;securityGroups&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;securityGroup&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;scalingOptions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;lambda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ScalingOptions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;manual&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="nx"&gt;lambda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;TargetTrackingScalingPolicy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cpuUtilization&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="p"&gt;]),&lt;/span&gt;
  &lt;span class="na"&gt;instanceTypeFilter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;lambda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;InstanceTypeFilter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;allow&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;InstanceType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;InstanceClass&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;M5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;InstanceSize&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;LARGE&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="p"&gt;]),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Create function (runtime must be NODEJS_22_X or newer)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;lambda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Function&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;runtime&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;lambda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Runtime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NODEJS_22_X&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;handler&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;index.handler&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;lambda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Code&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromAsset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;lambda&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Associate function with capacity provider&lt;/span&gt;
&lt;span class="nx"&gt;capacityProvider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addFunction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;perExecutionEnvironmentMaxConcurrency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;executionEnvironmentMemoryGiBPerVCpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pre-provision managed instances for consistent performance and reduced cold starts. Perfect for latency-sensitive workloads that need predictable execution times. Read the &lt;a href="https://aws.amazon.com/blogs/aws/introducing-aws-lambda-managed-instances-serverless-simplicity-with-ec2-flexibility/" rel="noopener noreferrer"&gt;blogpost&lt;/a&gt; to learn more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Durable Functions&lt;/strong&gt; - Build stateful Lambda functions that can pause and resume execution:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;lambda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;DurableFunction&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;runtime&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;lambda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Runtime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NODEJS_24_X&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;handler&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;index.handler&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;lambda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Code&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromAsset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;lambda&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;durableConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;executionTimeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Duration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hours&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="na"&gt;retentionPeriod&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Duration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;days&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Durable functions automatically get the &lt;code&gt;AWSLambdaBasicDurableExecutionRolePolicy&lt;/code&gt; with permissions for &lt;code&gt;lambda:CheckpointDurableExecution&lt;/code&gt; and &lt;code&gt;lambda:GetDurableExecutionState&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi-Tenancy Support&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;lambda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Function&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;runtime&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;lambda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Runtime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NODEJS_24_X&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;handler&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;index.handler&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;lambda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Code&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromAsset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;lambda&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;tenancyConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;tenancyMode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;lambda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;TenancyMode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DEDICATED&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;ESM Features&lt;/strong&gt; - Support for ES modules with improved error handling and observability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;New Runtimes:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node.js 24.x&lt;/li&gt;
&lt;li&gt;Python 3.14&lt;/li&gt;
&lt;li&gt;Java 25&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  DynamoDB Compound Keys for Global Secondary Indexes
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addGlobalSecondaryIndex&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;indexName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;gsi1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;partitionKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;gsi1pk&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;dynamodb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AttributeType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;STRING&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;sortKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;gsi1sk&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;dynamodb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AttributeType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;STRING&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;projectionType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;dynamodb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ProjectionType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ALL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Additional Construct Updates
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Route53&lt;/strong&gt; - Failover routing policy support:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;route53&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws-cdk-lib/aws-route53&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;route53&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ARecord&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;PrimaryRecord&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;zone&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;hostedZone&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;recordName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;www&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;route53&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;RecordTarget&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromIpAddresses&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1.2.3.4&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;failover&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;route53&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Failover&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PRIMARY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;healthCheck&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;primaryHealthCheck&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;setIdentifier&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;failover-primary&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;route53&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ARecord&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;SecondaryRecord&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;zone&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;hostedZone&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;recordName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;www&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;route53&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;RecordTarget&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromIpAddresses&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;5.6.7.8&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;failover&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;route53&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Failover&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SECONDARY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;setIdentifier&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;failover-secondary&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Build highly available DNS configurations with automatic failover between primary and secondary endpoints.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Contributed by:&lt;/strong&gt; &lt;a href="https://github.com/0xdsqr" rel="noopener noreferrer"&gt;Dave Dennis&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;EC2&lt;/strong&gt; - VPC Endpoints for ACM and ACM-PCA:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;ec2&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws-cdk-lib/aws-ec2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;acmEndpoint&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;InterfaceVpcEndpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;AcmEndpoint&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;vpc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;service&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;InterfaceVpcEndpointAwsService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CERTIFICATE_MANAGER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;acmPcaEndpoint&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;InterfaceVpcEndpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;AcmPcaEndpoint&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;vpc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;service&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;InterfaceVpcEndpointAwsService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PRIVATE_CERTIFICATE_AUTHORITY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enable private connectivity to certificate services without internet gateway routing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Contributed by:&lt;/strong&gt; &lt;a href="https://github.com/maczac150" rel="noopener noreferrer"&gt;Yuto Anada&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;API Gateway&lt;/strong&gt; - Response streaming support:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;apigateway&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws-cdk-lib/aws-apigateway&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;apigateway&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;RestApi&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;StreamingApi&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;'API with streaming responses',&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;integration&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;apigateway&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;LambdaIntegration&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;streamingFunction&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;responseTransferMode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;apigateway&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ResponseTransferMode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;STREAM&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addMethod&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;GET&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;integration&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Stream large responses from Lambda functions through API Gateway for better performance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Contributed by:&lt;/strong&gt; &lt;a href="https://github.com/go-to-k" rel="noopener noreferrer"&gt;Kenta Goto&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RDS&lt;/strong&gt; - Enhanced CloudWatch log exports:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;rds&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws-cdk-lib/aws-rds&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;instance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;rds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DatabaseInstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Database&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;engine&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;rds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DatabaseInstanceEngine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mysql&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;rds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;MysqlEngineVersion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;VER_8_0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="na"&gt;cloudwatchLogsExports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;error&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;general&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;slow-query&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;iam-db-auth-error&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;instanceType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;InstanceType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;InstanceClass&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;T3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;InstanceSize&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;MICRO&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nx"&gt;vpc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Improved observability with automatic export of IAM database authentication errors to CloudWatch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Contributed by:&lt;/strong&gt; &lt;a href="https://github.com/sjakthol" rel="noopener noreferrer"&gt;Sami Jaktholm&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step Functions&lt;/strong&gt; - Multiline JSONata string support:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;stepfunctions&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws-cdk-lib/aws-stepfunctions&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;transformTask&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;stepfunctions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Pass&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Transform&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;parameters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;TransformedData.$&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`
      $merge([
        $,
        {
          "timestamp": $now(),
          "processed": true
        }
      ])
    `&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Write complex JSONata transformations across multiple lines for better readability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Contributed by:&lt;/strong&gt; &lt;a href="https://github.com/mathieugilbert" rel="noopener noreferrer"&gt;Mathieu Gilbert&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;EC2&lt;/strong&gt; - Instance metadata configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;ec2&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws-cdk-lib/aws-ec2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;instance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Instance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Instance&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;instanceType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;InstanceType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;InstanceClass&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;T3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;InstanceSize&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;MICRO&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;machineImage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;MachineImage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;latestAmazonLinux2&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="nx"&gt;vpc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;requireImdsv2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Enforce IMDSv2 for security&lt;/span&gt;
  &lt;span class="na"&gt;httpTokens&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;HttpTokens&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;REQUIRED&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;httpPutResponseHopLimit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enhanced security controls for EC2 instance metadata service configuration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Contributed by:&lt;/strong&gt; &lt;a href="https://github.com/pahud" rel="noopener noreferrer"&gt;Pahud Hsieh&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Glue&lt;/strong&gt; - Version 5.1 support:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;glue&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws-cdk-lib/aws-glue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;job&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;glue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Job&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;EtlJob&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;executable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;glue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;JobExecutable&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pythonEtl&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;glueVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;glue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;GlueVersion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;V5_1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;pythonVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;glue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PythonVersion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;THREE_NINE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;script&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;glue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Code&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromAsset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;scripts/etl.py&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="na"&gt;workerType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;glue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;WorkerType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;G_2X&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;workerCount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Latest Glue runtime with improved performance and new features for data processing workflows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Contributed by:&lt;/strong&gt; &lt;a href="https://github.com/mazyu36" rel="noopener noreferrer"&gt;Yuki Matsuda&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Community Highlights
&lt;/h2&gt;

&lt;p&gt;Here are our most active external contributors this year:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Contributor&lt;/th&gt;
&lt;th&gt;First Contribution&lt;/th&gt;
&lt;th&gt;Latest Contribution&lt;/th&gt;
&lt;th&gt;Days Active&lt;/th&gt;
&lt;th&gt;Repositories&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/mazyu36" rel="noopener noreferrer"&gt;Yuki Matsuda&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;May 1, 2024&lt;/td&gt;
&lt;td&gt;Nov 26, 2025&lt;/td&gt;
&lt;td&gt;574&lt;/td&gt;
&lt;td&gt;aws/aws-cdk&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/badmintoncryer" rel="noopener noreferrer"&gt;Kazuho Cryer-Shinozuka&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Dec 1, 2023&lt;/td&gt;
&lt;td&gt;Nov 28, 2025&lt;/td&gt;
&lt;td&gt;727&lt;/td&gt;
&lt;td&gt;aws/aws-cdk&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/go-to-k" rel="noopener noreferrer"&gt;Kenta Goto&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Sep 27, 2023&lt;/td&gt;
&lt;td&gt;Nov 25, 2025&lt;/td&gt;
&lt;td&gt;790&lt;/td&gt;
&lt;td&gt;aws/aws-cdk, aws/aws-cdk-cli&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/phuhung273" rel="noopener noreferrer"&gt;Hung Tran&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Nov 9, 2024&lt;/td&gt;
&lt;td&gt;Nov 26, 2025&lt;/td&gt;
&lt;td&gt;382&lt;/td&gt;
&lt;td&gt;aws/aws-cdk&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/msambol" rel="noopener noreferrer"&gt;Michael Sambol&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Oct 27, 2023&lt;/td&gt;
&lt;td&gt;Jun 1, 2025&lt;/td&gt;
&lt;td&gt;583&lt;/td&gt;
&lt;td&gt;aws/aws-cdk&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/Tietew" rel="noopener noreferrer"&gt;Tietew&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Dec 25, 2023&lt;/td&gt;
&lt;td&gt;Nov 12, 2025&lt;/td&gt;
&lt;td&gt;687&lt;/td&gt;
&lt;td&gt;aws/aws-cdk, aws/aws-cdk-cli&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;*&lt;strong&gt;&lt;em&gt;March 2025&lt;/em&gt;&lt;/strong&gt;* was our most active external contribution month with over *&lt;strong&gt;&lt;em&gt;200 unique active members&lt;/em&gt;&lt;/strong&gt;* from the community! 🚀&lt;/p&gt;

&lt;h2&gt;
  
  
  Community Generated Content
&lt;/h2&gt;

&lt;p&gt;We saw some amazing projects and blogposts created by CDK users to help others learn and improve their CDK skills.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Contributor&lt;/th&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/go-to-k" rel="noopener noreferrer"&gt;Kenta Goto&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://dev.to/aws-heroes/aws-cdk-unit-testing-advanced-tips-aligning-feature-flags-and-skipping-bundling-1fbk"&gt;AWS CDK Unit Testing Advanced Tips: Aligning Feature Flags and Skipping Bundling&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/go-to-k" rel="noopener noreferrer"&gt;Kenta Goto&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://dev.to/aws-heroes/aws-cdk-introduces-mixins-a-major-feature-for-flexible-construct-composition-developer-preview-583d"&gt;AWS CDK Introduces Mixins: A Major Feature for Flexible Construct Composition (Developer Preview)&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/azmimengu" rel="noopener noreferrer"&gt;azmimengu&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/azmimengu/aws-cdk-self-hosted-n8n-infra" rel="noopener noreferrer"&gt;AWS CDK N8N Self-Hosted Infrastructure&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://dev.to/vumdao"&gt;Vu Dao&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://dev.to/aws-builders/clamav-anti-virus-as-a-rest-application-on-aws-ecs-1d0e"&gt;ClamAV (Anti-Virus) as a REST application on AWS ECS&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Community Meetings
&lt;/h2&gt;

&lt;p&gt;We held two community meetings so far! Join us on the &lt;a href="https://www.youtube.com/@cdkdev" rel="noopener noreferrer"&gt;CDK.dev YouTube channel&lt;/a&gt; to watch recordings and follow the &lt;a href="https://join.slack.com/t/cdk-dev/shared_invite/zt-37hzafo82-8x6OQ3voSlMHd2DUG1puzw" rel="noopener noreferrer"&gt;community-meetings channel on CDK Slack&lt;/a&gt; stay updated on upcoming meetings. The next community meeting will be in January.&lt;/p&gt;

&lt;h2&gt;
  
  
  Content from AWS
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Helpful Resources:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://awslabs.github.io/mcp/servers/aws-iac-mcp-server" rel="noopener noreferrer"&gt;AWS IaC MCP Server&lt;/a&gt; speed up CDK development with AI assistance.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/cdk/api/v2/" rel="noopener noreferrer"&gt;AWS CDK API Reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://catalog.us-east-1.prod.workshops.aws/workshops/10141411-0192-4021-afa8-2436f3c66bd8/en-US" rel="noopener noreferrer"&gt;CDK Workshop&lt;/a&gt; Get started on CDK with hands-on learning.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.aws.amazon.com/solutions/latest/constructs/welcome.html" rel="noopener noreferrer"&gt;AWS Solution Constructs&lt;/a&gt; contains popular L3 constructs from AWS experts.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://construct.dev/" rel="noopener noreferrer"&gt;CDK Construct Hub&lt;/a&gt; Discover community built constructs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How Can You Be Involved
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Report Issues
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/aws/aws-cdk/issues/new/choose" rel="noopener noreferrer"&gt;Open an issue&lt;/a&gt; on GitHub.&lt;/p&gt;

&lt;h3&gt;
  
  
  Contribute Code
&lt;/h3&gt;

&lt;p&gt;Check our &lt;a href="https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md" rel="noopener noreferrer"&gt;contributing guide&lt;/a&gt; and look for &lt;a href="https://github.com/aws/aws-cdk/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22" rel="noopener noreferrer"&gt;&lt;code&gt;good first issue&lt;/code&gt;&lt;/a&gt; or &lt;a href="https://github.com/aws/aws-cdk/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22" rel="noopener noreferrer"&gt;&lt;code&gt;help wanted&lt;/code&gt;&lt;/a&gt; labels.&lt;/p&gt;

&lt;h3&gt;
  
  
  Join the Conversation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Slack&lt;/strong&gt;: &lt;a href="https://cdk.dev/" rel="noopener noreferrer"&gt;CDK.dev community&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/aws/aws-cdk/discussions" rel="noopener noreferrer"&gt;Discussions&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stack Overflow&lt;/strong&gt;: &lt;a href="https://stackoverflow.com/questions/tagged/aws-cdk" rel="noopener noreferrer"&gt;&lt;code&gt;aws-cdk&lt;/code&gt; tag&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Star the Repo
&lt;/h3&gt;

&lt;p&gt;Give us a star on &lt;a href="https://github.com/aws/aws-cdk" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;! ⭐&lt;/p&gt;




&lt;h2&gt;
  
  
  Happy Holidays from the CDK Team!
&lt;/h2&gt;

&lt;p&gt;As we close out 2025, we're incredibly grateful for this amazing community. Whether you contributed code, answered questions, filed issues, or simply built cool things with CDK—thank you for being part of our journey.&lt;/p&gt;

&lt;p&gt;Here's to an even more amazing 2026! &lt;strong&gt;May your deployments be successful and your stacks always converge.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cdk</category>
      <category>infrastructureascode</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Building fullstack Amplify applications with the new AWS MCP</title>
      <dc:creator>Praneeta Prakash</dc:creator>
      <pubDate>Fri, 05 Dec 2025 16:01:53 +0000</pubDate>
      <link>https://forem.com/aws/building-full-stack-amplify-applications-with-the-new-aws-mcp-1l85</link>
      <guid>https://forem.com/aws/building-full-stack-amplify-applications-with-the-new-aws-mcp-1l85</guid>
      <description>&lt;p&gt;by Galib Sarayev&lt;/p&gt;

&lt;p&gt;AWS has announced &lt;a href="https://docs.aws.amazon.com/aws-mcp/latest/userguide/what-is-mcp-server.html" rel="noopener noreferrer"&gt;AWS MCP&lt;/a&gt; with additional Standard Operational Procedures (SOPs) that helps frontend developers to design, build, and deploy fullstack applications with &lt;a href="https://docs.amplify.aws/" rel="noopener noreferrer"&gt;AWS Amplify&lt;/a&gt;. Instead of manually piecing together guidance from documentation, examples, forum posts, trial-and-error or best practices, Amplify developers can now rely on an MCP-powered workflow that provides structured, high-quality guidance for fullstack Amplify development.&lt;/p&gt;

&lt;p&gt;Amplify is a proven service that makes building cloud-connected apps much easier for frontend and fullstack developers. It offers clear, high-level tools that simplify both the backend and the frontend implementation. On the backend, features like authentication, APIs, storage, and serverless functions can be defined declaratively. On the frontend, Amplify integrates smoothly with popular frameworks like React, Next.js, and React Native. The new agentic experience provided by AWS MCP builds on this foundation by adding an agent-ready layer of structured guidance that developers can use directly inside AI tools.&lt;/p&gt;

&lt;p&gt;Instead of generating arbitrary advice, agents equipped with AWS MCP now follow curated &lt;strong&gt;&lt;a href="https://docs.amplify.aws/react/start/mcp-server/amplify-workflows/" rel="noopener noreferrer"&gt;Standard Operating Procedures (SOPs)&lt;/a&gt;&lt;/strong&gt; that reflect established Amplify best practices. These SOPs capture recommended patterns for backend setup, frontend integration, and deployment workflows. The result is output that is not only functional but aligned with the way Amplify is intended to be used.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fullstack Guidance Through SOPs
&lt;/h2&gt;

&lt;p&gt;The AWS MCP offers several Amplify-specific SOPs that guide the agents through the lifecycle of building and deploying an application with Amplify:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;amplify-backend-implementation&lt;/strong&gt;&lt;br&gt;
Helps the agent implement well-structured backend applications using Amplify's capabilities such as Auth, Data, Storage, and Functions etc. It promotes recommended patterns, secure defaults, and idiomatic use of Amplify's backend abstractions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;amplify-frontend-integration&lt;/strong&gt;&lt;br&gt;
Guides integration of the Amplify backend with modern JavaScript and TypeScript frameworks. This includes state management recommendations, data binding patterns, and configuration best practices using the Amplify libraries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;amplify-deployment-guide&lt;/strong&gt;&lt;br&gt;
Walks the agent through deploying the application using Amplify. It covers branch-based workflows, CI/CD configuration, environment setup, and operational guardrails.&lt;/p&gt;

&lt;p&gt;These SOPs ensure the agent does not simply generate code but produces code that aligns with Amplify's design principles.&lt;/p&gt;
&lt;h2&gt;
  
  
  Curated, Agent-Optimized Documentation
&lt;/h2&gt;

&lt;p&gt;In addition to SOPs, the AWS MCP includes curated Amplify documentation that has been optimized for retrieval and consumption by agents. Rather than relying on generic search results or unstructured pages, agents can now query well-organized, purpose-built instructional materials.&lt;/p&gt;

&lt;p&gt;This curated content allows agents to provide more precise implementation details, produce fewer incorrect assumptions, and reference supported patterns. Developers benefit from clearer explanations, more robust examples, and recommendations that correspond to the current Amplify ecosystem.&lt;/p&gt;
&lt;h2&gt;
  
  
  What This Enables
&lt;/h2&gt;

&lt;p&gt;You can now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generate consistent fullstack Amplify project scaffolds aligned with best practices&lt;/li&gt;
&lt;li&gt;Get detailed and up-to-date backend guidance including Auth, Storage, APIs, Functions etc.&lt;/li&gt;
&lt;li&gt;Receive frontend integration steps for frameworks such as React, Vue.js, Angular, Next.js etc.&lt;/li&gt;
&lt;li&gt;Implement secure deployment flows using environment-aware Amplify Hosting&lt;/li&gt;
&lt;li&gt;Ask architectural questions and get answers that reflect recommended Amplify usage&lt;/li&gt;
&lt;li&gt;Accelerate prototyping and reduce implementation errors&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; You can see the whole list of prerequisites in the &lt;a href="https://docs.aws.amazon.com/aws-mcp/latest/userguide/getting-started-aws-mcp-server.html#getting-started-prerequisites" rel="noopener noreferrer"&gt;MCP's official documentation.&lt;/a&gt; &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Before setting up the AWS MCP Server, make sure you have the following:&lt;/p&gt;
&lt;h4&gt;
  
  
  Core Requirements
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Python 3.10+ installed on your machine&lt;/li&gt;
&lt;li&gt;uv package manager installed&lt;/li&gt;
&lt;li&gt;AWS credentials configured locally (via &lt;code&gt;aws configure&lt;/code&gt;, SSO, or environment variables)&lt;/li&gt;
&lt;li&gt;An MCP-compatible AI client (e.g., Kiro CLI, Claude Desktop, etc.)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  IAM Permissions (Required if you're &lt;em&gt;not&lt;/em&gt; using an Administrator role)
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Skip this section if your AWS credentials already use an Administrator role.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you're using a non-admin IAM user or role, you must explicitly grant permissions for AWS MCP Server operations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;To configure IAM permissions:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the IAM console: &lt;a href="https://console.aws.amazon.com/iam/" rel="noopener noreferrer"&gt;https://console.aws.amazon.com/iam/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Select the user or role associated with your AWS credentials&lt;/li&gt;
&lt;li&gt;Attach the following IAM policy:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
         &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
         &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="s2"&gt;"aws-mcp:InvokeMCP"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="s2"&gt;"aws-mcp:CallReadOnlyTool"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="s2"&gt;"aws-mcp:CallReadWriteTool"&lt;/span&gt;&lt;span class="w"&gt;
         &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
         &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  Additional Credential Requirements for Amplify
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;To deploy Amplify Gen 2 sandbox environments, your credentials must include permissions equivalent to the &lt;a href="https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmplifyBackendDeployFullAccess.html" rel="noopener noreferrer"&gt;&lt;em&gt;AmplifyBackendDeployFullAccess&lt;/em&gt;&lt;/a&gt; AWS-managed policy.&lt;/li&gt;
&lt;li&gt;To create or manage Amplify applications and deploy Amplify Gen 2 backends, use credentials with the &lt;a href="https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AdministratorAccess-Amplify.html" rel="noopener noreferrer"&gt;AdministratorAccess-Amplify&lt;/a&gt; AWS-managed policy.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Configuration
&lt;/h3&gt;

&lt;p&gt;Configure the MCP server in your MCP client configuration. For this blog we will focus on Kiro CLI. Edit &lt;code&gt;.kiro/settings/mcp.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"aws-mcp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"uvx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"timeout"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"transport"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"stdio"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"mcp-proxy-for-aws@latest"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"https://aws-mcp.us-east-1.api.aws/mcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"--metadata"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AWS_REGION=us-west-2"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;us-west-2&lt;/code&gt; with your preferred default AWS Region. If you do not provide a region as metadata, operations default to &lt;code&gt;us-east-1&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You can see the full set up guide in the &lt;a href="https://docs.aws.amazon.com/aws-mcp/latest/userguide/getting-started-aws-mcp-server.html#mcp-set-up-process" rel="noopener noreferrer"&gt;official AWS MCP documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example Use Case With Kiro CLI
&lt;/h2&gt;

&lt;p&gt;In this example, we'll build a fullstack React application using an Amplify Gen 2 backend and the Amplify JavaScript and UI libraries with the help of AWS MCP. &lt;/p&gt;

&lt;p&gt;Step 1: In your terminal, run &lt;code&gt;kiro-cli chat&lt;/code&gt; to start using Kiro CLI and run &lt;code&gt;/tools&lt;/code&gt; to check the tools from AWS MCP are available.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhcnj99bool78lsl3t68s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhcnj99bool78lsl3t68s.png" alt=" " width="800" height="966"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 2: Prompt the agent to implement backend for your application. Allow the SOP to execute &lt;code&gt;aws___retrieve_agent_sop&lt;/code&gt; tool to retrieve &lt;code&gt;amplify-backend-implementation&lt;/code&gt; SOP.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwpx08g8hx28gb7cqf9ze.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwpx08g8hx28gb7cqf9ze.png" alt=" " width="800" height="119"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 3: Prompt the agent to implement frontend for the application and integrate it with the already implemented backend using Amplify libraries. In case agent asks, allow it to execute &lt;code&gt;aws___retrieve_agent_sop&lt;/code&gt; tool to retrieve &lt;code&gt;amplify-frontend-integration&lt;/code&gt; SOP.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcpdysck99uh01apxbjj9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcpdysck99uh01apxbjj9.png" alt=" " width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 4: Ask agent to deploy the Amplify backend as sandbox for the testing purposes. Observe the agent executing &lt;code&gt;aws___retrieve_agent_sop&lt;/code&gt; tool to retrieve &lt;code&gt;amplify-deployment-guide&lt;/code&gt; SOP (in case agent asks, allow it to execute the tool).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2rvf5cj9wv72pd3jf13b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2rvf5cj9wv72pd3jf13b.png" alt=" " width="800" height="210"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The agent will follow the deployment guide, deploy the backend as a sandbox environment, and generate &lt;code&gt;amplify_outputs.json&lt;/code&gt; to connect the frontend to the deployed backend.&lt;/p&gt;

&lt;p&gt;Step 5: Start the frontend locally, and see the integration with Amplify backend. Continue iterating on the application. &lt;/p&gt;

&lt;p&gt;Step 6: If satisfied with the final state of the application, ask the agent to deploy the application to production and set up CI/CD for it using Amplify Hosting.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnfmlp3kx79qgvznoxfhj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnfmlp3kx79qgvznoxfhj.png" alt=" " width="800" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The agent will go through the deployment guide and:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Verify required dependencies are installed&lt;/li&gt;
&lt;li&gt;Verify project structure&lt;/li&gt;
&lt;li&gt;Set up a git repository&lt;/li&gt;
&lt;li&gt;Create a new Amplify app&lt;/li&gt;
&lt;li&gt;Connect the amplify to the git repository created for the CI/CD deployment&lt;/li&gt;
&lt;li&gt;Push changes to the git&lt;/li&gt;
&lt;li&gt;Start and monitor deployment, if the deployment fails, agent will troubleshoot it for you and fix accordingly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Step 7: When you need to search for knowledge about Amplify, the agent can use the &lt;code&gt;search_documentation&lt;/code&gt; with amplify as topic filter.&lt;/p&gt;

&lt;p&gt;Step 8: When you no longer need the environments you created, clean them up to avoid unnecessary costs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To delete the sandbox environment, run &lt;code&gt;npx ampx sandbox delete&lt;/code&gt; following the &lt;a href="https://docs.amplify.aws/react/reference/cli-commands/#npx-ampx-sandbox-delete" rel="noopener noreferrer"&gt;Amplify documentation&lt;/a&gt;, or delete the sandbox directly from the AWS Console.&lt;/li&gt;
&lt;li&gt;To delete the production deployment, run &lt;code&gt;aws amplify delete-app --app-id &amp;lt;your-app-id&amp;gt;&lt;/code&gt; via the AWS CLI, or remove the application from the AWS Console.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The introduction of AWS MCP support for Amplify marks a meaningful step forward in how developers build cloud-connected applications. By combining Amplify's high-level abstractions with structured SOPs and curated documentation, AI tools can now generate applications that are not only functional but aligned with recommended patterns. This reduces friction, accelerates development, and improves the reliability of AI-assisted workflows. Whether you are experimenting with new ideas or building production systems, the Amplify MCP offers a clearer, more consistent path to delivering well-architected fullstack applications on AWS. The new AWS MCP does not replace developer expertise, but it amplifies it—removing friction, reducing misconfigurations, and accelerating how fullstack cloud apps are built.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>amplify</category>
      <category>ai</category>
      <category>mcp</category>
    </item>
    <item>
      <title>Announcing AWS CDK Mixins (Preview): Composable Abstractions for AWS Resources</title>
      <dc:creator>Praneeta Prakash</dc:creator>
      <pubDate>Fri, 28 Nov 2025 20:46:56 +0000</pubDate>
      <link>https://forem.com/aws/announcing-aws-cdk-mixins-composable-abstractions-for-aws-resources-588m</link>
      <guid>https://forem.com/aws/announcing-aws-cdk-mixins-composable-abstractions-for-aws-resources-588m</guid>
      <description>&lt;p&gt;by Michael Kaiser and Momo Kornher&lt;/p&gt;

&lt;p&gt;We are excited to announce the developer preview of CDK Mixins, a new feature of the &lt;a href="https://docs.aws.amazon.com/cdk/v2/guide/home.html" rel="noopener noreferrer"&gt;AWS Cloud Development Kit (CDK)&lt;/a&gt; that fundamentally changes how developers compose and reuse infrastructure abstractions. CDK Mixins enable you to apply sophisticated features to any construct whether L1, L2, or custom without being locked into specific implementations. This new mechanism addresses one of the most persistent challenges in infrastructure as code: the tension between comprehensive AWS coverage and sophisticated abstractions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;The AWS Cloud Development Kit (CDK) is an open-source software development framework for defining cloud infrastructure in code and provisioning it through &lt;a href="https://aws.amazon.com/cloudformation/" rel="noopener noreferrer"&gt;AWS CloudFormation&lt;/a&gt;. It contains pre-written modular and reusable cloud components known as &lt;a href="https://docs.aws.amazon.com/cdk/v2/guide/constructs.html" rel="noopener noreferrer"&gt;constructs&lt;/a&gt;. Constructs are the basic building blocks representing one or more AWS CloudFormation resources and their configuration.&lt;/p&gt;

&lt;p&gt;Traditionally, CDK constructs are organized into three levels. L1 constructs map directly to CloudFormation resources and provide day-one access to new AWS features. L2 constructs offer higher-level abstractions with convenience methods, security defaults, and helper functions. L3 constructs (also known as patterns) combine multiple resources to solve specific use cases. However, this architecture creates a fundamental trade-off: customers must choose between immediate access to new AWS features (L1) and sophisticated abstractions (L2/L3). Enterprise customers report needing to customize L2 constructs, often rebuilding entire construct libraries to meet their specific requirements.&lt;/p&gt;

&lt;p&gt;CDK Mixins solve this problem by decoupling abstractions from construct implementations. Instead of bundling all features into monolithic L2 constructs, Mixins allow you to compose exactly the capabilities you need, apply them to any construct type, and maintain full access to underlying CloudFormation properties.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are CDK Mixins?
&lt;/h2&gt;

&lt;p&gt;CDK Mixins are composable, reusable abstractions that can be applied to constructs after they are created. Think of them as modular capabilities that you can mix and match to build exactly the infrastructure you need. Unlike traditional L2 constructs that bundle all features together, Mixins give you fine-grained control over which abstractions apply.&lt;/p&gt;

&lt;p&gt;Key benefits include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Universal Compatibility&lt;/strong&gt;: Apply the same abstractions to L1 constructs, L2 constructs, or custom constructs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Composable Design&lt;/strong&gt;: Mix and match features without inheriting unwanted behaviors&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cross-Service Abstractions&lt;/strong&gt;: Create custom mixins that work across different AWS services&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Day-One Coverage&lt;/strong&gt;: Access new AWS features immediately while keeping existing L2 or L3 constructs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Type Safety&lt;/strong&gt;: Maintain compile-time guarantees and IDE support&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Using CDK Mixins
&lt;/h2&gt;

&lt;p&gt;CDK Mixins are available starting in the &lt;code&gt;@aws-cdk/mixins-preview package&lt;/code&gt;. They can be used with both L1, L2 and L3 constructs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// CDK Mixins can be used with L1s&lt;/span&gt;
&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CfnBucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;MixinsL1DemoBucket&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="c1"&gt;// Use the fluent .with() syntax (only available in JavaScript/TypeScript during preview)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;with&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;s3Mixins&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;EnableVersioning&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="c1"&gt;// ... or with L2s&lt;/span&gt;
&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;MixinsL2DemoBucket&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="c1"&gt;// Cfn Property Mixins provide type-safe fallbacks for L2s&lt;/span&gt;
  &lt;span class="c1"&gt;// and configuration after initial creation&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;with&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;s3Mixins&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CfnBucketPropsMixin&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;objectLockEnabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;objectLockConfiguration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;objectLockEnabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Enabled&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;rule&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;defaultRetention&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;COMPLIANCE&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;days&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;}));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also use Mixins.of() to apply Mixins in other languages or with more control over which constructs receive the mixin:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Use Mixins.of() to apply Mixins in other languages&lt;/span&gt;
&lt;span class="c1"&gt;// This also gives you more options to apply only to certain constructs&lt;/span&gt;
&lt;span class="nx"&gt;Mixins&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="cm"&gt;/* optional */&lt;/span&gt; &lt;span class="nx"&gt;ConstructSelector&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;byId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/^MixinsL1DemoBucket$/&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;apply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;s3Mixins&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;AutoDeleteObjects&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Apply mixins at scale to entire construct trees or specific resource types:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Apply your Mixins to the whole app&lt;/span&gt;
&lt;span class="nx"&gt;Mixins&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;apply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;MyDataRecovery&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="c1"&gt;// ... or only to some constructs&lt;/span&gt;
&lt;span class="nx"&gt;Mixins&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ConstructSelector&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;resourcesOfType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CfnBucket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CFN_RESOURCE_TYPE_NAME&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nf"&gt;apply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;MyDataRecovery&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Creating Custom Mixins
&lt;/h2&gt;

&lt;p&gt;Creating your own Mixins is straightforward they are simple classes implementing the Mixin interface. The &lt;strong&gt;supports()&lt;/strong&gt; method determines which constructs the mixin can be applied to, and &lt;strong&gt;applyTo()&lt;/strong&gt; modifies the construct. Here's a custom mixin that enables data recovery features across both S3 buckets and DynamoDB tables:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// It's easy to develop your own Mixins&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyDataRecovery&lt;/span&gt; &lt;span class="k"&gt;implements&lt;/span&gt; &lt;span class="nx"&gt;Mixin&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;supports&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;construct&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;IConstruct&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Mixins can be cross-service and support different resources at once&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;construct&lt;/span&gt; &lt;span class="k"&gt;instanceof&lt;/span&gt; &lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CfnBucket&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;construct&lt;/span&gt; &lt;span class="k"&gt;instanceof&lt;/span&gt; &lt;span class="nx"&gt;dynamodb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CfnTable&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;applyTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;construct&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;IConstruct&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;IConstruct&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;construct&lt;/span&gt; &lt;span class="k"&gt;instanceof&lt;/span&gt; &lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CfnBucket&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;construct&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;versioningConfiguration&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Enabled&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;construct&lt;/span&gt; &lt;span class="k"&gt;instanceof&lt;/span&gt; &lt;span class="nx"&gt;dynamodb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CfnTable&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;construct&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pointInTimeRecoverySpecification&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;pointInTimeRecoveryEnabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;construct&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once defined, you can apply your custom mixin to resources:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// ... and to use them:&lt;/span&gt;
&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;AcmeBucket&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;dynamodb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;TableV2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;AcmeTable&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;partitionKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;dynamodb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AttributeType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;STRING&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Apply your Mixins to the whole app&lt;/span&gt;
&lt;span class="nx"&gt;Mixins&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;apply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;MyDataRecovery&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="c1"&gt;// ... or only to some constructs&lt;/span&gt;
&lt;span class="nx"&gt;Mixins&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ConstructSelector&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;resourcesOfType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CfnBucket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CFN_RESOURCE_TYPE_NAME&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nf"&gt;apply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;MyDataRecovery&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This pattern enables organizations to create reusable abstractions that work across any construct type, ensuring consistent security and compliance policies throughout their infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mixin Behavior Control
&lt;/h2&gt;

&lt;p&gt;Control whether mixins must successfully apply or can gracefully skip unsupported constructs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Mixin application comes in two behavior options:&lt;/span&gt;
&lt;span class="c1"&gt;// Graceful: Skips unsupported constructs&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;logGroup&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;logs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CfnLogGroup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;LogGroup&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;Mixins&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;logGroup&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;apply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;s3Mixins&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;AutoDeleteObjects&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="c1"&gt;// Strict: Throws if any construct is not supported by the mixin&lt;/span&gt;
&lt;span class="nx"&gt;Mixins&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;logGroup&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;mustApply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;s3Mixins&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;AutoDeleteObjects&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This flexibility allows you to choose the right behavior for your use case whether you want to apply Mixins opportunistically or enforce their presence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;CDK Mixins are available in developer preview starting with the &lt;code&gt;@aws-cdk/mixins-preview&lt;/code&gt; package. To get started:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Install the package:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--save-dev&lt;/span&gt; aws-cdk-lib @aws-cdk/mixins-preview
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt; Import the &lt;code&gt;.with()&lt;/code&gt; syntax in your stack file:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// stack.ts&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@aws-cdk/mixins-preview/with&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt; Import and use Mixins in your CDK application:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Mixins&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@aws-cdk/mixins-preview/core&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt; Explore the &lt;a href="https://github.com/aws/aws-cdk/tree/main/packages/@aws-cdk/mixins-preview" rel="noopener noreferrer"&gt;documentation&lt;/a&gt; for detailed examples and API references.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;As this is a developer preview, we encourage you to try CDK Mixins in your applications and provide feedback. The APIs may evolve based on community input before reaching general availability.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;CDK Mixins represent a fundamental shift in how we think about infrastructure abstractions. By decoupling capabilities from construct implementations, Mixins give you the freedom to compose exactly the infrastructure you need whether you are using L1 constructs for day-one AWS features, L2 constructs for convenience, or custom constructs for enterprise requirements.&lt;/p&gt;

&lt;p&gt;We are excited to see what the community builds with CDK Mixins. Share your feedback, create custom Mixins, and help shape the future of infrastructure as code with AWS CDK.&lt;/p&gt;

&lt;p&gt;For more information, check out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://github.com/aws/aws-cdk/tree/main/packages/@aws-cdk/mixins-preview" rel="noopener noreferrer"&gt;CDK Mixins Documentation&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devtools</category>
      <category>aws</category>
      <category>infrastructureascode</category>
      <category>cdk</category>
    </item>
    <item>
      <title>AWS CDK Monthly Update - September 2025</title>
      <dc:creator>Praneeta Prakash</dc:creator>
      <pubDate>Mon, 13 Oct 2025 15:53:30 +0000</pubDate>
      <link>https://forem.com/aws/aws-cdk-monthly-update-september-2025-56e1</link>
      <guid>https://forem.com/aws/aws-cdk-monthly-update-september-2025-56e1</guid>
      <description>&lt;h2&gt;
  
  
  Index
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;TL;DR&lt;/li&gt;
&lt;li&gt;Important Announcements&lt;/li&gt;
&lt;li&gt;
Major Features

&lt;ul&gt;
&lt;li&gt;CDK Refactor&lt;/li&gt;
&lt;li&gt;ECS Managed Instances Capacity Provider&lt;/li&gt;
&lt;li&gt;ElastiCache Serverless L2 Constructs&lt;/li&gt;
&lt;li&gt;DocumentDB Serverless Support&lt;/li&gt;
&lt;li&gt;CodeBuild Fleet Enhancements&lt;/li&gt;
&lt;li&gt;RDS Proxy Endpoints&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

Community Highlights

&lt;ul&gt;
&lt;li&gt;Special Recognition&lt;/li&gt;
&lt;li&gt;Content from the Community&lt;/li&gt;
&lt;li&gt;CDK Express Pipeline GitHub Diff Action&lt;/li&gt;
&lt;li&gt;CDK Booster&lt;/li&gt;
&lt;li&gt;Promptz.dev&lt;/li&gt;
&lt;li&gt;CDK Environment Management Guide&lt;/li&gt;
&lt;li&gt;AWS CDK Tutorial&lt;/li&gt;
&lt;li&gt;ACM Exportable Certificates&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Content from AWS&lt;/li&gt;

&lt;li&gt;How Can You Be Involved&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Here is what AWS CDK team has been up to in September 2025. We're thrilled to introduce &lt;strong&gt;CDK Refactor&lt;/strong&gt; - a game-changing feature that finally lets you reorganize your CDK code while preserving your deployed resources (no more accidental replacements!). We've also expanded our L2 construct library with recent additions for &lt;strong&gt;ECS Managed Instances&lt;/strong&gt;, &lt;strong&gt;ElastiCache Serverless&lt;/strong&gt;, and &lt;strong&gt;DocumentDB Serverless&lt;/strong&gt;, while enhancing CodeBuild with powerful fleet management capabilities. Meanwhile, our amazing community continues to innovate with tools like CDK Express Pipeline GitHub Diff Action for visual PR reviews and CDK Booster for faster Lambda bundling. Let's dive into the details!&lt;/p&gt;

&lt;h2&gt;
  
  
  Important Announcements
&lt;/h2&gt;

&lt;p&gt;Before diving into the features, here are some important announcements that might affect your CDK projects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/aws/aws-cdk/issues/35630" rel="noopener noreferrer"&gt;CDK GoLang Library – Upcoming Backward Incompatible Change&lt;/a&gt;&lt;/strong&gt; - Critical update for GoLang CDK users that will require code changes in upcoming releases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/aws/aws-cdk/issues/35697" rel="noopener noreferrer"&gt;"Class incorrectly implements interface": additional interface member in v2.215.0&lt;/a&gt;&lt;/strong&gt; - Recent TypeScript interface changes that may affect custom construct implementations.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Major Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  CDK Refactor - Preserve Resources While Refactoring Code
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;CDK Refactor&lt;/strong&gt; is now available in preview! This feature solves one of the most anxiety-inducing challenges in CDK development - the fear of accidentally replacing your stateful resources when you're simply trying to clean up your code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it solves:&lt;/strong&gt; In the past, when you renamed constructs or moved resources between stacks, CloudFormation would interpret these changes as "destroy and recreate" operations, potentially leading to data loss or service interruptions. This made refactoring CDK code risky and stressful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt; The new &lt;code&gt;cdk refactor&lt;/code&gt; command intelligently detects changes in your construct tree and leverages CloudFormation's refactoring capabilities to update logical IDs without replacing the underlying physical resources. Here's a simple example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;Before&lt;/span&gt;
&lt;span class="nx"&gt;App&lt;/span&gt;
&lt;span class="err"&gt;└─&lt;/span&gt; &lt;span class="nx"&gt;MyStack&lt;/span&gt;
   &lt;span class="err"&gt;├─&lt;/span&gt; &lt;span class="nx"&gt;Bucket&lt;/span&gt;
   &lt;span class="err"&gt;├─&lt;/span&gt; &lt;span class="nx"&gt;Distribution&lt;/span&gt;
   &lt;span class="err"&gt;└─&lt;/span&gt; &lt;span class="nb"&gt;Function&lt;/span&gt;

&lt;span class="nx"&gt;After&lt;/span&gt;
&lt;span class="nx"&gt;App&lt;/span&gt;
&lt;span class="err"&gt;├─&lt;/span&gt; &lt;span class="nx"&gt;WebStack&lt;/span&gt;
&lt;span class="err"&gt;│&lt;/span&gt;  &lt;span class="err"&gt;├─&lt;/span&gt; &lt;span class="nx"&gt;WebsiteOrigin&lt;/span&gt;
&lt;span class="err"&gt;│&lt;/span&gt;  &lt;span class="err"&gt;└─&lt;/span&gt; &lt;span class="nx"&gt;Distribution&lt;/span&gt;
&lt;span class="err"&gt;└─&lt;/span&gt; &lt;span class="nx"&gt;MyStack&lt;/span&gt;
   &lt;span class="err"&gt;└─&lt;/span&gt; &lt;span class="nb"&gt;Function&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cdk refactor &lt;span class="nt"&gt;--unstable&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;refactor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With this capability, you can now confidently:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rename constructs without worrying about resource replacement&lt;/li&gt;
&lt;li&gt;Move resources between stacks as your architecture evolves&lt;/li&gt;
&lt;li&gt;Extract reusable components to improve code organization&lt;/li&gt;
&lt;li&gt;Apply software engineering best practices safely to your infrastructure code&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ECS Managed Instances Capacity Provider
&lt;/h3&gt;

&lt;p&gt;We're happy to announce full L2 construct support for ECS Managed Instances. This capability bridges the gap between serverless simplicity and EC2 flexibility, allowing you to specify exactly which instance types you need for specialized workloads.&lt;/p&gt;

&lt;p&gt;Here's how to set it up:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;declare&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;vpc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Vpc&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kr"&gt;declare&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;infrastructureRole&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;iam&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Role&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kr"&gt;declare&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;instanceProfile&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;iam&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;InstanceProfile&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kr"&gt;declare&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;securityGroups&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SecurityGroup&lt;/span&gt;&lt;span class="p"&gt;[];&lt;/span&gt;
&lt;span class="kr"&gt;declare&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;taskDefinition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ecs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;TaskDefinition&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cluster&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;ecs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Cluster&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Cluster&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;vpc&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Create a Managed Instances Capacity Provider&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;miCapacityProvider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;ecs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ManagedInstancesCapacityProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MICapacityProvider&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;infrastructureRole&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;ec2InstanceProfile&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;instanceProfile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;subnets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;vpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;privateSubnets&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;securityGroups&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;securityGroups&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;instanceRequirements&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;vCpuCountMin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;memoryMin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Size&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;gibibytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="na"&gt;cpuManufacturers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CpuManufacturer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;INTEL&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;acceleratorManufacturers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AcceleratorManufacturer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NVIDIA&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;propagateTags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ecs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PropagateManagedInstancesTags&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CAPACITY_PROVIDER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Add the capacity provider to the cluster&lt;/span&gt;
&lt;span class="nx"&gt;cluster&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addManagedInstancesCapacityProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;miCapacityProvider&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;ecs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Ec2Service&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;EC2Service&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;cluster&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;taskDefinition&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;minHealthyPercent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;capacityProviderStrategies&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;capacityProvider&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;miCapacityProvider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;capacityProviderName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ElastiCache Serverless L2 Constructs
&lt;/h3&gt;

&lt;p&gt;Setting up Redis, Valkey or MemCached clusters just got a whole lot easier! We've introduced comprehensive L2 constructs for &lt;strong&gt;ElastiCache Serverless&lt;/strong&gt; in the &lt;code&gt;@aws-cdk/aws-elasticache-alpha&lt;/code&gt; package, taking care of all the configuration complexity for you.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;declare&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;vpc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Vpc&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Create an IAM user that has only write access&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;IamUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;User&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;engine&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;UserEngine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;REDIS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;accessControl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;AccessControl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromAccessString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;on ~* -@all +@write +ping&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Create default NoPasswordUser, since Redis must have default username&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;defaultUserNoAccess&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;NoPasswordUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;DefaultUser&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;default-user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;userName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;default&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;engine&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;UserEngine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;REDIS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;accessControl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;AccessControl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromAccessString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;on ~* -@all&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;


&lt;span class="c1"&gt;// Create ElastiCache user group&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;userGroup&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;UserGroup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;UserGroup&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;engine&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;UserEngine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;REDIS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;users&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;defaultUserNoAccess&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Create Redis serverless cache&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cache&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ServerlessCache&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;test&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;userGroup&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;serverlessCacheName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my-redis-cache&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
  &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Serverless Redis cache for demo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="na"&gt;engine&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;elasticache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CacheEngine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;REDIS_7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;vpc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Create Lambda funciton passing needed information to connect with the Cache&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;lambdaFunction&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;CacheFunction&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;CACHE_ENDPOINT&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;serverlessCacheEndpointAddress&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;CACHE_PORT&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;serverlessCacheEndpointPort&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;CACHE_NAME&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;serverlessCacheName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;USER_NAME&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userName&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;runtime&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Runtime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NODEJS_LATEST&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;handler&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cache-handler.handler&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Code&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromAsset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;__dirname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../lambda&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
  &lt;span class="nx"&gt;vpc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;cdk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Duration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;minutes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Give the lambda function the proper permission to call Redis&lt;/span&gt;
&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;grant&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lambdaFunction&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  DocumentDB Serverless Support
&lt;/h3&gt;

&lt;p&gt;No more overprovisioning or underutilizing your DocumentDB clusters! You can now deploy serverless DocumentDB configurations through our L2 constructs, letting you configure auto-scaling without managing instances.&lt;/p&gt;

&lt;p&gt;This straightforward pattern makes it simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cluster&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;docdb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DatabaseCluster&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;DocumentDbCluster&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;masterUser&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;username&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;secret&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;secretValueFromJson&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;username&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;unsafeUnwrap&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;secret&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;secretValueFromJson&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;password&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;instanceType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;InstanceType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;InstanceClass&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;T3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;InstanceSize&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;MEDIUM&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;vpc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;vpc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;instances&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  CodeBuild Fleet Enhancements
&lt;/h3&gt;

&lt;p&gt;For teams running large-scale CI/CD operations, we've significantly enhanced CodeBuild's fleet management capabilities. These improvements give you much more control over your build infrastructure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Create CodeBuild Fleet for large-scale CI/CD&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;buildFleet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;codebuild&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Fleet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;CiCdFleet&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;fleetName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;large-scale-cicd-fleet&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;baseCapacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;computeType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;codebuild&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FleetComputeType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;LARGE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;environmentType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;codebuild&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;EnvironmentType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;LINUX_CONTAINER&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Create high-performance fleet for critical builds&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;performanceFleet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;codebuild&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Fleet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;PerformanceFleet&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;fleetName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;high-performance-fleet&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;baseCapacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;computeType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;codebuild&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FleetComputeType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;X2_LARGE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;environmentType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;codebuild&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;EnvironmentType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;LINUX_CONTAINER&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  RDS Proxy Endpoints
&lt;/h3&gt;

&lt;p&gt;Connection management just got easier with our new L2 construct for RDS Proxy Endpoints. This is particularly valuable for managing read/write splits or creating specialized connection points:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Create RDS Proxy using L2 construct&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;proxy&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;rds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DatabaseProxy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;RdsProxy&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;proxyTarget&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;rds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ProxyTarget&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromCluster&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cluster&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;secrets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;secret&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;vpc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;vpc&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Create read-only endpoint using L2 construct&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;readEndpoint&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;rds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DatabaseProxyEndpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ReadOnlyEndpoint&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;dbProxy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;proxy&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;dbProxyEndpointName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;read-only&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;targetRole&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;rds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ProxyEndpointTargetRole&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;READ_ONLY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;vpc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;vpc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;vpcSubnets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;vpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;selectSubnets&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; 
    &lt;span class="na"&gt;subnetType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SubnetType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PRIVATE_WITH_EGRESS&lt;/span&gt; 
  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Community Highlights
&lt;/h2&gt;

&lt;p&gt;Our CDK community continues to create amazing tools that make working with CDK even better. Here are some standout contributions from this month:&lt;/p&gt;

&lt;h3&gt;
  
  
  Special Recognition
&lt;/h3&gt;

&lt;p&gt;We want to shine a spotlight on some extraordinary external contributors who made significant impacts this month:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/phuhung273" rel="noopener noreferrer"&gt;Hung Tran&lt;/a&gt;&lt;/strong&gt; - Implemented the RDS DatabaseProxyEndpoint L2 construct that many of you have been requesting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/kazuho1532" rel="noopener noreferrer"&gt;Kazuho Cryer-Shinozuka&lt;/a&gt;&lt;/strong&gt; - Made multiple significant contributions including CloudFront origins IP address type support, CloudFront origins response completion timeout, Synthetics browser type for canary, Batch ECS execute command, and CodeBuild fleet overflow behavior&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/iankerins" rel="noopener noreferrer"&gt;Ian Kerins&lt;/a&gt;&lt;/strong&gt; - Implemented CodeBuild custom instance type and VPC support for Fleets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/tietew" rel="noopener noreferrer"&gt;Tietew&lt;/a&gt;&lt;/strong&gt; - Added Route53 SVCB and HTTPS resource record classes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/benoitdurand" rel="noopener noreferrer"&gt;Benoît Durand&lt;/a&gt;&lt;/strong&gt; - Implemented Event Bus Logging Configuration support&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/iRoachie" rel="noopener noreferrer"&gt;Kyle Roach&lt;/a&gt;&lt;/strong&gt; - Added support for new Bun lock file&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/mazyu36" rel="noopener noreferrer"&gt;Yuki Matsuda&lt;/a&gt;&lt;/strong&gt; - Fixed RDS connections issue in DatabaseInstance.fromLookup&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/Kasra-G" rel="noopener noreferrer"&gt;Kasra Ghaffari&lt;/a&gt;&lt;/strong&gt; - Made two important StepFunctions fixes: distributed map execution in nested StateGraphs and DistributedMap permissions for run/redrive operations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We're incredibly grateful to these contributors and to everyone who files issues, suggests improvements, and helps make CDK better every day. Thank you!&lt;/p&gt;

&lt;h3&gt;
  
  
  Content from the Community
&lt;/h3&gt;

&lt;h4&gt;
  
  
  CDK Express Pipeline GitHub Diff Action by &lt;a href="https://github.com/rehanvdm" rel="noopener noreferrer"&gt;Rehan van der Merwe&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;If you've ever struggled with reviewing CDK changes in pull requests, you'll love this tool. Rehan has created an incredible GitHub Action that visualizes CDK diffs directly in your PRs! It runs diffs in parallel, collects outputs from multiple stacks, and filters out noisy resources for much cleaner diffs.&lt;/p&gt;

&lt;p&gt;Check it out: &lt;a href="https://github.com/rehanvdm/cdk-express-pipeline-github-diff" rel="noopener noreferrer"&gt;CDK Express Pipeline GitHub Diff Action&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  CDK Booster by &lt;a href="https://github.com/marko-serverless" rel="noopener noreferrer"&gt;Marko (ServerlessLife)&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Tired of waiting for Lambda bundling during CDK deployments? Marko has launched CDK Booster, a clever tool that dramatically speeds up AWS CDK bundling of TypeScript/JavaScript Lambdas without requiring any code changes!&lt;/p&gt;

&lt;p&gt;Learn more: &lt;a href="https://www.cdkbooster.com/" rel="noopener noreferrer"&gt;CDK Booster&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Promptz.dev by &lt;a href="https://github.com/cremich" rel="noopener noreferrer"&gt;Christian Bonzalet&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;While this came out a few months ago, I think this needed a special callout for the CDK rules that make your prompt life much easier! Highly recommend :)&lt;/p&gt;

&lt;p&gt;Learn more: &lt;a href="https://www.promptz.dev/rules?tags%5B%5D=CDK" rel="noopener noreferrer"&gt;Promptz.dev&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  CDK Environment Management Guide by &lt;a href="https://github.com/hoegertn" rel="noopener noreferrer"&gt;Thorsten Höger&lt;/a&gt; and &lt;a href="https://github.com/go-to-k" rel="noopener noreferrer"&gt;Kenta Goto&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;If you're managing multiple environments with CDK, don't miss this excellent deep-dive from &lt;a href="https://github.com/hoegertn" rel="noopener noreferrer"&gt;Thorsten Höger&lt;/a&gt; and &lt;a href="https://github.com/go-to-k" rel="noopener noreferrer"&gt;Kenta Goto&lt;/a&gt;. They've published a comprehensive guide to CDK environment management, exploring the pros and cons of static versus dynamic stack creation patterns.&lt;/p&gt;

&lt;p&gt;Learn more: &lt;a href="https://dev.to/aws-heroes/cdk-environment-management-static-vs-dynamic-stack-creation-383l"&gt;CDK Environment Management: Static vs Dynamic Stack Creation&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  AWS CDK Tutorial by &lt;a href="https://www.linkedin.com/in/rahul1sharma/" rel="noopener noreferrer"&gt;Rahul Sharma&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;For those new to CDK or looking to strengthen their fundamentals, Rahul Sharma from SourceFuse has created an excellent tutorial that walks through key concepts and practical implementations. This resource is particularly valuable for developers transitioning from console-based management to Infrastructure as Code with CDK.&lt;/p&gt;

&lt;p&gt;Learn more: &lt;a href="https://www.datacamp.com/tutorial/aws-cdk" rel="noopener noreferrer"&gt;AWS CDK Tutorial&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  ACM exportable certificates by &lt;a href="https://www.linkedin.com/posts/activity-7378947390608879616-rMNj?utm_source=share&amp;amp;utm_medium=member_desktop&amp;amp;rcm=ACoAAAOGaNUBhU6dMgbRygOnTSqV7AGGkevSn8w" rel="noopener noreferrer"&gt;Feng He&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Hear what Feng He (Principal Solution Eng at Flybuys) has to say about their experience &lt;a href="https://medium.com/@frankhe.cn/beyond-code-how-a-single-aws-cdk-contribution-saved-15-000-and-delivered-fully-automated-ssl-60241f80158c" rel="noopener noreferrer"&gt;contributing to CDK&lt;/a&gt; - and saved \$15000 per year for their organization.&lt;/p&gt;

&lt;h3&gt;
  
  
  Content from AWS
&lt;/h3&gt;

&lt;p&gt;This month has been exceptionally productive for AWS teams using CDK across various domains. Here's a roundup of valuable content to help you level up your CDK skills:&lt;/p&gt;

&lt;h4&gt;
  
  
  Deep Packet Inspection for Streaming Content
&lt;/h4&gt;

&lt;p&gt;For those working with high-value media content, the AWS team has published a comprehensive guide on implementing deep packet inspection for securing streaming content using CDK. The blog includes detailed CDK code examples that you can adapt for your own secure streaming infrastructure.&lt;/p&gt;

&lt;p&gt;Read the full article: &lt;a href="https://aws.amazon.com/blogs/media/aws-cdk-deep-packet-inspection-for-securing-high-value-streaming-content-in-the-cloud/" rel="noopener noreferrer"&gt;AWS CDK: Deep packet inspection for securing high-value streaming content in the cloud&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Console to Code: Accelerating AWS Infrastructure Deployment
&lt;/h4&gt;

&lt;p&gt;Many teams start by using the AWS Console but struggle with the transition to Infrastructure as Code. This practical guide walks through the journey from manual deployments to automated CDK pipelines, with specific strategies to accelerate the transition.&lt;/p&gt;

&lt;p&gt;Learn more: &lt;a href="https://aws.amazon.com/blogs/devops/accelerating-aws-infrastructure-deployment-a-practical-guide-to-console-to-code/" rel="noopener noreferrer"&gt;Accelerating AWS infrastructure deployment: A practical guide to console to code&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Building GraphQL APIs with AWS AppSync and .NET
&lt;/h4&gt;

&lt;p&gt;.NET developers will appreciate this deep dive into creating GraphQL APIs using AWS AppSync with Direct Lambda Resolvers. The article provides CDK code samples for setting up the entire infrastructure using .NET.&lt;/p&gt;

&lt;p&gt;Read more: &lt;a href="https://aws.amazon.com/blogs/dotnet/building-a-graphql-api-with-aws-appsync-using-direct-lambda-resolvers-in-net/" rel="noopener noreferrer"&gt;Building a GraphQL API with AWS AppSync using Direct Lambda Resolvers in .NET&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Streamlining Spark Development with Data Solutions Framework
&lt;/h4&gt;

&lt;p&gt;The Data Solutions Framework team has released a guide on simplifying Spark application development on Amazon EMR. This framework uses CDK to provide higher-level abstractions that help data engineers focus on business logic rather than infrastructure details.&lt;/p&gt;

&lt;p&gt;Explore more: &lt;a href="https://aws.amazon.com/blogs/big-data/streamline-spark-application-development-on-amazon-emr-with-the-data-solutions-framework-on-aws/" rel="noopener noreferrer"&gt;Streamline Spark application development on Amazon EMR with the Data Solutions Framework on AWS&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Amazon ECS Blue/Green Deployments with Lifecycle Hooks
&lt;/h4&gt;

&lt;p&gt;For container enthusiasts, this article explains how to extend deployment pipelines with Amazon ECS Blue/Green deployments and lifecycle hooks. It includes detailed CDK examples for setting up complex deployment workflows.&lt;/p&gt;

&lt;p&gt;Dive in: &lt;a href="https://aws.amazon.com/blogs/containers/extending-deployment-pipelines-with-amazon-ecs-blue-green-deployments-and-lifecycle-hooks/" rel="noopener noreferrer"&gt;Extending deployment pipelines with Amazon ECS Blue/Green deployments and lifecycle hooks&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Creating a Private SageMaker Ground Truth Workforce with CDK
&lt;/h4&gt;

&lt;p&gt;Machine learning practitioners will benefit from this guide on setting up a private workforce for Amazon SageMaker Ground Truth using CDK. It demonstrates how to automate the provisioning of labeling workforces for sensitive ML projects.&lt;/p&gt;

&lt;p&gt;Learn more: &lt;a href="https://aws.amazon.com/blogs/machine-learning/create-a-private-workforce-on-amazon-sagemaker-ground-truth-with-the-aws-cdk/" rel="noopener noreferrer"&gt;Create a private workforce on Amazon SageMaker Ground Truth with the AWS CDK&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How Can You Be Involved
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Contributing to CDK
&lt;/h3&gt;

&lt;p&gt;CDK thrives because of community contributions, and we'd love to have you join in! Here are some ways you can make a difference:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Report Issues&lt;/strong&gt;: Found a bug or have a feature request? &lt;a href="https://github.com/aws/aws-cdk/issues" rel="noopener noreferrer"&gt;Open an issue&lt;/a&gt; to help us improve&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contribute Code&lt;/strong&gt;: Looking to get your hands dirty? Check out our &lt;a href="https://github.com/aws/aws-cdk/labels/good%20first%20issue" rel="noopener noreferrer"&gt;good first issues&lt;/a&gt; to get started&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation&lt;/strong&gt;: Help make CDK more accessible by improving our &lt;a href="https://github.com/awsdocs/aws-cdk-guide" rel="noopener noreferrer"&gt;CDK Guide&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RFCs&lt;/strong&gt;: Shape the future of CDK by participating in &lt;a href="https://github.com/aws/aws-cdk-rfcs" rel="noopener noreferrer"&gt;Request for Comments&lt;/a&gt; discussions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Community Engagement
&lt;/h3&gt;

&lt;p&gt;The CDK community is friendly, helpful, and always learning. Join the conversation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CDK Community Slack&lt;/strong&gt;: Chat with thousands of CDK users and experts at &lt;a href="https://join.slack.com/t/cdk-dev/shared_invite/zt-37hzafo82-8x6OQ3voSlMHd2DUG1puzw" rel="noopener noreferrer"&gt;cdk.dev&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS re:Post&lt;/strong&gt;: Ask questions and share your knowledge on &lt;a href="https://repost.aws/tags/TA9fmRfPodSgylDF8ojd9A_w/aws-cloud-development-kit-cdk" rel="noopener noreferrer"&gt;AWS re:Post&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Discussions&lt;/strong&gt;: Dive deep into CDK topics in &lt;a href="https://github.com/aws/aws-cdk/discussions" rel="noopener noreferrer"&gt;CDK Discussions&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;The AWS CDK team is committed to making cloud development more accessible and enjoyable. Keep building amazing things, and we'll keep improving the tools to help you succeed!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Happy coding!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>devtools</category>
      <category>infrastructureascode</category>
      <category>cdk</category>
      <category>aws</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Praneeta Prakash</dc:creator>
      <pubDate>Thu, 25 Sep 2025 20:49:49 +0000</pubDate>
      <link>https://forem.com/praneetaprakash/-2nfe</link>
      <guid>https://forem.com/praneetaprakash/-2nfe</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/aws-heroes/cdk-environment-management-static-vs-dynamic-stack-creation-383l" class="crayons-story__hidden-navigation-link"&gt;CDK Environment Management: Static vs Dynamic Stack Creation&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;
          &lt;a class="crayons-logo crayons-logo--l" href="/aws-heroes"&gt;
            &lt;img alt="AWS Heroes logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F2491%2Ff0c1a659-c959-42cd-bb12-cd25909dd9db.png" class="crayons-logo__image"&gt;
          &lt;/a&gt;

          &lt;a href="/hoegertn" class="crayons-avatar  crayons-avatar--s absolute -right-2 -bottom-2 border-solid border-2 border-base-inverted  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F402890%2F3e71d0d6-2773-4295-bbc9-9c92771c0e05.png" alt="hoegertn profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/hoegertn" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Thorsten Hoeger
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Thorsten Hoeger
                
              
              &lt;div id="story-author-preview-content-2863575" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/hoegertn" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F402890%2F3e71d0d6-2773-4295-bbc9-9c92771c0e05.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Thorsten Hoeger&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

            &lt;span&gt;
              &lt;span class="crayons-story__tertiary fw-normal"&gt; for &lt;/span&gt;&lt;a href="/aws-heroes" class="crayons-story__secondary fw-medium"&gt;AWS Heroes&lt;/a&gt;
            &lt;/span&gt;
          &lt;/div&gt;
          &lt;a href="https://dev.to/aws-heroes/cdk-environment-management-static-vs-dynamic-stack-creation-383l" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Sep 25 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/aws-heroes/cdk-environment-management-static-vs-dynamic-stack-creation-383l" id="article-link-2863575"&gt;
          CDK Environment Management: Static vs Dynamic Stack Creation
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/aws"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;aws&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/cdk"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;cdk&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devops"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devops&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/aws-heroes/cdk-environment-management-static-vs-dynamic-stack-creation-383l" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;15&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/aws-heroes/cdk-environment-management-static-vs-dynamic-stack-creation-383l#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              2&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            10 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>aws</category>
      <category>cdk</category>
      <category>devops</category>
    </item>
    <item>
      <title>AWS CDK in August 2025</title>
      <dc:creator>Praneeta Prakash</dc:creator>
      <pubDate>Wed, 10 Sep 2025 17:32:16 +0000</pubDate>
      <link>https://forem.com/aws/aws-cdk-last-month-august-2025-nhj</link>
      <guid>https://forem.com/aws/aws-cdk-last-month-august-2025-nhj</guid>
      <description>&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
Major Features

&lt;ul&gt;
&lt;li&gt;Amazon Bedrock Guardrails L2 Construct&lt;/li&gt;
&lt;li&gt;ECS Native Blue/Green Deployments&lt;/li&gt;
&lt;li&gt;Enhanced CLI Experience with Interactive Feature Flags&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Notable Fixes&lt;/li&gt;

&lt;li&gt;

Community Spotlight

&lt;ul&gt;
&lt;li&gt;Community Content&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;AWS content updates&lt;/li&gt;

&lt;li&gt;Want to be more involved?&lt;/li&gt;

&lt;li&gt;Getting Started Resources&lt;/li&gt;

&lt;/ul&gt;




&lt;p&gt;Welcome to the AWS CDK monthly update for August 2025! This month brought significant enhancements across the CDK ecosystem, with major improvements to developer experience, new service integrations, and enhanced deployment capabilities. Let's dive into the key updates that will help you build better cloud applications. &lt;/p&gt;

&lt;h2&gt;
  
  
  Major Features &lt;a&gt;
&lt;/a&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Amazon Bedrock Guardrails L2 Construct (Alpha) &lt;a&gt;
&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;We're excited to introduce L2 constructs for Amazon Bedrock Guardrails, making it easier to implement responsible AI practices in your applications. This new alpha feature allows you to define content filters, topic restrictions, and safety policies directly in your CDK code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Guardrail&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@aws-cdk/aws-bedrock-alpha&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;guardrail&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Guardrail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MyGuardrail&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;content-safety-guardrail&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
  &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;'Guardrail for content safety', &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="na"&gt;contentPolicyConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="na"&gt;filtersConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; 
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;HATE&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
      &lt;span class="na"&gt;inputStrength&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;HIGH&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
      &lt;span class="na"&gt;outputStrength&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;HIGH&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; 
    &lt;span class="p"&gt;}]&lt;/span&gt; 
  &lt;span class="p"&gt;},&lt;/span&gt; 
  &lt;span class="na"&gt;topicPolicyConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="na"&gt;topicsConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; 
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;investment-advice&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
      &lt;span class="na"&gt;definition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Investment advice and financial recommendations&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;DENY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; 
    &lt;span class="p"&gt;}]&lt;/span&gt; 
  &lt;span class="p"&gt;}&lt;/span&gt; 
&lt;span class="p"&gt;});&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;While this is supported in the native CDK library, you can explore additional CDK constructs built specially for &lt;a href="https://github.com/awslabs/generative-ai-cdk-constructs" rel="noopener noreferrer"&gt;Gen AI use cases here&lt;/a&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  ECS Native Blue/Green Deployments &lt;a&gt;
&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;ECS services now support &lt;a href="https://aws.amazon.com/about-aws/whats-new/2025/07/amazon-ecs-built-in-blue-green-deployments/" rel="noopener noreferrer"&gt;native blue/green deployments&lt;/a&gt; through L2 constructs, enabling zero-downtime deployments with automatic rollback capabilities.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;FargateService&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;AlternateTargetConfiguration&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws-cdk-lib/aws-ecs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;service&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FargateService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MyService&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
  &lt;span class="nx"&gt;cluster&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
  &lt;span class="nx"&gt;taskDefinition&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
  &lt;span class="na"&gt;alternateTargetConfiguration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;AlternateTargetConfiguration&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; 
    &lt;span class="na"&gt;containerName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;web&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="na"&gt;containerPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="na"&gt;listenerPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;8080&lt;/span&gt; 
  &lt;span class="p"&gt;})&lt;/span&gt; 
&lt;span class="p"&gt;});&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Enhanced CLI Experience with Interactive Feature Flags &lt;a&gt;
&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;The CDK CLI now provides an interactive experience for managing feature flags, making it easier to configure and understand the impact of different CDK features. &lt;a href="https://docs.aws.amazon.com/cdk/v2/guide/ref-cli-cmd-flags.html" rel="noopener noreferrer"&gt;Read more here&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;cdk flags &lt;span class="nt"&gt;--unstable&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;flags &lt;span class="nt"&gt;--set&lt;/span&gt; &lt;span class="nt"&gt;--recommended&lt;/span&gt; &lt;span class="nt"&gt;--all&lt;/span&gt; 
Feature Flag                              Recommended Value            User Value 
&lt;span class="k"&gt;*&lt;/span&gt; @aws-cdk/...                              &lt;span class="nb"&gt;true                         false&lt;/span&gt; 
&lt;span class="k"&gt;*&lt;/span&gt; @aws-cdk/...                              &lt;span class="nb"&gt;true                         false&lt;/span&gt; 
&lt;span class="k"&gt;*&lt;/span&gt; @aws-cdk/...                              &lt;span class="nb"&gt;true&lt;/span&gt;                         &amp;lt;&lt;span class="nb"&gt;unset&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; 
  Synthesizing... 
    Resources 
    &lt;span class="o"&gt;[&lt;/span&gt;~] AWS::S3::Bucket MyBucket 
    └─ &lt;span class="o"&gt;[&lt;/span&gt;~] Properties 
        └─ &lt;span class="o"&gt;[&lt;/span&gt;~] Encryption 
                ... 
    Number of stacks with differences: 2 
  Do you want to accept these changes? &lt;span class="o"&gt;(&lt;/span&gt;y/n&lt;span class="o"&gt;)&lt;/span&gt; y 
  Resynthesizing... 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Notable Fixes &lt;a&gt;
&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;S3 Deployment&lt;/strong&gt;: Fixed intermittent CloudFront invalidation errors during deployments &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EKS&lt;/strong&gt;: Resolved Helm command execution issues with ECR public registry authentication &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lambda&lt;/strong&gt;: Improved startup time for large applications by optimizing lazy loading &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CloudWatch&lt;/strong&gt;: Fixed &lt;code&gt;AlarmRule.concat&lt;/code&gt; to properly handle empty operands &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Step Functions&lt;/strong&gt;: Corrected Bedrock Agent service IAM prefix mapping &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Community Spotlight &lt;a&gt;
&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Big shout-outs to &lt;a href="https://github.com/phuhung273" rel="noopener noreferrer"&gt;phuhung273&lt;/a&gt; for 3 merged PRs in August! They made multiple high impact contributions including Docker build networking enhancements (#34725), CloudWatch alarm rule fixes (#34757), and comprehensive RDS engine version updates across PostgreSQL, SQL Server, and MySQL (#35013). &lt;/p&gt;

&lt;p&gt;We also celebrate &lt;a href="https://github.com/mazyu36" rel="noopener noreferrer"&gt;mazyu36&lt;/a&gt; for their outstanding work with 3 impactful contributions - modernizing RDS VPC security group lookups (#34906) and improving EKS documentation structure (#34783).  &lt;/p&gt;

&lt;p&gt;Special recognition goes to &lt;a href="https://github.com/badmintoncryer" rel="noopener noreferrer"&gt;badmintoncryer&lt;/a&gt; (#34962), &lt;a href="https://github.com/xuxey" rel="noopener noreferrer"&gt;xuxey&lt;/a&gt; (#35223), &lt;a href="https://github.com/richarddotcodes" rel="noopener noreferrer"&gt;richarddotcodes&lt;/a&gt; (#35025), &lt;a href="https://github.com/maramure" rel="noopener noreferrer"&gt;maramure&lt;/a&gt; (#35060), and &lt;a href="https://github.com/jaw111" rel="noopener noreferrer"&gt;jaw111&lt;/a&gt; (#34712) for their valuable contributions spanning ECS volume optimization, S3 Tables security policies, cross-region VPC endpoints, WebSocket API management, and SNS filtering capabilities. &lt;/p&gt;

&lt;h3&gt;
  
  
  Community Content &lt;a&gt;
&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Kenta Goto wrote an extremely helpful article on &lt;a href="https://dev.to/aws-heroes/how-to-choose-validation-approaches-in-aws-cdk-2ji3"&gt;“How to choose validation approaches in AWS CDK”&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;Jeroen Reijn has tips on &lt;a href="https://dev.to/aws-builders/enabling-aws-budget-notifications-with-sns-using-aws-cdk-2pg6"&gt;Enabling AWS Budget Notifications with SNS using AWS CDK&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Lee Gilmore compares &lt;a href="https://blog.serverlessadvocate.com/aws-cdk-blueprints-vs-custom-constructs-vs-aspects-164304251e68" rel="noopener noreferrer"&gt;AWS CDK Blueprints vs Custom Constructs vs Aspects&lt;/a&gt; in this article. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  AWS content updates &lt;a&gt;
&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Here are some recent blogposts that demonstrate use of CDK to build various applications on AWS. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://aws.amazon.com/new/?ams%23article-feed%23pattern-data--111430994.filter=%257B%2522search%2522%253A%2522cdk%2522%257D#:~:text=Amazon%20S3%20improves%20AWS%20CloudFormation%20and%20AWS%20CDK%20support%20for%20S3%20Tables" rel="noopener noreferrer"&gt;S3 Tables adds CDK support&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://aws.amazon.com/blogs/training-and-certification/from-theory-to-practice-using-amazon-q-developer-cli-to-generate-tailored-aws-projects/" rel="noopener noreferrer"&gt;From theory to practice using Amazon Q Developer CLI to generate tailored AWS projects&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://aws.amazon.com/blogs/big-data/build-enterprise-scale-log-ingestion-pipelines-with-amazon-opensearch-service/" rel="noopener noreferrer"&gt;Build enterprise-scale log ingestion pipelines with Amazon OpenSearch Service&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://aws.amazon.com/blogs/machine-learning/process-multi-page-documents-with-human-review-using-amazon-bedrock-data-automation-and-amazon-sagemaker-ai/" rel="noopener noreferrer"&gt;Process multi-page documents with human review using Amazon Bedrock Data Automation and Amazon SageMaker AI&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://aws.amazon.com/blogs/industries/enhance-monitoring-and-observability-for-aws-healthomics-workflows/" rel="noopener noreferrer"&gt;Enhance monitoring and observability for AWS HealthOmics workflows&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Want to be more involved? &lt;a&gt;
&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;The CDK team runs community meetings every quarter to discuss new features, best practices and highlight community-built projects. We publish videos here in a community run &lt;a href="https://www.youtube.com/@cdkdev" rel="noopener noreferrer"&gt;YouTube channel&lt;/a&gt; and have a 10k+ active community discussing all things CDK and AWS in CDK.dev &lt;a href="https://join.slack.com/t/cdk-dev/shared_invite/zt-37hzafo82-8x6OQ3voSlMHd2DUG1puzw" rel="noopener noreferrer"&gt;Community Slack&lt;/a&gt;. Join us! &lt;/p&gt;

&lt;p&gt;We are also looking for community reviewers to help us move faster on PRs. Check out &lt;a href="https://github.com/aws/aws-cdk/issues?q=is%3Aopen%20is%3Apr%20label%3Apr%2Fneeds-community-review&amp;amp;page=2" rel="noopener noreferrer"&gt;open PRs here&lt;/a&gt; and provide your review and guidance to other CDK contributors. &lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started Resources &lt;a&gt;
&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://docs.aws.amazon.com/cdk/api/v2/" rel="noopener noreferrer"&gt;AWS CDK API Reference&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://catalog.us-east-1.prod.workshops.aws/workshops/10141411-0192-4021-afa8-2436f3c66bd8/en-US" rel="noopener noreferrer"&gt;CDK Workshop&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.aws.amazon.com/solutions/latest/constructs/welcome.html" rel="noopener noreferrer"&gt;AWS Solution Constructs&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://construct.dev/" rel="noopener noreferrer"&gt;CDK Construct Hub&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://join.slack.com/t/cdk-dev/shared_invite/zt-37hzafo82-8x6OQ3voSlMHd2DUG1puzw" rel="noopener noreferrer"&gt;Community Slack&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Have feedback or questions about these updates? Join the conversation in our &lt;a href="https://github.com/aws/aws-cdk/discussions" rel="noopener noreferrer"&gt;GitHub Discussions&lt;/a&gt;.&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;Happy building! 🚀 &lt;/p&gt;

&lt;p&gt;&lt;em&gt;The AWS CDK Team&lt;/em&gt; &lt;/p&gt;

</description>
      <category>devtools</category>
      <category>infrastructureascode</category>
      <category>cdk</category>
      <category>typescript</category>
    </item>
    <item>
      <title>AWS CDK in July 2025</title>
      <dc:creator>Praneeta Prakash</dc:creator>
      <pubDate>Thu, 14 Aug 2025 01:13:10 +0000</pubDate>
      <link>https://forem.com/aws/cdk-in-july-2025-a6k</link>
      <guid>https://forem.com/aws/cdk-in-july-2025-a6k</guid>
      <description>&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;p&gt;New Abstractions&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Amazon Bedrock Inference Profiles Support
&lt;/li&gt;
&lt;li&gt;  Amazon S3 Tables L2 Construct Support
&lt;/li&gt;
&lt;li&gt;  CloudWatch Logs Transformer Support
&lt;/li&gt;
&lt;li&gt;  RDS Database Insights for Instances
&lt;/li&gt;
&lt;li&gt;  Enhanced CloudWatch Dashboard Features
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CLI Enhancements&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enhanced Diff Command with Move Detection&lt;/li&gt;
&lt;li&gt;Feature Flag Management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Documentation Changes&lt;br&gt;
Community and Content Highlights&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Contributor Highlight
&lt;/li&gt;
&lt;li&gt;  Community Events
&lt;/li&gt;
&lt;li&gt;  Community published content
&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Welcome to the July 2025 AWS CDK monthly update! This month brought significant new features, improvements, and fixes across the CDK ecosystem. Here you will find the key highlights.&lt;/p&gt;
&lt;h2&gt;
  
  
  New Abstractions &lt;a&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Amazon Bedrock Inference Profiles Support &lt;a&gt;
&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;We're excited to announce comprehensive support for Amazon Bedrock Inference Profiles in the AWS CDK Bedrock Alpha construct library. This feature enables better cost tracking, model usage optimization, and cross-region inference capabilities.&lt;/p&gt;

&lt;p&gt;Key capabilities:&lt;br&gt;
• &lt;strong&gt;Application Inference Profiles&lt;/strong&gt;: User-defined profiles for cost tracking and model usage monitoring&lt;br&gt;
• &lt;strong&gt;Cross-Region Inference Profiles&lt;/strong&gt;: System-defined profiles for seamless traffic distribution across AWS regions&lt;br&gt;
• &lt;strong&gt;Prompt Routers&lt;/strong&gt;: Intelligent prompt routing capabilities&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;bedrock&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@aws-cdk/aws-bedrock-alpha&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 

&lt;span class="c1"&gt;// Create an application inference profile for cost tracking &lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;appProfile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;bedrock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ApplicationInferenceProfile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MyAppProfile&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
  &lt;span class="na"&gt;applicationInferenceProfileName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my-cost-tracking-profile&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
  &lt;span class="na"&gt;modelSource&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;bedrock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;BedrockFoundationModel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ANTHROPIC_CLAUDE_3_5_SONNET_V1_0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
  &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Profile for tracking model usage costs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="p"&gt;});&lt;/span&gt; 

&lt;span class="c1"&gt;// Create a cross-region inference profile for resilience &lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;crossRegionProfile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bedrock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CrossRegionInferenceProfile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromConfig&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; 
  &lt;span class="na"&gt;geoRegion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;bedrock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CrossRegionInferenceProfileRegion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;US&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;bedrock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;BedrockFoundationModel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ANTHROPIC_CLAUDE_3_5_SONNET_V1_0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="p"&gt;});&lt;/span&gt; 

&lt;span class="c1"&gt;// Grant usage permissions to other resources appProfile.grantProfileUsage(myLambdaFunction);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Amazon S3 Tables L2 Construct Support &lt;a&gt;
&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Amazon S3 Tables deliver the first cloud object store with built-in Apache Iceberg support and streamline storing tabular data at scale. L2 constructs are added to AWS CDK to support the base CfnNamespace and CfnTable constructs with a more concise user interface, recommended defaults, and in-built validations.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Create namespace&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Namespace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MyNamespace&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;namespaceName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;analytics_namespace&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;tableBucket&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;myTableBucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="c1"&gt;// Create table with schema and maintenance settings&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;table&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MyTable&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;tableName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;user_events&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;openTableFormat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;OpenTableFormat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ICEBERG&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;icebergMetadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;icebergSchema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;schemaFieldList&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;int&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;timestamp&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;timestamp&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;compaction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Status&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ENABLED&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;targetFileSizeMb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;snapshotManagement&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Status&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ENABLED&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;maxSnapshotAgeHours&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;minSnapshotsToKeep&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  CloudWatch Logs Transformer Support &lt;a&gt;
&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;New support for CloudWatch Logs Transformers allows you to process and transform log data before it's stored, providing powerful data processing capabilities.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Create a log group&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;logGroup&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;logs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;LogGroup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MyLogGroup&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Create a JSON parser processor&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;jsonParser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;logs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ParserProcessor&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;logs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ParserProcessorType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Create a processor to add keys&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;addKeysProcessor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;logs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;JsonMutatorProcessor&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;logs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;JsonMutatorType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ADD_KEYS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;addKeysOptions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;
      &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;metadata.transformed_in&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;CloudWatchLogs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="p"&gt;}]&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Create a transformer with these processors&lt;/span&gt;
&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;logs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Transformer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Transformer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;transformerName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MyTransformer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;logGroup&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;logGroup&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;transformerConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;jsonParser&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;addKeysProcessor&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  RDS Database Insights for Instances &lt;a&gt;
&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Database Insights support has been extended to RDS instances, providing enhanced monitoring capabilities similar to what was previously available only for Aurora clusters.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;DatabaseInstance&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;DatabaseInstanceEngine&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;DatabaseInsightsMode&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws-cdk-lib/aws-rds&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;instance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;DatabaseInstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MyDatabase&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;engine&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;DatabaseInstanceEngine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mysql&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;MysqlEngineVersion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;VER_8_0&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="na"&gt;instanceType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;InstanceType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;InstanceClass&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;T3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;InstanceSize&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;MICRO&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;vpc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;myVpc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="c1"&gt;// Enable Database Insights for enhanced monitoring&lt;/span&gt;
  &lt;span class="na"&gt;databaseInsightsMode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;DatabaseInsightsMode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;STANDARD&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Enhanced CloudWatch Dashboard Features &lt;a&gt;
&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;New CloudWatch dashboard capabilities include search expressions and improved metric visibility controls.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Dashboard&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;GraphWidget&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Metric&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws-cdk-lib/aws-cloudwatch&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dashboard&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Dashboard&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MyDashboard&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;dashboard&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addWidgets&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;GraphWidget&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Application Metrics&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="c1"&gt;// New search expression support&lt;/span&gt;
    &lt;span class="na"&gt;searchExpression&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;SEARCH(&lt;/span&gt;&lt;span class="se"&gt;\'&lt;/span&gt;&lt;span class="s1"&gt;{AWS/Lambda,FunctionName} MetricName="Duration"&lt;/span&gt;&lt;span class="se"&gt;\'&lt;/span&gt;&lt;span class="s1"&gt;)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="c1"&gt;// Enhanced metric visibility controls&lt;/span&gt;
    &lt;span class="na"&gt;left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Metric&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;AWS/Lambda&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;metricName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Duration&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="c1"&gt;// New properties for better control&lt;/span&gt;
        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;duration-metric&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;visible&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;}),&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  CLI Enhancements &lt;a&gt;
&lt;/a&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Enhanced Diff Command with Move Detection &lt;a&gt;
&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;The cdk diff command now intelligently detects when resources are moved rather than deleted and recreated, providing clearer insights into your infrastructure changes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Enable move detection in diff output&lt;/span&gt;
cdk diff —include-moves

&lt;span class="c"&gt;# Example output now shows:&lt;/span&gt;

Stack Service
Resources
&lt;span class="o"&gt;[&lt;/span&gt;+] AWS::CloudWatch::Alarm SuccessRate SuccessRateAB36B766 &lt;span class="o"&gt;(&lt;/span&gt;OR move from Messaging.SuccessRateAB36B766 via refactoring&lt;span class="o"&gt;)&lt;/span&gt;

Stack Messaging
Resources
&lt;span class="o"&gt;[&lt;/span&gt;-] AWS::CloudWatch::Alarm SuccessRate SuccessRateAB36B766 destroy &lt;span class="o"&gt;(&lt;/span&gt;OR move to Service.SuccessRateAB36B766 via refactoring&lt;span class="o"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Feature Flag Management &lt;a&gt;
&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;The AWS CDK uses feature flags to enable potentially breaking behaviors in a release. Flags are stored as Context values and the AWS CDK values in cdk.json or (~/.cdk.json). The new feature flag management allows you to configure individual flags more easily. This requires aws-cdk-lib version &amp;gt;= 2.209.0.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Modify a specific feature flag&lt;/span&gt;
cdk flags &lt;span class="nt"&gt;--unstable&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;flags &lt;span class="nt"&gt;--set&lt;/span&gt; @aws-cdk/aws-redshift:columnId &lt;span class="nt"&gt;--value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"true"&lt;/span&gt;

&lt;span class="c"&gt;# View all active and missing feature flags&lt;/span&gt;
cdk flags &lt;span class="nt"&gt;--unstable&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;flags &lt;span class="nt"&gt;--all&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Documentation Changes &lt;a&gt;
&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;A new way to contribute to the &lt;a href="https://docs.aws.amazon.com/cdk/v2/guide/home.html" rel="noopener noreferrer"&gt;AWS CDK Developer Guide&lt;/a&gt; - Now, any page on the Dev Guide website has an “Edit this page on GitHub” link that takes you directly to the source-of-truth file in &lt;a href="https://github.com/awsdocs/aws-cdk-guide/tree/main" rel="noopener noreferrer"&gt;aws-cdk-guide GitHub&lt;/a&gt; repository.&lt;/p&gt;

&lt;h2&gt;
  
  
  Community and Content Highlights&lt;a&gt;
&lt;/a&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Contributor Highlight
&lt;/h3&gt;

&lt;p&gt;HUGE thanks to &lt;a href="https://github.com/aws/aws-cdk/issues?q=is%3Apr+author%3Aphuhung273" rel="noopener noreferrer"&gt;Hung Tran&lt;/a&gt; for 6 merged PRs in July! They made multiple high impact contributions including Bedrock models, ECS Windows 2025 AMI, Lambda insights versions. We also celebrate &lt;a href="https://github.com/mazyu36" rel="noopener noreferrer"&gt;mazyu36&lt;/a&gt;, &lt;a href="https://github.com/Tietew" rel="noopener noreferrer"&gt;Tietew&lt;/a&gt; and &lt;a href="https://github.com/badmintoncryer" rel="noopener noreferrer"&gt;badmintoncryer&lt;/a&gt; for their impactful contributions to the CDK.&lt;/p&gt;

&lt;h3&gt;
  
  
  Community Events
&lt;/h3&gt;

&lt;p&gt;The AWS Community in Japan held a &lt;a href="https://jawsug-cdk.connpass.com/event/356357/" rel="noopener noreferrer"&gt;CDK Conference&lt;/a&gt; in July that was attended by over 500 people (&lt;a href="https://www.youtube.com/watch?v=id9i5nCeqfI" rel="noopener noreferrer"&gt;video link&lt;/a&gt;). Many thanks to the JAWS community organizers for running this event. Some of the popular sessions were (content is in Japanese):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://jawsug-cdk.connpass.com/event/356362/" rel="noopener noreferrer"&gt;CDK Contribution Workshop&lt;/a&gt; by &lt;a href="https://x.com/365_step_tech" rel="noopener noreferrer"&gt;Kenta Goto&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://speakerdeck.com/tomoki10/cdk-init-generated-files" rel="noopener noreferrer"&gt;What Are All Those Files Generated by cdk init?&lt;/a&gt; by &lt;a href="https://x.com/tmk2154" rel="noopener noreferrer"&gt;Tomoki Sato&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://speakerdeck.com/yoshimi0227/anomcptute-donnachu-li-siteruno-aws-cdkdenokai-fa-debian-li-naaws-mcp-serverste-ji" rel="noopener noreferrer"&gt;A Special Feature on Useful AWS MCP Servers for AWS CDK Development&lt;/a&gt; by &lt;a href="https://x.com/yoshimi0227_" rel="noopener noreferrer"&gt;Yoshimi Maehara&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://speakerdeck.com/fossamagna/how-to-use-the-aws-cdk-toolkit-library-as-known-from-amplify-gen2" rel="noopener noreferrer"&gt;Learning from Amplify Gen2: How to Use the AWS CDK Toolkit Library &lt;/a&gt; by &lt;a href="https://x.com/fossamagna" rel="noopener noreferrer"&gt;Masahiko Murakami&lt;/a&gt; &lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Community published content
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://dev.to/aws-builders/do-you-really-know-the-difference-between-l1-l2-and-l3-cdk-constructs-i43"&gt;Do You Really Know the Difference Between L1, L2, and L3 CDK Constructs?&lt;/a&gt; by Yusuf Adeyemo&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/aws-heroes/how-to-choose-validation-approaches-in-aws-cdk-2ji3"&gt;How to Choose Validation Approaches in AWS CDK&lt;/a&gt; by Kenta Goto&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://medium.com/@robert_23618/structuring-and-refactoring-aws-cdk-projects-best-practices-and-patterns-6b54cbfba788" rel="noopener noreferrer"&gt;Structuring and Refactoring AWS CDK Projects: Best Practices and Patterns&lt;/a&gt; by Robert Dahlborg&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Feedback
&lt;/h2&gt;

&lt;p&gt;We continue to value your feedback and contributions. If you encounter any issues or have suggestions for improvements, please:&lt;/p&gt;

&lt;p&gt;• Report issues on our &lt;a href="https://github.com/aws/aws-cdk/issues" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;&lt;br&gt;
• Join discussions in our &lt;a href="https://join.slack.com/t/cdk-dev/shared_invite/zt-37hzafo82-8x6OQ3voSlMHd2DUG1puzw" rel="noopener noreferrer"&gt;community Slack&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The AWS CDK team is committed to making infrastructure as code more accessible, powerful, and enjoyable. These July updates represent significant steps forward in that mission, with enhanced AWS service support, improved developer experience,&lt;br&gt;
and better tooling.&lt;/p&gt;

&lt;p&gt;Happy coding with CDK! &lt;/p&gt;

</description>
      <category>infrastructureascode</category>
      <category>aws</category>
      <category>cdk</category>
      <category>devtools</category>
    </item>
    <item>
      <title>AWS CDK in June</title>
      <dc:creator>Praneeta Prakash</dc:creator>
      <pubDate>Tue, 08 Jul 2025 11:33:05 +0000</pubDate>
      <link>https://forem.com/aws/aws-cdk-in-june-2fo4</link>
      <guid>https://forem.com/aws/aws-cdk-in-june-2fo4</guid>
      <description>&lt;h3&gt;
  
  
  Table of Contents
&lt;/h3&gt;

&lt;p&gt;CDK Updates&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Node.js Runtime Updates
&lt;/li&gt;
&lt;li&gt;  CDK Migrate Improvements
&lt;/li&gt;
&lt;li&gt;  integ-runner Toolkit-Lib Engine
&lt;/li&gt;
&lt;li&gt;  AWS Blogs
&lt;/li&gt;
&lt;li&gt;  Request for Comments (RFCs)
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Community and Content Highlights&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Open Source tools built by the community
&lt;/li&gt;
&lt;li&gt;  Content by the Community
&lt;/li&gt;
&lt;li&gt;  Community Contributions to the CDK
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Writing these posts are the highlight of my month - it is incredibly satisfying to see all the work the team and community did to collectively improve our experience with managing infrastructure on AWS. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/aws/aws-cdk" rel="noopener noreferrer"&gt;AWS CDK&lt;/a&gt; is an open source software development framework to define your infrastructure in code. If you are new to CDK, I recommend &lt;a href="https://docs.aws.amazon.com/cdk/v2/guide/home.html" rel="noopener noreferrer"&gt;starting with AWS docs&lt;/a&gt;. You can also read some of the popular posts from the community on &lt;a href="https://cdk.dev/posts" rel="noopener noreferrer"&gt;https://cdk.dev/posts&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  CDK Updates &lt;a&gt;
&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;We made a bunch of stability improvements in June. Here are some of the key takeaways - &lt;/p&gt;

&lt;h3&gt;
  
  
  Node.js Runtime Updates &lt;a&gt;
&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;This month marked an important milestone in our Node.js support strategy. We officially dropped support for Node.js 14 and 16, aligning with AWS's announced end-of-support timeline. Additionally, the aws-cdk bundle now targets Node.js 18, ensuring better performance and access to modern JavaScript features.&lt;/p&gt;

&lt;h3&gt;
  
  
  CDK Migrate Improvements  &lt;a&gt;
&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;We updated the cdk-from-cfn dependency to resolve multiple bugs in the cdk migrate command, improving the reliability of CloudFormation template migrations to CDK code.&lt;/p&gt;

&lt;h3&gt;
  
  
  integ-runner Toolkit-Lib Engine &lt;a&gt;
&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;The CDK integ-runner now supports a new bundled engine that eliminates the dependency on having the CDK CLI installed. This new engine  is currently in preview and can be enabled using the &lt;code&gt;integ-runner --unstable=toolkit-lib-engine&lt;/code&gt; flag. Its direct integration with the CDK Toolkit code should provide a more consistent experience for Toolkit operations and (eventually) increase the performance. Please let us know your feedback or if you encounter issues.&lt;/p&gt;

&lt;h3&gt;
  
  
  AWS Blogs &lt;a&gt;
&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Here are AWS blogs launched in June that help builders on CDK get started with different AWS services.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://aws.amazon.com/blogs/machine-learning/streamline-personalization-development-how-automated-ml-workflows-accelerate-amazon-personalize-implementation/" rel="noopener noreferrer"&gt;Streamline personalization development: How automated ML workflows accelerate Amazon Personalize implementation&lt;/a&gt; (06/02/2025) by Reagan Rosario and Nensi Hakobjanyan&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://aws.amazon.com/blogs/media/improve-operational-processes-for-aws-elemental-mediaconnect-using-aws-cdk/" rel="noopener noreferrer"&gt;Improve operational processes for AWS Elemental MediaConnect using AWS CDK&lt;/a&gt; (06/12/2025) by Jamie Mullan&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://aws.amazon.com/blogs/devops/announcing-the-new-aws-cdk-eks-v2-l2-constructs/" rel="noopener noreferrer"&gt;Announcing the new AWS CDK EKS v2 L2 Constructs&lt;/a&gt; (06/19/2025) by Matteo Luigi Restelli&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Request for Comments (RFCs) &lt;a&gt;
&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;We rely on your feedback during development. RFCs are our preferred way of sharing early designs on features. Please feel free to upvote and add your comments on &lt;a href="https://github.com/aws/aws-cdk-rfcs/issues?q=is%3Aissue%20state%3Aopen%20label%3Astatus%2Fproposed" rel="noopener noreferrer"&gt;any open RFCs here&lt;/a&gt;. We are currently looking for feedback on -&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/aws/aws-cdk-rfcs/blob/6f3d190a7420dbef687aada72ca6bde2cab4289f/text/0745-user-provided-cdk-init-templates.md" rel="noopener noreferrer"&gt;User-Provided cdk init Templates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/aws/aws-cdk-rfcs/pull/730/files?short_path=0648522#diff-0648522cac7327cd054e55fae9f4dce024d672c13b9315db8caac8e0d0d1d1de" rel="noopener noreferrer"&gt;AWS Elemental MediaPackage L2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/aws/aws-cdk/issues/34892" rel="noopener noreferrer"&gt;Anonymized telemetry in CDK CLI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Community and Content Highlights &lt;a&gt;
&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;I want to start with our &lt;strong&gt;community updates&lt;/strong&gt; - we had our first Community Meeting! Thank you for the survey responses, we will be announcing the next meeting soon via &lt;a href="https://github.com/aws/aws-cdk/issues?q=state%3Aopen%20label%3A%22community-meeting%22" rel="noopener noreferrer"&gt;GitHub Issue&lt;/a&gt; and &lt;a href="https://join.slack.com/t/cdk-dev/shared_invite/zt-37hzafo82-8x6OQ3voSlMHd2DUG1puzw" rel="noopener noreferrer"&gt;CDK slack&lt;/a&gt;. We love to highlight demos from the community on open-source tools built on CDK. Here are a couple of much loved community-built open-source tooling, give them a star!&lt;/p&gt;

&lt;h3&gt;
  
  
  Open Source tools built by the community  &lt;a&gt;
&lt;/a&gt;
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Author&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/ran-isenberg/aws-lambda-handler-cookbook" rel="noopener noreferrer"&gt;aws-lambda-handler-cookbook&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;provides a working, open source based, AWS Lambda handler skeleton Python code including deployment code with CDK and a pipeline.&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/ran-isenberg" rel="noopener noreferrer"&gt;&lt;strong&gt;Ran Isenberg&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/udondan/iam-floyd" rel="noopener noreferrer"&gt;iam-floyd&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Fluent-interface generator for AWS IAM policy statements, covering all services/actions/conditions&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/udondan" rel="noopener noreferrer"&gt;&lt;strong&gt;Daniel Schroeder&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/IamFlowZ/safe-ts-env" rel="noopener noreferrer"&gt;safe-ts-env&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A TypeScript library that provides type-safe environment configuration&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/IamFlowZ" rel="noopener noreferrer"&gt;&lt;strong&gt;Dakota Lewallen&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Content by the Community  &lt;a&gt;
&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Among blogposts published by our community, I would love to call out &lt;a href="https://lockhead.info/blog/20250617-setting-up-a-static-page-cross-account" rel="noopener noreferrer"&gt;How to automatically set up a website on AWS behind a real domain with AWS CloudFront and cross account roles&lt;/a&gt; by our DevTools Hero &lt;a href="https://bsky.app/profile/lockhead.dev" rel="noopener noreferrer"&gt;&lt;strong&gt;Johannes Koch&lt;/strong&gt;&lt;/a&gt;. This addresses a common issue enterprises run into, please have a read.&lt;/p&gt;

&lt;h3&gt;
  
  
  Community Contributions to the CDK  &lt;a&gt;
&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;This month, we applaud the helpful contributions made by &lt;a href="https://github.com/phuhung273" rel="noopener noreferrer"&gt;&lt;strong&gt;Hung Tran&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Added support for uv package manager in Lambda Python functions on &lt;a href="https://github.com/aws/aws-cdk/pull/33880" rel="noopener noreferrer"&gt;33880&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Add support for engineLifecycleSupport configuration in L2/L3 constructs for RDS Instances &lt;a href="https://github.com/aws/aws-cdk/pull/34719" rel="noopener noreferrer"&gt;34719&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Huge thanks to all our community contributors!&lt;/p&gt;

&lt;p&gt;Thanks for your time! Feel free to reach out to the CDK team on our &lt;a href="https://join.slack.com/t/cdk-dev/shared_invite/zt-37hzafo82-8x6OQ3voSlMHd2DUG1puzw" rel="noopener noreferrer"&gt;Slack channel&lt;/a&gt; with any questions. Happy coding! 🚀&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cdk</category>
      <category>infrastructureascode</category>
      <category>devtools</category>
    </item>
    <item>
      <title>AWS CDK in Action — May 2025: Empowered Deployments, Governance, and Community</title>
      <dc:creator>Praneeta Prakash</dc:creator>
      <pubDate>Fri, 13 Jun 2025 02:02:53 +0000</pubDate>
      <link>https://forem.com/aws/aws-cdk-in-action-may-2025-empowered-deployments-governance-and-community-1gdb</link>
      <guid>https://forem.com/aws/aws-cdk-in-action-may-2025-empowered-deployments-governance-and-community-1gdb</guid>
      <description>&lt;p&gt;In May 2025, &lt;a href="https://docs.aws.amazon.com/cdk/v2/guide/home.html" rel="noopener noreferrer"&gt;AWS CDK&lt;/a&gt; introduced enhancements—especially around the Toolkit Library—to help you build custom tools, enable best practices, and automatic drift detection. Here are some of the top launches from CDK in May.&lt;/p&gt;

&lt;h2&gt;
  
  
  1: Programmatic Access with the Toolkit Library (GA)
&lt;/h2&gt;

&lt;p&gt;The CDK Toolkit Library enables you to perform CDK actions programmatically through code instead of using CLI commands. You can use this library to create custom tools, build specialized CLI applications, and integrate CDK capabilities into your development workflows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Getting Started with the Toolkit Library
&lt;/h3&gt;

&lt;p&gt;The following example shows how to create and deploy a simple S3 bucket using the CDK Toolkit Library:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Import required packages&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Toolkit&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@aws-cdk/toolkit-lib&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Stack&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws-cdk-lib&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;s3&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws-cdk-lib/aws-s3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Create and configure the CDK Toolkit&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;toolkit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Toolkit&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Create a cloud assembly source with an inline app&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cloudAssemblySource&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;toolkit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromAssemblyBuilder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;App&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;stack&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Stack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;SimpleStorageStack&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Create an S3 bucket in the stack&lt;/span&gt;
&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MyFirstBucket&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="na"&gt;versioned&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;synth&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Deploy the stack&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;toolkit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;deploy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cloudAssemblySource&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use the Toolkit Library to build robust, integrated CI/CD pipelines, developer tools, or dashboards—no CLI wrappers required. &lt;a href="https://docs.aws.amazon.com/cdk/v2/guide/toolkit-library.html" rel="noopener noreferrer"&gt;Read more here&lt;/a&gt;. Keep reading to see how AWS Amplify uses toolkits to improve developer experience!&lt;/p&gt;

&lt;h2&gt;
  
  
  2: Ensuring Reliability with Drift Detection
&lt;/h2&gt;

&lt;p&gt;Imagine shipping a small tag update directly in the console—only to later discover that a stack's configuration no longer matches your CDK code. The cdk drift command empowers you to identify these out-of-band changes before they impact production.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How it works: cdk drift uses CloudFormation’s Detect Stack Drift API to compare your deployed stack against its CDK-defined template.&lt;/li&gt;
&lt;li&gt;Usage in CI: npx cdk drift --fail checks for drift and fails if discrepancies are found.&lt;/li&gt;
&lt;li&gt;Programmatic Access: You can also call Toolkit.drift() programmatically via the Toolkit Library, enabling integrated drift checks in custom scripts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By proactively detecting drift, you reduce unexpected downtime and maintain confidence in your deployments. &lt;a href="https://docs.aws.amazon.com/cdk/v2/guide/ref-cli-cmd-drift.html" rel="noopener noreferrer"&gt;Read more here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  3: Enable Best-Practices with Property Injection (Preview)
&lt;/h2&gt;

&lt;p&gt;CDK launched Property Injection so your organization can standardize default construct properties—providing a template for builders to follow best practices while retaining full flexibility to override. Builders can import these recommended defaults into their app, while having the flexibility to override them if needed.&lt;/p&gt;

&lt;p&gt;First, create a property injector for Amazon S3 buckets:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;IPropertyInjector&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;InjectionContext&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws-cdk-lib&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;BucketProps&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;BlockPublicAccess&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws-cdk-lib/aws-s3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SecureBucketDefaults&lt;/span&gt; &lt;span class="k"&gt;implements&lt;/span&gt; &lt;span class="nx"&gt;IPropertyInjector&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="nx"&gt;constructUniqueId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;constructUniqueId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PROPERTY_INJECTION_ID&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;inject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;originalProps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;BucketProps&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;_context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;InjectionContext&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;BucketProps&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// Set security defaults&lt;/span&gt;
      &lt;span class="na"&gt;blockPublicAccess&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;BlockPublicAccess&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;BLOCK_ALL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;enforceSSL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

      &lt;span class="c1"&gt;// Include original props to allow overrides&lt;/span&gt;
      &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;originalProps&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, use the injector in your CDK application:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Stack&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws-cdk-lib&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Bucket&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws-cdk-lib/aws-s3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;SecureBucketDefaults&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./secure-bucket-defaults&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Attach injectors when creating the App&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;App&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;propertyInjectors&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;SecureBucketDefaults&lt;/span&gt;&lt;span class="p"&gt;()]&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;stack&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Stack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MyStack&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// This bucket automatically gets the default properties&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;myBucket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MyBucket&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Apply injectors at the App, Stage, or Stack level. &lt;a href="https://docs.aws.amazon.com/cdk/v2/guide/blueprints.html" rel="noopener noreferrer"&gt;Read more here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  4: AWS Amplify CDK Toolkit-Powered Sandboxes
&lt;/h2&gt;

&lt;p&gt;Amplify’s sandbox now integrates with the CDK Toolkit Library directly (PR #2503). CDK Toolkit emits structured JSON events for synth, diff, deploy, etc.&lt;br&gt;
Because the Toolkit Library returns typed results, Amplify (or any other tool calling CDK) no longer has to parse raw text - and can take full control of their own output and presentation. &lt;a href="https://aws.amazon.com/about-aws/whats-new/2025/04/aws-amplify-developer-tooling-refined-output-cdk-style-notices/" rel="noopener noreferrer"&gt;Read more here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5: Community stars
&lt;/h2&gt;

&lt;p&gt;Collaboration fuels innovation. In May, two community contributions stood out:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://github.com/warfox" rel="noopener noreferrer"&gt;Deepu Mohan Puthrote&lt;/a&gt; contributed OidcProviderNativeConstruct &lt;a href="https://github.com/aws/aws-cdk/pull/28634" rel="noopener noreferrer"&gt;here&lt;/a&gt;. Thanks for working with the CDK team on getting this important feature in!&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/go-to-k" rel="noopener noreferrer"&gt;Kenta Goto&lt;/a&gt;, one of our top community contributors and AWS dev tools Heroes, wrote a very helpful article on &lt;a href="https://dev.to/aws-heroes/using-aws-cdk-property-injectors-2mo5"&gt;property injectors in CDK&lt;/a&gt;. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Want to share your story? Tag posts with #awsCDK or publish on &lt;a href="https://cdk.dev/posts" rel="noopener noreferrer"&gt;https://cdk.dev/posts&lt;/a&gt; to be featured next month.&lt;/p&gt;

&lt;p&gt;That’s the story of May 2025—building integrated tooling, enabling best practices, and celebrating community achievements. &lt;a href="https://github.com/aws/aws-cdk" rel="noopener noreferrer"&gt;Share your feedback&lt;/a&gt; and happy building! &lt;/p&gt;

</description>
      <category>aws</category>
      <category>cdk</category>
      <category>devtools</category>
      <category>infrastructureascode</category>
    </item>
  </channel>
</rss>
