Skip to content

chore(release): 2.249.0#37571

Merged
mergify[bot] merged 25 commits intov2-releasefrom
bump/2.249.0
Apr 13, 2026
Merged

chore(release): 2.249.0#37571
mergify[bot] merged 25 commits intov2-releasefrom
bump/2.249.0

Conversation

@aws-cdk-automation
Copy link
Copy Markdown
Collaborator

@aws-cdk-automation aws-cdk-automation commented Apr 10, 2026

See CHANGELOG

mergify bot and others added 22 commits April 3, 2026 08:19
…el (#37505)

### Issue # (if applicable)

Closes #37454.

### Reason for this change

Issues created outside of GitHub issue templates (e.g., via the GitHub API, AI-assisted tools like Claude Code, or blank issue forms) never receive the `needs-triage` label. Since the `issue-triage-manager` workflow in `issue-label-assign.yml` requires `needs-triage` via `included-labels`, these issues are silently skipped — no area label, no assignee, no triage visibility.

### Description of changes

Added a new lightweight workflow `.github/workflows/ensure-triage-label.yml` that:
- Triggers on `issues: [opened]`
- Checks if the newly opened issue has zero labels (`join(github.event.issue.labels.*.name, '') == ''`)
- If so, applies the `needs-triage` label using `actions/github-script@v7`

This ensures every new issue enters the triage pipeline regardless of how it was created, while preserving the existing template-based labeling for issues filed through the forms (which already have labels and won't match the `if` condition).

### Describe any new or updated permissions being added

The workflow requests `issues: write` permission, scoped only to the `ensure-triage-label` job. This is the minimum permission needed to add a label to an issue.

### Description of how you validated changes

Tested on a fork ([Abogical/aws-cdk](https://github.com/Abogical/aws-cdk)):

1. Pushed the workflow to the fork's `main` branch so it becomes active
2. Created a blank issue (no template, no labels): [Abogical#24](Abogical#24)
3. The workflow ran successfully and applied `needs-triage`: [workflow run](https://github.com/Abogical/aws-cdk/actions/runs/23898921470)

**How the workflow works:**
- When a new issue is opened, GitHub triggers the `ensure-triage-label` workflow
- The `if` condition checks whether the issue has any labels
- If the issue has no labels (blank issue / API-created), the job runs and adds `needs-triage`
- If the issue was created via a template (which pre-applies labels like `bug, needs-triage`), the condition is false and the job is skipped — no duplicate work

### Checklist
- [x] My code adheres to the [CONTRIBUTING GUIDE](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) and [DESIGN GUIDELINES](https://github.com/aws/aws-cdk/blob/main/docs/DESIGN_GUIDELINES.md)

----

*By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
)

Bumps [dawidd6/action-download-artifact](https://github.com/dawidd6/action-download-artifact) from 19 to 20.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/dawidd6/action-download-artifact/releases">dawidd6/action-download-artifact's releases</a>.</em></p>
<blockquote>
<h2>v20</h2>
<h2>What's Changed</h2>
<ul>
<li>build(deps): bump fast-xml-parser from 5.5.6 to 5.5.7 by <a href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot] in <a href="https://redirect.github.com/dawidd6/action-download-artifact/pull/387">dawidd6/action-download-artifact#387</a></li>
<li>node_modules: update by <a href="https://github.com/dawidd6"><code>@​dawidd6</code></a> in <a href="https://redirect.github.com/dawidd6/action-download-artifact/pull/388">dawidd6/action-download-artifact#388</a></li>
<li>build(deps): bump filesize from 11.0.13 to 11.0.14 by <a href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot] in <a href="https://redirect.github.com/dawidd6/action-download-artifact/pull/389">dawidd6/action-download-artifact#389</a></li>
<li>build(deps): bump brace-expansion by <a href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot] in <a href="https://redirect.github.com/dawidd6/action-download-artifact/pull/390">dawidd6/action-download-artifact#390</a></li>
<li>node_modules: update by <a href="https://github.com/dawidd6"><code>@​dawidd6</code></a> in <a href="https://redirect.github.com/dawidd6/action-download-artifact/pull/391">dawidd6/action-download-artifact#391</a></li>
<li>build(deps): bump filesize from 11.0.14 to 11.0.15 by <a href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot] in <a href="https://redirect.github.com/dawidd6/action-download-artifact/pull/392">dawidd6/action-download-artifact#392</a></li>
<li>build(deps): bump adm-zip from 0.5.16 to 0.5.17 by <a href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot] in <a href="https://redirect.github.com/dawidd6/action-download-artifact/pull/393">dawidd6/action-download-artifact#393</a></li>
<li>build(deps): bump lodash from 4.17.23 to 4.18.1 by <a href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot] in <a href="https://redirect.github.com/dawidd6/action-download-artifact/pull/394">dawidd6/action-download-artifact#394</a></li>
<li>node_modules: update by <a href="https://github.com/dawidd6"><code>@​dawidd6</code></a> in <a href="https://redirect.github.com/dawidd6/action-download-artifact/pull/395">dawidd6/action-download-artifact#395</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/dawidd6/action-download-artifact/compare/v19...v20">https://github.com/dawidd6/action-download-artifact/compare/v19...v20</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/dawidd6/action-download-artifact/commit/8305c0f1062bb0d184d09ef4493ecb9288447732"><code>8305c0f</code></a> node_modules: update (<a href="https://redirect.github.com/dawidd6/action-download-artifact/issues/395">#395</a>)</li>
<li><a href="https://github.com/dawidd6/action-download-artifact/commit/542af03a4c0cf4c459b4e8b2fa35b47437c80224"><code>542af03</code></a> build(deps): bump lodash from 4.17.23 to 4.18.1 (<a href="https://redirect.github.com/dawidd6/action-download-artifact/issues/394">#394</a>)</li>
<li><a href="https://github.com/dawidd6/action-download-artifact/commit/1553221e5e1f1826d469ce6f0021203c83b85237"><code>1553221</code></a> build(deps): bump adm-zip from 0.5.16 to 0.5.17 (<a href="https://redirect.github.com/dawidd6/action-download-artifact/issues/393">#393</a>)</li>
<li><a href="https://github.com/dawidd6/action-download-artifact/commit/905d0ae4178f91707448cda6497ab29aed60f0c8"><code>905d0ae</code></a> build(deps): bump filesize from 11.0.14 to 11.0.15 (<a href="https://redirect.github.com/dawidd6/action-download-artifact/issues/392">#392</a>)</li>
<li><a href="https://github.com/dawidd6/action-download-artifact/commit/6fc03d0a06cbb00cfbc0812c13e257380ec0c10c"><code>6fc03d0</code></a> node_modules: update (<a href="https://redirect.github.com/dawidd6/action-download-artifact/issues/391">#391</a>)</li>
<li><a href="https://github.com/dawidd6/action-download-artifact/commit/c468997c275f42f14f940951149db92599be2030"><code>c468997</code></a> build(deps): bump brace-expansion (<a href="https://redirect.github.com/dawidd6/action-download-artifact/issues/390">#390</a>)</li>
<li><a href="https://github.com/dawidd6/action-download-artifact/commit/bad68a55736df5b49792e97c3bc811d8e30b0296"><code>bad68a5</code></a> build(deps): bump filesize from 11.0.13 to 11.0.14 (<a href="https://redirect.github.com/dawidd6/action-download-artifact/issues/389">#389</a>)</li>
<li><a href="https://github.com/dawidd6/action-download-artifact/commit/cdf23fa8e0b0f74767dbcb6b05a2905955a47043"><code>cdf23fa</code></a> node_modules: update (<a href="https://redirect.github.com/dawidd6/action-download-artifact/issues/388">#388</a>)</li>
<li><a href="https://github.com/dawidd6/action-download-artifact/commit/225d1f61e2b09f7ce86672132c26b43934a84376"><code>225d1f6</code></a> build(deps): bump fast-xml-parser from 5.5.6 to 5.5.7 (<a href="https://redirect.github.com/dawidd6/action-download-artifact/issues/387">#387</a>)</li>
<li>See full diff in <a href="https://github.com/dawidd6/action-download-artifact/compare/v19...v20">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=dawidd6/action-download-artifact&package-manager=github_actions&previous-version=19&new-version=20)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)


</details>
This version of the jsii compiler reduces the warnings file by 5MB and doesn't import from the actual libraries anymore.

----

*By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
We had files files in the `exports` table in `package.json`. Remove them, and add a validation script to make sure no nonexistant files are being advertised.

----

*By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
…37543)

Re-roll of #37285.

Add `traceProperty` utility that records metadata with stack traces on CfnResource property setters when CDK_DEBUG=1 is enabled.

Update spec2cdk code generation to emit getter/setter pairs (instead of plain fields) for mutable L1 properties, calling traceProperty in each setter to capture the call site.

The main difference in comparison with the previous attempt is that this time we are using the backing property (`this._propertyName`) instead of the getter (`this.propertyName`) in `cfnProperties()`. To make sure this regression doesn't happen again, there is a new test that verifies that we can create an L1 without deprecated properties.

----

*By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
### Reason for this change


Similar to `spec2mixins`, `spec2logs` code is tightly coupled with `spec2cdk` and has been relocated there. 
See #37204 for more context. 

### Description of changes


log-delivery-mixin generator, tests, and builders have been relocated to `spec2cdk`. 

### Description of how you validated changes



### Checklist
- [x] My code adheres to the [CONTRIBUTING GUIDE](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) and [DESIGN GUIDELINES](https://github.com/aws/aws-cdk/blob/main/docs/DESIGN_GUIDELINES.md)

----

*By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
### Issue # (if applicable)
Close #35859

### Reason for this change
- Keep codebase clean
- Prevent the case when adding a new feature to ECS but forgot to do the same for EKS
- Streamline future change, eg: #35839
- A foundation to also reduce duplication for `defaultInstanceClasses, useOptimalInstanceClasses, allocationStrategy, spotBidPercentage, instanceRole, launchTemplate, minvCpus, placementGroup` and their related functions. I don't want to submit a huge refactor PR directly.

### Description of changes
Init base EC2 class for ECS and EKS, start with only minimal things:
- property instanceTypes
- property instanceClasses
- method addInstanceType
- method addInstanceClass

### Description of how you validated changes
Unit + Integ

### Checklist
- [x] My code adheres to the [CONTRIBUTING GUIDE](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) and [DESIGN GUIDELINES](https://github.com/aws/aws-cdk/blob/main/docs/DESIGN_GUIDELINES.md)

----

*By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
Refactor some integration tests, replacing the usage of some deprecated APIs with their suggested counterpart.

----

*By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
…ConstructReflection classes (#37352)

### Reason for this change

The generic reflection helpers in `core/lib/helpers-internal/reflections.ts` were a collection of loosely related free functions (`resolvedGet`, `resolvedExists`, `resolvedEquals`, `findClosestRelatedResource`, `findL1FromRef`, `findParentL2Scope`). The naming used L1/L2 jargon, the signatures were inconsistent between functions, and the property traversal logic was duplicated three times. The free-function style also made it harder to discover the available reflection capabilities.

### Description of changes

This refactors the reflection helpers into two focused classes with a consistent API shape, each in its own file.

`PropertyReflection` provides token-aware property inspection on `CfnResource` instances. A single `of(resource, path)` call traverses the dot-separated path once, and the result can be queried with `.exists()`, `.equals(expected)`, or `.get(fallback)`. This replaces the three separate `resolvedGet`/`resolvedExists`/`resolvedEquals` functions that each re-traversed the path independently. The traversal now treats `null` the same as `undefined` (both are "missing") for consistency.

`ConstructReflection` provides construct tree search utilities. `ConstructReflection.of(construct)` creates an instance, then `.findCfnResource(matcher)` and `.findRelatedCfnResource(matcher)` search for CfnResources using a shared `ICfnResourceMatcher` interface. The `defaultChildOwner` getter replaces the old `findParentL2Scope` function. The method signatures are aligned and jsii-compatible — no generics on the public API, and the matcher interface can be implemented in any jsii language.

The duplicated KMS key matching logic (identical across S3, DynamoDB, SQS, and SNS) is extracted into a private `CfnKeyMatcher` class in `aws-kms/lib/private/`.

All internal consumers are updated. The old `reflections.ts` file is deleted.

### Describe any new or updated permissions being added

None.

### Description of how you validated changes

All existing tests pass. The test file is split to match the new file structure: `property-reflection.test.ts` (33 tests) covers `PropertyReflection`, and `construct-reflection.test.ts` (17 tests) covers `ConstructReflection`. The `bucket-reflection.test.ts` suite (32 tests) continues to provide integration-level coverage through `BucketReflection`.

### Checklist
- [x] My code adheres to the [CONTRIBUTING GUIDE](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) and [DESIGN GUIDELINES](https://github.com/aws/aws-cdk/blob/main/docs/DESIGN_GUIDELINES.md)

----

*By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
More updates to integ tests to get rid of deprecated API usage.

----

*By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
…roup across 1 directory (#37553)

Bumps the npm_and_yarn group with 1 update in the / directory: [basic-ftp](https://github.com/patrickjuchli/basic-ftp).

Updates `basic-ftp` from 5.2.0 to 5.2.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/patrickjuchli/basic-ftp/releases">basic-ftp's releases</a>.</em></p>
<blockquote>
<h2>5.2.1</h2>
<ul>
<li>Fixed: Reject control character injection attempts using paths. See <a href="https://github.com/patrickjuchli/basic-ftp/security/advisories/GHSA-chqc-8p9q-pq6q">https://github.com/patrickjuchli/basic-ftp/security/advisories/GHSA-chqc-8p9q-pq6q</a>.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/patrickjuchli/basic-ftp/blob/master/CHANGELOG.md">basic-ftp's changelog</a>.</em></p>
<blockquote>
<h2>5.2.1</h2>
<ul>
<li>Fixed: Reject control character injection attempts using paths. See <a href="https://github.com/patrickjuchli/basic-ftp/security/advisories/GHSA-chqc-8p9q-pq6q">https://github.com/patrickjuchli/basic-ftp/security/advisories/GHSA-chqc-8p9q-pq6q</a>.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/patrickjuchli/basic-ftp/commit/ba40f9d60e1ff7b63de5d5bb272ae317e5382689"><code>ba40f9d</code></a> Update dev dependencies</li>
<li><a href="https://github.com/patrickjuchli/basic-ftp/commit/6b0008b7cf5ca0b81d31604d15a9ff0bcbf1a5db"><code>6b0008b</code></a> Bump version</li>
<li><a href="https://github.com/patrickjuchli/basic-ftp/commit/2ecc8e2c500c5234115f06fd1dbde1aa03d70f4b"><code>2ecc8e2</code></a> Reject control character injection attempts using paths</li>
<li><a href="https://github.com/patrickjuchli/basic-ftp/commit/515d21fee0b05be5ab934af5acb79d1d977e8026"><code>515d21f</code></a> Update security policy and reporting instructions</li>
<li><a href="https://github.com/patrickjuchli/basic-ftp/commit/9744254b56061159751aee1b86ddd0f2ecef32ce"><code>9744254</code></a> Link to security advisory</li>
<li>See full diff in <a href="https://github.com/patrickjuchli/basic-ftp/compare/v5.2.0...v5.2.1">compare view</a></li>
</ul>
</details>
<details>
<summary>Maintainer changes</summary>
<p>This version was pushed to npm by <a href="https://www.npmjs.com/~patrickjuchli">patrickjuchli</a>, a new releaser for basic-ftp since your current version.</p>
</details>
<details>
<summary>Install script changes</summary>
<p>This version adds <code>prepare</code> script that runs during installation. Review the package contents before updating.</p>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=basic-ftp&package-manager=npm_and_yarn&previous-version=5.2.0&new-version=5.2.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions
You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/aws/aws-cdk/network/alerts).

</details>
The spec-update workflow was missing @aws-cdk/cfn-property-mixins in its
gen step. When new services are added (e.g. NovaAct, SecurityAgent), the
cfn-property-mixins gen script updates package.json exports, but since
those changes weren't included in the commit, the PR build fails with
uncommitted changes detected by git diff-index.

This is the same class of issue fixed in #36300 for mixins-preview.
…37556)

### Issue

Fixes the recurring build failure on L1 spec update PRs (e.g. #37530)
where `git diff-index` detects uncommitted changes in
`packages/@aws-cdk/cfn-property-mixins/package.json`.

### Reason for this change

When `@aws-cdk/cfn-property-mixins` graduated from `mixins-preview` to a
standalone package in #37215, it gained its own `gen` script that
regenerates `package.json` exports from the service spec database.
However, the `spec-update.yml` workflow was never updated to include it
in the gen step.

When new CloudFormation services are added (e.g. `AWS::NovaAct`,
`AWS::SecurityAgent`), the gen script adds export entries to
`cfn-property-mixins/package.json`. Since these changes aren't included
in the automation commit, the PR build fails the `git diff-index` check.

This is the same class of issue previously fixed in #36300 for
`@aws-cdk/mixins-preview`.

### Description of changes

Added `--scope @aws-cdk/cfn-property-mixins` to the gen step in
`.github/workflows/spec-update.yml`, and added a comment explaining why
all three scopes are required.

### Description of how you validated changes

Confirmed the root cause by examining the [build logs for PR
#37530](https://github.com/aws/aws-cdk/actions/runs/24179400660/job/70568296044)
which show exactly `cfn-property-mixins/package.json` with 2 uncommitted
insertions.

### Checklist
- [x] My code adheres to the [CONTRIBUTING
GUIDE](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) and
[DESIGN
GUIDELINES](https://github.com/aws/aws-cdk/blob/main/docs/DESIGN_GUIDELINES.md)

----

*By submitting this pull request, I confirm that my contribution is made
under the terms of the Apache-2.0 license*
…eventPattern (#37548)

### Issue # (if applicable)

Closes #<issue number here>.

### Reason for this change

Standalone event pattern static methods had redundant names(e.g.,`AWSAPICallViaCloudTrail.awsAPICallViaCloudTrailPattern()`) where the class name was repeated in the method name. Renaming to `AWSAPICallViaCloudTrail.eventPattern()` makes the API cleaner 

### Description of changes

- Renamed all standalone (static) event pattern methods from <className>Pattern() to eventPattern() (e.g., `ObjectCreated.objectCreatedPattern()` → `ObjectCreated.eventPattern()`)
- Updated tests in test/events/aws-s3/events.test.ts to use the new method names
- Updated README examples and documentation to reflect the rename


### Describe any new or updated permissions being added


N/A

### Description of how you validated changes


yarn run build passes with 0 errors.


### Checklist
- [ ] My code adheres to the [CONTRIBUTING GUIDE](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) and [DESIGN GUIDELINES](https://github.com/aws/aws-cdk/blob/main/docs/DESIGN_GUIDELINES.md)

----

*By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
…37558)

### Issue

Fixes the recurring build failure on L1 spec update PRs (e.g. #37530) where `git diff-index` detects uncommitted changes in `packages/@aws-cdk/cfn-property-mixins/package.json`.

Supersedes #37556 which added `cfn-property-mixins` to the gen step but didn't fix the ordering issue.

### Root Cause: Race Condition in Parallel Gen

The spec-update workflow runs `lerna run gen` for all three packages (`aws-cdk-lib`, `@aws-cdk/mixins-preview`, `@aws-cdk/cfn-property-mixins`) in a single command. Lerna executes them **in parallel**. This creates a race condition:

1. **`aws-cdk-lib` gen** writes new service entries (e.g. `aws-novaact`, `aws-securityagent`) to [`scope-map.json`](https://github.com/aws/aws-cdk/blob/main/packages/aws-cdk-lib/scripts/scope-map.json) via [`writeModuleMap()`](https://github.com/aws/aws-cdk/blob/main/tools/%40aws-cdk/spec2cdk/lib/module-topology.ts#L126)

2. **`cfn-property-mixins` gen** reads `scope-map.json` via [`loadModuleMap()`](https://github.com/aws/aws-cdk/blob/main/tools/%40aws-cdk/spec2cdk/lib/module-topology.ts#L119-L121) to determine which services to generate exports for — see the [filter at line 23](https://github.com/aws/aws-cdk/blob/main/tools/%40aws-cdk/spec2cdk/lib/cfn-prop-mixins/generate.ts#L23): `if (moduleMap[service.name])`

3. **`mixins-preview` gen** has the [same dependency](https://github.com/aws/aws-cdk/blob/main/packages/%40aws-cdk/mixins-preview/scripts/spec2logs/generate.ts#L6) on `scope-map.json`

### Evidence from workflow run [#354](https://github.com/aws/aws-cdk/actions/runs/24186251521/job/70591637015)

The gen step logs show `cfn-property-mixins` finished **before** `aws-cdk-lib`:

```
10:53:00 @aws-cdk/cfn-property-mixins:   Services: 278    ← finished first, read stale scope-map.json
10:53:05 aws-cdk-lib:                     Services: 282    ← finished second, wrote updated scope-map.json
```

`cfn-property-mixins` generated for 278 services because it read `scope-map.json` before `aws-cdk-lib` added the 4 new service entries. During the CI build, `cdk-build` runs gen again with the updated `scope-map.json`, producing 2 new export entries in `package.json` that weren't in the commit → `git diff-index` fails.

### Description of changes

Split the single `lerna run gen` command into two sequential steps:
1. **Generate L1 code** — runs gen for `aws-cdk-lib` only, which updates `scope-map.json`
2. **Generate mixins** — runs gen for `mixins-preview` and `cfn-property-mixins`, which now read the updated `scope-map.json`

### Description of how you validated changes

- Traced the full dependency chain through the codebase (links above)
- Confirmed the race condition from [workflow run #354 logs](https://github.com/aws/aws-cdk/actions/runs/24186251521/job/70591637015) showing 278 vs 282 services
- Confirmed the [CI build failure logs](https://github.com/aws/aws-cdk/actions/runs/24186453052/job/70592307695) show the same `cfn-property-mixins/package.json | 2 ++` after the workflow re-run

### Checklist
- [x] My code adheres to the [CONTRIBUTING GUIDE](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) and [DESIGN GUIDELINES](https://github.com/aws/aws-cdk/blob/main/docs/DESIGN_GUIDELINES.md)

----

*By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
Updates the L1 CloudFormation resource definitions with the latest changes from `@aws-cdk/aws-service-spec`
Updates the L1 CloudFormation resource definitions with the latest
changes from `@aws-cdk/aws-service-spec`

**L1 CloudFormation resource definition changes:**
```
├[~] service aws-appstream
│ └ resources
│    └[~]  resource AWS::AppStream::Stack
│       ├      - primaryIdentifier: ["Id"]
│       │      + primaryIdentifier: ["Name"]
│       └ attributes
│          └[-] Id: string
├[~] service aws-appsync
│ └ resources
│    └[~]  resource AWS::AppSync::GraphQLApi
│       └ types
│          └[~] type LogConfig
│            └ properties
│               ├ CloudWatchLogsRoleArn: - string
│               │                        + string (required)
│               └ FieldLogLevel: - string
│                                + string (required)
├[~] service aws-bedrockagentcore
│ └ resources
│    ├[~]  resource AWS::BedrockAgentCore::Evaluator
│    │  └ types
│    │     ├[+]  type CodeBasedEvaluatorConfig
│    │     │  ├      documentation: The configuration for code-based evaluation using a Lambda function.
│    │     │  │      name: CodeBasedEvaluatorConfig
│    │     │  └ properties
│    │     │     └ LambdaConfig: LambdaEvaluatorConfig (required)
│    │     ├[~] type EvaluatorConfig
│    │     │ └ properties
│    │     │    ├[+] CodeBased: CodeBasedEvaluatorConfig
│    │     │    └ LlmAsAJudge: - LlmAsAJudgeEvaluatorConfig (required)
│    │     │                   + LlmAsAJudgeEvaluatorConfig
│    │     └[+]  type LambdaEvaluatorConfig
│    │        ├      documentation: The Lambda function configuration for code-based evaluation.
│    │        │      name: LambdaEvaluatorConfig
│    │        └ properties
│    │           ├ LambdaArn: string (required)
│    │           └ LambdaTimeoutInSeconds: integer
│    └[~]  resource AWS::BedrockAgentCore::Memory
│       └ types
│          ├[~] type CustomMemoryStrategy
│          │ └ properties
│          │    └[+] NamespaceTemplates: Array<string>
│          ├[~] type EpisodicMemoryStrategy
│          │ └ properties
│          │    └[+] NamespaceTemplates: Array<string>
│          ├[~] type EpisodicOverrideReflectionConfigurationInput
│          │ └ properties
│          │    └[+] NamespaceTemplates: Array<string>
│          ├[~] type EpisodicReflectionConfigurationInput
│          │ └ properties
│          │    └[+] NamespaceTemplates: Array<string>
│          ├[~] type SemanticMemoryStrategy
│          │ └ properties
│          │    └[+] NamespaceTemplates: Array<string>
│          ├[~] type SummaryMemoryStrategy
│          │ └ properties
│          │    └[+] NamespaceTemplates: Array<string>
│          └[~] type UserPreferenceMemoryStrategy
│            └ properties
│               └[+] NamespaceTemplates: Array<string>
├[~] service aws-customerprofiles
│ └ resources
│    └[~]  resource AWS::CustomerProfiles::SegmentDefinition
│       ├ properties
│       │  └[+] SegmentSort: SegmentSort
│       └ types
│          ├[+]  type SegmentSort
│          │  ├      documentation: Defines how segments should be sorted and ordered in the results.
│          │  │      name: SegmentSort
│          │  └ properties
│          │     └ Attributes: Array<SortAttribute> (required)
│          └[+]  type SortAttribute
│             ├      documentation: Defines the characteristics and rules for sorting by a specific attribute.
│             │      name: SortAttribute
│             └ properties
│                ├ Name: string (required)
│                ├ Order: string<ASC|DESC> (required)
│                ├ DataType: string<STRING|NUMBER|DATE>
│                └ Type: string<PROFILE|CALCULATED>
├[~] service aws-datazone
│ └ resources
│    ├[~]  resource AWS::DataZone::Connection
│    │  └ types
│    │     ├[~] type ConnectionPropertiesInput
│    │     │ └ properties
│    │     │    ├[+] WorkflowsMwaaProperties: WorkflowsMwaaPropertiesInput
│    │     │    └[+] WorkflowsServerlessProperties: json
│    │     └[+]  type WorkflowsMwaaPropertiesInput
│    │        ├      documentation: Workflows MWAA Properties Input
│    │        │      name: WorkflowsMwaaPropertiesInput
│    │        └ properties
│    │           └ MwaaEnvironmentName: string
│    ├[~]  resource AWS::DataZone::Project
│    │  ├ properties
│    │  │  └[+] ResourceTags: Array<ResourceTag>
│    │  └ types
│    │     └[+]  type ResourceTag
│    │        ├      name: ResourceTag
│    │        └ properties
│    │           ├ Key: string (required)
│    │           └ Value: string (required)
│    └[~]  resource AWS::DataZone::ProjectProfile
│       ├ properties
│       │  ├[+] AllowCustomProjectResourceTags: boolean
│       │  ├[+] ProjectResourceTags: Array<ResourceTagParameter>
│       │  └[+] ProjectResourceTagsDescription: string
│       └ types
│          └[+]  type ResourceTagParameter
│             ├      name: ResourceTagParameter
│             └ properties
│                ├ Key: string (required)
│                ├ Value: string (required)
│                └ IsValueEditable: boolean (required)
├[~] service aws-devopsagent
│ └ resources
│    ├[~]  resource AWS::DevOpsAgent::AgentSpace
│    │  ├      - tagInformation: undefined
│    │  │      + tagInformation: {"tagPropertyName":"Tags","variant":"standard"}
│    │  └ properties
│    │     ├[+] KmsKeyArn: string (immutable)
│    │     └[+] Tags: Array<tag>
│    └[~]  resource AWS::DevOpsAgent::Service
│       ├      - tagInformation: undefined
│       │      + tagInformation: {"tagPropertyName":"Tags","variant":"standard"}
│       ├ properties
│       │  ├[+] KmsKeyArn: string (immutable)
│       │  └[+] Tags: Array<tag>
│       └ attributes
│          └[+] Arn: string
├[~] service aws-directoryservice
│ └ resources
│    └[~]  resource AWS::DirectoryService::MicrosoftAD
│       └      - arnTemplate: arn:${Partition}:ds:${Region}:${Account}:directory/${DirectoryId}
│              + arnTemplate: arn:${Partition}:ds:${Region}:${Account}:${DirectoryId}
├[~] service aws-dlm
│ └ resources
│    └[~]  resource AWS::DLM::LifecyclePolicy
│       └ types
│          └[~] type FastRestoreRule
│            └ properties
│               └[+] AvailabilityZoneIds: Array<string>
├[~] service aws-ec2
│ └ resources
│    └[~]  resource AWS::EC2::Instance
│       ├      - vendedLogs: undefined
│       │      + vendedLogs: [{"permissionsVersion":"V2","logType":"CONSOLE_LOGS","destinations":[{"destinationType":"S3","outputFormats":["json","plain","w3c","parquet"]},{"destinationType":"CWL","outputFormats":["plain","json"]},{"destinationType":"FH","outputFormats":["json","plain","raw"]}],"mandatoryFields":["resource_arn","event_timestamp","message"]}]
│       └ vendedLogs
│          └[+] logType: CONSOLE_LOGS
│            ├permissionsVersion: V2
│            ├destinations: [S3, CWL, FH]
│            └mandatoryFields: [resource_arn, event_timestamp, message]
├[~] service aws-ecs
│ └ resources
│    ├[~]  resource AWS::ECS::CapacityProvider
│    │  └ types
│    │     ├[~] type InstanceLaunchTemplate
│    │     │ └ properties
│    │     │    └[+] LocalStorageConfiguration: ManagedInstancesLocalStorageConfiguration
│    │     └[+]  type ManagedInstancesLocalStorageConfiguration
│    │        ├      name: ManagedInstancesLocalStorageConfiguration
│    │        └ properties
│    │           └ UseLocalStorage: boolean
│    ├[+]  resource AWS::ECS::Daemon
│    │  ├      name: Daemon
│    │  │      cloudFormationType: AWS::ECS::Daemon
│    │  │      documentation: Resource schema for AWS ECS Daemon
│    │  │      tagInformation: {"tagPropertyName":"Tags","variant":"standard"}
│    │  │      primaryIdentifier: ["DaemonArn"]
│    │  ├ properties
│    │  │  ├ ClusterArn: string (immutable)
│    │  │  ├ DaemonTaskDefinitionArn: string
│    │  │  ├ DaemonName: string (immutable)
│    │  │  ├ EnableECSManagedTags: boolean
│    │  │  ├ EnableExecuteCommand: boolean
│    │  │  ├ PropagateTags: string<DAEMON|NONE>
│    │  │  ├ CapacityProviderArns: Array<string>
│    │  │  ├ DeploymentConfiguration: DaemonDeploymentConfiguration
│    │  │  └ Tags: Array<tag>
│    │  ├ attributes
│    │  │  ├ DaemonArn: string
│    │  │  ├ DeploymentArn: string
│    │  │  ├ CreatedAt: string
│    │  │  ├ UpdatedAt: string
│    │  │  └ DaemonStatus: string<ACTIVE|DELETE_IN_PROGRESS>
│    │  └ types
│    │     ├ type DaemonAlarmConfiguration
│    │     │ ├      name: DaemonAlarmConfiguration
│    │     │ └ properties
│    │     │    ├ AlarmNames: Array<string>
│    │     │    └ Enable: boolean
│    │     └ type DaemonDeploymentConfiguration
│    │       ├      name: DaemonDeploymentConfiguration
│    │       └ properties
│    │          ├ DrainPercent: number
│    │          ├ BakeTimeInMinutes: integer
│    │          └ Alarms: DaemonAlarmConfiguration
│    └[+]  resource AWS::ECS::DaemonTaskDefinition
│       ├      name: DaemonTaskDefinition
│       │      cloudFormationType: AWS::ECS::DaemonTaskDefinition
│       │      documentation: Resource Schema describing various properties for ECS DaemonTaskDefinition
│       │      tagInformation: {"tagPropertyName":"Tags","variant":"standard"}
│       │      primaryIdentifier: ["DaemonTaskDefinitionArn"]
│       ├ properties
│       │  ├ ExecutionRoleArn: string (immutable)
│       │  ├ TaskRoleArn: string (immutable)
│       │  ├ Volumes: Array<Volume> (immutable)
│       │  ├ Memory: string (immutable)
│       │  ├ ContainerDefinitions: Array<DaemonContainerDefinition> (immutable)
│       │  ├ Family: string (immutable)
│       │  ├ Cpu: string (immutable)
│       │  └ Tags: Array<tag>
│       ├ attributes
│       │  └ DaemonTaskDefinitionArn: string
│       └ types
│          ├ type ContainerDependency
│          │ ├      name: ContainerDependency
│          │ └ properties
│          │    ├ Condition: string
│          │    └ ContainerName: string
│          ├ type DaemonContainerDefinition
│          │ ├      documentation: Container definition for daemon task definition
│          │ │      name: DaemonContainerDefinition
│          │ └ properties
│          │    ├ User: string
│          │    ├ Secrets: Array<Secret>
│          │    ├ Memory: integer
│          │    ├ Privileged: boolean
│          │    ├ StartTimeout: integer
│          │    ├ HealthCheck: HealthCheck
│          │    ├ Cpu: integer
│          │    ├ EntryPoint: Array<string>
│          │    ├ ReadonlyRootFilesystem: boolean
│          │    ├ Image: string (required)
│          │    ├ Essential: boolean
│          │    ├ LogConfiguration: LogConfiguration
│          │    ├ EnvironmentFiles: Array<EnvironmentFile>
│          │    ├ Name: string (required)
│          │    ├ FirelensConfiguration: FirelensConfiguration
│          │    ├ SystemControls: Array<SystemControl>
│          │    ├ Interactive: boolean
│          │    ├ Ulimits: Array<Ulimit>
│          │    ├ StopTimeout: integer
│          │    ├ WorkingDirectory: string
│          │    ├ MemoryReservation: integer
│          │    ├ RepositoryCredentials: RepositoryCredentials
│          │    ├ LinuxParameters: LinuxParameters
│          │    ├ RestartPolicy: RestartPolicy
│          │    ├ PseudoTerminal: boolean
│          │    ├ MountPoints: Array<MountPoint>
│          │    ├ DependsOn: Array<ContainerDependency>
│          │    ├ Command: Array<string>
│          │    └ Environment: Array<KeyValuePair>
│          ├ type Device
│          │ ├      name: Device
│          │ └ properties
│          │    ├ HostPath: string
│          │    ├ Permissions: Array<string>
│          │    └ ContainerPath: string
│          ├ type EnvironmentFile
│          │ ├      name: EnvironmentFile
│          │ └ properties
│          │    ├ Type: string
│          │    └ Value: string
│          ├ type FirelensConfiguration
│          │ ├      name: FirelensConfiguration
│          │ └ properties
│          │    ├ Options: Map<string, string>
│          │    └ Type: string
│          ├ type HealthCheck
│          │ ├      name: HealthCheck
│          │ └ properties
│          │    ├ Command: Array<string>
│          │    ├ Timeout: integer
│          │    ├ Retries: integer
│          │    ├ Interval: integer
│          │    └ StartPeriod: integer
│          ├ type HostVolumeProperties
│          │ ├      name: HostVolumeProperties
│          │ └ properties
│          │    └ SourcePath: string
│          ├ type KernelCapabilities
│          │ ├      name: KernelCapabilities
│          │ └ properties
│          │    ├ Add: Array<string>
│          │    └ Drop: Array<string>
│          ├ type KeyValuePair
│          │ ├      name: KeyValuePair
│          │ └ properties
│          │    ├ Value: string
│          │    └ Name: string
│          ├ type LinuxParameters
│          │ ├      name: LinuxParameters
│          │ └ properties
│          │    ├ Capabilities: KernelCapabilities
│          │    ├ Tmpfs: Array<Tmpfs>
│          │    ├ Devices: Array<Device>
│          │    └ InitProcessEnabled: boolean
│          ├ type LogConfiguration
│          │ ├      name: LogConfiguration
│          │ └ properties
│          │    ├ SecretOptions: Array<Secret>
│          │    ├ Options: Map<string, string>
│          │    └ LogDriver: string (required)
│          ├ type MountPoint
│          │ ├      name: MountPoint
│          │ └ properties
│          │    ├ ReadOnly: boolean
│          │    ├ SourceVolume: string
│          │    └ ContainerPath: string
│          ├ type RepositoryCredentials
│          │ ├      name: RepositoryCredentials
│          │ └ properties
│          │    └ CredentialsParameter: string
│          ├ type RestartPolicy
│          │ ├      name: RestartPolicy
│          │ └ properties
│          │    ├ IgnoredExitCodes: Array<integer>
│          │    ├ RestartAttemptPeriod: integer
│          │    └ Enabled: boolean
│          ├ type Secret
│          │ ├      name: Secret
│          │ └ properties
│          │    ├ ValueFrom: string (required)
│          │    └ Name: string (required)
│          ├ type SystemControl
│          │ ├      name: SystemControl
│          │ └ properties
│          │    ├ Value: string
│          │    └ Namespace: string
│          ├ type Tmpfs
│          │ ├      name: Tmpfs
│          │ └ properties
│          │    ├ Size: integer (required)
│          │    ├ ContainerPath: string
│          │    └ MountOptions: Array<string>
│          ├ type Ulimit
│          │ ├      name: Ulimit
│          │ └ properties
│          │    ├ SoftLimit: integer (required)
│          │    ├ HardLimit: integer (required)
│          │    └ Name: string (required)
│          └ type Volume
│            ├      name: Volume
│            └ properties
│               ├ Host: HostVolumeProperties
│               └ Name: string
├[~] service aws-eks
│ └ resources
│    └[~]  resource AWS::EKS::Nodegroup
│       ├ properties
│       │  └[+] WarmPoolConfig: WarmPoolConfig
│       └ types
│          └[+]  type WarmPoolConfig
│             ├      documentation: The warm pool configuration for the node group.
│             │      name: WarmPoolConfig
│             └ properties
│                ├ Enabled: boolean
│                ├ MaxGroupPreparedCapacity: integer
│                ├ MinSize: integer
│                ├ PoolState: string
│                └ ReuseOnScaleIn: boolean
├[~] service aws-elasticloadbalancing
│ └ resources
│    └[~]  resource AWS::ElasticLoadBalancing::LoadBalancer
│       ├ attributes
│       │  └[+] SourceSecurityGroup: SourceSecurityGroup
│       └ types
│          ├[~] type Policies
│          │ └ properties
│          │    └ Attributes: - Array<json> (required)
│          │                  + Array<PolicyItem> ⇐ Array<json> (required)
│          ├[+]  type PolicyItem
│          │  ├      name: PolicyItem
│          │  └ properties
│          │     ├ Name: string
│          │     └ Value: string
│          └[+]  type SourceSecurityGroup
│             ├      name: SourceSecurityGroup
│             └ properties
│                ├ GroupName: string
│                └ OwnerAlias: string
├[~] service aws-emr
│ └ resources
│    └[~]  resource AWS::EMR::Cluster
│       ├ properties
│       │  ├ AdditionalInfo: - json | string ⇐ json (immutable)
│       │  │                 + json (immutable)
│       │  ├ MonitoringConfiguration: (documentation changed)
│       │  ├ PlacementGroupConfigs: (documentation changed)
│       │  ├ ScaleDownBehavior: - string<TERMINATE_AT_INSTANCE_HOUR|TERMINATE_AT_TASK_COMPLETION> (immutable)
│       │  │                    + string (immutable)
│       │  └ VisibleToAllUsers: - boolean (deprecated=WARN)
│       │                       + boolean
│       └ types
│          ├[~] type CloudWatchAlarmDefinition
│          │ └ properties
│          │    ├ ComparisonOperator: - string<GREATER_THAN_OR_EQUAL|GREATER_THAN|LESS_THAN|LESS_THAN_OR_EQUAL> (required)
│          │    │                     + string (required)
│          │    ├ Statistic: - string<SAMPLE_COUNT|AVERAGE|SUM|MINIMUM|MAXIMUM>
│          │    │            + string
│          │    └ Unit: - string<NONE|SECONDS|MICRO_SECONDS|MILLI_SECONDS|BYTES|KILO_BYTES|MEGA_BYTES|GIGA_BYTES|TERA_BYTES|BITS|KILO_BITS|MEGA_BITS|GIGA_BITS|TERA_BITS|PERCENT|COUNT|BYTES_PER_SECOND|KILO_BYTES_PER_SECOND|MEGA_BYTES_PER_SECOND|GIGA_BYTES_PER_SECOND|TERA_BYTES_PER_SECOND|BITS_PER_SECOND|KILO_BITS_PER_SECOND|MEGA_BITS_PER_SECOND|GIGA_BITS_PER_SECOND|TERA_BITS_PER_SECOND|COUNT_PER_SECOND>
│          │            + string
│          ├[~] type CloudWatchLogConfiguration
│          │ ├      - documentation: Holds CloudWatch log configuration settings and metadata that specify settings like log files to monitor and where to send them.
│          │ │      + documentation: undefined
│          │ └ properties
│          │    ├ Enabled: (documentation changed)
│          │    ├ EncryptionKeyArn: (documentation changed)
│          │    ├ LogGroupName: (documentation changed)
│          │    ├ LogStreamNamePrefix: (documentation changed)
│          │    └ LogTypes: - Map<string, Array<string>>
│          │                + json
│          │                (documentation changed)
│          ├[~] type ComputeLimits
│          │ └ properties
│          │    └ UnitType: - string<InstanceFleetUnits|Instances|VCPU> (required)
│          │                + string (required)
│          ├[~] type EMRConfiguration
│          │ └ properties
│          │    └ Classification: (documentation changed)
│          ├[~] type InstanceGroupConfig
│          │ └ properties
│          │    └ Market: - string<ON_DEMAND|SPOT> (immutable)
│          │              + string (immutable)
│          ├[~] type MonitoringConfiguration
│          │ ├      - documentation: Contains CloudWatch log configuration metadata and settings.
│          │ │      + documentation: undefined
│          │ └ properties
│          │    └ CloudWatchLogConfiguration: (documentation changed)
│          ├[~] type PlacementGroupConfig
│          │ └ properties
│          │    ├ InstanceRole: - string<MASTER|CORE|TASK> (required)
│          │    │               + string (required)
│          │    └ PlacementStrategy: - string<SPREAD|PARTITION|CLUSTER|NONE>
│          │                         + string
│          ├[~] type ScalingAction
│          │ └ properties
│          │    └ Market: - string<ON_DEMAND|SPOT>
│          │              + string
│          ├[~] type SimpleScalingPolicyConfiguration
│          │ └ properties
│          │    └ AdjustmentType: - string<CHANGE_IN_CAPACITY|EXACT_CAPACITY|PERCENT_CHANGE_IN_CAPACITY>
│          │                      + string
│          ├[~] type SpotProvisioningSpecification
│          │ └ properties
│          │    └ TimeoutAction: - string<SWITCH_TO_ON_DEMAND|TERMINATE_CLUSTER> (required)
│          │                     + string (required)
│          └[~] type StepConfig
│            └ properties
│               └ ActionOnFailure: - string<CANCEL_AND_WAIT|CONTINUE|TERMINATE_CLUSTER|TERMINATE_JOB_FLOW>
│                                  + string
├[~] service aws-fsx
│ └ resources
│    └[~]  resource AWS::FSx::FileSystem
│       └ types
│          ├[+]  type FsrmConfiguration
│          │  ├      name: FsrmConfiguration
│          │  └ properties
│          │     ├ FsrmServiceEnabled: boolean (required)
│          │     └ EventLogDestination: string
│          └[~] type WindowsConfiguration
│            └ properties
│               └[+] FsrmConfiguration: FsrmConfiguration
├[~] service aws-glue
│ └ resources
│    └[~]  resource AWS::Glue::Partition
│       └      - arnTemplate: arn:${Partition}:glue:${Region}:${Account}:partition/${PartitionName}
│              + arnTemplate: undefined
├[~] service aws-interconnect
│ └ resources
│    └[~]  resource AWS::Interconnect::Connection
│       └      - arnTemplate: undefined
│              + arnTemplate: arn:${Partition}:interconnect:${Region}:${Account}:connection/${Id}
├[~] service aws-kafkaconnect
│ └ resources
│    └[~]  resource AWS::KafkaConnect::Connector
│       └ types
│          └[~] type ProvisionedCapacity
│            └ properties
│               └ McuCount: - integer<1|2|4|8>
│                           + integer<1|2|4|8> (required)
├[+] service aws-novaact
│ ├      capitalized: NovaAct
│ │      cloudFormationNamespace: AWS::NovaAct
│ │      name: aws-novaact
│ │      shortName: novaact
│ └ resources
│    └ resource AWS::NovaAct::WorkflowDefinition
│      ├      name: WorkflowDefinition
│      │      cloudFormationType: AWS::NovaAct::WorkflowDefinition
│      │      documentation: Definition of AWS::NovaAct::WorkflowDefinition Resource Type
│      │      primaryIdentifier: ["Arn"]
│      ├ properties
│      │  ├ Description: string (immutable)
│      │  ├ ExportConfig: WorkflowExportConfig (immutable)
│      │  └ Name: string (required, immutable)
│      ├ attributes
│      │  ├ Arn: string
│      │  ├ CreatedAt: string
│      │  └ Status: string<ACTIVE|DELETING>
│      └ types
│         └ type WorkflowExportConfig
│           ├      documentation: Configuration settings for exporting workflow execution data and logs to Amazon S3.
│           │      name: WorkflowExportConfig
│           └ properties
│              ├ S3BucketName: string (required)
│              └ S3KeyPrefix: string
├[~] service aws-observabilityadmin
│ └ resources
│    ├[~]  resource AWS::ObservabilityAdmin::OrganizationTelemetryRule
│    │  └ types
│    │     └[~] type TelemetryRule
│    │       └ properties
│    │          ├ ResourceType: - string<AWS::EC2::VPC|AWS::WAFv2::WebACL|AWS::CloudTrail|AWS::EKS::Cluster|AWS::ElasticLoadBalancingV2::LoadBalancer> (required)
│    │          │               + string<AWS::EC2::VPC|AWS::WAFv2::WebACL|AWS::CloudTrail|AWS::EKS::Cluster|AWS::ElasticLoadBalancingV2::LoadBalancer|AWS::EC2::Instance> (required)
│    │          └ TelemetryType: - string<Logs> (required)
│    │                           + string<Logs|Metrics> (required)
│    └[~]  resource AWS::ObservabilityAdmin::TelemetryRule
│       └ types
│          └[~] type TelemetryRule
│            └ properties
│               ├ ResourceType: - string<AWS::EC2::VPC|AWS::WAFv2::WebACL|AWS::CloudTrail|AWS::EKS::Cluster|AWS::ElasticLoadBalancingV2::LoadBalancer|AWS::BedrockAgentCore::Runtime|AWS::BedrockAgentCore::Browser|AWS::BedrockAgentCore::CodeInterpreter> (required)
│               │               + string<AWS::EC2::VPC|AWS::WAFv2::WebACL|AWS::CloudTrail|AWS::EKS::Cluster|AWS::ElasticLoadBalancingV2::LoadBalancer|AWS::EC2::Instance|AWS::BedrockAgentCore::Runtime|AWS::BedrockAgentCore::Browser|AWS::BedrockAgentCore::CodeInterpreter> (required)
│               └ TelemetryType: - string<Logs|Traces> (required)
│                                + string<Logs|Traces|Metrics> (required)
├[~] service aws-omics
│ └ resources
│    └[+]  resource AWS::Omics::Configuration
│       ├      name: Configuration
│       │      cloudFormationType: AWS::Omics::Configuration
│       │      documentation: Resource schema for AWS::Omics::Configuration
│       │      tagInformation: {"tagPropertyName":"Tags","variant":"map"}
│       │      arnTemplate: arn:${Partition}:omics:${Region}:${Account}:configuration/${Name}
│       │      primaryIdentifier: ["Name"]
│       ├ properties
│       │  ├ Name: string (required, immutable)
│       │  ├ Description: string
│       │  ├ RunConfigurations: RunConfigurations (required, immutable)
│       │  └ Tags: Map<string, string>
│       ├ attributes
│       │  ├ Arn: string
│       │  ├ Uuid: string
│       │  ├ Status: string<CREATING|ACTIVE|UPDATING|DELETING|DELETED|FAILED>
│       │  └ CreationTime: string
│       └ types
│          ├ type RunConfigurations
│          │ ├      name: RunConfigurations
│          │ └ properties
│          │    └ VpcConfig: VpcConfig
│          └ type VpcConfig
│            ├      name: VpcConfig
│            └ properties
│               ├ SecurityGroupIds: Array<string>
│               └ SubnetIds: Array<string>
├[~] service aws-pcs
│ └ resources
│    └[~]  resource AWS::PCS::Cluster
│       ├      - vendedLogs: [{"permissionsVersion":"V2","logType":"PCS_JOBCOMP_LOGS","destinations":[{"destinationType":"S3","outputFormats":["json","plain","w3c","parquet"]},{"destinationType":"CWL","outputFormats":["plain","json"]},{"destinationType":"FH","outputFormats":["json","plain","raw"]}],"mandatoryFields":["resource_id","resource_type","event_timestamp","scheduler_type","scheduler_major_version","fields"]},{"permissionsVersion":"V2","logType":"PCS_SCHEDULER_LOGS","destinations":[{"destinationType":"S3","outputFormats":["json","plain","w3c","parquet"]},{"destinationType":"CWL","outputFormats":["plain","json"]},{"destinationType":"FH","outputFormats":["json","plain","raw"]}],"mandatoryFields":["resource_id","resource_type","event_timestamp","log_level","log_name","scheduler_type","scheduler_major_version","scheduler_patch_version","node_type","message"]},{"permissionsVersion":"V2","logType":"PCS_SCHEDULER_AUDIT_LOGS","destinations":[{"destinationType":"S3","outputFormats":["json","plain","w3c","parquet"]},{"destinationType":"CWL","outputFormats":["plain","json"]},{"destinationType":"FH","outputFormats":["json","plain","raw"]}],"optionalFields":["resource_id","resource_type","event_timestamp","log_level","scheduler_type","scheduler_patch_version","node_type","message"],"mandatoryFields":["log_name","scheduler_major_version","log_type"]}]
│       │      + vendedLogs: [{"permissionsVersion":"V2","logType":"PCS_JOBCOMP_LOGS","destinations":[{"destinationType":"S3","outputFormats":["json","plain","w3c","parquet"]},{"destinationType":"CWL","outputFormats":["plain","json"]},{"destinationType":"FH","outputFormats":["json","plain","raw"]}],"mandatoryFields":["resource_id","resource_type","event_timestamp","scheduler_type","scheduler_major_version","fields"]},{"permissionsVersion":"V2","logType":"PCS_SCHEDULER_LOGS","destinations":[{"destinationType":"S3","outputFormats":["json","plain","w3c","parquet"]},{"destinationType":"CWL","outputFormats":["plain","json"]},{"destinationType":"FH","outputFormats":["json","plain","raw"]}],"mandatoryFields":["resource_id","resource_type","event_timestamp","log_level","log_name","scheduler_type","scheduler_major_version","scheduler_patch_version","node_type","message"]},{"permissionsVersion":"V2","logType":"PCS_SCHEDULER_AUDIT_LOGS","destinations":[{"destinationType":"S3","outputFormats":["json","plain","w3c","parquet"]},{"destinationType":"CWL","outputFormats":["plain","json"]},{"destinationType":"FH","outputFormats":["json","plain","raw"]}],"mandatoryFields":["resource_id","resource_type","event_timestamp","log_level","log_name","scheduler_type","scheduler_major_version","scheduler_patch_version","node_type","log_type","message"]}]
│       └ vendedLogs
│          └[~] logType: PCS_SCHEDULER_AUDIT_LOGS
│            ├mandatoryFields:
│            │├- [log_name, scheduler_major_version, log_type]
│            │└+ [resource_id, resource_type, event_timestamp, log_level, log_name, scheduler_type, scheduler_major_version, scheduler_patch_version, node_type, log_type, message]
│            └optionalFields:
│             └- [resource_id, resource_type, event_timestamp, log_level, scheduler_type, scheduler_patch_version, node_type, message]
├[~] service aws-pinpoint
│ └ resources
│    └[~]  resource AWS::Pinpoint::InAppTemplate
│       └      - arnTemplate: arn:${Partition}:mobiletargeting:${Region}:${Account}:templates/${TemplateName}/VOICE
│              + arnTemplate: arn:${Partition}:mobiletargeting:${Region}:${Account}:templates/${TemplateName}/EMAIL
├[~] service aws-quicksight
│ └ resources
│    ├[~]  resource AWS::QuickSight::DataSet
│    │  ├ properties
│    │  │  ├ FolderArns: (documentation changed)
│    │  │  └ RowLevelPermissionDataSet: (documentation changed)
│    │  └ types
│    │     └[~] type RowLevelPermissionConfiguration
│    │       └ properties
│    │          └ RowLevelPermissionDataSet: (documentation changed)
│    └[~]  resource AWS::QuickSight::DataSource
│       ├ properties
│       │  └ Type: - string<ADOBE_ANALYTICS|AMAZON_ELASTICSEARCH|AMAZON_OPENSEARCH|ATHENA|AURORA|AURORA_POSTGRESQL|AWS_IOT_ANALYTICS|DATABRICKS|DENODO|DREMIO|DYNAMODB|SAPHANA|DB2_AS400|EXASOL|FILE|GITHUB|INTERNATIONAL_DATA_CORPORATION|JIRA|MARIADB|MYSQL|ORACLE|POSTGRESQL|PRESTO|QBUSINESS|REDSHIFT|S3|S3_TABLES|S3_KNOWLEDGE_BASE|SALESFORCE|SERVICENOW|SNOWFLAKE|SPARK|SPICE|SQLSERVER|TERADATA|TIMESTREAM|TWITTER|BIGQUERY|GOOGLE_ANALYTICS|TRINO|STARBURST|MONGO|MONGO_ATLAS|DOCUMENTDB|APPFLOW|IMPALA|GLUE|GOOGLE_DRIVE|CONFLUENCE|SHAREPOINT|ONE_DRIVE|WEB_CRAWLER> (required, immutable)
│       │          + string<ADOBE_ANALYTICS|AMAZON_ELASTICSEARCH|AMAZON_OPENSEARCH|ATHENA|AURORA|AURORA_POSTGRESQL|AWS_IOT_ANALYTICS|DATABRICKS|DENODO|DREMIO|DYNAMODB|SAPHANA|DB2_AS400|EXASOL|FILE|GITHUB|INTERNATIONAL_DATA_CORPORATION|JIRA|MARIADB|MYSQL|ORACLE|POSTGRESQL|PRESTO|QBUSINESS|REDSHIFT|S3|S3_TABLES|S3_KNOWLEDGE_BASE|SALESFORCE|SERVICENOW|SNOWFLAKE|SPARK|SPICE|SQLSERVER|TERADATA|TIMESTREAM|TWITTER|BIGQUERY|GOOGLE_ANALYTICS|TRINO|STARBURST|MONGO|MONGO_ATLAS|DOCUMENTDB|APPFLOW|IMPALA|GLUE|GOOGLE_DRIVE|CONFLUENCE|SHAREPOINT|ONE_DRIVE|WEB_CRAWLER|BOX> (required, immutable)
│       └ types
│          ├[~] type DataSourceParameters
│          │ └ properties
│          │    └[+] S3TablesParameters: S3TablesParameters
│          └[+]  type S3TablesParameters
│             ├      name: S3TablesParameters
│             └ properties
│                └ TableBucketArn: string
├[~] service aws-rds
│ └ resources
│    └[~]  resource AWS::RDS::DBCluster
│       └ attributes
│          └[+] StorageEncryptionType: string
├[~] service aws-sagemaker
│ └ resources
│    └[~]  resource AWS::SageMaker::Model
│       ├      - primaryIdentifier: ["Id"]
│       │      + primaryIdentifier: ["ModelArn"]
│       ├ attributes
│       │  └[+] ModelArn: string
│       └ types
│          ├[~] type ContainerDefinition
│          │ └ properties
│          │    └ Mode: - string (immutable)
│          │            + string<SingleModel|MultiModel> (immutable)
│          ├[~] type ImageConfig
│          │ └ properties
│          │    └ RepositoryAccessMode: - string (required, immutable)
│          │                            + string<Platform|Vpc> (required, immutable)
│          ├[~] type InferenceExecutionConfig
│          │ └ properties
│          │    └ Mode: - string (required, immutable)
│          │            + string<Serial|Direct> (required, immutable)
│          ├[~] type MultiModelConfig
│          │ └ properties
│          │    └ ModelCacheSetting: - string (immutable)
│          │                         + string<Enabled|Disabled> (immutable)
│          └[~] type S3DataSource
│            └ properties
│               ├ CompressionType: - string (required)
│               │                  + string<None|Gzip> (required)
│               │                  (documentation changed)
│               ├ ModelAccessConfig: (documentation changed)
│               └ S3DataType: - string (required)
│                             + string<S3Prefix|S3Object> (required)
├[+] service aws-securityagent
│ ├      capitalized: SecurityAgent
│ │      cloudFormationNamespace: AWS::SecurityAgent
│ │      name: aws-securityagent
│ │      shortName: securityagent
│ └ resources
│    ├ resource AWS::SecurityAgent::AgentSpace
│    │ ├      name: AgentSpace
│    │ │      cloudFormationType: AWS::SecurityAgent::AgentSpace
│    │ │      documentation: Resource Type definition for AWS::SecurityAgent::AgentSpace
│    │ │      tagInformation: {"tagPropertyName":"Tags","variant":"standard"}
│    │ │      arnTemplate: arn:${Partition}:securityagent:${Region}:${Account}:agent-space/${AgentId}
│    │ │      primaryIdentifier: ["AgentSpaceId"]
│    │ ├ properties
│    │ │  ├ Name: string (required)
│    │ │  ├ Description: string
│    │ │  ├ AwsResources: AWSResources
│    │ │  ├ CodeReviewSettings: CodeReviewSettings
│    │ │  ├ KmsKeyId: string (immutable)
│    │ │  ├ IntegratedResources: Array<IntegratedResource>
│    │ │  ├ TargetDomainIds: Array<string>
│    │ │  └ Tags: Array<tag>
│    │ ├ attributes
│    │ │  ├ AgentSpaceId: string
│    │ │  ├ CreatedAt: string
│    │ │  └ UpdatedAt: string
│    │ └ types
│    │    ├ type AWSResources
│    │    │ ├      documentation: AWS resource configuration
│    │    │ │      name: AWSResources
│    │    │ └ properties
│    │    │    ├ Vpcs: Array<VpcConfig>
│    │    │    ├ LogGroups: Array<string>
│    │    │    ├ S3Buckets: Array<string>
│    │    │    ├ SecretArns: Array<string>
│    │    │    ├ LambdaFunctionArns: Array<string>
│    │    │    └ IamRoles: Array<string>
│    │    ├ type CodeReviewSettings
│    │    │ ├      documentation: Details of code review settings
│    │    │ │      name: CodeReviewSettings
│    │    │ └ properties
│    │    │    ├ ControlsScanning: boolean (required)
│    │    │    └ GeneralPurposeScanning: boolean (required)
│    │    ├ type IntegratedResource
│    │    │ ├      documentation: Integrated Resource details
│    │    │ │      name: IntegratedResource
│    │    │ └ properties
│    │    │    └ Integration: string (required)
│    │    └ type VpcConfig
│    │      ├      documentation: Customer VPC configuration that the security testing environment accesses
│    │      │      name: VpcConfig
│    │      └ properties
│    │         ├ VpcArn: string
│    │         ├ SecurityGroupArns: Array<string>
│    │         └ SubnetArns: Array<string>
│    ├ resource AWS::SecurityAgent::Application
│    │ ├      name: Application
│    │ │      cloudFormationType: AWS::SecurityAgent::Application
│    │ │      documentation: Resource Type definition for AWS::SecurityAgent::Application
│    │ │      tagInformation: {"tagPropertyName":"Tags","variant":"standard"}
│    │ │      arnTemplate: arn:${Partition}:securityagent:${Region}:${Account}:application/${ApplicationId}
│    │ │      primaryIdentifier: ["ApplicationId"]
│    │ ├ properties
│    │ │  ├ IdCConfiguration: IdCConfiguration (immutable)
│    │ │  ├ RoleArn: string
│    │ │  ├ DefaultKmsKeyId: string
│    │ │  └ Tags: Array<tag>
│    │ ├ attributes
│    │ │  ├ ApplicationName: string
│    │ │  ├ ApplicationId: string
│    │ │  ├ Domain: string
│    │ │  └ IdCConfiguration.IdCApplicationArn: string
│    │ └ types
│    │    └ type IdCConfiguration
│    │      ├      name: IdCConfiguration
│    │      └ properties
│    │         ├ IdCApplicationArn: string
│    │         └ IdCInstanceArn: string (immutable)
│    ├ resource AWS::SecurityAgent::Pentest
│    │ ├      name: Pentest
│    │ │      cloudFormationType: AWS::SecurityAgent::Pentest
│    │ │      documentation: Resource Type definition for AWS::SecurityAgent::Pentest
│    │ │      primaryIdentifier: ["PentestId","AgentSpaceId"]
│    │ ├ properties
│    │ │  ├ AgentSpaceId: string (required, immutable)
│    │ │  ├ Title: string
│    │ │  ├ Assets: Assets (required)
│    │ │  ├ ExcludeRiskTypes: Array<string<CROSS_SITE_SCRIPTING|DEFAULT_CREDENTIALS|INSECURE_DIRECT_OBJECT_REFERENCE|PRIVILEGE_ESCALATION|SERVER_SIDE_TEMPLATE_INJECTION|COMMAND_INJECTION|CODE_INJECTION|SQL_INJECTION|ARBITRARY_FILE_UPLOAD|INSECURE_DESERIALIZATION|LOCAL_FILE_INCLUSION|INFORMATION_DISCLOSURE|PATH_TRAVERSAL|SERVER_SIDE_REQUEST_FORGERY|JSON_WEB_TOKEN_VULNERABILITIES|XML_EXTERNAL_ENTITY|FILE_DELETION|OTHER|GRAPHQL_VULNERABILITIES|BUSINESS_LOGIC_VULNERABILITIES|CRYPTOGRAPHIC_VULNERABILITIES|DENIAL_OF_SERVICE|FILE_ACCESS|FILE_CREATION|DATABASE_MODIFICATION|DATABASE_ACCESS|OUTBOUND_SERVICE_REQUEST|UNKNOWN>>
│    │ │  ├ ServiceRole: string (required)
│    │ │  ├ LogConfig: CloudWatchLog
│    │ │  ├ VpcConfig: VpcConfig
│    │ │  ├ NetworkTrafficConfig: NetworkTrafficConfig
│    │ │  └ CodeRemediationStrategy: string<AUTOMATIC|DISABLED>
│    │ ├ attributes
│    │ │  ├ PentestId: string
│    │ │  ├ CreatedAt: string
│    │ │  └ UpdatedAt: string
│    │ └ types
│    │    ├ type Actor
│    │    │ ├      name: Actor
│    │    │ └ properties
│    │    │    ├ Identifier: string
│    │    │    ├ Uris: Array<string>
│    │    │    ├ Authentication: Authentication
│    │    │    └ Description: string
│    │    ├ type Assets
│    │    │ ├      name: Assets
│    │    │ └ properties
│    │    │    ├ Endpoints: Array<Endpoint>
│    │    │    ├ Actors: Array<Actor>
│    │    │    ├ Documents: Array<DocumentInfo>
│    │    │    ├ SourceCode: Array<SourceCodeRepository>
│    │    │    └ IntegratedRepositories: Array<IntegratedRepository>
│    │    ├ type Authentication
│    │    │ ├      name: Authentication
│    │    │ └ properties
│    │    │    ├ ProviderType: string<SECRETS_MANAGER|AWS_LAMBDA|AWS_IAM_ROLE|AWS_INTERNAL>
│    │    │    └ Value: string
│    │    ├ type CloudWatchLog
│    │    │ ├      name: CloudWatchLog
│    │    │ └ properties
│    │    │    ├ LogGroup: string
│    │    │    └ LogStream: string
│    │    ├ type CustomHeader
│    │    │ ├      name: CustomHeader
│    │    │ └ properties
│    │    │    ├ Name: string
│    │    │    └ Value: string
│    │    ├ type DocumentInfo
│    │    │ ├      name: DocumentInfo
│    │    │ └ properties
│    │    │    ├ S3Location: string
│    │    │    └ ArtifactId: string
│    │    ├ type Endpoint
│    │    │ ├      name: Endpoint
│    │    │ └ properties
│    │    │    └ Uri: string
│    │    ├ type IntegratedRepository
│    │    │ ├      name: IntegratedRepository
│    │    │ └ properties
│    │    │    ├ IntegrationId: string (required)
│    │    │    └ ProviderResourceId: string (required)
│    │    ├ type NetworkTrafficConfig
│    │    │ ├      name: NetworkTrafficConfig
│    │    │ └ properties
│    │    │    ├ Rules: Array<NetworkTrafficRule>
│    │    │    └ CustomHeaders: Array<CustomHeader>
│    │    ├ type NetworkTrafficRule
│    │    │ ├      name: NetworkTrafficRule
│    │    │ └ properties
│    │    │    ├ Effect: string<ALLOW|DENY>
│    │    │    ├ Pattern: string
│    │    │    └ NetworkTrafficRuleType: string<URL>
│    │    ├ type SourceCodeRepository
│    │    │ ├      name: SourceCodeRepository
│    │    │ └ properties
│    │    │    └ S3Location: string
│    │    └ type VpcConfig
│    │      ├      name: VpcConfig
│    │      └ properties
│    │         ├ VpcArn: string
│    │         ├ SecurityGroupArns: Array<string>
│    │         └ SubnetArns: Array<string>
│    └ resource AWS::SecurityAgent::TargetDomain
│      ├      name: TargetDomain
│      │      cloudFormationType: AWS::SecurityAgent::TargetDomain
│      │      documentation: Resource Type definition for AWS::SecurityAgent::TargetDomain
│      │      tagInformation: {"tagPropertyName":"Tags","variant":"standard"}
│      │      arnTemplate: arn:${Partition}:securityagent:${Region}:${Account}:target-domain/${TargetDomainId}
│      │      primaryIdentifier: ["TargetDomainId"]
│      ├ properties
│      │  ├ TargetDomainName: string (required, immutable)
│      │  ├ VerificationMethod: string<DNS_TXT|HTTP_ROUTE> (required)
│      │  └ Tags: Array<tag>
│      ├ attributes
│      │  ├ TargetDomainId: string
│      │  ├ VerificationStatus: string<PENDING|VERIFIED|FAILED|UNREACHABLE>
│      │  ├ VerificationDetails: VerificationDetails
│      │  ├ CreatedAt: string
│      │  └ VerifiedAt: string
│      └ types
│         ├ type DnsVerification
│         │ ├      documentation: Represents DNS TXT verification details
│         │ │      name: DnsVerification
│         │ └ properties
│         │    ├ Token: string
│         │    ├ DnsRecordName: string
│         │    └ DnsRecordType: string<TXT>
│         ├ type HttpVerification
│         │ ├      documentation: Represents HTTP route verification details
│         │ │      name: HttpVerification
│         │ └ properties
│         │    ├ Token: string
│         │    └ RoutePath: string
│         └ type VerificationDetails
│           ├      documentation: Verification details to verify registered target domain
│           │      name: VerificationDetails
│           └ properties
│              ├ Method: string<DNS_TXT|HTTP_ROUTE>
│              ├ DnsTxt: DnsVerification
│              └ HttpRoute: HttpVerification
├[~] service aws-servicediscovery
│ └ resources
│    └[~]  resource AWS::ServiceDiscovery::Service
│       └ properties
│          └ ServiceAttributes: - Map<string, string> ⇐ json
│                               + json
└[~] service aws-stepfunctions
  └ resources
     └[~]  resource AWS::StepFunctions::StateMachineAlias
        └ properties
           └[+] StateMachineArn: string
```

CHANGES TO L1 RESOURCES: L1 resources are automatically generated from
public CloudFormation Resource Schemas. They are built to closely
reflect the real state of CloudFormation. Sometimes these updates can
contain changes that are incompatible with previous types, but more
accurately reflect reality. In this release we have changed:

aws-appstream: AWS::AppStream::Stack: Id attribute removed.
aws-appsync: AWS::AppSync::GraphQLApi: LogConfig.CloudWatchLogsRoleArn
property is now required.
aws-appsync: AWS::AppSync::GraphQLApi: LogConfig.FieldLogLevel property
is now required.
aws-kafkaconnect: AWS::KafkaConnect::Connector:
ProvisionedCapacity.McuCount property is now required.
More updates to integ tests to get rid of deprecated API usage.

Also update `packages/@aws-cdk-testing/framework-integ/package.json` to run the integ tests with `JSII_DEPRECATED=fail`

----

*By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
…ure flag) (#37539)

Add missing enum values for AWS Batch Ec2Configuration:
- EcsMachineImageType.ECS_AL2023_NVIDIA
- EksMachineImageType.EKS_AL2023
- EksMachineImageType.EKS_AL2023_NVIDIA

Introduce feature flag `@aws-cdk/aws-batch:defaultToAL2023` that switches the default imageType from AL2 to AL2023 for both ECS and EKS compute environments. Amazon Linux 2 has reached EOL for EKS (Nov 2025) and reaches EOL for ECS in June 2026.

For EKS compute environments with a launch template, automatically set `userdataType` to `EKS_NODEADM` when an AL2023 image type is resolved, as required by the AWS Batch API to ensure nodes join the cluster.

Update A1 instance validation to also reject ECS_AL2023_NVIDIA and to correctly resolve the feature-flag-defaulted imageType.

### Issue # (if applicable)

Closes #35839, closes #37205.

### Reason for this change

Amazon Linux 2 has reached EOL for EKS (Nov 2025) and reaches EOL for ECS
in June 2026. The AWS Batch service already defaults to AL2023 for newly
created compute environments, but CDK still hardcodes `ECS_AL2` / `EKS_AL2`
when users don't specify an `imageType`.

Additionally, the `ECS_AL2023_NVIDIA`, `EKS_AL2023`, and `EKS_AL2023_NVIDIA`
image types supported by the Batch API were missing from the CDK enum definitions.

Related public documentation: 

* https://docs.aws.amazon.com/batch/latest/APIReference/API_Ec2Configuration.html
* https://docs.aws.amazon.com/batch/latest/userguide/eks-al2-ami-deprecation.html
* https://docs.aws.amazon.com/batch/latest/userguide/eks-migration-2023.html
* https://docs.aws.amazon.com/batch/latest/userguide/ecs-al2-ami-deprecation.html
* https://docs.aws.amazon.com/batch/latest/userguide/ecs-migration-2023.html
* https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_batch.EcsMachineImageType.html
* https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_batch.EksMachineImageType.html

### Description of changes

- Added `EcsMachineImageType.ECS_AL2023_NVIDIA`, `EksMachineImageType.EKS_AL2023`,
  and `EksMachineImageType.EKS_AL2023_NVIDIA`
- Introduced feature flag `@aws-cdk/aws-batch:defaultToAL2023` that switches the
  default `imageType` from AL2 to AL2023 for both ECS and EKS compute environments
- For EKS compute environments with a launch template, automatically sets
  `userdataType` to `EKS_NODEADM` when an AL2023 image type is resolved, as
  required by the AWS Batch API to ensure nodes join the cluster
- Updated A1 instance validation to also reject `ECS_AL2023_NVIDIA` and to
  correctly resolve the feature-flag-defaulted `imageType`

### Describe any new or updated permissions being added

None.

### Description of how you validated changes

Unit tests cover all new enum values, feature flag on/off for both ECS and EKS,
`userdataType` behavior with launch templates (including the critical scenario
where the feature flag defaults to AL2023 with a launch template present), and
A1 instance validation. Build passes with 0 errors. 103 batch tests pass,
118 cx-api tests pass.

### Checklist
- [x] My code adheres to the [CONTRIBUTING GUIDE](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) and [DESIGN GUIDELINES](https://github.com/aws/aws-cdk/blob/main/docs/DESIGN_GUIDELINES.md)

----

*By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
### Issue # (if applicable)

None

### Reason for this change

https://docs.aws.amazon.com/AmazonRDS/latest/PostgreSQLReleaseNotes/postgresql-versions.html#postgresql-versions-version1613

### Description of changes

### Describe any new or updated permissions being added

### Description of how you validated changes

```
aws rds describe-db-engine-versions --engine aurora-postgresql --output table --query 'DBEngineVersions[*].{Engine:Engine,EngineVersion:EngineVersion}'

------------------------------------------
|        DescribeDBEngineVersions        |
+--------------------+-------------------+
|       Engine       |   EngineVersion   |
+--------------------+-------------------+
...
|  aurora-postgresql |  16.11            |
|  aurora-postgresql |  16.11-limitless  |
|  aurora-postgresql |  16.13            |
...
```

### Checklist
- [x] My code adheres to the [CONTRIBUTING GUIDE](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) and [DESIGN GUIDELINES](https://github.com/aws/aws-cdk/blob/main/docs/DESIGN_GUIDELINES.md)

----

*By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
@vishaalmehrishi
Copy link
Copy Markdown
Contributor

@Mergifyio refresh

@mergify
Copy link
Copy Markdown
Contributor

mergify bot commented Apr 13, 2026

refresh

✅ Pull request refreshed

@aws-cdk-automation
Copy link
Copy Markdown
Collaborator Author

➡️ PR build request submitted to test-main-pipeline ⬅️

A maintainer must now check the pipeline and add the pr-linter/cli-integ-tested label once the pipeline succeeds.

@aws-cdk-automation
Copy link
Copy Markdown
Collaborator Author

@Mergifyio refresh

@mergify
Copy link
Copy Markdown
Contributor

mergify bot commented Apr 13, 2026

refresh

✅ Pull request refreshed

@mergify
Copy link
Copy Markdown
Contributor

mergify bot commented Apr 13, 2026

Thank you for contributing! Your pull request will be automatically updated and merged without squashing (do not update manually, and be sure to allow changes to be pushed to your fork).

@mergify
Copy link
Copy Markdown
Contributor

mergify bot commented Apr 13, 2026

Merge Queue Status

  • Entered queue2026-04-13 10:27 UTC · Rule: default-merge
  • Checks skipped · PR is already up-to-date
  • Merged2026-04-13 10:27 UTC · at b448bbb3dacb67421d8444dd26c808da1623be9d

This pull request spent 28 seconds in the queue, including 3 seconds running CI.

Required conditions to merge
  • #approved-reviews-by >= 1 [🛡 GitHub branch protection]
  • #changes-requested-reviews-by = 0 [🛡 GitHub branch protection]
  • any of [🛡 GitHub branch protection]:
    • check-success = build
    • check-neutral = build
    • check-skipped = build
  • any of [🛡 GitHub branch protection]:
    • check-success = validate-pr
    • check-neutral = validate-pr
    • check-skipped = validate-pr

@mergify mergify bot merged commit 8f84c62 into v2-release Apr 13, 2026
27 of 31 checks passed
@mergify mergify bot deleted the bump/2.249.0 branch April 13, 2026 10:27
@github-actions
Copy link
Copy Markdown
Contributor

Comments on closed issues and PRs are hard for our team to see.
If you need help, please open a new issue that references this one.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Apr 13, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

auto-approve p2 pr/no-squash This PR should be merged instead of squash-merging it

Projects

None yet

Development

Successfully merging this pull request may close these issues.