@go-to-k/cdkd 0.248.0 → 0.249.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{asg-provider-Dbl1_mwT.js → asg-provider-CMWe8LlY.js} +5 -6
- package/dist/{asg-provider-Dbl1_mwT.js.map → asg-provider-CMWe8LlY.js.map} +1 -1
- package/dist/cli.js +601 -256
- package/dist/cli.js.map +1 -1
- package/dist/{deploy-engine-D6U-Cm8B.js → deploy-engine-DqAyGFJu.js} +1461 -272
- package/dist/deploy-engine-DqAyGFJu.js.map +1 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -4
- package/dist/{logger-BzO-joNR.js → logger-BYMEE-BS.js} +1 -1
- package/dist/{logger-BzO-joNR.js.map → logger-BYMEE-BS.js.map} +1 -1
- package/package.json +5 -6
- package/dist/aws-clients-B15NAPbL.js +0 -435
- package/dist/aws-clients-B15NAPbL.js.map +0 -1
- package/dist/deploy-engine-D6U-Cm8B.js.map +0 -1
- package/dist/ec2-termination-protection-q-WGWgxa.js +0 -683
- package/dist/ec2-termination-protection-q-WGWgxa.js.map +0 -1
- package/dist/expected-bucket-owner-BjEfUnkA.js +0 -87
- package/dist/expected-bucket-owner-BjEfUnkA.js.map +0 -1
- package/dist/rolldown-runtime-CjeV3_4I.js +0 -18
|
@@ -1,22 +1,24 @@
|
|
|
1
|
-
import { a as getLiveRenderer, d as generateResourceNameWithFallback, l as applyDefaultNameForFallback, n as getLogger, p as withStackName, u as generateResourceName } from "./logger-
|
|
2
|
-
import { E as SynthesisError, S as ResourceUpdateNotSupportedError, T as StateError, a as normalizeAwsTagsToCfn, b as ProvisioningError, c as AssetError, d as DependencyError, g as MacroExpansionError, h as LockError, i as matchesCdkPath, k as normalizeAwsError, l as CdkdError, n as isTerminationProtectionPropagationError, o as resolveExplicitPhysicalId, s as assertRegionMatch, t as disableInstanceApiTermination, x as ResourceTimeoutError } from "./ec2-termination-protection-q-WGWgxa.js";
|
|
3
|
-
import { r as getAwsClients } from "./aws-clients-B15NAPbL.js";
|
|
4
|
-
import { t as expectedOwnerParam } from "./expected-bucket-owner-BjEfUnkA.js";
|
|
1
|
+
import { a as getLiveRenderer, d as generateResourceNameWithFallback, l as applyDefaultNameForFallback, n as getLogger, p as withStackName, u as generateResourceName } from "./logger-BYMEE-BS.js";
|
|
5
2
|
import { randomUUID } from "node:crypto";
|
|
6
3
|
import { CreateBucketCommand, DeleteObjectCommand, DeleteObjectsCommand, GetBucketLocationCommand, GetObjectCommand, HeadBucketCommand, HeadObjectCommand, ListObjectsV2Command, NoSuchKey, PutBucketEncryptionCommand, PutBucketPolicyCommand, PutObjectCommand, PutPublicAccessBlockCommand, S3Client, S3ServiceException } from "@aws-sdk/client-s3";
|
|
7
4
|
import { CloudControlClient, CreateResourceCommand, DeleteResourceCommand, GetResourceCommand, GetResourceRequestStatusCommand, ListResourcesCommand, UpdateResourceCommand } from "@aws-sdk/client-cloudcontrol";
|
|
8
5
|
import { AttachRolePolicyCommand, CreateRoleCommand, DeleteRoleCommand, DeleteRolePermissionsBoundaryCommand, DeleteRolePolicyCommand, DetachRolePolicyCommand, GetRoleCommand, GetRolePolicyCommand, IAMClient, ListAttachedRolePoliciesCommand, ListInstanceProfilesForRoleCommand, ListRolePoliciesCommand, ListRoleTagsCommand, ListRolesCommand, NoSuchEntityException, PutRolePermissionsBoundaryCommand, PutRolePolicyCommand, RemoveRoleFromInstanceProfileCommand, TagRoleCommand, UntagRoleCommand, UpdateAssumeRolePolicyCommand, UpdateRoleCommand } from "@aws-sdk/client-iam";
|
|
6
|
+
import { SQSClient } from "@aws-sdk/client-sqs";
|
|
9
7
|
import { PublishCommand, SNSClient } from "@aws-sdk/client-sns";
|
|
10
8
|
import { GetFunctionCommand, GetFunctionUrlConfigCommand, InvokeCommand, LambdaClient, UpdateFunctionConfigurationCommand, waitUntilFunctionActiveV2, waitUntilFunctionUpdatedV2 } from "@aws-sdk/client-lambda";
|
|
11
9
|
import { AssumeRoleCommand, GetCallerIdentityCommand, STSClient } from "@aws-sdk/client-sts";
|
|
12
|
-
import { DescribeAvailabilityZonesCommand, DescribeImagesCommand, DescribeInstancesCommand, DescribeLaunchTemplatesCommand, DescribeRouteTablesCommand, DescribeSecurityGroupsCommand, DescribeSubnetsCommand, DescribeVpcsCommand, DescribeVpnGatewaysCommand, EC2Client } from "@aws-sdk/client-ec2";
|
|
13
|
-
import { DescribeTableCommand } from "@aws-sdk/client-dynamodb";
|
|
10
|
+
import { DescribeAvailabilityZonesCommand, DescribeImagesCommand, DescribeInstancesCommand, DescribeLaunchTemplatesCommand, DescribeRouteTablesCommand, DescribeSecurityGroupsCommand, DescribeSubnetsCommand, DescribeVpcsCommand, DescribeVpnGatewaysCommand, EC2Client, ModifyInstanceAttributeCommand } from "@aws-sdk/client-ec2";
|
|
11
|
+
import { DescribeTableCommand, DynamoDBClient } from "@aws-sdk/client-dynamodb";
|
|
14
12
|
import { CloudFormationClient, CreateChangeSetCommand, DeleteStackCommand, DescribeChangeSetCommand, DescribeTypeCommand, GetTemplateCommand, waitUntilChangeSetCreateComplete } from "@aws-sdk/client-cloudformation";
|
|
15
|
-
import { GetRestApiCommand } from "@aws-sdk/client-api-gateway";
|
|
16
|
-
import { DescribeApiDestinationCommand, DescribeConnectionCommand } from "@aws-sdk/client-eventbridge";
|
|
17
|
-
import { GetSecretValueCommand } from "@aws-sdk/client-secrets-manager";
|
|
13
|
+
import { APIGatewayClient, GetRestApiCommand } from "@aws-sdk/client-api-gateway";
|
|
14
|
+
import { DescribeApiDestinationCommand, DescribeConnectionCommand, EventBridgeClient } from "@aws-sdk/client-eventbridge";
|
|
15
|
+
import { GetSecretValueCommand, SecretsManagerClient } from "@aws-sdk/client-secrets-manager";
|
|
18
16
|
import { GetParameterCommand, SSMClient } from "@aws-sdk/client-ssm";
|
|
19
|
-
import { GetCloudFrontOriginAccessIdentityCommand } from "@aws-sdk/client-cloudfront";
|
|
17
|
+
import { CloudFrontClient, GetCloudFrontOriginAccessIdentityCommand } from "@aws-sdk/client-cloudfront";
|
|
18
|
+
import { CloudWatchClient } from "@aws-sdk/client-cloudwatch";
|
|
19
|
+
import { CloudWatchLogsClient } from "@aws-sdk/client-cloudwatch-logs";
|
|
20
|
+
import { BedrockAgentCoreControlClient } from "@aws-sdk/client-bedrock-agentcore-control";
|
|
21
|
+
import { ACMClient } from "@aws-sdk/client-acm";
|
|
20
22
|
import { createReadStream, existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, statSync, writeFileSync } from "node:fs";
|
|
21
23
|
import { basename, isAbsolute, join, resolve } from "node:path";
|
|
22
24
|
import { spawn } from "node:child_process";
|
|
@@ -33,9 +35,962 @@ import { DescribeDBClustersCommand, DescribeDBInstancesCommand, RDSClient } from
|
|
|
33
35
|
import { DescribeReplicationGroupsCommand, ElastiCacheClient } from "@aws-sdk/client-elasticache";
|
|
34
36
|
import { DescribeClustersCommand, RedshiftClient } from "@aws-sdk/client-redshift";
|
|
35
37
|
import { DescribeDomainCommand, OpenSearchClient } from "@aws-sdk/client-opensearch";
|
|
36
|
-
import { CreateWebACLCommand, DeleteWebACLCommand, GetWebACLCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$
|
|
38
|
+
import { CreateWebACLCommand, DeleteWebACLCommand, GetWebACLCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$11, ListWebACLsCommand, TagResourceCommand as TagResourceCommand$12, UntagResourceCommand as UntagResourceCommand$12, UpdateWebACLCommand, WAFNonexistentItemException, WAFV2Client } from "@aws-sdk/client-wafv2";
|
|
37
39
|
import { getSignedUrl } from "@aws-sdk/s3-request-presigner";
|
|
38
40
|
|
|
41
|
+
//#region \0rolldown/runtime.js
|
|
42
|
+
var __defProp = Object.defineProperty;
|
|
43
|
+
var __exportAll = (all, no_symbols) => {
|
|
44
|
+
let target = {};
|
|
45
|
+
for (var name in all) {
|
|
46
|
+
__defProp(target, name, {
|
|
47
|
+
get: all[name],
|
|
48
|
+
enumerable: true
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
if (!no_symbols) {
|
|
52
|
+
__defProp(target, Symbol.toStringTag, { value: "Module" });
|
|
53
|
+
}
|
|
54
|
+
return target;
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
//#endregion
|
|
58
|
+
//#region src/utils/error-handler.ts
|
|
59
|
+
/**
|
|
60
|
+
* Base error class for cdkd
|
|
61
|
+
*/
|
|
62
|
+
var CdkdError = class CdkdError extends Error {
|
|
63
|
+
code;
|
|
64
|
+
cause;
|
|
65
|
+
constructor(message, code, cause) {
|
|
66
|
+
super(message);
|
|
67
|
+
this.code = code;
|
|
68
|
+
this.cause = cause;
|
|
69
|
+
this.name = "CdkdError";
|
|
70
|
+
Object.setPrototypeOf(this, CdkdError.prototype);
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* State management errors
|
|
75
|
+
*/
|
|
76
|
+
var StateError = class StateError extends CdkdError {
|
|
77
|
+
constructor(message, cause) {
|
|
78
|
+
super(message, "STATE_ERROR", cause);
|
|
79
|
+
this.name = "StateError";
|
|
80
|
+
Object.setPrototypeOf(this, StateError.prototype);
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Lock acquisition errors
|
|
85
|
+
*/
|
|
86
|
+
var LockError = class LockError extends CdkdError {
|
|
87
|
+
constructor(message, cause) {
|
|
88
|
+
super(message, "LOCK_ERROR", cause);
|
|
89
|
+
this.name = "LockError";
|
|
90
|
+
Object.setPrototypeOf(this, LockError.prototype);
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* Synthesis errors
|
|
95
|
+
*/
|
|
96
|
+
var SynthesisError = class SynthesisError extends CdkdError {
|
|
97
|
+
constructor(message, cause) {
|
|
98
|
+
super(message, "SYNTHESIS_ERROR", cause);
|
|
99
|
+
this.name = "SynthesisError";
|
|
100
|
+
Object.setPrototypeOf(this, SynthesisError.prototype);
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
/**
|
|
104
|
+
* Asset errors
|
|
105
|
+
*/
|
|
106
|
+
var AssetError = class AssetError extends CdkdError {
|
|
107
|
+
constructor(message, cause) {
|
|
108
|
+
super(message, "ASSET_ERROR", cause);
|
|
109
|
+
this.name = "AssetError";
|
|
110
|
+
Object.setPrototypeOf(this, AssetError.prototype);
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
/**
|
|
114
|
+
* Local-invoke `docker build` failures.
|
|
115
|
+
*
|
|
116
|
+
* Surfaces the stderr captured from `docker build` so the user can
|
|
117
|
+
* re-run the same command directly to debug Dockerfile syntax errors
|
|
118
|
+
* or missing build context. Used by `src/local/docker-image-builder.ts`
|
|
119
|
+
* (PR 5) for container Lambdas; the parallel `AssetError` covers the
|
|
120
|
+
* `cdkd publish-assets` / `cdkd deploy` build path. Kept distinct from
|
|
121
|
+
* `AssetError` so `cdkd local invoke` failures don't show up under the
|
|
122
|
+
* "asset" error class.
|
|
123
|
+
*/
|
|
124
|
+
var LocalInvokeBuildError = class LocalInvokeBuildError extends CdkdError {
|
|
125
|
+
constructor(message, cause) {
|
|
126
|
+
super(message, "LOCAL_INVOKE_BUILD_ERROR", cause);
|
|
127
|
+
this.name = "LocalInvokeBuildError";
|
|
128
|
+
Object.setPrototypeOf(this, LocalInvokeBuildError.prototype);
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
/**
|
|
132
|
+
* Resource provisioning errors
|
|
133
|
+
*/
|
|
134
|
+
var ProvisioningError = class ProvisioningError extends CdkdError {
|
|
135
|
+
resourceType;
|
|
136
|
+
logicalId;
|
|
137
|
+
physicalId;
|
|
138
|
+
constructor(message, resourceType, logicalId, physicalId, cause) {
|
|
139
|
+
super(message, "PROVISIONING_ERROR", cause);
|
|
140
|
+
this.resourceType = resourceType;
|
|
141
|
+
this.logicalId = logicalId;
|
|
142
|
+
this.physicalId = physicalId;
|
|
143
|
+
this.name = "ProvisioningError";
|
|
144
|
+
Object.setPrototypeOf(this, ProvisioningError.prototype);
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
/**
|
|
148
|
+
* Resource provisioning timeout errors (per-resource wall-clock deadline).
|
|
149
|
+
*
|
|
150
|
+
* Thrown by `withResourceDeadline` when a single CREATE / UPDATE / DELETE
|
|
151
|
+
* operation exceeds the user-configured `--resource-timeout`. The deploy
|
|
152
|
+
* engine catches this, wraps it in {@link ProvisioningError}, and lets the
|
|
153
|
+
* existing failure path (interrupt siblings → pre-rollback save → rollback
|
|
154
|
+
* unless `--no-rollback`) take over.
|
|
155
|
+
*
|
|
156
|
+
* The message intentionally names the resource, type, region, elapsed time
|
|
157
|
+
* and operation, plus how to override the default. Long-running providers
|
|
158
|
+
* (e.g. Custom Resource: 1h polling cap) self-report their needed budget
|
|
159
|
+
* via `getMinResourceTimeoutMs()`, so the user only needs a per-type
|
|
160
|
+
* override (`--resource-timeout TYPE=DURATION`) when they want to bump a
|
|
161
|
+
* specific non-self-reporting type or shorten a self-reported one.
|
|
162
|
+
*/
|
|
163
|
+
var ResourceTimeoutError = class ResourceTimeoutError extends CdkdError {
|
|
164
|
+
logicalId;
|
|
165
|
+
resourceType;
|
|
166
|
+
region;
|
|
167
|
+
elapsedMs;
|
|
168
|
+
operation;
|
|
169
|
+
timeoutMs;
|
|
170
|
+
constructor(logicalId, resourceType, region, elapsedMs, operation, timeoutMs) {
|
|
171
|
+
const elapsedLabel = formatDuration(elapsedMs);
|
|
172
|
+
const timeoutLabel = formatDuration(timeoutMs);
|
|
173
|
+
super(`Resource ${logicalId} (${resourceType}) in ${region} timed out after ${timeoutLabel} during ${operation} (elapsed ${elapsedLabel}).\nThis may indicate a stuck Cloud Control polling loop, hung Custom Resource, or
|
|
174
|
+
slow ENI provisioning. Re-run with --resource-timeout ${resourceType}=<DURATION>\nto bump the budget for this resource type only, or --verbose to see the
|
|
175
|
+
underlying provider activity.`, "RESOURCE_TIMEOUT");
|
|
176
|
+
this.logicalId = logicalId;
|
|
177
|
+
this.resourceType = resourceType;
|
|
178
|
+
this.region = region;
|
|
179
|
+
this.elapsedMs = elapsedMs;
|
|
180
|
+
this.operation = operation;
|
|
181
|
+
this.timeoutMs = timeoutMs;
|
|
182
|
+
this.name = "ResourceTimeoutError";
|
|
183
|
+
Object.setPrototypeOf(this, ResourceTimeoutError.prototype);
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
/**
|
|
187
|
+
* Format a duration in milliseconds as a short human-readable label
|
|
188
|
+
* (`30m`, `1h30m`, `45s`). Used by {@link ResourceTimeoutError} so the
|
|
189
|
+
* error message stays compact.
|
|
190
|
+
*/
|
|
191
|
+
function formatDuration(ms) {
|
|
192
|
+
if (ms < 6e4) return `${Math.round(ms / 1e3)}s`;
|
|
193
|
+
const totalMinutes = Math.round(ms / 6e4);
|
|
194
|
+
if (totalMinutes < 60) return `${totalMinutes}m`;
|
|
195
|
+
const hours = Math.floor(totalMinutes / 60);
|
|
196
|
+
const minutes = totalMinutes % 60;
|
|
197
|
+
return minutes === 0 ? `${hours}h` : `${hours}h${minutes}m`;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Dependency resolution errors
|
|
201
|
+
*/
|
|
202
|
+
var DependencyError = class DependencyError extends CdkdError {
|
|
203
|
+
constructor(message, cause) {
|
|
204
|
+
super(message, "DEPENDENCY_ERROR", cause);
|
|
205
|
+
this.name = "DependencyError";
|
|
206
|
+
Object.setPrototypeOf(this, DependencyError.prototype);
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
/**
|
|
210
|
+
* Configuration errors
|
|
211
|
+
*/
|
|
212
|
+
var ConfigError = class ConfigError extends CdkdError {
|
|
213
|
+
constructor(message, cause) {
|
|
214
|
+
super(message, "CONFIG_ERROR", cause);
|
|
215
|
+
this.name = "ConfigError";
|
|
216
|
+
Object.setPrototypeOf(this, ConfigError.prototype);
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
/**
|
|
220
|
+
* Signals a partial-failure outcome that should map to exit code 2 (not 1).
|
|
221
|
+
*
|
|
222
|
+
* Used by `cdkd destroy` and `cdkd state destroy` when one or more
|
|
223
|
+
* per-resource deletes failed but the overall command finished its work
|
|
224
|
+
* (state.json is preserved, the rest of the stack was deleted, and the
|
|
225
|
+
* user can re-run to clean up the remaining resources).
|
|
226
|
+
*
|
|
227
|
+
* Exit code conventions:
|
|
228
|
+
* - 0: command completed successfully, no resources left in error state.
|
|
229
|
+
* - 1: command-level failure (auth error, bad arguments, synth crash,
|
|
230
|
+
* unhandled exception). Default for any thrown error.
|
|
231
|
+
* - 2: partial failure — work completed but some resources are still in
|
|
232
|
+
* an error state. Re-running typically resolves it. Documented in
|
|
233
|
+
* README's "Exit codes" section.
|
|
234
|
+
*
|
|
235
|
+
* `handleError` recognizes this class via `instanceof` and uses its
|
|
236
|
+
* `exitCode` instead of the default 1.
|
|
237
|
+
*/
|
|
238
|
+
var PartialFailureError = class PartialFailureError extends CdkdError {
|
|
239
|
+
exitCode = 2;
|
|
240
|
+
constructor(message, cause) {
|
|
241
|
+
super(message, "PARTIAL_FAILURE", cause);
|
|
242
|
+
this.name = "PartialFailureError";
|
|
243
|
+
Object.setPrototypeOf(this, PartialFailureError.prototype);
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
/**
|
|
247
|
+
* Signals that a provider cannot perform an in-place `update` for a
|
|
248
|
+
* resource type — most commonly because the AWS resource is structurally
|
|
249
|
+
* immutable (`AWS::Lambda::LayerVersion`, `AWS::S3Tables::TableBucket` once
|
|
250
|
+
* created, certain `AWS::EC2::*` sub-resources) or because the provider
|
|
251
|
+
* surfaces a sub-resource attachment whose only mutation pattern is
|
|
252
|
+
* delete + add (Lambda permission statements, IAM policy attachments).
|
|
253
|
+
*
|
|
254
|
+
* Surfaced through `cdkd drift --revert`, which calls
|
|
255
|
+
* `provider.update(logicalId, physicalId, type, stateProps, awsProps)` to
|
|
256
|
+
* push cdkd state values back into AWS for every drifted resource. When a
|
|
257
|
+
* provider throws this error, the drift command collects it as a
|
|
258
|
+
* per-resource outcome distinct from a generic AWS update failure: the
|
|
259
|
+
* fix is to re-deploy with `--replace` (or recreate the resource), not to
|
|
260
|
+
* retry the update.
|
|
261
|
+
*
|
|
262
|
+
* Carries the same `exitCode = 2` as {@link PartialFailureError} so a
|
|
263
|
+
* drift run that hits one immutable resource is reported as partial-
|
|
264
|
+
* success rather than fatal — the rest of the drifted resources still
|
|
265
|
+
* had their `update` invoked, and the user has a clear next step printed
|
|
266
|
+
* for the unsupported one.
|
|
267
|
+
*/
|
|
268
|
+
var ResourceUpdateNotSupportedError = class ResourceUpdateNotSupportedError extends CdkdError {
|
|
269
|
+
exitCode = 2;
|
|
270
|
+
resourceType;
|
|
271
|
+
logicalId;
|
|
272
|
+
/**
|
|
273
|
+
* Human-readable hint printed alongside the error. The default is
|
|
274
|
+
* "use cdkd deploy with --replace, or change the resource definition
|
|
275
|
+
* to create a new version" — providers are encouraged to override
|
|
276
|
+
* with a more specific suggestion when one is available (e.g.
|
|
277
|
+
* Lambda::Permission's "delete + add a new statement").
|
|
278
|
+
*/
|
|
279
|
+
suggestion;
|
|
280
|
+
constructor(resourceType, logicalId, suggestion, cause) {
|
|
281
|
+
super(`${resourceType} (${logicalId}) cannot be updated in place: ${suggestion ? suggestion : "use cdkd deploy with --replace, or change the resource definition to create a new version"}.`, "RESOURCE_UPDATE_NOT_SUPPORTED", cause);
|
|
282
|
+
this.resourceType = resourceType;
|
|
283
|
+
this.logicalId = logicalId;
|
|
284
|
+
this.suggestion = suggestion;
|
|
285
|
+
this.name = "ResourceUpdateNotSupportedError";
|
|
286
|
+
Object.setPrototypeOf(this, ResourceUpdateNotSupportedError.prototype);
|
|
287
|
+
}
|
|
288
|
+
};
|
|
289
|
+
/**
|
|
290
|
+
* Signals a refusal to destroy a stack whose CDK manifest has
|
|
291
|
+
* `terminationProtection: true`.
|
|
292
|
+
*
|
|
293
|
+
* Surfaced from `cdkd destroy <stack>` / `cdkd destroy --all` BEFORE
|
|
294
|
+
* any lock acquisition or per-resource delete. In multi-stack runs
|
|
295
|
+
* (e.g. `--all`) this counts as a per-stack failure and the rest of
|
|
296
|
+
* the targets continue — the aggregated count is wrapped in
|
|
297
|
+
* {@link PartialFailureError} so the command exits with code 2.
|
|
298
|
+
*
|
|
299
|
+
* The bypass workflow is documented in the message: edit the CDK code
|
|
300
|
+
* (`new Stack(app, '...', { terminationProtection: false })`),
|
|
301
|
+
* redeploy, then retry the destroy. A future `--remove-protection`
|
|
302
|
+
* flag (separate scope) will provide an explicit one-shot bypass.
|
|
303
|
+
*
|
|
304
|
+
* Note: `cdkd state destroy` (state-only, no synth) does NOT honor
|
|
305
|
+
* `terminationProtection` — the flag is a CDK property not persisted
|
|
306
|
+
* in cdkd's state.json. Use `cdkd destroy` when synth is available.
|
|
307
|
+
*/
|
|
308
|
+
var StackTerminationProtectionError = class StackTerminationProtectionError extends CdkdError {
|
|
309
|
+
stackName;
|
|
310
|
+
constructor(stackName, cause) {
|
|
311
|
+
super(`Stack '${stackName}' has terminationProtection: true and cannot be destroyed. Set terminationProtection: false in the CDK code, redeploy, then retry 'cdkd destroy ${stackName}'.`, "STACK_TERMINATION_PROTECTION", cause);
|
|
312
|
+
this.stackName = stackName;
|
|
313
|
+
this.name = "StackTerminationProtectionError";
|
|
314
|
+
Object.setPrototypeOf(this, StackTerminationProtectionError.prototype);
|
|
315
|
+
}
|
|
316
|
+
};
|
|
317
|
+
/**
|
|
318
|
+
* `cdkd destroy <child>` refused because the named stack is a nested
|
|
319
|
+
* child of another stack. Mirrors CloudFormation's `you can't directly
|
|
320
|
+
* destroy a nested stack` semantic — destroying the child without
|
|
321
|
+
* touching the parent would leave the parent's `AWS::CloudFormation::Stack`
|
|
322
|
+
* record pointing at non-existent resources, and the parent's next
|
|
323
|
+
* deploy would silently try to re-create them.
|
|
324
|
+
*
|
|
325
|
+
* Detected by reading the loaded state's v6 `parentStack` field — only
|
|
326
|
+
* state files written by `NestedStackProvider.create` (or by the
|
|
327
|
+
* recursive `cdkd import --migrate-from-cloudformation` walk) carry
|
|
328
|
+
* this field; top-level stacks have `parentStack: undefined` and pass
|
|
329
|
+
* the guard unchanged.
|
|
330
|
+
*
|
|
331
|
+
* Fires from `cdkd destroy` AFTER state load but BEFORE lock
|
|
332
|
+
* acquisition or any per-resource delete, so the refusal is cheap.
|
|
333
|
+
* Surfaced as a per-stack failure (wrapped in {@link PartialFailureError},
|
|
334
|
+
* exit code 2) in multi-stack runs — siblings continue.
|
|
335
|
+
*
|
|
336
|
+
* Bypass paths (both intentional escape hatches):
|
|
337
|
+
*
|
|
338
|
+
* 1. `cdkd destroy <parent>` — the normal cascading-destroy path; the
|
|
339
|
+
* parent's reverse-DAG walks into the child via
|
|
340
|
+
* `NestedStackProvider.delete` and removes both layers atomically.
|
|
341
|
+
* 2. `cdkd state destroy <child>` — state-only destroy with no parent
|
|
342
|
+
* coupling check. The state-driven entry point intentionally
|
|
343
|
+
* bypasses this guard for the same reason `cdkd state destroy`
|
|
344
|
+
* bypasses `terminationProtection`: it's the "I know what I'm
|
|
345
|
+
* doing" path for cleaning up state when synth is unavailable or
|
|
346
|
+
* the user accepts leaving the parent's reference dangling.
|
|
347
|
+
*/
|
|
348
|
+
var NestedStackChildDirectDestroyError = class NestedStackChildDirectDestroyError extends CdkdError {
|
|
349
|
+
stackName;
|
|
350
|
+
parentStack;
|
|
351
|
+
parentLogicalId;
|
|
352
|
+
constructor(stackName, parentStack, parentLogicalId, cause) {
|
|
353
|
+
const logicalIdSuffix = parentLogicalId ? ` (parent's logical id: ${parentLogicalId})` : "";
|
|
354
|
+
super(`Stack '${stackName}' is a nested child of '${parentStack}'${logicalIdSuffix}; directly destroying a nested stack is not supported. Either run 'cdkd destroy ${parentStack}' to cascade-delete this child along with its parent, or run 'cdkd state destroy ${stackName}' if you intentionally want to leave the parent's reference dangling (the state-only escape hatch).`, "NESTED_STACK_CHILD_DIRECT_DESTROY", cause);
|
|
355
|
+
this.stackName = stackName;
|
|
356
|
+
this.parentStack = parentStack;
|
|
357
|
+
if (parentLogicalId !== void 0) this.parentLogicalId = parentLogicalId;
|
|
358
|
+
this.name = "NestedStackChildDirectDestroyError";
|
|
359
|
+
Object.setPrototypeOf(this, NestedStackChildDirectDestroyError.prototype);
|
|
360
|
+
}
|
|
361
|
+
};
|
|
362
|
+
/**
|
|
363
|
+
* `cdkd destroy <producer>` refused because at least one consumer stack
|
|
364
|
+
* still records an `Fn::ImportValue` reference to one of the producer's
|
|
365
|
+
* outputs. This matches CloudFormation's strong-reference semantics —
|
|
366
|
+
* CFn rejects `DeleteStack` for an exporter while an importer exists.
|
|
367
|
+
*
|
|
368
|
+
* cdkd has no `--force` escape hatch for this (intentionally, mirroring
|
|
369
|
+
* CFn). The error message lists every offending consumer and points the
|
|
370
|
+
* user at the two valid resolution paths:
|
|
371
|
+
*
|
|
372
|
+
* 1. Destroy the consumer first: `cdkd destroy <consumer>`
|
|
373
|
+
* 2. Remove the `Fn::ImportValue` from the consumer's template and
|
|
374
|
+
* redeploy, then retry the producer destroy.
|
|
375
|
+
*
|
|
376
|
+
* Weak-reference consumers (`Fn::GetStackOutput`, cdkd-specific) never
|
|
377
|
+
* trigger this error by design — the producer stays deletable
|
|
378
|
+
* independently of consumers when the user intentionally chose a weak
|
|
379
|
+
* reference at template-authoring time.
|
|
380
|
+
*
|
|
381
|
+
* Exit code 2 (same as `PartialFailureError`) so multi-stack `cdkd
|
|
382
|
+
* destroy --all` runs that partially succeed still surface as
|
|
383
|
+
* non-zero without being indistinguishable from a fatal cdkd error.
|
|
384
|
+
*/
|
|
385
|
+
var StackHasActiveImportsError = class StackHasActiveImportsError extends CdkdError {
|
|
386
|
+
exitCode = 2;
|
|
387
|
+
producerStack;
|
|
388
|
+
producerRegion;
|
|
389
|
+
consumers;
|
|
390
|
+
constructor(producerStack, producerRegion, consumers, cause) {
|
|
391
|
+
const lines = consumers.map((c) => ` - ${c.consumerStack} (${c.consumerRegion}): imports export '${c.exportName}'`);
|
|
392
|
+
super(`Cannot destroy stack '${producerStack}' (${producerRegion}): the following stacks still import its outputs via Fn::ImportValue:\n${lines.join("\n")}\n\nThis matches CloudFormation's strong-reference semantics — exports are\nprotected as long as a consumer references them.\n\nTo proceed:\n 1. Destroy the consumer first: cdkd destroy <consumer-stack>\n 2. Or remove the Fn::ImportValue from the consumer's template\n (e.g. inline the value, or refactor) and re-deploy the consumer,\n then retry this destroy.\n\nNote: cdkd's Fn::GetStackOutput intrinsic is a weak alternative that\ndoes NOT protect the producer — use it when you intentionally want\nthe producer to be deletable independently of consumers.`, "STACK_HAS_ACTIVE_IMPORTS", cause);
|
|
393
|
+
this.producerStack = producerStack;
|
|
394
|
+
this.producerRegion = producerRegion;
|
|
395
|
+
this.consumers = consumers;
|
|
396
|
+
this.name = "StackHasActiveImportsError";
|
|
397
|
+
Object.setPrototypeOf(this, StackHasActiveImportsError.prototype);
|
|
398
|
+
}
|
|
399
|
+
};
|
|
400
|
+
/**
|
|
401
|
+
* Signals a `cdkd local start-service` orchestration failure (Phase 2
|
|
402
|
+
* of #262 — `AWS::ECS::Service` emulator). Distinct from
|
|
403
|
+
* `LocalRunTaskError` because the service runner has its own lifecycle
|
|
404
|
+
* (long-running replica pool, restart-on-exit), so a failure inside it
|
|
405
|
+
* carries different operator semantics than a one-shot task failure.
|
|
406
|
+
*/
|
|
407
|
+
var LocalStartServiceError = class LocalStartServiceError extends CdkdError {
|
|
408
|
+
constructor(message, cause) {
|
|
409
|
+
super(message, "LOCAL_START_SERVICE_ERROR", cause);
|
|
410
|
+
this.name = "LocalStartServiceError";
|
|
411
|
+
Object.setPrototypeOf(this, LocalStartServiceError.prototype);
|
|
412
|
+
}
|
|
413
|
+
};
|
|
414
|
+
/**
|
|
415
|
+
* Signals that the upstream `cdk` CLI is not available on PATH (or at
|
|
416
|
+
* the override path passed via `--cdk-bin`). Surfaced from `cdkd migrate`
|
|
417
|
+
* (#465 PR A) before any other work runs.
|
|
418
|
+
*
|
|
419
|
+
* The message includes the install hint `npm install -g aws-cdk@latest`
|
|
420
|
+
* so users on a fresh machine see exactly how to recover.
|
|
421
|
+
*/
|
|
422
|
+
var MissingCdkCliError = class MissingCdkCliError extends CdkdError {
|
|
423
|
+
constructor(detail, cause) {
|
|
424
|
+
super(`${detail ?? "upstream 'cdk' CLI not found on PATH"}. 'cdkd migrate' shells out to the upstream aws-cdk CLI for L1 codegen — install it with 'npm install -g aws-cdk@latest' (or pass --cdk-bin <path>).`, "MISSING_CDK_CLI", cause);
|
|
425
|
+
this.name = "MissingCdkCliError";
|
|
426
|
+
Object.setPrototypeOf(this, MissingCdkCliError.prototype);
|
|
427
|
+
}
|
|
428
|
+
};
|
|
429
|
+
/**
|
|
430
|
+
* Generic local-migrate orchestration failure (#465 PR A). Used by
|
|
431
|
+
* `cdkd migrate` for pre-flight rejections (Custom Resource / nested
|
|
432
|
+
* stack / non-terminal CFn stack state), output-dir collisions, and
|
|
433
|
+
* `cdk migrate` subprocess failures whose underlying stderr is folded
|
|
434
|
+
* into the error message. Exit code 2 (partial-failure family) because
|
|
435
|
+
* some pre-flight failures leave the user with a partially-populated
|
|
436
|
+
* output directory that's still useful for debugging.
|
|
437
|
+
*/
|
|
438
|
+
var LocalMigrateError = class LocalMigrateError extends CdkdError {
|
|
439
|
+
exitCode = 2;
|
|
440
|
+
constructor(message, cause) {
|
|
441
|
+
super(message, "LOCAL_MIGRATE_ERROR", cause);
|
|
442
|
+
this.name = "LocalMigrateError";
|
|
443
|
+
Object.setPrototypeOf(this, LocalMigrateError.prototype);
|
|
444
|
+
}
|
|
445
|
+
};
|
|
446
|
+
/**
|
|
447
|
+
* CloudFormation macro / `Fn::Transform` expansion failure (#463).
|
|
448
|
+
*
|
|
449
|
+
* cdkd hands templates that declare `Transform: [...]` (or carry
|
|
450
|
+
* `Fn::Transform: {...}` snippets) to CloudFormation server-side via a
|
|
451
|
+
* transient `CreateChangeSet --change-set-type CREATE` against a
|
|
452
|
+
* `cdkd-macro-expand-<id>` stack name. This error wraps every failure
|
|
453
|
+
* mode of that round-trip:
|
|
454
|
+
*
|
|
455
|
+
* - `CreateChangeSet` rejection (bad template, missing macro IAM
|
|
456
|
+
* permission, custom macro not found in the account).
|
|
457
|
+
* - Changeset settles in `FAILED` (`StatusReason` from CFn is
|
|
458
|
+
* surfaced verbatim — typically a custom macro Lambda error).
|
|
459
|
+
* - Waiter timeout (the macro Lambda is stuck or oversized).
|
|
460
|
+
* - `GetTemplate --template-stage Processed` returns no body (would
|
|
461
|
+
* indicate a CFn-side regression — fail loud rather than silently
|
|
462
|
+
* proceed with the un-expanded template).
|
|
463
|
+
* - Multi-stage detection: the expanded template still contains
|
|
464
|
+
* macros, which cdkd v1 does not support (the design intentionally
|
|
465
|
+
* rejects this so a second round-trip is not silently triggered).
|
|
466
|
+
*
|
|
467
|
+
* The error surfaces at exit code 2 (partial-failure family) — the
|
|
468
|
+
* cleanup `finally` in the expander always runs `DeleteChangeSet` +
|
|
469
|
+
* `DeleteStack` regardless of this error firing, so a failed
|
|
470
|
+
* expansion never leaves a transient CFn stack behind in a routine
|
|
471
|
+
* case. The user can re-run `cdkd deploy` once the upstream cause is
|
|
472
|
+
* fixed.
|
|
473
|
+
*/
|
|
474
|
+
var MacroExpansionError = class MacroExpansionError extends CdkdError {
|
|
475
|
+
exitCode = 2;
|
|
476
|
+
constructor(message, cause) {
|
|
477
|
+
super(message, "MACRO_EXPANSION_ERROR", cause);
|
|
478
|
+
this.name = "MacroExpansionError";
|
|
479
|
+
Object.setPrototypeOf(this, MacroExpansionError.prototype);
|
|
480
|
+
}
|
|
481
|
+
};
|
|
482
|
+
/**
|
|
483
|
+
* Check if error is a cdkd error
|
|
484
|
+
*/
|
|
485
|
+
function isCdkdError(error) {
|
|
486
|
+
return error instanceof CdkdError;
|
|
487
|
+
}
|
|
488
|
+
/**
|
|
489
|
+
* Format error for display
|
|
490
|
+
*/
|
|
491
|
+
function formatError(error) {
|
|
492
|
+
if (isCdkdError(error)) {
|
|
493
|
+
let message = `${error.name}: ${error.message}`;
|
|
494
|
+
if (error.cause) message += `\nCaused by: ${error.cause.message}`;
|
|
495
|
+
return message;
|
|
496
|
+
}
|
|
497
|
+
if (error instanceof Error) return `${error.name}: ${error.message}`;
|
|
498
|
+
return String(error);
|
|
499
|
+
}
|
|
500
|
+
/**
|
|
501
|
+
* Global error handler
|
|
502
|
+
*
|
|
503
|
+
* Default exit code is 1 (general error). `PartialFailureError`
|
|
504
|
+
* overrides it to 2 so callers can distinguish "command crashed /
|
|
505
|
+
* unauthorized / bad arguments" from "command completed but some
|
|
506
|
+
* resources are still in an error state, re-run to clean up".
|
|
507
|
+
*
|
|
508
|
+
* A {@link CdkdError} subclass may set `silent = true` to suppress the
|
|
509
|
+
* default `logger.error` line — used by `cdkd drift` where the command
|
|
510
|
+
* has already printed a richer report and only needs the exit code.
|
|
511
|
+
*/
|
|
512
|
+
function handleError(error) {
|
|
513
|
+
const logger = getLogger();
|
|
514
|
+
if (!(error instanceof CdkdError && error.silent)) logger.error(formatError(error));
|
|
515
|
+
if (error instanceof Error && error.stack) logger.debug("Stack trace:", error.stack);
|
|
516
|
+
const customExitCode = error instanceof CdkdError ? error.exitCode : void 0;
|
|
517
|
+
const exitCode = typeof customExitCode === "number" ? customExitCode : 1;
|
|
518
|
+
process.exit(exitCode);
|
|
519
|
+
}
|
|
520
|
+
/**
|
|
521
|
+
* Wrap async function with error handling
|
|
522
|
+
*
|
|
523
|
+
* Note: Uses `any[]` for args to support Commander.js action handlers
|
|
524
|
+
* which can have various parameter types
|
|
525
|
+
*/
|
|
526
|
+
function withErrorHandling(fn) {
|
|
527
|
+
return async (...args) => {
|
|
528
|
+
try {
|
|
529
|
+
await fn(...args);
|
|
530
|
+
} catch (error) {
|
|
531
|
+
handleError(error);
|
|
532
|
+
}
|
|
533
|
+
};
|
|
534
|
+
}
|
|
535
|
+
/**
|
|
536
|
+
* Convert AWS SDK v3's synthetic `Unknown` / `UnknownError` exception into
|
|
537
|
+
* an actionable `Error` keyed off `$metadata.httpStatusCode`.
|
|
538
|
+
*
|
|
539
|
+
* Background — why this helper exists:
|
|
540
|
+
* AWS SDK v3 produces a synthetic `name: 'Unknown'`, `message:
|
|
541
|
+
* 'UnknownError'` exception when the protocol parser hits a HEAD response
|
|
542
|
+
* with an empty body. The most common trigger is `HeadBucket` against a
|
|
543
|
+
* bucket in a different region than the client (S3 returns 301
|
|
544
|
+
* PermanentRedirect with `x-amz-bucket-region` set, but the redirect
|
|
545
|
+
* middleware doesn't recover from the empty body). Surfacing the literal
|
|
546
|
+
* string `UnknownError` to users is uninformative.
|
|
547
|
+
*
|
|
548
|
+
* Behavior:
|
|
549
|
+
* - Non-AWS-SDK errors (anything where `name` is not `Unknown` and
|
|
550
|
+
* `message` is not `UnknownError`) pass through unchanged.
|
|
551
|
+
* - AWS SDK Unknown errors are mapped by HTTP status:
|
|
552
|
+
* - 301 → `Bucket '<name>' is in a different region…` (auto-resolved
|
|
553
|
+
* elsewhere; if this surfaces, it's a bug worth reporting).
|
|
554
|
+
* - 403 → `Access denied to bucket '<name>'.`
|
|
555
|
+
* - 404 → `Bucket '<name>' does not exist.`
|
|
556
|
+
* - other / unknown → `S3 error during <operation> on '<bucket>' (HTTP
|
|
557
|
+
* <status>).`
|
|
558
|
+
*/
|
|
559
|
+
function normalizeAwsError(err, context = {}) {
|
|
560
|
+
if (!(err instanceof Error)) return new Error(String(err));
|
|
561
|
+
if (!(err.name === "Unknown" || err.message === "UnknownError")) return err;
|
|
562
|
+
const status = err.$metadata?.httpStatusCode;
|
|
563
|
+
const bucket = context.bucket ?? "<unknown bucket>";
|
|
564
|
+
const operation = context.operation ?? "operation";
|
|
565
|
+
switch (status) {
|
|
566
|
+
case 301: {
|
|
567
|
+
const responseHeaders = err.$response?.headers;
|
|
568
|
+
const region = responseHeaders?.["x-amz-bucket-region"] ?? responseHeaders?.["X-Amz-Bucket-Region"];
|
|
569
|
+
const where = region ? ` (in ${region})` : "";
|
|
570
|
+
return /* @__PURE__ */ new Error(`Bucket '${bucket}'${where} is in a different region than the client. cdkd resolves this automatically; if you see this message, please report it.`);
|
|
571
|
+
}
|
|
572
|
+
case 403: return /* @__PURE__ */ new Error(`Access denied to bucket '${bucket}'. Verify credentials and bucket policy.`);
|
|
573
|
+
case 404: return /* @__PURE__ */ new Error(`Bucket '${bucket}' does not exist.`);
|
|
574
|
+
default: {
|
|
575
|
+
const statusStr = status !== void 0 ? `HTTP ${status}` : "unknown HTTP status";
|
|
576
|
+
return /* @__PURE__ */ new Error(`S3 error during ${operation} on '${bucket}' (${statusStr}). See CloudTrail for details.`);
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
//#endregion
|
|
582
|
+
//#region src/utils/aws-clients.ts
|
|
583
|
+
var aws_clients_exports = /* @__PURE__ */ __exportAll({
|
|
584
|
+
AwsClients: () => AwsClients,
|
|
585
|
+
getAwsClients: () => getAwsClients,
|
|
586
|
+
resetAwsClients: () => resetAwsClients,
|
|
587
|
+
setAwsClients: () => setAwsClients
|
|
588
|
+
});
|
|
589
|
+
/**
|
|
590
|
+
* AWS clients manager
|
|
591
|
+
*/
|
|
592
|
+
var AwsClients = class {
|
|
593
|
+
s3Client;
|
|
594
|
+
cloudControlClient;
|
|
595
|
+
iamClient;
|
|
596
|
+
sqsClient;
|
|
597
|
+
snsClient;
|
|
598
|
+
lambdaClient;
|
|
599
|
+
stsClient;
|
|
600
|
+
ec2Client;
|
|
601
|
+
dynamoDBClient;
|
|
602
|
+
cloudFormationClient;
|
|
603
|
+
apiGatewayClient;
|
|
604
|
+
eventBridgeClient;
|
|
605
|
+
secretsManagerClient;
|
|
606
|
+
ssmClient;
|
|
607
|
+
cloudFrontClient;
|
|
608
|
+
cloudWatchClient;
|
|
609
|
+
cloudWatchLogsClient;
|
|
610
|
+
bedrockAgentCoreControlClient;
|
|
611
|
+
acmClient;
|
|
612
|
+
config;
|
|
613
|
+
constructor(config = {}) {
|
|
614
|
+
this.config = config;
|
|
615
|
+
}
|
|
616
|
+
/**
|
|
617
|
+
* Get S3 client
|
|
618
|
+
*
|
|
619
|
+
* Note: If region and credentials are not provided, AWS SDK will use:
|
|
620
|
+
* 1. Environment variables (AWS_REGION, AWS_ACCESS_KEY_ID, etc.)
|
|
621
|
+
* 2. AWS credentials file (~/.aws/credentials)
|
|
622
|
+
* 3. IAM role (if running on EC2/ECS/Lambda)
|
|
623
|
+
*/
|
|
624
|
+
getS3Client() {
|
|
625
|
+
if (!this.s3Client) this.s3Client = new S3Client({
|
|
626
|
+
...this.config.region && { region: this.config.region },
|
|
627
|
+
...this.config.credentials && { credentials: this.config.credentials },
|
|
628
|
+
logger: {
|
|
629
|
+
debug: () => {},
|
|
630
|
+
info: () => {},
|
|
631
|
+
warn: () => {},
|
|
632
|
+
error: () => {}
|
|
633
|
+
}
|
|
634
|
+
});
|
|
635
|
+
return this.s3Client;
|
|
636
|
+
}
|
|
637
|
+
/**
|
|
638
|
+
* Get Cloud Control API client
|
|
639
|
+
*
|
|
640
|
+
* Note: If region and credentials are not provided, AWS SDK will use:
|
|
641
|
+
* 1. Environment variables (AWS_REGION, AWS_ACCESS_KEY_ID, etc.)
|
|
642
|
+
* 2. AWS credentials file (~/.aws/credentials)
|
|
643
|
+
* 3. IAM role (if running on EC2/ECS/Lambda)
|
|
644
|
+
*/
|
|
645
|
+
getCloudControlClient() {
|
|
646
|
+
if (!this.cloudControlClient) this.cloudControlClient = new CloudControlClient({
|
|
647
|
+
...this.config.region && { region: this.config.region },
|
|
648
|
+
...this.config.credentials && { credentials: this.config.credentials }
|
|
649
|
+
});
|
|
650
|
+
return this.cloudControlClient;
|
|
651
|
+
}
|
|
652
|
+
/**
|
|
653
|
+
* Get IAM client
|
|
654
|
+
*
|
|
655
|
+
* Note: IAM is a global service, but we accept region for consistency.
|
|
656
|
+
* If not specified, defaults to us-east-1.
|
|
657
|
+
*/
|
|
658
|
+
getIAMClient() {
|
|
659
|
+
if (!this.iamClient) this.iamClient = new IAMClient({
|
|
660
|
+
region: this.config.region || "us-east-1",
|
|
661
|
+
...this.config.credentials && { credentials: this.config.credentials }
|
|
662
|
+
});
|
|
663
|
+
return this.iamClient;
|
|
664
|
+
}
|
|
665
|
+
/**
|
|
666
|
+
* Convenience getter for S3 client
|
|
667
|
+
*/
|
|
668
|
+
get s3() {
|
|
669
|
+
return this.getS3Client();
|
|
670
|
+
}
|
|
671
|
+
/**
|
|
672
|
+
* Convenience getter for Cloud Control client
|
|
673
|
+
*/
|
|
674
|
+
get cloudControl() {
|
|
675
|
+
return this.getCloudControlClient();
|
|
676
|
+
}
|
|
677
|
+
/**
|
|
678
|
+
* Convenience getter for IAM client
|
|
679
|
+
*/
|
|
680
|
+
get iam() {
|
|
681
|
+
return this.getIAMClient();
|
|
682
|
+
}
|
|
683
|
+
/**
|
|
684
|
+
* Get SQS client
|
|
685
|
+
*/
|
|
686
|
+
getSQSClient() {
|
|
687
|
+
if (!this.sqsClient) this.sqsClient = new SQSClient({
|
|
688
|
+
...this.config.region && { region: this.config.region },
|
|
689
|
+
...this.config.credentials && { credentials: this.config.credentials }
|
|
690
|
+
});
|
|
691
|
+
return this.sqsClient;
|
|
692
|
+
}
|
|
693
|
+
/**
|
|
694
|
+
* Convenience getter for SQS client
|
|
695
|
+
*/
|
|
696
|
+
get sqs() {
|
|
697
|
+
return this.getSQSClient();
|
|
698
|
+
}
|
|
699
|
+
/**
|
|
700
|
+
* Get SNS client
|
|
701
|
+
*/
|
|
702
|
+
getSNSClient() {
|
|
703
|
+
if (!this.snsClient) this.snsClient = new SNSClient({
|
|
704
|
+
...this.config.region && { region: this.config.region },
|
|
705
|
+
...this.config.credentials && { credentials: this.config.credentials }
|
|
706
|
+
});
|
|
707
|
+
return this.snsClient;
|
|
708
|
+
}
|
|
709
|
+
/**
|
|
710
|
+
* Convenience getter for SNS client
|
|
711
|
+
*/
|
|
712
|
+
get sns() {
|
|
713
|
+
return this.getSNSClient();
|
|
714
|
+
}
|
|
715
|
+
/**
|
|
716
|
+
* Get Lambda client
|
|
717
|
+
*/
|
|
718
|
+
getLambdaClient() {
|
|
719
|
+
if (!this.lambdaClient) this.lambdaClient = new LambdaClient({
|
|
720
|
+
...this.config.region && { region: this.config.region },
|
|
721
|
+
...this.config.credentials && { credentials: this.config.credentials }
|
|
722
|
+
});
|
|
723
|
+
return this.lambdaClient;
|
|
724
|
+
}
|
|
725
|
+
/**
|
|
726
|
+
* Convenience getter for Lambda client
|
|
727
|
+
*/
|
|
728
|
+
get lambda() {
|
|
729
|
+
return this.getLambdaClient();
|
|
730
|
+
}
|
|
731
|
+
/**
|
|
732
|
+
* Get EC2 client
|
|
733
|
+
*/
|
|
734
|
+
getEC2Client() {
|
|
735
|
+
if (!this.ec2Client) this.ec2Client = new EC2Client({
|
|
736
|
+
...this.config.region && { region: this.config.region },
|
|
737
|
+
...this.config.credentials && { credentials: this.config.credentials }
|
|
738
|
+
});
|
|
739
|
+
return this.ec2Client;
|
|
740
|
+
}
|
|
741
|
+
/**
|
|
742
|
+
* Convenience getter for EC2 client
|
|
743
|
+
*/
|
|
744
|
+
get ec2() {
|
|
745
|
+
return this.getEC2Client();
|
|
746
|
+
}
|
|
747
|
+
/**
|
|
748
|
+
* Get STS client
|
|
749
|
+
*/
|
|
750
|
+
getSTSClient() {
|
|
751
|
+
if (!this.stsClient) this.stsClient = new STSClient({
|
|
752
|
+
...this.config.region && { region: this.config.region },
|
|
753
|
+
...this.config.credentials && { credentials: this.config.credentials }
|
|
754
|
+
});
|
|
755
|
+
return this.stsClient;
|
|
756
|
+
}
|
|
757
|
+
/**
|
|
758
|
+
* Convenience getter for STS client
|
|
759
|
+
*/
|
|
760
|
+
get sts() {
|
|
761
|
+
return this.getSTSClient();
|
|
762
|
+
}
|
|
763
|
+
/**
|
|
764
|
+
* Get DynamoDB client
|
|
765
|
+
*/
|
|
766
|
+
getDynamoDBClient() {
|
|
767
|
+
if (!this.dynamoDBClient) this.dynamoDBClient = new DynamoDBClient({
|
|
768
|
+
...this.config.region && { region: this.config.region },
|
|
769
|
+
...this.config.credentials && { credentials: this.config.credentials }
|
|
770
|
+
});
|
|
771
|
+
return this.dynamoDBClient;
|
|
772
|
+
}
|
|
773
|
+
/**
|
|
774
|
+
* Convenience getter for DynamoDB client
|
|
775
|
+
*/
|
|
776
|
+
get dynamoDB() {
|
|
777
|
+
return this.getDynamoDBClient();
|
|
778
|
+
}
|
|
779
|
+
/**
|
|
780
|
+
* Get CloudFormation client
|
|
781
|
+
*/
|
|
782
|
+
getCloudFormationClient() {
|
|
783
|
+
if (!this.cloudFormationClient) this.cloudFormationClient = new CloudFormationClient({
|
|
784
|
+
...this.config.region && { region: this.config.region },
|
|
785
|
+
...this.config.credentials && { credentials: this.config.credentials }
|
|
786
|
+
});
|
|
787
|
+
return this.cloudFormationClient;
|
|
788
|
+
}
|
|
789
|
+
/**
|
|
790
|
+
* Convenience getter for CloudFormation client
|
|
791
|
+
*/
|
|
792
|
+
get cloudFormation() {
|
|
793
|
+
return this.getCloudFormationClient();
|
|
794
|
+
}
|
|
795
|
+
/**
|
|
796
|
+
* Get API Gateway client
|
|
797
|
+
*/
|
|
798
|
+
getAPIGatewayClient() {
|
|
799
|
+
if (!this.apiGatewayClient) this.apiGatewayClient = new APIGatewayClient({
|
|
800
|
+
...this.config.region && { region: this.config.region },
|
|
801
|
+
...this.config.credentials && { credentials: this.config.credentials }
|
|
802
|
+
});
|
|
803
|
+
return this.apiGatewayClient;
|
|
804
|
+
}
|
|
805
|
+
/**
|
|
806
|
+
* Convenience getter for API Gateway client
|
|
807
|
+
*/
|
|
808
|
+
get apiGateway() {
|
|
809
|
+
return this.getAPIGatewayClient();
|
|
810
|
+
}
|
|
811
|
+
/**
|
|
812
|
+
* Get EventBridge client
|
|
813
|
+
*/
|
|
814
|
+
getEventBridgeClient() {
|
|
815
|
+
if (!this.eventBridgeClient) this.eventBridgeClient = new EventBridgeClient({
|
|
816
|
+
...this.config.region && { region: this.config.region },
|
|
817
|
+
...this.config.credentials && { credentials: this.config.credentials }
|
|
818
|
+
});
|
|
819
|
+
return this.eventBridgeClient;
|
|
820
|
+
}
|
|
821
|
+
/**
|
|
822
|
+
* Convenience getter for EventBridge client
|
|
823
|
+
*/
|
|
824
|
+
get eventBridge() {
|
|
825
|
+
return this.getEventBridgeClient();
|
|
826
|
+
}
|
|
827
|
+
/**
|
|
828
|
+
* Get Secrets Manager client
|
|
829
|
+
*/
|
|
830
|
+
getSecretsManagerClient() {
|
|
831
|
+
if (!this.secretsManagerClient) this.secretsManagerClient = new SecretsManagerClient({
|
|
832
|
+
...this.config.region && { region: this.config.region },
|
|
833
|
+
...this.config.credentials && { credentials: this.config.credentials }
|
|
834
|
+
});
|
|
835
|
+
return this.secretsManagerClient;
|
|
836
|
+
}
|
|
837
|
+
/**
|
|
838
|
+
* Convenience getter for Secrets Manager client
|
|
839
|
+
*/
|
|
840
|
+
get secretsManager() {
|
|
841
|
+
return this.getSecretsManagerClient();
|
|
842
|
+
}
|
|
843
|
+
/**
|
|
844
|
+
* Get SSM client
|
|
845
|
+
*/
|
|
846
|
+
getSSMClient() {
|
|
847
|
+
if (!this.ssmClient) this.ssmClient = new SSMClient({
|
|
848
|
+
...this.config.region && { region: this.config.region },
|
|
849
|
+
...this.config.credentials && { credentials: this.config.credentials }
|
|
850
|
+
});
|
|
851
|
+
return this.ssmClient;
|
|
852
|
+
}
|
|
853
|
+
/**
|
|
854
|
+
* Convenience getter for SSM client
|
|
855
|
+
*/
|
|
856
|
+
get ssm() {
|
|
857
|
+
return this.getSSMClient();
|
|
858
|
+
}
|
|
859
|
+
/**
|
|
860
|
+
* Get CloudFront client
|
|
861
|
+
*/
|
|
862
|
+
getCloudFrontClient() {
|
|
863
|
+
if (!this.cloudFrontClient) this.cloudFrontClient = new CloudFrontClient({
|
|
864
|
+
...this.config.region && { region: this.config.region },
|
|
865
|
+
...this.config.credentials && { credentials: this.config.credentials }
|
|
866
|
+
});
|
|
867
|
+
return this.cloudFrontClient;
|
|
868
|
+
}
|
|
869
|
+
/**
|
|
870
|
+
* Convenience getter for CloudFront client
|
|
871
|
+
*/
|
|
872
|
+
get cloudFront() {
|
|
873
|
+
return this.getCloudFrontClient();
|
|
874
|
+
}
|
|
875
|
+
/**
|
|
876
|
+
* Get ACM client
|
|
877
|
+
*
|
|
878
|
+
* ACM is region-scoped. The client uses the configured AWS region so the
|
|
879
|
+
* deploy engine's per-stack region resolution carries through. CloudFront
|
|
880
|
+
* users must place their certificate stack in `us-east-1`.
|
|
881
|
+
*/
|
|
882
|
+
getACMClient() {
|
|
883
|
+
if (!this.acmClient) this.acmClient = new ACMClient({
|
|
884
|
+
...this.config.region && { region: this.config.region },
|
|
885
|
+
...this.config.credentials && { credentials: this.config.credentials }
|
|
886
|
+
});
|
|
887
|
+
return this.acmClient;
|
|
888
|
+
}
|
|
889
|
+
/**
|
|
890
|
+
* Convenience getter for ACM client
|
|
891
|
+
*/
|
|
892
|
+
get acm() {
|
|
893
|
+
return this.getACMClient();
|
|
894
|
+
}
|
|
895
|
+
/**
|
|
896
|
+
* Get CloudWatch client
|
|
897
|
+
*/
|
|
898
|
+
getCloudWatchClient() {
|
|
899
|
+
if (!this.cloudWatchClient) this.cloudWatchClient = new CloudWatchClient({
|
|
900
|
+
...this.config.region && { region: this.config.region },
|
|
901
|
+
...this.config.credentials && { credentials: this.config.credentials }
|
|
902
|
+
});
|
|
903
|
+
return this.cloudWatchClient;
|
|
904
|
+
}
|
|
905
|
+
/**
|
|
906
|
+
* Convenience getter for CloudWatch client
|
|
907
|
+
*/
|
|
908
|
+
get cloudWatch() {
|
|
909
|
+
return this.getCloudWatchClient();
|
|
910
|
+
}
|
|
911
|
+
/**
|
|
912
|
+
* Get CloudWatch Logs client
|
|
913
|
+
*/
|
|
914
|
+
getCloudWatchLogsClient() {
|
|
915
|
+
if (!this.cloudWatchLogsClient) this.cloudWatchLogsClient = new CloudWatchLogsClient({
|
|
916
|
+
...this.config.region && { region: this.config.region },
|
|
917
|
+
...this.config.credentials && { credentials: this.config.credentials }
|
|
918
|
+
});
|
|
919
|
+
return this.cloudWatchLogsClient;
|
|
920
|
+
}
|
|
921
|
+
/**
|
|
922
|
+
* Convenience getter for CloudWatch Logs client
|
|
923
|
+
*/
|
|
924
|
+
get cloudWatchLogs() {
|
|
925
|
+
return this.getCloudWatchLogsClient();
|
|
926
|
+
}
|
|
927
|
+
/**
|
|
928
|
+
* Get BedrockAgentCoreControl client
|
|
929
|
+
*/
|
|
930
|
+
getBedrockAgentCoreControlClient() {
|
|
931
|
+
if (!this.bedrockAgentCoreControlClient) this.bedrockAgentCoreControlClient = new BedrockAgentCoreControlClient({
|
|
932
|
+
...this.config.region && { region: this.config.region },
|
|
933
|
+
...this.config.credentials && { credentials: this.config.credentials }
|
|
934
|
+
});
|
|
935
|
+
return this.bedrockAgentCoreControlClient;
|
|
936
|
+
}
|
|
937
|
+
/**
|
|
938
|
+
* Convenience getter for BedrockAgentCoreControl client
|
|
939
|
+
*/
|
|
940
|
+
get bedrockAgentCoreControl() {
|
|
941
|
+
return this.getBedrockAgentCoreControlClient();
|
|
942
|
+
}
|
|
943
|
+
/**
|
|
944
|
+
* Destroy all clients
|
|
945
|
+
*/
|
|
946
|
+
destroy() {
|
|
947
|
+
this.s3Client?.destroy();
|
|
948
|
+
this.cloudControlClient?.destroy();
|
|
949
|
+
this.iamClient?.destroy();
|
|
950
|
+
this.sqsClient?.destroy();
|
|
951
|
+
this.snsClient?.destroy();
|
|
952
|
+
this.lambdaClient?.destroy();
|
|
953
|
+
this.stsClient?.destroy();
|
|
954
|
+
this.ec2Client?.destroy();
|
|
955
|
+
this.dynamoDBClient?.destroy();
|
|
956
|
+
this.cloudFormationClient?.destroy();
|
|
957
|
+
this.apiGatewayClient?.destroy();
|
|
958
|
+
this.eventBridgeClient?.destroy();
|
|
959
|
+
this.secretsManagerClient?.destroy();
|
|
960
|
+
this.ssmClient?.destroy();
|
|
961
|
+
this.cloudFrontClient?.destroy();
|
|
962
|
+
this.cloudWatchClient?.destroy();
|
|
963
|
+
this.cloudWatchLogsClient?.destroy();
|
|
964
|
+
this.bedrockAgentCoreControlClient?.destroy();
|
|
965
|
+
this.acmClient?.destroy();
|
|
966
|
+
}
|
|
967
|
+
};
|
|
968
|
+
/**
|
|
969
|
+
* Global AWS clients instance
|
|
970
|
+
*/
|
|
971
|
+
let globalClients = null;
|
|
972
|
+
/**
|
|
973
|
+
* Get or create global AWS clients
|
|
974
|
+
*/
|
|
975
|
+
function getAwsClients(config) {
|
|
976
|
+
if (!globalClients) globalClients = new AwsClients(config);
|
|
977
|
+
return globalClients;
|
|
978
|
+
}
|
|
979
|
+
/**
|
|
980
|
+
* Set global AWS clients instance
|
|
981
|
+
*/
|
|
982
|
+
function setAwsClients(clients) {
|
|
983
|
+
globalClients = clients;
|
|
984
|
+
}
|
|
985
|
+
/**
|
|
986
|
+
* Reset global AWS clients (useful for testing)
|
|
987
|
+
*/
|
|
988
|
+
function resetAwsClients() {
|
|
989
|
+
globalClients?.destroy();
|
|
990
|
+
globalClients = null;
|
|
991
|
+
}
|
|
992
|
+
|
|
993
|
+
//#endregion
|
|
39
994
|
//#region src/utils/aws-region-resolver.ts
|
|
40
995
|
/**
|
|
41
996
|
* Per-bucket region cache.
|
|
@@ -45,7 +1000,7 @@ import { getSignedUrl } from "@aws-sdk/s3-request-presigner";
|
|
|
45
1000
|
* request — the second caller awaits the same promise instead of issuing a
|
|
46
1001
|
* duplicate API call.
|
|
47
1002
|
*/
|
|
48
|
-
const cache = /* @__PURE__ */ new Map();
|
|
1003
|
+
const cache$1 = /* @__PURE__ */ new Map();
|
|
49
1004
|
/**
|
|
50
1005
|
* Resolve the AWS region of an S3 bucket via `GetBucketLocation`.
|
|
51
1006
|
*
|
|
@@ -70,7 +1025,7 @@ const cache = /* @__PURE__ */ new Map();
|
|
|
70
1025
|
* `opts.fallbackRegion` if provided, else `us-east-1`.
|
|
71
1026
|
*/
|
|
72
1027
|
async function resolveBucketRegion(bucketName, opts = {}) {
|
|
73
|
-
const cached = cache.get(bucketName);
|
|
1028
|
+
const cached = cache$1.get(bucketName);
|
|
74
1029
|
if (cached) return cached;
|
|
75
1030
|
const promise = (async () => {
|
|
76
1031
|
const client = new S3Client({
|
|
@@ -79,7 +1034,7 @@ async function resolveBucketRegion(bucketName, opts = {}) {
|
|
|
79
1034
|
...opts.credentials && { credentials: opts.credentials }
|
|
80
1035
|
});
|
|
81
1036
|
try {
|
|
82
|
-
const { expectedOwnerParam } = await
|
|
1037
|
+
const { expectedOwnerParam } = await Promise.resolve().then(() => expected_bucket_owner_exports);
|
|
83
1038
|
return (await client.send(new GetBucketLocationCommand({
|
|
84
1039
|
Bucket: bucketName,
|
|
85
1040
|
...await expectedOwnerParam(client)
|
|
@@ -90,7 +1045,7 @@ async function resolveBucketRegion(bucketName, opts = {}) {
|
|
|
90
1045
|
client.destroy();
|
|
91
1046
|
}
|
|
92
1047
|
})();
|
|
93
|
-
cache.set(bucketName, promise);
|
|
1048
|
+
cache$1.set(bucketName, promise);
|
|
94
1049
|
return promise;
|
|
95
1050
|
}
|
|
96
1051
|
/**
|
|
@@ -98,7 +1053,7 @@ async function resolveBucketRegion(bucketName, opts = {}) {
|
|
|
98
1053
|
* cases — production code never needs to call this.
|
|
99
1054
|
*/
|
|
100
1055
|
function clearBucketRegionCache() {
|
|
101
|
-
cache.clear();
|
|
1056
|
+
cache$1.clear();
|
|
102
1057
|
}
|
|
103
1058
|
/**
|
|
104
1059
|
* Resolve the cdkd state bucket name + region for a sibling AWS account.
|
|
@@ -1307,6 +2262,87 @@ function collectFnTransformNames(value, seen, out) {
|
|
|
1307
2262
|
}
|
|
1308
2263
|
}
|
|
1309
2264
|
|
|
2265
|
+
//#endregion
|
|
2266
|
+
//#region src/utils/expected-bucket-owner.ts
|
|
2267
|
+
/**
|
|
2268
|
+
* `ExpectedBucketOwner` resolution for cdkd-owned buckets (the state-bucket
|
|
2269
|
+
* family: state / lock / exports-index / deployment-events / transient
|
|
2270
|
+
* template uploads).
|
|
2271
|
+
*
|
|
2272
|
+
* S3 bucket names are global and cdkd's default names are predictable
|
|
2273
|
+
* (`cdkd-state-{accountId}`). Without this header, a bucket pre-created in
|
|
2274
|
+
* ANOTHER account under that name — with a bucket policy that deliberately
|
|
2275
|
+
* ALLOWS this account — would silently accept cdkd's state reads/writes
|
|
2276
|
+
* (name-squatting: the attacker could then read resource properties and
|
|
2277
|
+
* tamper with physical ids). With the header, S3 itself rejects any call
|
|
2278
|
+
* whose bucket owner differs (403), regardless of what the bucket's policy
|
|
2279
|
+
* allows. The asset-storage family has carried the same defense since issue
|
|
2280
|
+
* #1002 PR 1; this module extends it to the state-bucket family.
|
|
2281
|
+
*
|
|
2282
|
+
* Best-effort by design: a test double without a standard `config`, or an
|
|
2283
|
+
* STS failure, resolves to `undefined` (header omitted — pre-hardening
|
|
2284
|
+
* behavior) rather than failing the operation. The S3 calls themselves run
|
|
2285
|
+
* with the same credentials, so a working S3 path implies a working STS
|
|
2286
|
+
* path in practice; the degradation exists for exotic credential setups and
|
|
2287
|
+
* unit-test doubles, not as an expected runtime branch.
|
|
2288
|
+
*/
|
|
2289
|
+
var expected_bucket_owner_exports = /* @__PURE__ */ __exportAll({
|
|
2290
|
+
expectedOwnerParam: () => expectedOwnerParam,
|
|
2291
|
+
resolveExpectedBucketOwner: () => resolveExpectedBucketOwner
|
|
2292
|
+
});
|
|
2293
|
+
const cache = /* @__PURE__ */ new WeakMap();
|
|
2294
|
+
/**
|
|
2295
|
+
* Resolve the AWS account id of the caller behind an S3 client's
|
|
2296
|
+
* credentials. Cached per client instance for the process lifetime (a
|
|
2297
|
+
* region-rebuilt replacement client re-resolves once — same credentials,
|
|
2298
|
+
* one extra STS call).
|
|
2299
|
+
*
|
|
2300
|
+
* Works for the cross-account state-read path too (`Fn::GetStackOutput`
|
|
2301
|
+
* `RoleArn`): the ephemeral backend's client carries the ASSUMED
|
|
2302
|
+
* credentials, so the resolved owner is the producer account — exactly the
|
|
2303
|
+
* owner its `cdkd-state-{producerAccountId}` bucket must have.
|
|
2304
|
+
*/
|
|
2305
|
+
function resolveExpectedBucketOwner(client) {
|
|
2306
|
+
const cached = cache.get(client);
|
|
2307
|
+
if (cached) return cached;
|
|
2308
|
+
const promise = (async () => {
|
|
2309
|
+
try {
|
|
2310
|
+
const config = client.config;
|
|
2311
|
+
if (!config || typeof config.region !== "function" || typeof config.credentials !== "function") return;
|
|
2312
|
+
const region = await config.region();
|
|
2313
|
+
const credentials = await config.credentials();
|
|
2314
|
+
if (!credentials?.accessKeyId || !credentials.secretAccessKey) return;
|
|
2315
|
+
const sts = new STSClient({
|
|
2316
|
+
...typeof region === "string" && region ? { region } : {},
|
|
2317
|
+
credentials: {
|
|
2318
|
+
accessKeyId: credentials.accessKeyId,
|
|
2319
|
+
secretAccessKey: credentials.secretAccessKey,
|
|
2320
|
+
...credentials.sessionToken && { sessionToken: credentials.sessionToken }
|
|
2321
|
+
}
|
|
2322
|
+
});
|
|
2323
|
+
try {
|
|
2324
|
+
return (await sts.send(new GetCallerIdentityCommand({}))).Account;
|
|
2325
|
+
} finally {
|
|
2326
|
+
sts.destroy();
|
|
2327
|
+
}
|
|
2328
|
+
} catch (error) {
|
|
2329
|
+
getLogger().debug(`ExpectedBucketOwner resolution skipped (header omitted): ${String(error)}`);
|
|
2330
|
+
cache.delete(client);
|
|
2331
|
+
return;
|
|
2332
|
+
}
|
|
2333
|
+
})();
|
|
2334
|
+
cache.set(client, promise);
|
|
2335
|
+
return promise;
|
|
2336
|
+
}
|
|
2337
|
+
/**
|
|
2338
|
+
* Spread helper: `{...(await expectedOwnerParam(client))}` adds
|
|
2339
|
+
* `ExpectedBucketOwner` when the owner resolved, nothing otherwise.
|
|
2340
|
+
*/
|
|
2341
|
+
async function expectedOwnerParam(client) {
|
|
2342
|
+
const owner = await resolveExpectedBucketOwner(client);
|
|
2343
|
+
return owner ? { ExpectedBucketOwner: owner } : {};
|
|
2344
|
+
}
|
|
2345
|
+
|
|
1310
2346
|
//#endregion
|
|
1311
2347
|
//#region src/cli/upload-cfn-template.ts
|
|
1312
2348
|
/**
|
|
@@ -1936,7 +2972,7 @@ async function resolveStateBucketWithDefaultAndSource(cliBucket, region) {
|
|
|
1936
2972
|
logger.debug("No state bucket specified, resolving default from account...");
|
|
1937
2973
|
const { GetCallerIdentityCommand } = await import("@aws-sdk/client-sts");
|
|
1938
2974
|
const { S3Client } = await import("@aws-sdk/client-s3");
|
|
1939
|
-
const { getAwsClients } = await
|
|
2975
|
+
const { getAwsClients } = await Promise.resolve().then(() => aws_clients_exports);
|
|
1940
2976
|
const accountId = (await getAwsClients().sts.send(new GetCallerIdentityCommand({}))).Account;
|
|
1941
2977
|
const newName = getDefaultStateBucketName(accountId);
|
|
1942
2978
|
const legacyName = getLegacyStateBucketName(accountId, region);
|
|
@@ -1994,7 +3030,7 @@ async function resolveStateBucketWithDefaultAndSource(cliBucket, region) {
|
|
|
1994
3030
|
*/
|
|
1995
3031
|
async function bucketHasAnyState(client, bucketName) {
|
|
1996
3032
|
const { ListObjectsV2Command } = await import("@aws-sdk/client-s3");
|
|
1997
|
-
const { expectedOwnerParam } = await
|
|
3033
|
+
const { expectedOwnerParam } = await Promise.resolve().then(() => expected_bucket_owner_exports);
|
|
1998
3034
|
try {
|
|
1999
3035
|
return ((await client.send(new ListObjectsV2Command({
|
|
2000
3036
|
Bucket: bucketName,
|
|
@@ -2021,7 +3057,7 @@ async function bucketHasAnyState(client, bucketName) {
|
|
|
2021
3057
|
*/
|
|
2022
3058
|
async function bucketExists(client, bucketName) {
|
|
2023
3059
|
const { HeadBucketCommand } = await import("@aws-sdk/client-s3");
|
|
2024
|
-
const { expectedOwnerParam } = await
|
|
3060
|
+
const { expectedOwnerParam } = await Promise.resolve().then(() => expected_bucket_owner_exports);
|
|
2025
3061
|
try {
|
|
2026
3062
|
await client.send(new HeadBucketCommand({
|
|
2027
3063
|
Bucket: bucketName,
|
|
@@ -3501,7 +4537,7 @@ function containsAnySource(value, map) {
|
|
|
3501
4537
|
}
|
|
3502
4538
|
return false;
|
|
3503
4539
|
}
|
|
3504
|
-
const FOLDABLE_PSEUDO_PARAMS = new Set([
|
|
4540
|
+
const FOLDABLE_PSEUDO_PARAMS = /* @__PURE__ */ new Set([
|
|
3505
4541
|
"AWS::AccountId",
|
|
3506
4542
|
"AWS::Region",
|
|
3507
4543
|
"AWS::Partition",
|
|
@@ -3949,7 +4985,7 @@ var AssetPublisher = class {
|
|
|
3949
4985
|
graph.addNode({
|
|
3950
4986
|
id: publishNodeId,
|
|
3951
4987
|
type: "asset-publish",
|
|
3952
|
-
dependencies: new Set([buildNodeId]),
|
|
4988
|
+
dependencies: /* @__PURE__ */ new Set([buildNodeId]),
|
|
3953
4989
|
state: "pending",
|
|
3954
4990
|
data: {
|
|
3955
4991
|
kind: "docker-publish",
|
|
@@ -5420,7 +6456,7 @@ function defensiveDependsOnToSkip(resource, template) {
|
|
|
5420
6456
|
//#endregion
|
|
5421
6457
|
//#region src/analyzer/dag-builder.ts
|
|
5422
6458
|
const { Graph, alg } = graphlib;
|
|
5423
|
-
const IAM_ROLE_POLICY_TYPES = new Set([
|
|
6459
|
+
const IAM_ROLE_POLICY_TYPES = /* @__PURE__ */ new Set([
|
|
5424
6460
|
"AWS::IAM::Policy",
|
|
5425
6461
|
"AWS::IAM::RolePolicy",
|
|
5426
6462
|
"AWS::IAM::ManagedPolicy"
|
|
@@ -5843,8 +6879,8 @@ var ReplacementRulesRegistry = class {
|
|
|
5843
6879
|
*/
|
|
5844
6880
|
initializeRules() {
|
|
5845
6881
|
this.rules.set("AWS::S3::Bucket", {
|
|
5846
|
-
replacementProperties: new Set(["BucketName"]),
|
|
5847
|
-
updateableProperties: new Set([
|
|
6882
|
+
replacementProperties: /* @__PURE__ */ new Set(["BucketName"]),
|
|
6883
|
+
updateableProperties: /* @__PURE__ */ new Set([
|
|
5848
6884
|
"Tags",
|
|
5849
6885
|
"VersioningConfiguration",
|
|
5850
6886
|
"LifecycleConfiguration",
|
|
@@ -5857,8 +6893,8 @@ var ReplacementRulesRegistry = class {
|
|
|
5857
6893
|
])
|
|
5858
6894
|
});
|
|
5859
6895
|
this.rules.set("AWS::Lambda::Function", {
|
|
5860
|
-
replacementProperties: new Set(["FunctionName"]),
|
|
5861
|
-
updateableProperties: new Set([
|
|
6896
|
+
replacementProperties: /* @__PURE__ */ new Set(["FunctionName"]),
|
|
6897
|
+
updateableProperties: /* @__PURE__ */ new Set([
|
|
5862
6898
|
"Code",
|
|
5863
6899
|
"Handler",
|
|
5864
6900
|
"Runtime",
|
|
@@ -5876,7 +6912,7 @@ var ReplacementRulesRegistry = class {
|
|
|
5876
6912
|
"Architectures"
|
|
5877
6913
|
])
|
|
5878
6914
|
});
|
|
5879
|
-
this.rules.set("AWS::Lambda::LayerVersion", { replacementProperties: new Set([
|
|
6915
|
+
this.rules.set("AWS::Lambda::LayerVersion", { replacementProperties: /* @__PURE__ */ new Set([
|
|
5880
6916
|
"Content",
|
|
5881
6917
|
"LayerName",
|
|
5882
6918
|
"Description",
|
|
@@ -5884,7 +6920,7 @@ var ReplacementRulesRegistry = class {
|
|
|
5884
6920
|
"CompatibleArchitectures",
|
|
5885
6921
|
"LicenseInfo"
|
|
5886
6922
|
]) });
|
|
5887
|
-
this.rules.set("AWS::Lambda::Version", { replacementProperties: new Set([
|
|
6923
|
+
this.rules.set("AWS::Lambda::Version", { replacementProperties: /* @__PURE__ */ new Set([
|
|
5888
6924
|
"CodeSha256",
|
|
5889
6925
|
"Description",
|
|
5890
6926
|
"FunctionName",
|
|
@@ -5892,16 +6928,16 @@ var ReplacementRulesRegistry = class {
|
|
|
5892
6928
|
"RuntimePolicy"
|
|
5893
6929
|
]) });
|
|
5894
6930
|
this.rules.set("AWS::Lambda::EventInvokeConfig", {
|
|
5895
|
-
replacementProperties: new Set(["FunctionName", "Qualifier"]),
|
|
5896
|
-
updateableProperties: new Set([
|
|
6931
|
+
replacementProperties: /* @__PURE__ */ new Set(["FunctionName", "Qualifier"]),
|
|
6932
|
+
updateableProperties: /* @__PURE__ */ new Set([
|
|
5897
6933
|
"MaximumEventAgeInSeconds",
|
|
5898
6934
|
"MaximumRetryAttempts",
|
|
5899
6935
|
"DestinationConfig"
|
|
5900
6936
|
])
|
|
5901
6937
|
});
|
|
5902
6938
|
this.rules.set("AWS::DynamoDB::Table", {
|
|
5903
|
-
replacementProperties: new Set(["TableName", "KeySchema"]),
|
|
5904
|
-
updateableProperties: new Set([
|
|
6939
|
+
replacementProperties: /* @__PURE__ */ new Set(["TableName", "KeySchema"]),
|
|
6940
|
+
updateableProperties: /* @__PURE__ */ new Set([
|
|
5905
6941
|
"BillingMode",
|
|
5906
6942
|
"ProvisionedThroughput",
|
|
5907
6943
|
"GlobalSecondaryIndexes",
|
|
@@ -5912,15 +6948,15 @@ var ReplacementRulesRegistry = class {
|
|
|
5912
6948
|
"TimeToLiveSpecification",
|
|
5913
6949
|
"PointInTimeRecoverySpecification"
|
|
5914
6950
|
]),
|
|
5915
|
-
conditionalReplacements: new Map([["AttributeDefinitions", attributeTypeChangedForSharedAttribute]])
|
|
6951
|
+
conditionalReplacements: /* @__PURE__ */ new Map([["AttributeDefinitions", attributeTypeChangedForSharedAttribute]])
|
|
5916
6952
|
});
|
|
5917
6953
|
this.rules.set("AWS::SQS::Queue", {
|
|
5918
|
-
replacementProperties: new Set([
|
|
6954
|
+
replacementProperties: /* @__PURE__ */ new Set([
|
|
5919
6955
|
"QueueName",
|
|
5920
6956
|
"FifoQueue",
|
|
5921
6957
|
"ContentBasedDeduplication"
|
|
5922
6958
|
]),
|
|
5923
|
-
updateableProperties: new Set([
|
|
6959
|
+
updateableProperties: /* @__PURE__ */ new Set([
|
|
5924
6960
|
"DelaySeconds",
|
|
5925
6961
|
"MaximumMessageSize",
|
|
5926
6962
|
"MessageRetentionPeriod",
|
|
@@ -5931,8 +6967,8 @@ var ReplacementRulesRegistry = class {
|
|
|
5931
6967
|
])
|
|
5932
6968
|
});
|
|
5933
6969
|
this.rules.set("AWS::IAM::Role", {
|
|
5934
|
-
replacementProperties: new Set(["RoleName"]),
|
|
5935
|
-
updateableProperties: new Set([
|
|
6970
|
+
replacementProperties: /* @__PURE__ */ new Set(["RoleName"]),
|
|
6971
|
+
updateableProperties: /* @__PURE__ */ new Set([
|
|
5936
6972
|
"AssumeRolePolicyDocument",
|
|
5937
6973
|
"Description",
|
|
5938
6974
|
"ManagedPolicyArns",
|
|
@@ -5944,8 +6980,8 @@ var ReplacementRulesRegistry = class {
|
|
|
5944
6980
|
])
|
|
5945
6981
|
});
|
|
5946
6982
|
this.rules.set("AWS::SNS::Topic", {
|
|
5947
|
-
replacementProperties: new Set(["TopicName"]),
|
|
5948
|
-
updateableProperties: new Set([
|
|
6983
|
+
replacementProperties: /* @__PURE__ */ new Set(["TopicName"]),
|
|
6984
|
+
updateableProperties: /* @__PURE__ */ new Set([
|
|
5949
6985
|
"DisplayName",
|
|
5950
6986
|
"Subscription",
|
|
5951
6987
|
"KmsMasterKeyId",
|
|
@@ -5954,7 +6990,7 @@ var ReplacementRulesRegistry = class {
|
|
|
5954
6990
|
});
|
|
5955
6991
|
this.rules.set("AWS::CodeCommit::Repository", {
|
|
5956
6992
|
replacementProperties: /* @__PURE__ */ new Set([]),
|
|
5957
|
-
updateableProperties: new Set([
|
|
6993
|
+
updateableProperties: /* @__PURE__ */ new Set([
|
|
5958
6994
|
"RepositoryName",
|
|
5959
6995
|
"RepositoryDescription",
|
|
5960
6996
|
"KmsKeyId",
|
|
@@ -5962,8 +6998,8 @@ var ReplacementRulesRegistry = class {
|
|
|
5962
6998
|
])
|
|
5963
6999
|
});
|
|
5964
7000
|
this.rules.set("AWS::ECR::Repository", {
|
|
5965
|
-
replacementProperties: new Set(["RepositoryName"]),
|
|
5966
|
-
updateableProperties: new Set([
|
|
7001
|
+
replacementProperties: /* @__PURE__ */ new Set(["RepositoryName"]),
|
|
7002
|
+
updateableProperties: /* @__PURE__ */ new Set([
|
|
5967
7003
|
"ImageScanningConfiguration",
|
|
5968
7004
|
"ImageTagMutability",
|
|
5969
7005
|
"LifecyclePolicy",
|
|
@@ -5972,12 +7008,12 @@ var ReplacementRulesRegistry = class {
|
|
|
5972
7008
|
])
|
|
5973
7009
|
});
|
|
5974
7010
|
this.rules.set("AWS::Logs::LogGroup", {
|
|
5975
|
-
replacementProperties: new Set(["LogGroupName"]),
|
|
5976
|
-
updateableProperties: new Set(["RetentionInDays", "KmsKeyId"])
|
|
7011
|
+
replacementProperties: /* @__PURE__ */ new Set(["LogGroupName"]),
|
|
7012
|
+
updateableProperties: /* @__PURE__ */ new Set(["RetentionInDays", "KmsKeyId"])
|
|
5977
7013
|
});
|
|
5978
7014
|
this.rules.set("AWS::Kinesis::Stream", {
|
|
5979
|
-
replacementProperties: new Set(["Name"]),
|
|
5980
|
-
updateableProperties: new Set([
|
|
7015
|
+
replacementProperties: /* @__PURE__ */ new Set(["Name"]),
|
|
7016
|
+
updateableProperties: /* @__PURE__ */ new Set([
|
|
5981
7017
|
"RetentionPeriodHours",
|
|
5982
7018
|
"ShardCount",
|
|
5983
7019
|
"StreamModeDetails",
|
|
@@ -5986,8 +7022,8 @@ var ReplacementRulesRegistry = class {
|
|
|
5986
7022
|
])
|
|
5987
7023
|
});
|
|
5988
7024
|
this.rules.set("AWS::SecretsManager::Secret", {
|
|
5989
|
-
replacementProperties: new Set(["Name"]),
|
|
5990
|
-
updateableProperties: new Set([
|
|
7025
|
+
replacementProperties: /* @__PURE__ */ new Set(["Name"]),
|
|
7026
|
+
updateableProperties: /* @__PURE__ */ new Set([
|
|
5991
7027
|
"Description",
|
|
5992
7028
|
"KmsKeyId",
|
|
5993
7029
|
"SecretString",
|
|
@@ -5997,8 +7033,8 @@ var ReplacementRulesRegistry = class {
|
|
|
5997
7033
|
])
|
|
5998
7034
|
});
|
|
5999
7035
|
this.rules.set("AWS::StepFunctions::StateMachine", {
|
|
6000
|
-
replacementProperties: new Set(["StateMachineName", "StateMachineType"]),
|
|
6001
|
-
updateableProperties: new Set([
|
|
7036
|
+
replacementProperties: /* @__PURE__ */ new Set(["StateMachineName", "StateMachineType"]),
|
|
7037
|
+
updateableProperties: /* @__PURE__ */ new Set([
|
|
6002
7038
|
"DefinitionString",
|
|
6003
7039
|
"DefinitionS3Location",
|
|
6004
7040
|
"Definition",
|
|
@@ -6011,8 +7047,8 @@ var ReplacementRulesRegistry = class {
|
|
|
6011
7047
|
])
|
|
6012
7048
|
});
|
|
6013
7049
|
this.rules.set("AWS::Events::Rule", {
|
|
6014
|
-
replacementProperties: new Set(["Name", "EventBusName"]),
|
|
6015
|
-
updateableProperties: new Set([
|
|
7050
|
+
replacementProperties: /* @__PURE__ */ new Set(["Name", "EventBusName"]),
|
|
7051
|
+
updateableProperties: /* @__PURE__ */ new Set([
|
|
6016
7052
|
"ScheduleExpression",
|
|
6017
7053
|
"EventPattern",
|
|
6018
7054
|
"State",
|
|
@@ -6022,8 +7058,8 @@ var ReplacementRulesRegistry = class {
|
|
|
6022
7058
|
])
|
|
6023
7059
|
});
|
|
6024
7060
|
this.rules.set("AWS::SSM::Parameter", {
|
|
6025
|
-
replacementProperties: new Set(["Name"]),
|
|
6026
|
-
updateableProperties: new Set([
|
|
7061
|
+
replacementProperties: /* @__PURE__ */ new Set(["Name"]),
|
|
7062
|
+
updateableProperties: /* @__PURE__ */ new Set([
|
|
6027
7063
|
"Value",
|
|
6028
7064
|
"Description",
|
|
6029
7065
|
"Type",
|
|
@@ -6036,12 +7072,12 @@ var ReplacementRulesRegistry = class {
|
|
|
6036
7072
|
});
|
|
6037
7073
|
this.rules.set("AWS::Budgets::Budget", {
|
|
6038
7074
|
replacementProperties: /* @__PURE__ */ new Set(),
|
|
6039
|
-
updateableProperties: new Set(["NotificationsWithSubscribers", "ResourceTags"]),
|
|
6040
|
-
conditionalReplacements: new Map([["Budget", budgetNameChanged]])
|
|
7075
|
+
updateableProperties: /* @__PURE__ */ new Set(["NotificationsWithSubscribers", "ResourceTags"]),
|
|
7076
|
+
conditionalReplacements: /* @__PURE__ */ new Map([["Budget", budgetNameChanged]])
|
|
6041
7077
|
});
|
|
6042
7078
|
this.rules.set("AWS::CloudWatch::Alarm", {
|
|
6043
|
-
replacementProperties: new Set(["AlarmName"]),
|
|
6044
|
-
updateableProperties: new Set([
|
|
7079
|
+
replacementProperties: /* @__PURE__ */ new Set(["AlarmName"]),
|
|
7080
|
+
updateableProperties: /* @__PURE__ */ new Set([
|
|
6045
7081
|
"ComparisonOperator",
|
|
6046
7082
|
"EvaluationPeriods",
|
|
6047
7083
|
"DatapointsToAlarm",
|
|
@@ -6066,8 +7102,8 @@ var ReplacementRulesRegistry = class {
|
|
|
6066
7102
|
])
|
|
6067
7103
|
});
|
|
6068
7104
|
this.rules.set("AWS::ApiGateway::RestApi", {
|
|
6069
|
-
replacementProperties: new Set(["Name"]),
|
|
6070
|
-
updateableProperties: new Set([
|
|
7105
|
+
replacementProperties: /* @__PURE__ */ new Set(["Name"]),
|
|
7106
|
+
updateableProperties: /* @__PURE__ */ new Set([
|
|
6071
7107
|
"Description",
|
|
6072
7108
|
"Policy",
|
|
6073
7109
|
"EndpointConfiguration",
|
|
@@ -6076,20 +7112,20 @@ var ReplacementRulesRegistry = class {
|
|
|
6076
7112
|
"Tags"
|
|
6077
7113
|
])
|
|
6078
7114
|
});
|
|
6079
|
-
this.rules.set("AWS::RDS::DBProxy", { replacementProperties: new Set([
|
|
7115
|
+
this.rules.set("AWS::RDS::DBProxy", { replacementProperties: /* @__PURE__ */ new Set([
|
|
6080
7116
|
"DBProxyName",
|
|
6081
7117
|
"EngineFamily",
|
|
6082
7118
|
"VpcSubnetIds"
|
|
6083
7119
|
]) });
|
|
6084
|
-
this.rules.set("AWS::RDS::DBProxyEndpoint", { replacementProperties: new Set([
|
|
7120
|
+
this.rules.set("AWS::RDS::DBProxyEndpoint", { replacementProperties: /* @__PURE__ */ new Set([
|
|
6085
7121
|
"DBProxyName",
|
|
6086
7122
|
"DBProxyEndpointName",
|
|
6087
7123
|
"VpcSubnetIds",
|
|
6088
7124
|
"TargetRole"
|
|
6089
7125
|
]) });
|
|
6090
|
-
this.rules.set("AWS::RDS::DBProxyTargetGroup", { replacementProperties: new Set(["DBProxyName", "TargetGroupName"]) });
|
|
6091
|
-
this.rules.set("AWS::EC2::Instance", { replacementProperties: new Set(["EbsOptimized"]) });
|
|
6092
|
-
this.rules.set("AWS::ECS::TaskDefinition", { replacementProperties: new Set([
|
|
7126
|
+
this.rules.set("AWS::RDS::DBProxyTargetGroup", { replacementProperties: /* @__PURE__ */ new Set(["DBProxyName", "TargetGroupName"]) });
|
|
7127
|
+
this.rules.set("AWS::EC2::Instance", { replacementProperties: /* @__PURE__ */ new Set(["EbsOptimized"]) });
|
|
7128
|
+
this.rules.set("AWS::ECS::TaskDefinition", { replacementProperties: /* @__PURE__ */ new Set([
|
|
6093
7129
|
"Family",
|
|
6094
7130
|
"ContainerDefinitions",
|
|
6095
7131
|
"Cpu",
|
|
@@ -6310,7 +7346,7 @@ function unescapeJsonPointerSegment$1(segment) {
|
|
|
6310
7346
|
* NOT track in-place edits (e.g. a Lambda `Arn`) never trigger spurious
|
|
6311
7347
|
* dependent promotion.
|
|
6312
7348
|
*/
|
|
6313
|
-
const IN_PLACE_UPDATE_DERIVED_ATTRS = Object.freeze({ "AWS::EC2::LaunchTemplate": new Set(["LatestVersionNumber", "DefaultVersionNumber"]) });
|
|
7349
|
+
const IN_PLACE_UPDATE_DERIVED_ATTRS = Object.freeze({ "AWS::EC2::LaunchTemplate": /* @__PURE__ */ new Set(["LatestVersionNumber", "DefaultVersionNumber"]) });
|
|
6314
7350
|
/**
|
|
6315
7351
|
* Diff calculator for comparing desired state (template) with current state
|
|
6316
7352
|
*/
|
|
@@ -6708,7 +7744,7 @@ var DiffCalculator = class DiffCalculator {
|
|
|
6708
7744
|
*/
|
|
6709
7745
|
async compareProperties(resourceType, currentProperties, desiredProperties) {
|
|
6710
7746
|
const changes = [];
|
|
6711
|
-
const allKeys = new Set([...Object.keys(currentProperties), ...Object.keys(desiredProperties)]);
|
|
7747
|
+
const allKeys = /* @__PURE__ */ new Set([...Object.keys(currentProperties), ...Object.keys(desiredProperties)]);
|
|
6712
7748
|
const ignoredProperties = /* @__PURE__ */ new Set();
|
|
6713
7749
|
if (resourceType === "AWS::CloudFormation::CustomResource" || resourceType.startsWith("Custom::")) ignoredProperties.add("Timestamp");
|
|
6714
7750
|
let createOnlyPaths;
|
|
@@ -6736,7 +7772,7 @@ var DiffCalculator = class DiffCalculator {
|
|
|
6736
7772
|
}
|
|
6737
7773
|
return changes;
|
|
6738
7774
|
}
|
|
6739
|
-
static INTRINSIC_KEYS = new Set([
|
|
7775
|
+
static INTRINSIC_KEYS = /* @__PURE__ */ new Set([
|
|
6740
7776
|
"Ref",
|
|
6741
7777
|
"Fn::Sub",
|
|
6742
7778
|
"Fn::GetAtt",
|
|
@@ -7055,6 +8091,130 @@ async function applyRoleArnIfSet(opts) {
|
|
|
7055
8091
|
}
|
|
7056
8092
|
}
|
|
7057
8093
|
|
|
8094
|
+
//#endregion
|
|
8095
|
+
//#region src/provisioning/region-check.ts
|
|
8096
|
+
/**
|
|
8097
|
+
* Verify that the AWS client's region matches the region the resource is
|
|
8098
|
+
* expected to live in before treating a `NotFound` error as idempotent
|
|
8099
|
+
* delete success.
|
|
8100
|
+
*
|
|
8101
|
+
* Why: a destroy run with the wrong region would otherwise receive
|
|
8102
|
+
* `*NotFound` for every resource and silently strip them all from state,
|
|
8103
|
+
* leaving the actual AWS resources orphaned in the real region. The
|
|
8104
|
+
* silent-failure incident that motivated this check was a Lambda in
|
|
8105
|
+
* `us-west-2` removed from state by a destroy that ran with a `us-east-1`
|
|
8106
|
+
* client.
|
|
8107
|
+
*
|
|
8108
|
+
* Behavior:
|
|
8109
|
+
* - If `expectedRegion` is unset, this is a no-op (back-compat: existing
|
|
8110
|
+
* idempotent semantics preserved for callers that have not been
|
|
8111
|
+
* threaded with state region).
|
|
8112
|
+
* - If `clientRegion` matches `expectedRegion`, returns silently.
|
|
8113
|
+
* - Otherwise throws `ProvisioningError` so the caller surfaces the
|
|
8114
|
+
* mismatch instead of swallowing the NotFound.
|
|
8115
|
+
*
|
|
8116
|
+
* @param clientRegion Region resolved from the AWS SDK client config
|
|
8117
|
+
* (typically `await client.config.region()`).
|
|
8118
|
+
* @param expectedRegion Region recorded in stack state, or undefined if
|
|
8119
|
+
* the caller has no expected region.
|
|
8120
|
+
* @param resourceType CloudFormation resource type, used in the error
|
|
8121
|
+
* message and on the thrown ProvisioningError.
|
|
8122
|
+
* @param logicalId Logical ID of the resource, used in the error message
|
|
8123
|
+
* and on the thrown ProvisioningError.
|
|
8124
|
+
* @param physicalId Optional physical ID, used in the error message and
|
|
8125
|
+
* on the thrown ProvisioningError.
|
|
8126
|
+
*/
|
|
8127
|
+
function assertRegionMatch(clientRegion, expectedRegion, resourceType, logicalId, physicalId) {
|
|
8128
|
+
if (!expectedRegion) return;
|
|
8129
|
+
if (!clientRegion) throw new ProvisioningError(`Refusing to treat NotFound as idempotent delete success for ${logicalId} (${resourceType}): AWS client region is unknown but stack state expects ${expectedRegion}. The resource may exist in ${expectedRegion} and would be silently removed from state if this NotFound were trusted.`, resourceType, logicalId, physicalId);
|
|
8130
|
+
if (clientRegion !== expectedRegion) throw new ProvisioningError(`Refusing to treat NotFound as idempotent delete success for ${logicalId} (${resourceType}): AWS client region ${clientRegion} does not match stack state region ${expectedRegion}. The resource likely still exists in ${expectedRegion}; rerun the destroy with the correct region (e.g. --region ${expectedRegion}).`, resourceType, logicalId, physicalId);
|
|
8131
|
+
}
|
|
8132
|
+
|
|
8133
|
+
//#endregion
|
|
8134
|
+
//#region src/provisioning/import-helpers.ts
|
|
8135
|
+
/**
|
|
8136
|
+
* Read an explicit name field from template properties. Returns `undefined`
|
|
8137
|
+
* when the property is missing or not a string — callers fall back to
|
|
8138
|
+
* tag-based lookup in that case.
|
|
8139
|
+
*/
|
|
8140
|
+
function readNameProperty(input, propertyName) {
|
|
8141
|
+
const value = input.properties?.[propertyName];
|
|
8142
|
+
return typeof value === "string" && value.length > 0 ? value : void 0;
|
|
8143
|
+
}
|
|
8144
|
+
/**
|
|
8145
|
+
* Resolve the physical id when the template provides an explicit name OR the
|
|
8146
|
+
* caller passed `--resource`/`--resource-mapping`. Returns `undefined` when
|
|
8147
|
+
* neither shortcut applies — caller must then fall back to tag-based lookup.
|
|
8148
|
+
*
|
|
8149
|
+
* Does NOT verify the resource exists: callers should follow up with a
|
|
8150
|
+
* service-specific `Head*`/`Get*`/`Describe*` to fail fast if the named
|
|
8151
|
+
* resource is missing.
|
|
8152
|
+
*/
|
|
8153
|
+
function resolveExplicitPhysicalId(input, nameProperty) {
|
|
8154
|
+
if (input.knownPhysicalId) return input.knownPhysicalId;
|
|
8155
|
+
if (nameProperty) {
|
|
8156
|
+
const name = readNameProperty(input, nameProperty);
|
|
8157
|
+
if (name) return name;
|
|
8158
|
+
}
|
|
8159
|
+
}
|
|
8160
|
+
/**
|
|
8161
|
+
* The standard tag CDK puts on every deployed resource — its construct path
|
|
8162
|
+
* within the app, e.g. `MyStack/MyConstruct/MyBucket`. Used as the lookup key
|
|
8163
|
+
* when no explicit name is in the template.
|
|
8164
|
+
*/
|
|
8165
|
+
const CDK_PATH_TAG = "aws:cdk:path";
|
|
8166
|
+
/**
|
|
8167
|
+
* Match an AWS resource's tag set against the CDK path the template carries.
|
|
8168
|
+
* Returns true if the resource was deployed by the same CDK construct.
|
|
8169
|
+
*/
|
|
8170
|
+
function matchesCdkPath(tags, cdkPath) {
|
|
8171
|
+
if (!tags || !cdkPath) return false;
|
|
8172
|
+
for (const t of tags) if (t.Key === "aws:cdk:path" && t.Value === cdkPath) return true;
|
|
8173
|
+
return false;
|
|
8174
|
+
}
|
|
8175
|
+
/**
|
|
8176
|
+
* Re-shape an AWS tag list (any of the common shapes — array of `{Key, Value}`,
|
|
8177
|
+
* map keyed by tag name, or v2-style array of `{TagKey, TagValue}`) into the
|
|
8178
|
+
* canonical CFn shape (`Array<{Key, Value}>`) that cdkd state holds, with
|
|
8179
|
+
* `aws:`-prefixed entries filtered out.
|
|
8180
|
+
*
|
|
8181
|
+
* AWS reserves the `aws:` tag prefix; CDK injects `aws:cdk:path` (and
|
|
8182
|
+
* sometimes `aws:cdk:metadata`) on every resource it deploys. Those tags are
|
|
8183
|
+
* NOT in cdkd state's `Tags` (they come from CDK template `Metadata`, not
|
|
8184
|
+
* `Properties.Tags`), so leaving them in the AWS-current snapshot would fire
|
|
8185
|
+
* false-positive drift on every CDK-deployed resource.
|
|
8186
|
+
*
|
|
8187
|
+
* Returns an empty array `[]` when AWS reports no user tags. Callers decide
|
|
8188
|
+
* whether to surface `Tags: []` (most providers — matches the typical
|
|
8189
|
+
* CFn behavior of always emitting Tags in templates) or omit the key
|
|
8190
|
+
* entirely (when the corresponding `create()` only sets Tags when the user
|
|
8191
|
+
* explicitly passes them — see each provider's docstring).
|
|
8192
|
+
*/
|
|
8193
|
+
function normalizeAwsTagsToCfn(tags) {
|
|
8194
|
+
if (!tags) return [];
|
|
8195
|
+
const out = [];
|
|
8196
|
+
if (Array.isArray(tags)) for (const t of tags) {
|
|
8197
|
+
const obj = t;
|
|
8198
|
+
const k = (typeof obj["Key"] === "string" ? obj["Key"] : void 0) ?? (typeof obj["TagKey"] === "string" ? obj["TagKey"] : void 0) ?? (typeof obj["key"] === "string" ? obj["key"] : void 0);
|
|
8199
|
+
const v = (typeof obj["Value"] === "string" ? obj["Value"] : void 0) ?? (typeof obj["TagValue"] === "string" ? obj["TagValue"] : void 0) ?? (typeof obj["value"] === "string" ? obj["value"] : void 0);
|
|
8200
|
+
if (typeof k !== "string" || k.length === 0) continue;
|
|
8201
|
+
if (k.startsWith("aws:")) continue;
|
|
8202
|
+
out.push({
|
|
8203
|
+
Key: k,
|
|
8204
|
+
Value: typeof v === "string" ? v : ""
|
|
8205
|
+
});
|
|
8206
|
+
}
|
|
8207
|
+
else for (const [k, v] of Object.entries(tags)) {
|
|
8208
|
+
if (!k || k.startsWith("aws:")) continue;
|
|
8209
|
+
out.push({
|
|
8210
|
+
Key: k,
|
|
8211
|
+
Value: typeof v === "string" ? v : ""
|
|
8212
|
+
});
|
|
8213
|
+
}
|
|
8214
|
+
out.sort((a, b) => a.Key < b.Key ? -1 : a.Key > b.Key ? 1 : 0);
|
|
8215
|
+
return out;
|
|
8216
|
+
}
|
|
8217
|
+
|
|
7058
8218
|
//#endregion
|
|
7059
8219
|
//#region src/provisioning/providers/wafv2-provider.ts
|
|
7060
8220
|
/**
|
|
@@ -7110,7 +8270,7 @@ var WAFv2WebACLProvider = class {
|
|
|
7110
8270
|
wafv2Client;
|
|
7111
8271
|
providerRegion = process.env["AWS_REGION"];
|
|
7112
8272
|
logger = getLogger().child("WAFv2WebACLProvider");
|
|
7113
|
-
handledProperties = new Map([["AWS::WAFv2::WebACL", new Set([
|
|
8273
|
+
handledProperties = /* @__PURE__ */ new Map([["AWS::WAFv2::WebACL", /* @__PURE__ */ new Set([
|
|
7114
8274
|
"Name",
|
|
7115
8275
|
"Scope",
|
|
7116
8276
|
"Tags",
|
|
@@ -7276,14 +8436,14 @@ var WAFv2WebACLProvider = class {
|
|
|
7276
8436
|
const tagsToRemove = [];
|
|
7277
8437
|
for (const k of oldMap.keys()) if (!newMap.has(k)) tagsToRemove.push(k);
|
|
7278
8438
|
if (tagsToRemove.length > 0) {
|
|
7279
|
-
await this.getClient().send(new UntagResourceCommand$
|
|
8439
|
+
await this.getClient().send(new UntagResourceCommand$12({
|
|
7280
8440
|
ResourceARN: arn,
|
|
7281
8441
|
TagKeys: tagsToRemove
|
|
7282
8442
|
}));
|
|
7283
8443
|
this.logger.debug(`Removed ${tagsToRemove.length} tag(s) from WAFv2 WebACL ${arn}`);
|
|
7284
8444
|
}
|
|
7285
8445
|
if (tagsToAdd.length > 0) {
|
|
7286
|
-
await this.getClient().send(new TagResourceCommand$
|
|
8446
|
+
await this.getClient().send(new TagResourceCommand$12({
|
|
7287
8447
|
ResourceARN: arn,
|
|
7288
8448
|
Tags: tagsToAdd
|
|
7289
8449
|
}));
|
|
@@ -7334,7 +8494,7 @@ var WAFv2WebACLProvider = class {
|
|
|
7334
8494
|
result["TokenDomains"] = webACL.TokenDomains ? [...webACL.TokenDomains] : [];
|
|
7335
8495
|
if (webACL.AssociationConfig) result["AssociationConfig"] = webACL.AssociationConfig;
|
|
7336
8496
|
try {
|
|
7337
|
-
result["Tags"] = normalizeAwsTagsToCfn((await this.getClient().send(new ListTagsForResourceCommand$
|
|
8497
|
+
result["Tags"] = normalizeAwsTagsToCfn((await this.getClient().send(new ListTagsForResourceCommand$11({ ResourceARN: physicalId }))).TagInfoForResource?.TagList);
|
|
7338
8498
|
} catch (err) {
|
|
7339
8499
|
this.logger.debug(`WAFv2 ListTagsForResource(${physicalId}) failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
7340
8500
|
}
|
|
@@ -7379,7 +8539,7 @@ var WAFv2WebACLProvider = class {
|
|
|
7379
8539
|
}));
|
|
7380
8540
|
for (const item of list.WebACLs ?? []) {
|
|
7381
8541
|
if (!item.ARN) continue;
|
|
7382
|
-
const tagList = (await this.getClient().send(new ListTagsForResourceCommand$
|
|
8542
|
+
const tagList = (await this.getClient().send(new ListTagsForResourceCommand$11({ ResourceARN: item.ARN }))).TagInfoForResource?.TagList;
|
|
7383
8543
|
if (matchesCdkPath(tagList, input.cdkPath)) return {
|
|
7384
8544
|
physicalId: item.ARN,
|
|
7385
8545
|
attributes: {}
|
|
@@ -7473,7 +8633,7 @@ const AWS_NO_VALUE = Symbol("AWS::NoValue");
|
|
|
7473
8633
|
* after-last-pipe extraction would return the PARENT id for them.
|
|
7474
8634
|
* 5. Pin each addition with a unit test in intrinsic-functions.test.ts.
|
|
7475
8635
|
*/
|
|
7476
|
-
const REF_RETURNS_SEGMENT_AFTER_PIPE = new Set([
|
|
8636
|
+
const REF_RETURNS_SEGMENT_AFTER_PIPE = /* @__PURE__ */ new Set([
|
|
7477
8637
|
"AWS::ApiGateway::Model",
|
|
7478
8638
|
"AWS::ApiGateway::RequestValidator",
|
|
7479
8639
|
"AWS::ApiGateway::Stage",
|
|
@@ -7526,7 +8686,7 @@ const REF_RETURNS_SEGMENT_AFTER_PIPE = new Set([
|
|
|
7526
8686
|
* Deployment is `[ApiId, DeploymentId]` (after-pipe). Always re-check the
|
|
7527
8687
|
* type's own `describe-type` primaryIdentifier.
|
|
7528
8688
|
*/
|
|
7529
|
-
const REF_RETURNS_SEGMENT_BEFORE_FIRST_PIPE = new Set([
|
|
8689
|
+
const REF_RETURNS_SEGMENT_BEFORE_FIRST_PIPE = /* @__PURE__ */ new Set([
|
|
7530
8690
|
"AWS::ApiGateway::Deployment",
|
|
7531
8691
|
"AWS::ApiGateway::DocumentationPart",
|
|
7532
8692
|
"AWS::ApiGatewayV2::Authorizer",
|
|
@@ -7544,7 +8704,7 @@ const REF_RETURNS_SEGMENT_BEFORE_FIRST_PIPE = new Set([
|
|
|
7544
8704
|
* - `AWS::CloudTrail::Trail` → the trail name (`arn:…:trail/<name>`).
|
|
7545
8705
|
* Value: the ARN resource-type marker after which the CFn `Ref` value starts.
|
|
7546
8706
|
*/
|
|
7547
|
-
const REF_RETURNS_NAME_FROM_ARN = new Map([["AWS::Events::Rule", ":rule/"], ["AWS::CloudTrail::Trail", ":trail/"]]);
|
|
8707
|
+
const REF_RETURNS_NAME_FROM_ARN = /* @__PURE__ */ new Map([["AWS::Events::Rule", ":rule/"], ["AWS::CloudTrail::Trail", ":trail/"]]);
|
|
7548
8708
|
/**
|
|
7549
8709
|
* Build a {@link RefStateLookup} from a resource's stored state maps, checking
|
|
7550
8710
|
* `properties` first (the template value CFn `Ref` mirrors) then `attributes`.
|
|
@@ -7628,7 +8788,7 @@ function cfnRefValueFromPhysicalId(resourceType, physicalId, stateLookup) {
|
|
|
7628
8788
|
* resolver ever runs, so by resolution time it should already be gone. Listing
|
|
7629
8789
|
* it here keeps a stray (already-expanded) occurrence from hard-erroring.
|
|
7630
8790
|
*/
|
|
7631
|
-
const HANDLED_INTRINSIC_KEYS = new Set([
|
|
8791
|
+
const HANDLED_INTRINSIC_KEYS = /* @__PURE__ */ new Set([
|
|
7632
8792
|
"Ref",
|
|
7633
8793
|
"Fn::GetAtt",
|
|
7634
8794
|
"Fn::Join",
|
|
@@ -9082,6 +10242,36 @@ var IntrinsicFunctionResolver = class {
|
|
|
9082
10242
|
}
|
|
9083
10243
|
};
|
|
9084
10244
|
|
|
10245
|
+
//#endregion
|
|
10246
|
+
//#region src/provisioning/ec2-termination-protection.ts
|
|
10247
|
+
/**
|
|
10248
|
+
* Flip `DisableApiTermination` off on an instance. Idempotent — EC2 accepts the
|
|
10249
|
+
* call when the attribute is already false. Non-fatal: a NotFound (already
|
|
10250
|
+
* gone) or any other error is swallowed at debug so the actual delete still
|
|
10251
|
+
* proceeds (it will surface the real failure if the instance truly cannot be
|
|
10252
|
+
* deleted).
|
|
10253
|
+
*/
|
|
10254
|
+
async function disableInstanceApiTermination(client, instanceId, logger) {
|
|
10255
|
+
try {
|
|
10256
|
+
await client.send(new ModifyInstanceAttributeCommand({
|
|
10257
|
+
InstanceId: instanceId,
|
|
10258
|
+
DisableApiTermination: { Value: false }
|
|
10259
|
+
}));
|
|
10260
|
+
logger.debug(`Disabled DisableApiTermination on EC2 Instance ${instanceId} before deletion`);
|
|
10261
|
+
} catch (flipError) {
|
|
10262
|
+
logger.debug(`Could not disable DisableApiTermination on ${instanceId}: ${flipError instanceof Error ? flipError.message : String(flipError)}`);
|
|
10263
|
+
}
|
|
10264
|
+
}
|
|
10265
|
+
/**
|
|
10266
|
+
* Does this error message indicate the terminate / delete raced the
|
|
10267
|
+
* `DisableApiTermination` flip-off propagation (so re-flipping + retrying is
|
|
10268
|
+
* the right move)? Matches both the SDK `TerminateInstances` 400 and the Cloud
|
|
10269
|
+
* Control `DeleteResource` wrapper of the same underlying EC2 error.
|
|
10270
|
+
*/
|
|
10271
|
+
function isTerminationProtectionPropagationError(message) {
|
|
10272
|
+
return /may not be terminated|disableApiTermination/i.test(message);
|
|
10273
|
+
}
|
|
10274
|
+
|
|
9085
10275
|
//#endregion
|
|
9086
10276
|
//#region src/provisioning/json-patch-generator.ts
|
|
9087
10277
|
/**
|
|
@@ -9287,7 +10477,7 @@ function unescapeJsonPointerSegment(segment) {
|
|
|
9287
10477
|
* pre-flight rejects these fast with an actionable message instead of letting
|
|
9288
10478
|
* the optimistic Cloud Control fallthrough fail mid-deploy.
|
|
9289
10479
|
*/
|
|
9290
|
-
const NON_PROVISIONABLE_TYPES = new Set([
|
|
10480
|
+
const NON_PROVISIONABLE_TYPES = /* @__PURE__ */ new Set([
|
|
9291
10481
|
"Alexa::ASK::Skill",
|
|
9292
10482
|
"AWS::AmazonMQ::ConfigurationAssociation",
|
|
9293
10483
|
"AWS::ApiGatewayV2::ApiGatewayManagedOverrides",
|
|
@@ -9496,7 +10686,7 @@ function unsupportedTypeIssueUrl(resourceType) {
|
|
|
9496
10686
|
* CC API schema declares these as type: ["string", "object"] but
|
|
9497
10687
|
* the implementation only accepts strings.
|
|
9498
10688
|
*/
|
|
9499
|
-
const JSON_STRING_PROPERTIES = { "AWS::Events::Rule": new Set(["EventPattern"]) };
|
|
10689
|
+
const JSON_STRING_PROPERTIES = { "AWS::Events::Rule": /* @__PURE__ */ new Set(["EventPattern"]) };
|
|
9500
10690
|
/**
|
|
9501
10691
|
* Stringify object properties that CC API expects as JSON strings.
|
|
9502
10692
|
*/
|
|
@@ -9685,7 +10875,7 @@ var CloudControlProvider = class {
|
|
|
9685
10875
|
this.logger.debug(`Deleting resource ${logicalId} (${resourceType}), physical ID: ${physicalId}`);
|
|
9686
10876
|
if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
|
|
9687
10877
|
this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
|
|
9688
|
-
const { ASGProvider } = await import("./asg-provider-
|
|
10878
|
+
const { ASGProvider } = await import("./asg-provider-CMWe8LlY.js").then((n) => n.n);
|
|
9689
10879
|
await new ASGProvider().delete(logicalId, physicalId, resourceType, _properties, context);
|
|
9690
10880
|
return;
|
|
9691
10881
|
}
|
|
@@ -10086,7 +11276,7 @@ var CloudControlProvider = class {
|
|
|
10086
11276
|
* even if they appear to be supported.
|
|
10087
11277
|
*/
|
|
10088
11278
|
static isSupportedResourceType(resourceType) {
|
|
10089
|
-
if (new Set([
|
|
11279
|
+
if ((/* @__PURE__ */ new Set([
|
|
10090
11280
|
"AWS::IAM::Role",
|
|
10091
11281
|
"AWS::IAM::Policy",
|
|
10092
11282
|
"AWS::IAM::User",
|
|
@@ -10102,7 +11292,7 @@ var CloudControlProvider = class {
|
|
|
10102
11292
|
"Custom::CDKBucketDeployment",
|
|
10103
11293
|
"Custom::S3AutoDeleteObjects",
|
|
10104
11294
|
"AWS::Route53::HostedZone"
|
|
10105
|
-
]).has(resourceType)) return false;
|
|
11295
|
+
])).has(resourceType)) return false;
|
|
10106
11296
|
if (resourceType.startsWith("Custom::") || resourceType.startsWith("AWS::CloudFormation::CustomResource")) return false;
|
|
10107
11297
|
if (isNonProvisionable(resourceType)) return false;
|
|
10108
11298
|
return resourceType.startsWith("AWS::");
|
|
@@ -10862,13 +12052,13 @@ var CustomResourceProvider = class CustomResourceProvider {
|
|
|
10862
12052
|
|
|
10863
12053
|
//#endregion
|
|
10864
12054
|
//#region src/provisioning/property-coverage.generated.ts
|
|
10865
|
-
const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
12055
|
+
const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
10866
12056
|
["AWS::ApiGateway::Account", {
|
|
10867
|
-
handled: new Set(["CloudWatchRoleArn"]),
|
|
12057
|
+
handled: /* @__PURE__ */ new Set(["CloudWatchRoleArn"]),
|
|
10868
12058
|
silentDrop: /* @__PURE__ */ new Map()
|
|
10869
12059
|
}],
|
|
10870
12060
|
["AWS::ApiGateway::Authorizer", {
|
|
10871
|
-
handled: new Set([
|
|
12061
|
+
handled: /* @__PURE__ */ new Set([
|
|
10872
12062
|
"AuthorizerCredentials",
|
|
10873
12063
|
"AuthorizerResultTtlInSeconds",
|
|
10874
12064
|
"AuthorizerUri",
|
|
@@ -10883,15 +12073,15 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
10883
12073
|
silentDrop: /* @__PURE__ */ new Map()
|
|
10884
12074
|
}],
|
|
10885
12075
|
["AWS::ApiGateway::Deployment", {
|
|
10886
|
-
handled: new Set(["Description", "RestApiId"]),
|
|
10887
|
-
silentDrop: new Map([
|
|
12076
|
+
handled: /* @__PURE__ */ new Set(["Description", "RestApiId"]),
|
|
12077
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
10888
12078
|
["DeploymentCanarySettings", "not yet implemented by cdkd"],
|
|
10889
12079
|
["StageDescription", "CFn-only convenience for inline-creating a Stage; declare AWS::ApiGateway::Stage with the Description property instead"],
|
|
10890
12080
|
["StageName", "CFn-only convenience for inline-creating a Stage from a Deployment; declare AWS::ApiGateway::Stage explicitly to attach to this Deployment"]
|
|
10891
12081
|
])
|
|
10892
12082
|
}],
|
|
10893
12083
|
["AWS::ApiGateway::Method", {
|
|
10894
|
-
handled: new Set([
|
|
12084
|
+
handled: /* @__PURE__ */ new Set([
|
|
10895
12085
|
"ApiKeyRequired",
|
|
10896
12086
|
"AuthorizationScopes",
|
|
10897
12087
|
"AuthorizationType",
|
|
@@ -10909,7 +12099,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
10909
12099
|
silentDrop: /* @__PURE__ */ new Map()
|
|
10910
12100
|
}],
|
|
10911
12101
|
["AWS::ApiGateway::Resource", {
|
|
10912
|
-
handled: new Set([
|
|
12102
|
+
handled: /* @__PURE__ */ new Set([
|
|
10913
12103
|
"ParentId",
|
|
10914
12104
|
"PathPart",
|
|
10915
12105
|
"RestApiId"
|
|
@@ -10917,7 +12107,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
10917
12107
|
silentDrop: /* @__PURE__ */ new Map()
|
|
10918
12108
|
}],
|
|
10919
12109
|
["AWS::ApiGateway::Stage", {
|
|
10920
|
-
handled: new Set([
|
|
12110
|
+
handled: /* @__PURE__ */ new Set([
|
|
10921
12111
|
"DeploymentId",
|
|
10922
12112
|
"Description",
|
|
10923
12113
|
"MethodSettings",
|
|
@@ -10927,7 +12117,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
10927
12117
|
"TracingEnabled",
|
|
10928
12118
|
"Variables"
|
|
10929
12119
|
]),
|
|
10930
|
-
silentDrop: new Map([
|
|
12120
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
10931
12121
|
["AccessLogSetting", "not yet implemented by cdkd"],
|
|
10932
12122
|
["CacheClusterEnabled", "not yet implemented by cdkd"],
|
|
10933
12123
|
["CacheClusterSize", "not yet implemented by cdkd"],
|
|
@@ -10937,7 +12127,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
10937
12127
|
])
|
|
10938
12128
|
}],
|
|
10939
12129
|
["AWS::ApiGatewayV2::Api", {
|
|
10940
|
-
handled: new Set([
|
|
12130
|
+
handled: /* @__PURE__ */ new Set([
|
|
10941
12131
|
"ApiKeySelectionExpression",
|
|
10942
12132
|
"CorsConfiguration",
|
|
10943
12133
|
"Description",
|
|
@@ -10949,7 +12139,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
10949
12139
|
"Tags",
|
|
10950
12140
|
"Version"
|
|
10951
12141
|
]),
|
|
10952
|
-
silentDrop: new Map([
|
|
12142
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
10953
12143
|
["BasePath", "OpenAPI-import-only basePath override; meaningful only on the ImportApi code path."],
|
|
10954
12144
|
["Body", "OpenAPI/Swagger inline spec; routed through ImportApi, not the field-by-field CreateApi path."],
|
|
10955
12145
|
["BodyS3Location", "OpenAPI/Swagger spec on S3; routed through ImportApi, not the field-by-field CreateApi path."],
|
|
@@ -10961,7 +12151,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
10961
12151
|
])
|
|
10962
12152
|
}],
|
|
10963
12153
|
["AWS::ApiGatewayV2::Authorizer", {
|
|
10964
|
-
handled: new Set([
|
|
12154
|
+
handled: /* @__PURE__ */ new Set([
|
|
10965
12155
|
"ApiId",
|
|
10966
12156
|
"AuthorizerCredentialsArn",
|
|
10967
12157
|
"AuthorizerPayloadFormatVersion",
|
|
@@ -10977,7 +12167,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
10977
12167
|
silentDrop: /* @__PURE__ */ new Map()
|
|
10978
12168
|
}],
|
|
10979
12169
|
["AWS::ApiGatewayV2::Integration", {
|
|
10980
|
-
handled: new Set([
|
|
12170
|
+
handled: /* @__PURE__ */ new Set([
|
|
10981
12171
|
"ApiId",
|
|
10982
12172
|
"Description",
|
|
10983
12173
|
"IntegrationMethod",
|
|
@@ -10987,7 +12177,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
10987
12177
|
"RequestParameters",
|
|
10988
12178
|
"TimeoutInMillis"
|
|
10989
12179
|
]),
|
|
10990
|
-
silentDrop: new Map([
|
|
12180
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
10991
12181
|
["ConnectionId", "not yet implemented by cdkd"],
|
|
10992
12182
|
["ConnectionType", "not yet implemented by cdkd"],
|
|
10993
12183
|
["ContentHandlingStrategy", "not yet implemented by cdkd"],
|
|
@@ -11001,7 +12191,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11001
12191
|
])
|
|
11002
12192
|
}],
|
|
11003
12193
|
["AWS::ApiGatewayV2::Route", {
|
|
11004
|
-
handled: new Set([
|
|
12194
|
+
handled: /* @__PURE__ */ new Set([
|
|
11005
12195
|
"ApiId",
|
|
11006
12196
|
"AuthorizationScopes",
|
|
11007
12197
|
"AuthorizationType",
|
|
@@ -11010,7 +12200,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11010
12200
|
"RouteKey",
|
|
11011
12201
|
"Target"
|
|
11012
12202
|
]),
|
|
11013
|
-
silentDrop: new Map([
|
|
12203
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
11014
12204
|
["ApiKeyRequired", "not yet implemented by cdkd"],
|
|
11015
12205
|
["ModelSelectionExpression", "not yet implemented by cdkd"],
|
|
11016
12206
|
["RequestModels", "not yet implemented by cdkd"],
|
|
@@ -11019,7 +12209,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11019
12209
|
])
|
|
11020
12210
|
}],
|
|
11021
12211
|
["AWS::ApiGatewayV2::Stage", {
|
|
11022
|
-
handled: new Set([
|
|
12212
|
+
handled: /* @__PURE__ */ new Set([
|
|
11023
12213
|
"ApiId",
|
|
11024
12214
|
"AutoDeploy",
|
|
11025
12215
|
"DefaultRouteSettings",
|
|
@@ -11028,7 +12218,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11028
12218
|
"StageVariables",
|
|
11029
12219
|
"Tags"
|
|
11030
12220
|
]),
|
|
11031
|
-
silentDrop: new Map([
|
|
12221
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
11032
12222
|
["AccessLogSettings", "not yet implemented by cdkd"],
|
|
11033
12223
|
["ClientCertificateId", "not yet implemented by cdkd"],
|
|
11034
12224
|
["DeploymentId", "not yet implemented by cdkd"],
|
|
@@ -11036,7 +12226,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11036
12226
|
])
|
|
11037
12227
|
}],
|
|
11038
12228
|
["AWS::AppSync::ApiKey", {
|
|
11039
|
-
handled: new Set([
|
|
12229
|
+
handled: /* @__PURE__ */ new Set([
|
|
11040
12230
|
"ApiId",
|
|
11041
12231
|
"Description",
|
|
11042
12232
|
"Expires"
|
|
@@ -11044,7 +12234,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11044
12234
|
silentDrop: /* @__PURE__ */ new Map()
|
|
11045
12235
|
}],
|
|
11046
12236
|
["AWS::AppSync::DataSource", {
|
|
11047
|
-
handled: new Set([
|
|
12237
|
+
handled: /* @__PURE__ */ new Set([
|
|
11048
12238
|
"ApiId",
|
|
11049
12239
|
"Description",
|
|
11050
12240
|
"DynamoDBConfig",
|
|
@@ -11054,7 +12244,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11054
12244
|
"ServiceRoleArn",
|
|
11055
12245
|
"Type"
|
|
11056
12246
|
]),
|
|
11057
|
-
silentDrop: new Map([
|
|
12247
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
11058
12248
|
["ElasticsearchConfig", "Legacy Elasticsearch alias; use OpenSearchServiceConfig (AppSync deprecated the Elasticsearch DataSource type in favor of OpenSearch)"],
|
|
11059
12249
|
["EventBridgeConfig", "not yet implemented by cdkd"],
|
|
11060
12250
|
["MetricsConfig", "not yet implemented by cdkd"],
|
|
@@ -11063,14 +12253,14 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11063
12253
|
])
|
|
11064
12254
|
}],
|
|
11065
12255
|
["AWS::AppSync::GraphQLApi", {
|
|
11066
|
-
handled: new Set([
|
|
12256
|
+
handled: /* @__PURE__ */ new Set([
|
|
11067
12257
|
"AuthenticationType",
|
|
11068
12258
|
"LogConfig",
|
|
11069
12259
|
"Name",
|
|
11070
12260
|
"Tags",
|
|
11071
12261
|
"XrayEnabled"
|
|
11072
12262
|
]),
|
|
11073
|
-
silentDrop: new Map([
|
|
12263
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
11074
12264
|
["AdditionalAuthenticationProviders", "not yet implemented by cdkd"],
|
|
11075
12265
|
["ApiType", "not yet implemented by cdkd"],
|
|
11076
12266
|
["EnhancedMetricsConfig", "not yet implemented by cdkd"],
|
|
@@ -11087,7 +12277,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11087
12277
|
])
|
|
11088
12278
|
}],
|
|
11089
12279
|
["AWS::AppSync::GraphQLSchema", {
|
|
11090
|
-
handled: new Set([
|
|
12280
|
+
handled: /* @__PURE__ */ new Set([
|
|
11091
12281
|
"ApiId",
|
|
11092
12282
|
"Definition",
|
|
11093
12283
|
"DefinitionS3Location"
|
|
@@ -11095,7 +12285,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11095
12285
|
silentDrop: /* @__PURE__ */ new Map()
|
|
11096
12286
|
}],
|
|
11097
12287
|
["AWS::AppSync::Resolver", {
|
|
11098
|
-
handled: new Set([
|
|
12288
|
+
handled: /* @__PURE__ */ new Set([
|
|
11099
12289
|
"ApiId",
|
|
11100
12290
|
"Code",
|
|
11101
12291
|
"DataSourceName",
|
|
@@ -11107,7 +12297,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11107
12297
|
"Runtime",
|
|
11108
12298
|
"TypeName"
|
|
11109
12299
|
]),
|
|
11110
|
-
silentDrop: new Map([
|
|
12300
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
11111
12301
|
["CachingConfig", "not yet implemented by cdkd"],
|
|
11112
12302
|
["CodeS3Location", "not yet implemented by cdkd"],
|
|
11113
12303
|
["MaxBatchSize", "not yet implemented by cdkd"],
|
|
@@ -11118,7 +12308,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11118
12308
|
])
|
|
11119
12309
|
}],
|
|
11120
12310
|
["AWS::AutoScaling::AutoScalingGroup", {
|
|
11121
|
-
handled: new Set([
|
|
12311
|
+
handled: /* @__PURE__ */ new Set([
|
|
11122
12312
|
"AutoScalingGroupName",
|
|
11123
12313
|
"AvailabilityZoneDistribution",
|
|
11124
12314
|
"AvailabilityZoneImpairmentPolicy",
|
|
@@ -11153,7 +12343,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11153
12343
|
"TrafficSources",
|
|
11154
12344
|
"VPCZoneIdentifier"
|
|
11155
12345
|
]),
|
|
11156
|
-
silentDrop: new Map([
|
|
12346
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
11157
12347
|
["AvailabilityZoneIds", "not yet implemented by cdkd"],
|
|
11158
12348
|
["InstanceId", "not yet implemented by cdkd"],
|
|
11159
12349
|
["InstanceLifecyclePolicy", "not yet implemented by cdkd"],
|
|
@@ -11171,7 +12361,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11171
12361
|
silentDrop: /* @__PURE__ */ new Map()
|
|
11172
12362
|
}],
|
|
11173
12363
|
["AWS::BedrockAgentCore::Evaluator", {
|
|
11174
|
-
handled: new Set([
|
|
12364
|
+
handled: /* @__PURE__ */ new Set([
|
|
11175
12365
|
"Description",
|
|
11176
12366
|
"EvaluatorConfig",
|
|
11177
12367
|
"EvaluatorName",
|
|
@@ -11182,7 +12372,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11182
12372
|
silentDrop: /* @__PURE__ */ new Map()
|
|
11183
12373
|
}],
|
|
11184
12374
|
["AWS::BedrockAgentCore::Runtime", {
|
|
11185
|
-
handled: new Set([
|
|
12375
|
+
handled: /* @__PURE__ */ new Set([
|
|
11186
12376
|
"AgentRuntimeArtifact",
|
|
11187
12377
|
"AgentRuntimeName",
|
|
11188
12378
|
"AuthorizerConfiguration",
|
|
@@ -11194,14 +12384,14 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11194
12384
|
"ProtocolConfiguration",
|
|
11195
12385
|
"RoleArn"
|
|
11196
12386
|
]),
|
|
11197
|
-
silentDrop: new Map([
|
|
12387
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
11198
12388
|
["FilesystemConfigurations", "not yet implemented by cdkd"],
|
|
11199
12389
|
["RequestHeaderConfiguration", "not yet implemented by cdkd"],
|
|
11200
12390
|
["Tags", "not yet implemented by cdkd"]
|
|
11201
12391
|
])
|
|
11202
12392
|
}],
|
|
11203
12393
|
["AWS::Budgets::Budget", {
|
|
11204
|
-
handled: new Set([
|
|
12394
|
+
handled: /* @__PURE__ */ new Set([
|
|
11205
12395
|
"Budget",
|
|
11206
12396
|
"NotificationsWithSubscribers",
|
|
11207
12397
|
"ResourceTags"
|
|
@@ -11209,7 +12399,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11209
12399
|
silentDrop: /* @__PURE__ */ new Map()
|
|
11210
12400
|
}],
|
|
11211
12401
|
["AWS::CertificateManager::Certificate", {
|
|
11212
|
-
handled: new Set([
|
|
12402
|
+
handled: /* @__PURE__ */ new Set([
|
|
11213
12403
|
"CertificateAuthorityArn",
|
|
11214
12404
|
"CertificateExport",
|
|
11215
12405
|
"CertificateTransparencyLoggingPreference",
|
|
@@ -11223,8 +12413,8 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11223
12413
|
silentDrop: /* @__PURE__ */ new Map()
|
|
11224
12414
|
}],
|
|
11225
12415
|
["AWS::CloudFormation::Stack", {
|
|
11226
|
-
handled: new Set(["Parameters", "TemplateURL"]),
|
|
11227
|
-
silentDrop: new Map([
|
|
12416
|
+
handled: /* @__PURE__ */ new Set(["Parameters", "TemplateURL"]),
|
|
12417
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
11228
12418
|
["Capabilities", "CFn-only IAM capability declaration — cdkd does not go through CloudFormation so capabilities have no equivalent"],
|
|
11229
12419
|
["Description", "CFn-only informational — no semantic effect on the recursive deploy"],
|
|
11230
12420
|
["DisableRollback", "CFn-only — cdkd controls rollback via the top-level deploy-engine --no-rollback flag, not per nested stack"],
|
|
@@ -11245,15 +12435,15 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11245
12435
|
silentDrop: /* @__PURE__ */ new Map()
|
|
11246
12436
|
}],
|
|
11247
12437
|
["AWS::CloudFront::CloudFrontOriginAccessIdentity", {
|
|
11248
|
-
handled: new Set(["CloudFrontOriginAccessIdentityConfig"]),
|
|
12438
|
+
handled: /* @__PURE__ */ new Set(["CloudFrontOriginAccessIdentityConfig"]),
|
|
11249
12439
|
silentDrop: /* @__PURE__ */ new Map()
|
|
11250
12440
|
}],
|
|
11251
12441
|
["AWS::CloudFront::Distribution", {
|
|
11252
|
-
handled: new Set(["DistributionConfig", "Tags"]),
|
|
12442
|
+
handled: /* @__PURE__ */ new Set(["DistributionConfig", "Tags"]),
|
|
11253
12443
|
silentDrop: /* @__PURE__ */ new Map()
|
|
11254
12444
|
}],
|
|
11255
12445
|
["AWS::CloudTrail::Trail", {
|
|
11256
|
-
handled: new Set([
|
|
12446
|
+
handled: /* @__PURE__ */ new Set([
|
|
11257
12447
|
"CloudWatchLogsLogGroupArn",
|
|
11258
12448
|
"CloudWatchLogsRoleArn",
|
|
11259
12449
|
"EnableLogFileValidation",
|
|
@@ -11270,10 +12460,10 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11270
12460
|
"Tags",
|
|
11271
12461
|
"TrailName"
|
|
11272
12462
|
]),
|
|
11273
|
-
silentDrop: new Map([["AdvancedEventSelectors", "not yet implemented by cdkd"], ["AggregationConfigurations", "not yet implemented by cdkd"]])
|
|
12463
|
+
silentDrop: /* @__PURE__ */ new Map([["AdvancedEventSelectors", "not yet implemented by cdkd"], ["AggregationConfigurations", "not yet implemented by cdkd"]])
|
|
11274
12464
|
}],
|
|
11275
12465
|
["AWS::CloudWatch::Alarm", {
|
|
11276
|
-
handled: new Set([
|
|
12466
|
+
handled: /* @__PURE__ */ new Set([
|
|
11277
12467
|
"ActionsEnabled",
|
|
11278
12468
|
"AlarmActions",
|
|
11279
12469
|
"AlarmDescription",
|
|
@@ -11297,10 +12487,10 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11297
12487
|
"TreatMissingData",
|
|
11298
12488
|
"Unit"
|
|
11299
12489
|
]),
|
|
11300
|
-
silentDrop: new Map([["EvaluationCriteria", "Absent from both the SDK PutMetricAlarm input and the aws-cdk-lib CfnAlarm L1 (a newer CFn-schema-only property ahead of SDK/CDK support); no wire path to forward it and no CDK app can emit it."], ["EvaluationInterval", "Absent from both the SDK PutMetricAlarm input and the aws-cdk-lib CfnAlarm L1 (a newer CFn-schema-only property ahead of SDK/CDK support); no wire path to forward it and no CDK app can emit it."]])
|
|
12490
|
+
silentDrop: /* @__PURE__ */ new Map([["EvaluationCriteria", "Absent from both the SDK PutMetricAlarm input and the aws-cdk-lib CfnAlarm L1 (a newer CFn-schema-only property ahead of SDK/CDK support); no wire path to forward it and no CDK app can emit it."], ["EvaluationInterval", "Absent from both the SDK PutMetricAlarm input and the aws-cdk-lib CfnAlarm L1 (a newer CFn-schema-only property ahead of SDK/CDK support); no wire path to forward it and no CDK app can emit it."]])
|
|
11301
12491
|
}],
|
|
11302
12492
|
["AWS::CodeBuild::Project", {
|
|
11303
|
-
handled: new Set([
|
|
12493
|
+
handled: /* @__PURE__ */ new Set([
|
|
11304
12494
|
"Artifacts",
|
|
11305
12495
|
"AutoRetryLimit",
|
|
11306
12496
|
"BadgeEnabled",
|
|
@@ -11324,14 +12514,14 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11324
12514
|
"TimeoutInMinutes",
|
|
11325
12515
|
"VpcConfig"
|
|
11326
12516
|
]),
|
|
11327
|
-
silentDrop: new Map([
|
|
12517
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
11328
12518
|
["ResourceAccessRole", "not yet implemented by cdkd"],
|
|
11329
12519
|
["Triggers", "not yet implemented by cdkd"],
|
|
11330
12520
|
["Visibility", "not yet implemented by cdkd"]
|
|
11331
12521
|
])
|
|
11332
12522
|
}],
|
|
11333
12523
|
["AWS::CodeCommit::Repository", {
|
|
11334
|
-
handled: new Set([
|
|
12524
|
+
handled: /* @__PURE__ */ new Set([
|
|
11335
12525
|
"Code",
|
|
11336
12526
|
"KmsKeyId",
|
|
11337
12527
|
"RepositoryDescription",
|
|
@@ -11342,7 +12532,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11342
12532
|
silentDrop: /* @__PURE__ */ new Map()
|
|
11343
12533
|
}],
|
|
11344
12534
|
["AWS::Cognito::UserPool", {
|
|
11345
|
-
handled: new Set([
|
|
12535
|
+
handled: /* @__PURE__ */ new Set([
|
|
11346
12536
|
"AccountRecoverySetting",
|
|
11347
12537
|
"AdminCreateUserConfig",
|
|
11348
12538
|
"AliasAttributes",
|
|
@@ -11373,10 +12563,10 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11373
12563
|
"WebAuthnRelyingPartyID",
|
|
11374
12564
|
"WebAuthnUserVerification"
|
|
11375
12565
|
]),
|
|
11376
|
-
silentDrop: new Map([["WebAuthnFactorConfiguration", "No SDK wire path: @aws-sdk/client-cognito-identity-provider has no field accepting SINGLE_FACTOR | MULTI_FACTOR_WITH_USER_VERIFICATION (not on CreateUserPool/UpdateUserPool, nor SetUserPoolMfaConfig.WebAuthnConfiguration which only carries RelyingPartyId/UserVerification); CC-API-registry-only property"]])
|
|
12566
|
+
silentDrop: /* @__PURE__ */ new Map([["WebAuthnFactorConfiguration", "No SDK wire path: @aws-sdk/client-cognito-identity-provider has no field accepting SINGLE_FACTOR | MULTI_FACTOR_WITH_USER_VERIFICATION (not on CreateUserPool/UpdateUserPool, nor SetUserPoolMfaConfig.WebAuthnConfiguration which only carries RelyingPartyId/UserVerification); CC-API-registry-only property"]])
|
|
11377
12567
|
}],
|
|
11378
12568
|
["AWS::DLM::LifecyclePolicy", {
|
|
11379
|
-
handled: new Set([
|
|
12569
|
+
handled: /* @__PURE__ */ new Set([
|
|
11380
12570
|
"CopyTags",
|
|
11381
12571
|
"CreateInterval",
|
|
11382
12572
|
"CrossRegionCopyTargets",
|
|
@@ -11393,7 +12583,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11393
12583
|
silentDrop: /* @__PURE__ */ new Map()
|
|
11394
12584
|
}],
|
|
11395
12585
|
["AWS::DocDB::DBCluster", {
|
|
11396
|
-
handled: new Set([
|
|
12586
|
+
handled: /* @__PURE__ */ new Set([
|
|
11397
12587
|
"BackupRetentionPeriod",
|
|
11398
12588
|
"DBClusterIdentifier",
|
|
11399
12589
|
"DBClusterParameterGroupName",
|
|
@@ -11410,7 +12600,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11410
12600
|
"Tags",
|
|
11411
12601
|
"VpcSecurityGroupIds"
|
|
11412
12602
|
]),
|
|
11413
|
-
silentDrop: new Map([
|
|
12603
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
11414
12604
|
["AvailabilityZones", "not yet implemented by cdkd"],
|
|
11415
12605
|
["CopyTagsToSnapshot", "not yet implemented by cdkd"],
|
|
11416
12606
|
["EnableCloudwatchLogsExports", "not yet implemented by cdkd"],
|
|
@@ -11429,7 +12619,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11429
12619
|
])
|
|
11430
12620
|
}],
|
|
11431
12621
|
["AWS::DocDB::DBInstance", {
|
|
11432
|
-
handled: new Set([
|
|
12622
|
+
handled: /* @__PURE__ */ new Set([
|
|
11433
12623
|
"AutoMinorVersionUpgrade",
|
|
11434
12624
|
"AvailabilityZone",
|
|
11435
12625
|
"DBClusterIdentifier",
|
|
@@ -11438,14 +12628,14 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11438
12628
|
"PreferredMaintenanceWindow",
|
|
11439
12629
|
"Tags"
|
|
11440
12630
|
]),
|
|
11441
|
-
silentDrop: new Map([
|
|
12631
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
11442
12632
|
["CACertificateIdentifier", "not yet implemented by cdkd"],
|
|
11443
12633
|
["CertificateRotationRestart", "not yet implemented by cdkd"],
|
|
11444
12634
|
["EnablePerformanceInsights", "not yet implemented by cdkd"]
|
|
11445
12635
|
])
|
|
11446
12636
|
}],
|
|
11447
12637
|
["AWS::DocDB::DBSubnetGroup", {
|
|
11448
|
-
handled: new Set([
|
|
12638
|
+
handled: /* @__PURE__ */ new Set([
|
|
11449
12639
|
"DBSubnetGroupDescription",
|
|
11450
12640
|
"DBSubnetGroupName",
|
|
11451
12641
|
"SubnetIds",
|
|
@@ -11454,7 +12644,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11454
12644
|
silentDrop: /* @__PURE__ */ new Map()
|
|
11455
12645
|
}],
|
|
11456
12646
|
["AWS::DynamoDB::GlobalTable", {
|
|
11457
|
-
handled: new Set([
|
|
12647
|
+
handled: /* @__PURE__ */ new Set([
|
|
11458
12648
|
"AttributeDefinitions",
|
|
11459
12649
|
"BillingMode",
|
|
11460
12650
|
"DeletionProtectionEnabled",
|
|
@@ -11470,7 +12660,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11470
12660
|
"WriteOnDemandThroughputSettings",
|
|
11471
12661
|
"WriteProvisionedThroughputSettings"
|
|
11472
12662
|
]),
|
|
11473
|
-
silentDrop: new Map([
|
|
12663
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
11474
12664
|
["GlobalTableSourceArn", "not yet implemented by cdkd"],
|
|
11475
12665
|
["GlobalTableWitnesses", "not yet implemented by cdkd"],
|
|
11476
12666
|
["MultiRegionConsistency", "not yet implemented by cdkd"],
|
|
@@ -11480,7 +12670,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11480
12670
|
])
|
|
11481
12671
|
}],
|
|
11482
12672
|
["AWS::DynamoDB::Table", {
|
|
11483
|
-
handled: new Set([
|
|
12673
|
+
handled: /* @__PURE__ */ new Set([
|
|
11484
12674
|
"AttributeDefinitions",
|
|
11485
12675
|
"BillingMode",
|
|
11486
12676
|
"ContributorInsightsSpecification",
|
|
@@ -11501,10 +12691,10 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11501
12691
|
"TimeToLiveSpecification",
|
|
11502
12692
|
"WarmThroughput"
|
|
11503
12693
|
]),
|
|
11504
|
-
silentDrop: new Map([["ImportSourceSpecification", "S3 import uses the separate ImportTable API (not CreateTable) and is create-only with no readback; deferred to a dedicated import-from-S3 PR"]])
|
|
12694
|
+
silentDrop: /* @__PURE__ */ new Map([["ImportSourceSpecification", "S3 import uses the separate ImportTable API (not CreateTable) and is create-only with no readback; deferred to a dedicated import-from-S3 PR"]])
|
|
11505
12695
|
}],
|
|
11506
12696
|
["AWS::EC2::Instance", {
|
|
11507
|
-
handled: new Set([
|
|
12697
|
+
handled: /* @__PURE__ */ new Set([
|
|
11508
12698
|
"BlockDeviceMappings",
|
|
11509
12699
|
"CreditSpecification",
|
|
11510
12700
|
"DisableApiTermination",
|
|
@@ -11521,7 +12711,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11521
12711
|
"Tags",
|
|
11522
12712
|
"UserData"
|
|
11523
12713
|
]),
|
|
11524
|
-
silentDrop: new Map([
|
|
12714
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
11525
12715
|
["AdditionalInfo", "not yet implemented by cdkd"],
|
|
11526
12716
|
["Affinity", "not yet implemented by cdkd"],
|
|
11527
12717
|
["AvailabilityZone", "not yet implemented by cdkd"],
|
|
@@ -11551,11 +12741,11 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11551
12741
|
])
|
|
11552
12742
|
}],
|
|
11553
12743
|
["AWS::EC2::InternetGateway", {
|
|
11554
|
-
handled: new Set(["Tags"]),
|
|
12744
|
+
handled: /* @__PURE__ */ new Set(["Tags"]),
|
|
11555
12745
|
silentDrop: /* @__PURE__ */ new Map()
|
|
11556
12746
|
}],
|
|
11557
12747
|
["AWS::EC2::NatGateway", {
|
|
11558
|
-
handled: new Set([
|
|
12748
|
+
handled: /* @__PURE__ */ new Set([
|
|
11559
12749
|
"AllocationId",
|
|
11560
12750
|
"ConnectivityType",
|
|
11561
12751
|
"MaxDrainDurationSeconds",
|
|
@@ -11566,18 +12756,18 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11566
12756
|
"SubnetId",
|
|
11567
12757
|
"Tags"
|
|
11568
12758
|
]),
|
|
11569
|
-
silentDrop: new Map([
|
|
12759
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
11570
12760
|
["AvailabilityMode", "not yet implemented by cdkd"],
|
|
11571
12761
|
["AvailabilityZoneAddresses", "not yet implemented by cdkd"],
|
|
11572
12762
|
["VpcId", "AWS derives the VPC from SubnetId; the ec2:CreateNatGateway API has no VpcId parameter"]
|
|
11573
12763
|
])
|
|
11574
12764
|
}],
|
|
11575
12765
|
["AWS::EC2::NetworkAcl", {
|
|
11576
|
-
handled: new Set(["Tags", "VpcId"]),
|
|
12766
|
+
handled: /* @__PURE__ */ new Set(["Tags", "VpcId"]),
|
|
11577
12767
|
silentDrop: /* @__PURE__ */ new Map()
|
|
11578
12768
|
}],
|
|
11579
12769
|
["AWS::EC2::NetworkAclEntry", {
|
|
11580
|
-
handled: new Set([
|
|
12770
|
+
handled: /* @__PURE__ */ new Set([
|
|
11581
12771
|
"CidrBlock",
|
|
11582
12772
|
"Egress",
|
|
11583
12773
|
"Icmp",
|
|
@@ -11591,7 +12781,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11591
12781
|
silentDrop: /* @__PURE__ */ new Map()
|
|
11592
12782
|
}],
|
|
11593
12783
|
["AWS::EC2::Route", {
|
|
11594
|
-
handled: new Set([
|
|
12784
|
+
handled: /* @__PURE__ */ new Set([
|
|
11595
12785
|
"DestinationCidrBlock",
|
|
11596
12786
|
"DestinationIpv6CidrBlock",
|
|
11597
12787
|
"EgressOnlyInternetGatewayId",
|
|
@@ -11602,7 +12792,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11602
12792
|
"RouteTableId",
|
|
11603
12793
|
"VpcPeeringConnectionId"
|
|
11604
12794
|
]),
|
|
11605
|
-
silentDrop: new Map([
|
|
12795
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
11606
12796
|
["CarrierGatewayId", "not yet implemented by cdkd"],
|
|
11607
12797
|
["CoreNetworkArn", "not yet implemented by cdkd"],
|
|
11608
12798
|
["DestinationPrefixListId", "not yet implemented by cdkd"],
|
|
@@ -11612,11 +12802,11 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11612
12802
|
])
|
|
11613
12803
|
}],
|
|
11614
12804
|
["AWS::EC2::RouteTable", {
|
|
11615
|
-
handled: new Set(["Tags", "VpcId"]),
|
|
12805
|
+
handled: /* @__PURE__ */ new Set(["Tags", "VpcId"]),
|
|
11616
12806
|
silentDrop: /* @__PURE__ */ new Map()
|
|
11617
12807
|
}],
|
|
11618
12808
|
["AWS::EC2::SecurityGroup", {
|
|
11619
|
-
handled: new Set([
|
|
12809
|
+
handled: /* @__PURE__ */ new Set([
|
|
11620
12810
|
"GroupDescription",
|
|
11621
12811
|
"GroupName",
|
|
11622
12812
|
"SecurityGroupEgress",
|
|
@@ -11627,7 +12817,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11627
12817
|
silentDrop: /* @__PURE__ */ new Map()
|
|
11628
12818
|
}],
|
|
11629
12819
|
["AWS::EC2::SecurityGroupIngress", {
|
|
11630
|
-
handled: new Set([
|
|
12820
|
+
handled: /* @__PURE__ */ new Set([
|
|
11631
12821
|
"CidrIp",
|
|
11632
12822
|
"CidrIpv6",
|
|
11633
12823
|
"Description",
|
|
@@ -11639,17 +12829,17 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11639
12829
|
"SourceSecurityGroupOwnerId",
|
|
11640
12830
|
"ToPort"
|
|
11641
12831
|
]),
|
|
11642
|
-
silentDrop: new Map([["GroupName", "EC2-Classic-only — use GroupId for VPC security groups (EC2-Classic retired 2022-08-15)"], ["SourceSecurityGroupName", "EC2-Classic-only — use SourceSecurityGroupId for VPC peer security groups (EC2-Classic retired 2022-08-15)"]])
|
|
12832
|
+
silentDrop: /* @__PURE__ */ new Map([["GroupName", "EC2-Classic-only — use GroupId for VPC security groups (EC2-Classic retired 2022-08-15)"], ["SourceSecurityGroupName", "EC2-Classic-only — use SourceSecurityGroupId for VPC peer security groups (EC2-Classic retired 2022-08-15)"]])
|
|
11643
12833
|
}],
|
|
11644
12834
|
["AWS::EC2::Subnet", {
|
|
11645
|
-
handled: new Set([
|
|
12835
|
+
handled: /* @__PURE__ */ new Set([
|
|
11646
12836
|
"AvailabilityZone",
|
|
11647
12837
|
"CidrBlock",
|
|
11648
12838
|
"MapPublicIpOnLaunch",
|
|
11649
12839
|
"Tags",
|
|
11650
12840
|
"VpcId"
|
|
11651
12841
|
]),
|
|
11652
|
-
silentDrop: new Map([
|
|
12842
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
11653
12843
|
["AssignIpv6AddressOnCreation", "not yet implemented by cdkd"],
|
|
11654
12844
|
["AvailabilityZoneId", "not yet implemented by cdkd"],
|
|
11655
12845
|
["EnableDns64", "not yet implemented by cdkd"],
|
|
@@ -11665,29 +12855,29 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11665
12855
|
])
|
|
11666
12856
|
}],
|
|
11667
12857
|
["AWS::EC2::SubnetNetworkAclAssociation", {
|
|
11668
|
-
handled: new Set(["NetworkAclId", "SubnetId"]),
|
|
12858
|
+
handled: /* @__PURE__ */ new Set(["NetworkAclId", "SubnetId"]),
|
|
11669
12859
|
silentDrop: /* @__PURE__ */ new Map()
|
|
11670
12860
|
}],
|
|
11671
12861
|
["AWS::EC2::SubnetRouteTableAssociation", {
|
|
11672
|
-
handled: new Set(["RouteTableId", "SubnetId"]),
|
|
12862
|
+
handled: /* @__PURE__ */ new Set(["RouteTableId", "SubnetId"]),
|
|
11673
12863
|
silentDrop: /* @__PURE__ */ new Map()
|
|
11674
12864
|
}],
|
|
11675
12865
|
["AWS::EC2::VPC", {
|
|
11676
|
-
handled: new Set([
|
|
12866
|
+
handled: /* @__PURE__ */ new Set([
|
|
11677
12867
|
"CidrBlock",
|
|
11678
12868
|
"EnableDnsHostnames",
|
|
11679
12869
|
"EnableDnsSupport",
|
|
11680
12870
|
"InstanceTenancy",
|
|
11681
12871
|
"Tags"
|
|
11682
12872
|
]),
|
|
11683
|
-
silentDrop: new Map([["Ipv4IpamPoolId", "not yet implemented by cdkd"], ["Ipv4NetmaskLength", "not yet implemented by cdkd"]])
|
|
12873
|
+
silentDrop: /* @__PURE__ */ new Map([["Ipv4IpamPoolId", "not yet implemented by cdkd"], ["Ipv4NetmaskLength", "not yet implemented by cdkd"]])
|
|
11684
12874
|
}],
|
|
11685
12875
|
["AWS::EC2::VPCGatewayAttachment", {
|
|
11686
|
-
handled: new Set(["InternetGatewayId", "VpcId"]),
|
|
11687
|
-
silentDrop: new Map([["VpnGatewayId", "not yet implemented by cdkd"]])
|
|
12876
|
+
handled: /* @__PURE__ */ new Set(["InternetGatewayId", "VpcId"]),
|
|
12877
|
+
silentDrop: /* @__PURE__ */ new Map([["VpnGatewayId", "not yet implemented by cdkd"]])
|
|
11688
12878
|
}],
|
|
11689
12879
|
["AWS::ECR::Repository", {
|
|
11690
|
-
handled: new Set([
|
|
12880
|
+
handled: /* @__PURE__ */ new Set([
|
|
11691
12881
|
"EmptyOnDelete",
|
|
11692
12882
|
"EncryptionConfiguration",
|
|
11693
12883
|
"ImageScanningConfiguration",
|
|
@@ -11701,7 +12891,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11701
12891
|
silentDrop: /* @__PURE__ */ new Map()
|
|
11702
12892
|
}],
|
|
11703
12893
|
["AWS::ECS::Cluster", {
|
|
11704
|
-
handled: new Set([
|
|
12894
|
+
handled: /* @__PURE__ */ new Set([
|
|
11705
12895
|
"CapacityProviders",
|
|
11706
12896
|
"ClusterName",
|
|
11707
12897
|
"ClusterSettings",
|
|
@@ -11713,7 +12903,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11713
12903
|
silentDrop: /* @__PURE__ */ new Map()
|
|
11714
12904
|
}],
|
|
11715
12905
|
["AWS::ECS::Service", {
|
|
11716
|
-
handled: new Set([
|
|
12906
|
+
handled: /* @__PURE__ */ new Set([
|
|
11717
12907
|
"CapacityProviderStrategy",
|
|
11718
12908
|
"Cluster",
|
|
11719
12909
|
"DeploymentConfiguration",
|
|
@@ -11734,7 +12924,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11734
12924
|
"Tags",
|
|
11735
12925
|
"TaskDefinition"
|
|
11736
12926
|
]),
|
|
11737
|
-
silentDrop: new Map([
|
|
12927
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
11738
12928
|
["AvailabilityZoneRebalancing", "not yet implemented by cdkd"],
|
|
11739
12929
|
["DeploymentController", "not yet implemented by cdkd"],
|
|
11740
12930
|
["ForceNewDeployment", "not yet implemented by cdkd"],
|
|
@@ -11745,7 +12935,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11745
12935
|
])
|
|
11746
12936
|
}],
|
|
11747
12937
|
["AWS::ECS::TaskDefinition", {
|
|
11748
|
-
handled: new Set([
|
|
12938
|
+
handled: /* @__PURE__ */ new Set([
|
|
11749
12939
|
"ContainerDefinitions",
|
|
11750
12940
|
"Cpu",
|
|
11751
12941
|
"EnableFaultInjection",
|
|
@@ -11764,19 +12954,19 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11764
12954
|
"TaskRoleArn",
|
|
11765
12955
|
"Volumes"
|
|
11766
12956
|
]),
|
|
11767
|
-
silentDrop: new Map([["InferenceAccelerators", "AWS Elastic Inference end-of-life 2024-04; use AWS Inferentia / Trainium accelerator instance families instead"]])
|
|
12957
|
+
silentDrop: /* @__PURE__ */ new Map([["InferenceAccelerators", "AWS Elastic Inference end-of-life 2024-04; use AWS Inferentia / Trainium accelerator instance families instead"]])
|
|
11768
12958
|
}],
|
|
11769
12959
|
["AWS::EFS::AccessPoint", {
|
|
11770
|
-
handled: new Set([
|
|
12960
|
+
handled: /* @__PURE__ */ new Set([
|
|
11771
12961
|
"AccessPointTags",
|
|
11772
12962
|
"FileSystemId",
|
|
11773
12963
|
"PosixUser",
|
|
11774
12964
|
"RootDirectory"
|
|
11775
12965
|
]),
|
|
11776
|
-
silentDrop: new Map([["ClientToken", "AWS SDK manages this idempotency token internally on CreateAccessPoint; no user-supplied value is honored"]])
|
|
12966
|
+
silentDrop: /* @__PURE__ */ new Map([["ClientToken", "AWS SDK manages this idempotency token internally on CreateAccessPoint; no user-supplied value is honored"]])
|
|
11777
12967
|
}],
|
|
11778
12968
|
["AWS::EFS::FileSystem", {
|
|
11779
|
-
handled: new Set([
|
|
12969
|
+
handled: /* @__PURE__ */ new Set([
|
|
11780
12970
|
"AvailabilityZoneName",
|
|
11781
12971
|
"BackupPolicy",
|
|
11782
12972
|
"BypassPolicyLockoutSafetyCheck",
|
|
@@ -11790,22 +12980,22 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11790
12980
|
"ProvisionedThroughputInMibps",
|
|
11791
12981
|
"ThroughputMode"
|
|
11792
12982
|
]),
|
|
11793
|
-
silentDrop: new Map([["ReplicationConfiguration", "Cross-region EFS replication (CreateReplicationConfiguration) provisions a separate destination file system in another region with its own lifecycle, KMS key, and availability-zone placement; replicating + then tearing down the destination on destroy is a multi-resource, cross-region orchestration that is out of scope for the single-resource SDK provider. Tracked as a follow-up to issue #609."]])
|
|
12983
|
+
silentDrop: /* @__PURE__ */ new Map([["ReplicationConfiguration", "Cross-region EFS replication (CreateReplicationConfiguration) provisions a separate destination file system in another region with its own lifecycle, KMS key, and availability-zone placement; replicating + then tearing down the destination on destroy is a multi-resource, cross-region orchestration that is out of scope for the single-resource SDK provider. Tracked as a follow-up to issue #609."]])
|
|
11794
12984
|
}],
|
|
11795
12985
|
["AWS::EFS::MountTarget", {
|
|
11796
|
-
handled: new Set([
|
|
12986
|
+
handled: /* @__PURE__ */ new Set([
|
|
11797
12987
|
"FileSystemId",
|
|
11798
12988
|
"SecurityGroups",
|
|
11799
12989
|
"SubnetId"
|
|
11800
12990
|
]),
|
|
11801
|
-
silentDrop: new Map([
|
|
12991
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
11802
12992
|
["IpAddress", "not yet implemented by cdkd"],
|
|
11803
12993
|
["IpAddressType", "not yet implemented by cdkd"],
|
|
11804
12994
|
["Ipv6Address", "not yet implemented by cdkd"]
|
|
11805
12995
|
])
|
|
11806
12996
|
}],
|
|
11807
12997
|
["AWS::ElastiCache::CacheCluster", {
|
|
11808
|
-
handled: new Set([
|
|
12998
|
+
handled: /* @__PURE__ */ new Set([
|
|
11809
12999
|
"AutoMinorVersionUpgrade",
|
|
11810
13000
|
"AZMode",
|
|
11811
13001
|
"CacheNodeType",
|
|
@@ -11830,10 +13020,10 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11830
13020
|
"TransitEncryptionEnabled",
|
|
11831
13021
|
"VpcSecurityGroupIds"
|
|
11832
13022
|
]),
|
|
11833
|
-
silentDrop: new Map([["CacheSecurityGroupNames", "EC2-Classic-only — use VpcSecurityGroupIds for VPC-deployed clusters (EC2-Classic retired 2022-08-15)"], ["SnapshotArns", "not yet implemented by cdkd"]])
|
|
13023
|
+
silentDrop: /* @__PURE__ */ new Map([["CacheSecurityGroupNames", "EC2-Classic-only — use VpcSecurityGroupIds for VPC-deployed clusters (EC2-Classic retired 2022-08-15)"], ["SnapshotArns", "not yet implemented by cdkd"]])
|
|
11834
13024
|
}],
|
|
11835
13025
|
["AWS::ElastiCache::SubnetGroup", {
|
|
11836
|
-
handled: new Set([
|
|
13026
|
+
handled: /* @__PURE__ */ new Set([
|
|
11837
13027
|
"CacheSubnetGroupDescription",
|
|
11838
13028
|
"CacheSubnetGroupName",
|
|
11839
13029
|
"Description",
|
|
@@ -11843,7 +13033,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11843
13033
|
silentDrop: /* @__PURE__ */ new Map()
|
|
11844
13034
|
}],
|
|
11845
13035
|
["AWS::ElasticLoadBalancingV2::Listener", {
|
|
11846
|
-
handled: new Set([
|
|
13036
|
+
handled: /* @__PURE__ */ new Set([
|
|
11847
13037
|
"AlpnPolicy",
|
|
11848
13038
|
"Certificates",
|
|
11849
13039
|
"DefaultActions",
|
|
@@ -11857,7 +13047,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11857
13047
|
silentDrop: /* @__PURE__ */ new Map()
|
|
11858
13048
|
}],
|
|
11859
13049
|
["AWS::ElasticLoadBalancingV2::LoadBalancer", {
|
|
11860
|
-
handled: new Set([
|
|
13050
|
+
handled: /* @__PURE__ */ new Set([
|
|
11861
13051
|
"IpAddressType",
|
|
11862
13052
|
"LoadBalancerAttributes",
|
|
11863
13053
|
"Name",
|
|
@@ -11868,7 +13058,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11868
13058
|
"Tags",
|
|
11869
13059
|
"Type"
|
|
11870
13060
|
]),
|
|
11871
|
-
silentDrop: new Map([
|
|
13061
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
11872
13062
|
["EnableCapacityReservationProvisionStabilize", "not yet implemented by cdkd"],
|
|
11873
13063
|
["EnablePrefixForIpv6SourceNat", "not yet implemented by cdkd"],
|
|
11874
13064
|
["EnforceSecurityGroupInboundRulesOnPrivateLinkTraffic", "not yet implemented by cdkd"],
|
|
@@ -11877,7 +13067,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11877
13067
|
])
|
|
11878
13068
|
}],
|
|
11879
13069
|
["AWS::ElasticLoadBalancingV2::TargetGroup", {
|
|
11880
|
-
handled: new Set([
|
|
13070
|
+
handled: /* @__PURE__ */ new Set([
|
|
11881
13071
|
"HealthCheckEnabled",
|
|
11882
13072
|
"HealthCheckIntervalSeconds",
|
|
11883
13073
|
"HealthCheckPath",
|
|
@@ -11895,7 +13085,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11895
13085
|
"UnhealthyThresholdCount",
|
|
11896
13086
|
"VpcId"
|
|
11897
13087
|
]),
|
|
11898
|
-
silentDrop: new Map([
|
|
13088
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
11899
13089
|
["IpAddressType", "not yet implemented by cdkd"],
|
|
11900
13090
|
["TargetControlPort", "not yet implemented by cdkd"],
|
|
11901
13091
|
["TargetGroupAttributes", "not yet implemented by cdkd"],
|
|
@@ -11903,7 +13093,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11903
13093
|
])
|
|
11904
13094
|
}],
|
|
11905
13095
|
["AWS::EMR::Cluster", {
|
|
11906
|
-
handled: new Set([
|
|
13096
|
+
handled: /* @__PURE__ */ new Set([
|
|
11907
13097
|
"AdditionalInfo",
|
|
11908
13098
|
"Applications",
|
|
11909
13099
|
"AutoScalingRole",
|
|
@@ -11935,7 +13125,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11935
13125
|
silentDrop: /* @__PURE__ */ new Map()
|
|
11936
13126
|
}],
|
|
11937
13127
|
["AWS::Events::EventBus", {
|
|
11938
|
-
handled: new Set([
|
|
13128
|
+
handled: /* @__PURE__ */ new Set([
|
|
11939
13129
|
"DeadLetterConfig",
|
|
11940
13130
|
"Description",
|
|
11941
13131
|
"EventSourceName",
|
|
@@ -11948,7 +13138,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11948
13138
|
silentDrop: /* @__PURE__ */ new Map()
|
|
11949
13139
|
}],
|
|
11950
13140
|
["AWS::Events::Rule", {
|
|
11951
|
-
handled: new Set([
|
|
13141
|
+
handled: /* @__PURE__ */ new Set([
|
|
11952
13142
|
"Description",
|
|
11953
13143
|
"EventBusName",
|
|
11954
13144
|
"EventPattern",
|
|
@@ -11962,31 +13152,30 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
11962
13152
|
silentDrop: /* @__PURE__ */ new Map()
|
|
11963
13153
|
}],
|
|
11964
13154
|
["AWS::FSx::FileSystem", {
|
|
11965
|
-
handled: new Set([
|
|
13155
|
+
handled: /* @__PURE__ */ new Set([
|
|
11966
13156
|
"BackupId",
|
|
11967
13157
|
"FileSystemType",
|
|
11968
13158
|
"FileSystemTypeVersion",
|
|
11969
13159
|
"KmsKeyId",
|
|
11970
13160
|
"LustreConfiguration",
|
|
11971
13161
|
"NetworkType",
|
|
13162
|
+
"OntapConfiguration",
|
|
13163
|
+
"OpenZFSConfiguration",
|
|
11972
13164
|
"SecurityGroupIds",
|
|
11973
13165
|
"StorageCapacity",
|
|
11974
13166
|
"StorageType",
|
|
11975
13167
|
"SubnetIds",
|
|
11976
|
-
"Tags"
|
|
13168
|
+
"Tags",
|
|
13169
|
+
"WindowsConfiguration"
|
|
11977
13170
|
]),
|
|
11978
|
-
silentDrop: new Map(
|
|
11979
|
-
["OntapConfiguration", "FSx for NetApp ONTAP variant — the file system is only a container for SVMs/volumes (separate AWS::FSx::StorageVirtualMachine / AWS::FSx::Volume types, both still unsupported), so shipping it alone would be misleading; only the Lustre variant is supported in v1. Follow-up to issue #1042."],
|
|
11980
|
-
["OpenZFSConfiguration", "FSx for OpenZFS variant — root-volume semantics (RootVolumeId, child AWS::FSx::Volume trees) are not implemented in v1; only the Lustre variant is supported. Follow-up to issue #1042."],
|
|
11981
|
-
["WindowsConfiguration", "FSx for Windows File Server variant — requires Active Directory wiring and Windows-specific update/delete semantics (final backups, throughput tiers) that v1 does not implement; only the Lustre variant (the CDK L2) is supported. Follow-up to issue #1042."]
|
|
11982
|
-
])
|
|
13171
|
+
silentDrop: /* @__PURE__ */ new Map()
|
|
11983
13172
|
}],
|
|
11984
13173
|
["AWS::Glue::Connection", {
|
|
11985
|
-
handled: new Set(["CatalogId", "ConnectionInput"]),
|
|
13174
|
+
handled: /* @__PURE__ */ new Set(["CatalogId", "ConnectionInput"]),
|
|
11986
13175
|
silentDrop: /* @__PURE__ */ new Map()
|
|
11987
13176
|
}],
|
|
11988
13177
|
["AWS::Glue::Crawler", {
|
|
11989
|
-
handled: new Set([
|
|
13178
|
+
handled: /* @__PURE__ */ new Set([
|
|
11990
13179
|
"Classifiers",
|
|
11991
13180
|
"Configuration",
|
|
11992
13181
|
"CrawlerSecurityConfiguration",
|
|
@@ -12006,7 +13195,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12006
13195
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12007
13196
|
}],
|
|
12008
13197
|
["AWS::Glue::Database", {
|
|
12009
|
-
handled: new Set([
|
|
13198
|
+
handled: /* @__PURE__ */ new Set([
|
|
12010
13199
|
"CatalogId",
|
|
12011
13200
|
"DatabaseInput",
|
|
12012
13201
|
"DatabaseName"
|
|
@@ -12014,7 +13203,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12014
13203
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12015
13204
|
}],
|
|
12016
13205
|
["AWS::Glue::Job", {
|
|
12017
|
-
handled: new Set([
|
|
13206
|
+
handled: /* @__PURE__ */ new Set([
|
|
12018
13207
|
"AllocatedCapacity",
|
|
12019
13208
|
"Command",
|
|
12020
13209
|
"Connections",
|
|
@@ -12043,11 +13232,11 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12043
13232
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12044
13233
|
}],
|
|
12045
13234
|
["AWS::Glue::SecurityConfiguration", {
|
|
12046
|
-
handled: new Set(["EncryptionConfiguration", "Name"]),
|
|
13235
|
+
handled: /* @__PURE__ */ new Set(["EncryptionConfiguration", "Name"]),
|
|
12047
13236
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12048
13237
|
}],
|
|
12049
13238
|
["AWS::Glue::Table", {
|
|
12050
|
-
handled: new Set([
|
|
13239
|
+
handled: /* @__PURE__ */ new Set([
|
|
12051
13240
|
"CatalogId",
|
|
12052
13241
|
"DatabaseName",
|
|
12053
13242
|
"Name",
|
|
@@ -12057,7 +13246,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12057
13246
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12058
13247
|
}],
|
|
12059
13248
|
["AWS::Glue::Trigger", {
|
|
12060
|
-
handled: new Set([
|
|
13249
|
+
handled: /* @__PURE__ */ new Set([
|
|
12061
13250
|
"Actions",
|
|
12062
13251
|
"Description",
|
|
12063
13252
|
"EventBatchingCondition",
|
|
@@ -12072,7 +13261,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12072
13261
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12073
13262
|
}],
|
|
12074
13263
|
["AWS::Glue::Workflow", {
|
|
12075
|
-
handled: new Set([
|
|
13264
|
+
handled: /* @__PURE__ */ new Set([
|
|
12076
13265
|
"DefaultRunProperties",
|
|
12077
13266
|
"Description",
|
|
12078
13267
|
"MaxConcurrentRuns",
|
|
@@ -12082,7 +13271,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12082
13271
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12083
13272
|
}],
|
|
12084
13273
|
["AWS::IAM::Group", {
|
|
12085
|
-
handled: new Set([
|
|
13274
|
+
handled: /* @__PURE__ */ new Set([
|
|
12086
13275
|
"GroupName",
|
|
12087
13276
|
"ManagedPolicyArns",
|
|
12088
13277
|
"Path",
|
|
@@ -12091,7 +13280,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12091
13280
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12092
13281
|
}],
|
|
12093
13282
|
["AWS::IAM::InstanceProfile", {
|
|
12094
|
-
handled: new Set([
|
|
13283
|
+
handled: /* @__PURE__ */ new Set([
|
|
12095
13284
|
"InstanceProfileName",
|
|
12096
13285
|
"Path",
|
|
12097
13286
|
"Roles"
|
|
@@ -12099,7 +13288,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12099
13288
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12100
13289
|
}],
|
|
12101
13290
|
["AWS::IAM::ManagedPolicy", {
|
|
12102
|
-
handled: new Set([
|
|
13291
|
+
handled: /* @__PURE__ */ new Set([
|
|
12103
13292
|
"Description",
|
|
12104
13293
|
"Groups",
|
|
12105
13294
|
"ManagedPolicyName",
|
|
@@ -12112,7 +13301,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12112
13301
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12113
13302
|
}],
|
|
12114
13303
|
["AWS::IAM::Policy", {
|
|
12115
|
-
handled: new Set([
|
|
13304
|
+
handled: /* @__PURE__ */ new Set([
|
|
12116
13305
|
"Groups",
|
|
12117
13306
|
"PolicyDocument",
|
|
12118
13307
|
"PolicyName",
|
|
@@ -12122,7 +13311,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12122
13311
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12123
13312
|
}],
|
|
12124
13313
|
["AWS::IAM::Role", {
|
|
12125
|
-
handled: new Set([
|
|
13314
|
+
handled: /* @__PURE__ */ new Set([
|
|
12126
13315
|
"AssumeRolePolicyDocument",
|
|
12127
13316
|
"Description",
|
|
12128
13317
|
"ManagedPolicyArns",
|
|
@@ -12136,7 +13325,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12136
13325
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12137
13326
|
}],
|
|
12138
13327
|
["AWS::IAM::User", {
|
|
12139
|
-
handled: new Set([
|
|
13328
|
+
handled: /* @__PURE__ */ new Set([
|
|
12140
13329
|
"Groups",
|
|
12141
13330
|
"LoginProfile",
|
|
12142
13331
|
"ManagedPolicyArns",
|
|
@@ -12149,11 +13338,11 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12149
13338
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12150
13339
|
}],
|
|
12151
13340
|
["AWS::IAM::UserToGroupAddition", {
|
|
12152
|
-
handled: new Set(["GroupName", "Users"]),
|
|
13341
|
+
handled: /* @__PURE__ */ new Set(["GroupName", "Users"]),
|
|
12153
13342
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12154
13343
|
}],
|
|
12155
13344
|
["AWS::Kinesis::Stream", {
|
|
12156
|
-
handled: new Set([
|
|
13345
|
+
handled: /* @__PURE__ */ new Set([
|
|
12157
13346
|
"Name",
|
|
12158
13347
|
"RetentionPeriodHours",
|
|
12159
13348
|
"ShardCount",
|
|
@@ -12161,14 +13350,14 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12161
13350
|
"StreamModeDetails",
|
|
12162
13351
|
"Tags"
|
|
12163
13352
|
]),
|
|
12164
|
-
silentDrop: new Map([
|
|
13353
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
12165
13354
|
["DesiredShardLevelMetrics", "not yet implemented by cdkd"],
|
|
12166
13355
|
["MaxRecordSizeInKiB", "not yet implemented by cdkd"],
|
|
12167
13356
|
["WarmThroughputMiBps", "not yet implemented by cdkd"]
|
|
12168
13357
|
])
|
|
12169
13358
|
}],
|
|
12170
13359
|
["AWS::Kinesis::StreamConsumer", {
|
|
12171
|
-
handled: new Set([
|
|
13360
|
+
handled: /* @__PURE__ */ new Set([
|
|
12172
13361
|
"ConsumerName",
|
|
12173
13362
|
"StreamARN",
|
|
12174
13363
|
"Tags"
|
|
@@ -12176,7 +13365,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12176
13365
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12177
13366
|
}],
|
|
12178
13367
|
["AWS::KinesisFirehose::DeliveryStream", {
|
|
12179
|
-
handled: new Set([
|
|
13368
|
+
handled: /* @__PURE__ */ new Set([
|
|
12180
13369
|
"AmazonOpenSearchServerlessDestinationConfiguration",
|
|
12181
13370
|
"AmazonopensearchserviceDestinationConfiguration",
|
|
12182
13371
|
"DeliveryStreamEncryptionConfigurationInput",
|
|
@@ -12191,7 +13380,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12191
13380
|
"SplunkDestinationConfiguration",
|
|
12192
13381
|
"Tags"
|
|
12193
13382
|
]),
|
|
12194
|
-
silentDrop: new Map([
|
|
13383
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
12195
13384
|
["DatabaseSourceConfiguration", "not yet implemented by cdkd"],
|
|
12196
13385
|
["DirectPutSourceConfiguration", "not yet implemented by cdkd"],
|
|
12197
13386
|
["IcebergDestinationConfiguration", "not yet implemented by cdkd"],
|
|
@@ -12200,11 +13389,11 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12200
13389
|
])
|
|
12201
13390
|
}],
|
|
12202
13391
|
["AWS::KMS::Alias", {
|
|
12203
|
-
handled: new Set(["AliasName", "TargetKeyId"]),
|
|
13392
|
+
handled: /* @__PURE__ */ new Set(["AliasName", "TargetKeyId"]),
|
|
12204
13393
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12205
13394
|
}],
|
|
12206
13395
|
["AWS::KMS::Key", {
|
|
12207
|
-
handled: new Set([
|
|
13396
|
+
handled: /* @__PURE__ */ new Set([
|
|
12208
13397
|
"BypassPolicyLockoutSafetyCheck",
|
|
12209
13398
|
"Description",
|
|
12210
13399
|
"Enabled",
|
|
@@ -12221,7 +13410,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12221
13410
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12222
13411
|
}],
|
|
12223
13412
|
["AWS::Lambda::EventInvokeConfig", {
|
|
12224
|
-
handled: new Set([
|
|
13413
|
+
handled: /* @__PURE__ */ new Set([
|
|
12225
13414
|
"DestinationConfig",
|
|
12226
13415
|
"FunctionName",
|
|
12227
13416
|
"MaximumEventAgeInSeconds",
|
|
@@ -12231,7 +13420,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12231
13420
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12232
13421
|
}],
|
|
12233
13422
|
["AWS::Lambda::EventSourceMapping", {
|
|
12234
|
-
handled: new Set([
|
|
13423
|
+
handled: /* @__PURE__ */ new Set([
|
|
12235
13424
|
"AmazonManagedKafkaEventSourceConfig",
|
|
12236
13425
|
"BatchSize",
|
|
12237
13426
|
"BisectBatchOnFunctionError",
|
|
@@ -12264,7 +13453,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12264
13453
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12265
13454
|
}],
|
|
12266
13455
|
["AWS::Lambda::Function", {
|
|
12267
|
-
handled: new Set([
|
|
13456
|
+
handled: /* @__PURE__ */ new Set([
|
|
12268
13457
|
"Architectures",
|
|
12269
13458
|
"Code",
|
|
12270
13459
|
"DeadLetterConfig",
|
|
@@ -12290,7 +13479,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12290
13479
|
"TracingConfig",
|
|
12291
13480
|
"VpcConfig"
|
|
12292
13481
|
]),
|
|
12293
|
-
silentDrop: new Map([
|
|
13482
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
12294
13483
|
["CapacityProviderConfig", "not yet implemented by cdkd"],
|
|
12295
13484
|
["CodeSigningConfigArn", "not yet implemented by cdkd"],
|
|
12296
13485
|
["DurableConfig", "not yet implemented by cdkd"],
|
|
@@ -12301,7 +13490,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12301
13490
|
])
|
|
12302
13491
|
}],
|
|
12303
13492
|
["AWS::Lambda::LayerVersion", {
|
|
12304
|
-
handled: new Set([
|
|
13493
|
+
handled: /* @__PURE__ */ new Set([
|
|
12305
13494
|
"CompatibleArchitectures",
|
|
12306
13495
|
"CompatibleRuntimes",
|
|
12307
13496
|
"Content",
|
|
@@ -12312,7 +13501,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12312
13501
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12313
13502
|
}],
|
|
12314
13503
|
["AWS::Lambda::Permission", {
|
|
12315
|
-
handled: new Set([
|
|
13504
|
+
handled: /* @__PURE__ */ new Set([
|
|
12316
13505
|
"Action",
|
|
12317
13506
|
"EventSourceToken",
|
|
12318
13507
|
"FunctionName",
|
|
@@ -12326,7 +13515,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12326
13515
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12327
13516
|
}],
|
|
12328
13517
|
["AWS::Lambda::Url", {
|
|
12329
|
-
handled: new Set([
|
|
13518
|
+
handled: /* @__PURE__ */ new Set([
|
|
12330
13519
|
"AuthType",
|
|
12331
13520
|
"Cors",
|
|
12332
13521
|
"InvokeMode",
|
|
@@ -12336,7 +13525,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12336
13525
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12337
13526
|
}],
|
|
12338
13527
|
["AWS::Logs::LogGroup", {
|
|
12339
|
-
handled: new Set([
|
|
13528
|
+
handled: /* @__PURE__ */ new Set([
|
|
12340
13529
|
"BearerTokenAuthenticationEnabled",
|
|
12341
13530
|
"DataProtectionPolicy",
|
|
12342
13531
|
"DeletionProtectionEnabled",
|
|
@@ -12351,7 +13540,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12351
13540
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12352
13541
|
}],
|
|
12353
13542
|
["AWS::Neptune::DBCluster", {
|
|
12354
|
-
handled: new Set([
|
|
13543
|
+
handled: /* @__PURE__ */ new Set([
|
|
12355
13544
|
"BackupRetentionPeriod",
|
|
12356
13545
|
"DBClusterIdentifier",
|
|
12357
13546
|
"DBClusterParameterGroupName",
|
|
@@ -12368,7 +13557,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12368
13557
|
"Tags",
|
|
12369
13558
|
"VpcSecurityGroupIds"
|
|
12370
13559
|
]),
|
|
12371
|
-
silentDrop: new Map([
|
|
13560
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
12372
13561
|
["AssociatedRoles", "not yet implemented by cdkd"],
|
|
12373
13562
|
["AvailabilityZones", "not yet implemented by cdkd"],
|
|
12374
13563
|
["CopyTagsToSnapshot", "not yet implemented by cdkd"],
|
|
@@ -12383,7 +13572,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12383
13572
|
])
|
|
12384
13573
|
}],
|
|
12385
13574
|
["AWS::Neptune::DBInstance", {
|
|
12386
|
-
handled: new Set([
|
|
13575
|
+
handled: /* @__PURE__ */ new Set([
|
|
12387
13576
|
"AutoMinorVersionUpgrade",
|
|
12388
13577
|
"AvailabilityZone",
|
|
12389
13578
|
"DBClusterIdentifier",
|
|
@@ -12395,14 +13584,14 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12395
13584
|
"PreferredMaintenanceWindow",
|
|
12396
13585
|
"Tags"
|
|
12397
13586
|
]),
|
|
12398
|
-
silentDrop: new Map([
|
|
13587
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
12399
13588
|
["AllowMajorVersionUpgrade", "not yet implemented by cdkd"],
|
|
12400
13589
|
["DBSnapshotIdentifier", "not yet implemented by cdkd"],
|
|
12401
13590
|
["PubliclyAccessible", "not yet implemented by cdkd"]
|
|
12402
13591
|
])
|
|
12403
13592
|
}],
|
|
12404
13593
|
["AWS::Neptune::DBSubnetGroup", {
|
|
12405
|
-
handled: new Set([
|
|
13594
|
+
handled: /* @__PURE__ */ new Set([
|
|
12406
13595
|
"DBSubnetGroupDescription",
|
|
12407
13596
|
"DBSubnetGroupName",
|
|
12408
13597
|
"SubnetIds",
|
|
@@ -12411,7 +13600,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12411
13600
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12412
13601
|
}],
|
|
12413
13602
|
["AWS::RDS::DBCluster", {
|
|
12414
|
-
handled: new Set([
|
|
13603
|
+
handled: /* @__PURE__ */ new Set([
|
|
12415
13604
|
"BackupRetentionPeriod",
|
|
12416
13605
|
"DatabaseName",
|
|
12417
13606
|
"DBClusterIdentifier",
|
|
@@ -12434,7 +13623,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12434
13623
|
"Tags",
|
|
12435
13624
|
"VpcSecurityGroupIds"
|
|
12436
13625
|
]),
|
|
12437
|
-
silentDrop: new Map([
|
|
13626
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
12438
13627
|
["AllocatedStorage", "not yet implemented by cdkd"],
|
|
12439
13628
|
["AssociatedRoles", "not yet implemented by cdkd"],
|
|
12440
13629
|
["AutoMinorVersionUpgrade", "not yet implemented by cdkd"],
|
|
@@ -12478,7 +13667,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12478
13667
|
])
|
|
12479
13668
|
}],
|
|
12480
13669
|
["AWS::RDS::DBInstance", {
|
|
12481
|
-
handled: new Set([
|
|
13670
|
+
handled: /* @__PURE__ */ new Set([
|
|
12482
13671
|
"AllocatedStorage",
|
|
12483
13672
|
"DBClusterIdentifier",
|
|
12484
13673
|
"DBInstanceClass",
|
|
@@ -12501,7 +13690,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12501
13690
|
"Tags",
|
|
12502
13691
|
"VPCSecurityGroups"
|
|
12503
13692
|
]),
|
|
12504
|
-
silentDrop: new Map([
|
|
13693
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
12505
13694
|
["AdditionalStorageVolumes", "not yet implemented by cdkd"],
|
|
12506
13695
|
["AllowMajorVersionUpgrade", "not yet implemented by cdkd"],
|
|
12507
13696
|
["ApplyImmediately", "cdkd always applies modifications immediately (rds:ModifyDBInstance.ApplyImmediately=true is hardcoded); users wanting maintenance-window deferral should run aws rds modify-db-instance directly"],
|
|
@@ -12567,7 +13756,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12567
13756
|
])
|
|
12568
13757
|
}],
|
|
12569
13758
|
["AWS::RDS::DBProxy", {
|
|
12570
|
-
handled: new Set([
|
|
13759
|
+
handled: /* @__PURE__ */ new Set([
|
|
12571
13760
|
"Auth",
|
|
12572
13761
|
"DBProxyName",
|
|
12573
13762
|
"DebugLogging",
|
|
@@ -12579,14 +13768,14 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12579
13768
|
"VpcSecurityGroupIds",
|
|
12580
13769
|
"VpcSubnetIds"
|
|
12581
13770
|
]),
|
|
12582
|
-
silentDrop: new Map([
|
|
13771
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
12583
13772
|
["DefaultAuthScheme", "not yet implemented by cdkd"],
|
|
12584
13773
|
["EndpointNetworkType", "not yet implemented by cdkd"],
|
|
12585
13774
|
["TargetConnectionNetworkType", "not yet implemented by cdkd"]
|
|
12586
13775
|
])
|
|
12587
13776
|
}],
|
|
12588
13777
|
["AWS::RDS::DBProxyEndpoint", {
|
|
12589
|
-
handled: new Set([
|
|
13778
|
+
handled: /* @__PURE__ */ new Set([
|
|
12590
13779
|
"DBProxyEndpointName",
|
|
12591
13780
|
"DBProxyName",
|
|
12592
13781
|
"Tags",
|
|
@@ -12594,10 +13783,10 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12594
13783
|
"VpcSecurityGroupIds",
|
|
12595
13784
|
"VpcSubnetIds"
|
|
12596
13785
|
]),
|
|
12597
|
-
silentDrop: new Map([["EndpointNetworkType", "not yet implemented by cdkd"]])
|
|
13786
|
+
silentDrop: /* @__PURE__ */ new Map([["EndpointNetworkType", "not yet implemented by cdkd"]])
|
|
12598
13787
|
}],
|
|
12599
13788
|
["AWS::RDS::DBProxyTargetGroup", {
|
|
12600
|
-
handled: new Set([
|
|
13789
|
+
handled: /* @__PURE__ */ new Set([
|
|
12601
13790
|
"ConnectionPoolConfigurationInfo",
|
|
12602
13791
|
"DBClusterIdentifiers",
|
|
12603
13792
|
"DBInstanceIdentifiers",
|
|
@@ -12607,7 +13796,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12607
13796
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12608
13797
|
}],
|
|
12609
13798
|
["AWS::RDS::DBSubnetGroup", {
|
|
12610
|
-
handled: new Set([
|
|
13799
|
+
handled: /* @__PURE__ */ new Set([
|
|
12611
13800
|
"DBSubnetGroupDescription",
|
|
12612
13801
|
"DBSubnetGroupName",
|
|
12613
13802
|
"SubnetIds",
|
|
@@ -12616,7 +13805,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12616
13805
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12617
13806
|
}],
|
|
12618
13807
|
["AWS::Route53::HostedZone", {
|
|
12619
|
-
handled: new Set([
|
|
13808
|
+
handled: /* @__PURE__ */ new Set([
|
|
12620
13809
|
"HostedZoneConfig",
|
|
12621
13810
|
"HostedZoneFeatures",
|
|
12622
13811
|
"HostedZoneTags",
|
|
@@ -12627,7 +13816,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12627
13816
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12628
13817
|
}],
|
|
12629
13818
|
["AWS::Route53::RecordSet", {
|
|
12630
|
-
handled: new Set([
|
|
13819
|
+
handled: /* @__PURE__ */ new Set([
|
|
12631
13820
|
"AliasTarget",
|
|
12632
13821
|
"CidrRoutingConfig",
|
|
12633
13822
|
"Comment",
|
|
@@ -12649,7 +13838,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12649
13838
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12650
13839
|
}],
|
|
12651
13840
|
["AWS::S3::Bucket", {
|
|
12652
|
-
handled: new Set([
|
|
13841
|
+
handled: /* @__PURE__ */ new Set([
|
|
12653
13842
|
"AccelerateConfiguration",
|
|
12654
13843
|
"AnalyticsConfigurations",
|
|
12655
13844
|
"BucketEncryption",
|
|
@@ -12670,7 +13859,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12670
13859
|
"VersioningConfiguration",
|
|
12671
13860
|
"WebsiteConfiguration"
|
|
12672
13861
|
]),
|
|
12673
|
-
silentDrop: new Map([
|
|
13862
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
12674
13863
|
["AbacStatus", "not yet implemented by cdkd"],
|
|
12675
13864
|
["AccessControl", "Legacy canned ACL; AWS disables ACLs by default since 2023-04 — use BucketOwnershipControls + BucketPolicy / PublicAccessBlockConfiguration instead"],
|
|
12676
13865
|
["BucketNamePrefix", "not yet implemented by cdkd"],
|
|
@@ -12680,16 +13869,16 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12680
13869
|
])
|
|
12681
13870
|
}],
|
|
12682
13871
|
["AWS::S3::BucketPolicy", {
|
|
12683
|
-
handled: new Set(["Bucket", "PolicyDocument"]),
|
|
13872
|
+
handled: /* @__PURE__ */ new Set(["Bucket", "PolicyDocument"]),
|
|
12684
13873
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12685
13874
|
}],
|
|
12686
13875
|
["AWS::S3Express::DirectoryBucket", {
|
|
12687
|
-
handled: new Set([
|
|
13876
|
+
handled: /* @__PURE__ */ new Set([
|
|
12688
13877
|
"BucketName",
|
|
12689
13878
|
"DataRedundancy",
|
|
12690
13879
|
"LocationName"
|
|
12691
13880
|
]),
|
|
12692
|
-
silentDrop: new Map([
|
|
13881
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
12693
13882
|
["BucketEncryption", "not yet implemented by cdkd"],
|
|
12694
13883
|
["InventoryConfigurations", "not yet implemented by cdkd"],
|
|
12695
13884
|
["LifecycleConfiguration", "not yet implemented by cdkd"],
|
|
@@ -12698,11 +13887,11 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12698
13887
|
])
|
|
12699
13888
|
}],
|
|
12700
13889
|
["AWS::S3Tables::Namespace", {
|
|
12701
|
-
handled: new Set(["Namespace", "TableBucketARN"]),
|
|
13890
|
+
handled: /* @__PURE__ */ new Set(["Namespace", "TableBucketARN"]),
|
|
12702
13891
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12703
13892
|
}],
|
|
12704
13893
|
["AWS::S3Tables::Table", {
|
|
12705
|
-
handled: new Set([
|
|
13894
|
+
handled: /* @__PURE__ */ new Set([
|
|
12706
13895
|
"Format",
|
|
12707
13896
|
"Name",
|
|
12708
13897
|
"Namespace",
|
|
@@ -12711,7 +13900,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12711
13900
|
"TableName",
|
|
12712
13901
|
"Tags"
|
|
12713
13902
|
]),
|
|
12714
|
-
silentDrop: new Map([
|
|
13903
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
12715
13904
|
["Compaction", "not yet implemented by cdkd"],
|
|
12716
13905
|
["IcebergMetadata", "not yet implemented by cdkd"],
|
|
12717
13906
|
["SnapshotManagement", "not yet implemented by cdkd"],
|
|
@@ -12720,8 +13909,8 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12720
13909
|
])
|
|
12721
13910
|
}],
|
|
12722
13911
|
["AWS::S3Tables::TableBucket", {
|
|
12723
|
-
handled: new Set(["TableBucketName", "Tags"]),
|
|
12724
|
-
silentDrop: new Map([
|
|
13912
|
+
handled: /* @__PURE__ */ new Set(["TableBucketName", "Tags"]),
|
|
13913
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
12725
13914
|
["EncryptionConfiguration", "not yet implemented by cdkd"],
|
|
12726
13915
|
["MetricsConfiguration", "not yet implemented by cdkd"],
|
|
12727
13916
|
["ReplicationConfiguration", "not yet implemented by cdkd"],
|
|
@@ -12730,7 +13919,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12730
13919
|
])
|
|
12731
13920
|
}],
|
|
12732
13921
|
["AWS::S3Vectors::VectorBucket", {
|
|
12733
|
-
handled: new Set([
|
|
13922
|
+
handled: /* @__PURE__ */ new Set([
|
|
12734
13923
|
"EncryptionConfiguration",
|
|
12735
13924
|
"Tags",
|
|
12736
13925
|
"VectorBucketName"
|
|
@@ -12738,7 +13927,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12738
13927
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12739
13928
|
}],
|
|
12740
13929
|
["AWS::Scheduler::Schedule", {
|
|
12741
|
-
handled: new Set([
|
|
13930
|
+
handled: /* @__PURE__ */ new Set([
|
|
12742
13931
|
"Description",
|
|
12743
13932
|
"EndDate",
|
|
12744
13933
|
"FlexibleTimeWindow",
|
|
@@ -12754,7 +13943,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12754
13943
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12755
13944
|
}],
|
|
12756
13945
|
["AWS::SecretsManager::Secret", {
|
|
12757
|
-
handled: new Set([
|
|
13946
|
+
handled: /* @__PURE__ */ new Set([
|
|
12758
13947
|
"Description",
|
|
12759
13948
|
"GenerateSecretString",
|
|
12760
13949
|
"KmsKeyId",
|
|
@@ -12767,7 +13956,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12767
13956
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12768
13957
|
}],
|
|
12769
13958
|
["AWS::ServiceDiscovery::HttpNamespace", {
|
|
12770
|
-
handled: new Set([
|
|
13959
|
+
handled: /* @__PURE__ */ new Set([
|
|
12771
13960
|
"Description",
|
|
12772
13961
|
"Name",
|
|
12773
13962
|
"Tags"
|
|
@@ -12775,7 +13964,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12775
13964
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12776
13965
|
}],
|
|
12777
13966
|
["AWS::ServiceDiscovery::PrivateDnsNamespace", {
|
|
12778
|
-
handled: new Set([
|
|
13967
|
+
handled: /* @__PURE__ */ new Set([
|
|
12779
13968
|
"Description",
|
|
12780
13969
|
"Name",
|
|
12781
13970
|
"Properties",
|
|
@@ -12785,7 +13974,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12785
13974
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12786
13975
|
}],
|
|
12787
13976
|
["AWS::ServiceDiscovery::PublicDnsNamespace", {
|
|
12788
|
-
handled: new Set([
|
|
13977
|
+
handled: /* @__PURE__ */ new Set([
|
|
12789
13978
|
"Description",
|
|
12790
13979
|
"Name",
|
|
12791
13980
|
"Properties",
|
|
@@ -12794,7 +13983,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12794
13983
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12795
13984
|
}],
|
|
12796
13985
|
["AWS::ServiceDiscovery::Service", {
|
|
12797
|
-
handled: new Set([
|
|
13986
|
+
handled: /* @__PURE__ */ new Set([
|
|
12798
13987
|
"Description",
|
|
12799
13988
|
"DnsConfig",
|
|
12800
13989
|
"HealthCheckConfig",
|
|
@@ -12808,7 +13997,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12808
13997
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12809
13998
|
}],
|
|
12810
13999
|
["AWS::SNS::Subscription", {
|
|
12811
|
-
handled: new Set([
|
|
14000
|
+
handled: /* @__PURE__ */ new Set([
|
|
12812
14001
|
"DeliveryPolicy",
|
|
12813
14002
|
"Endpoint",
|
|
12814
14003
|
"FilterPolicy",
|
|
@@ -12820,10 +14009,10 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12820
14009
|
"SubscriptionRoleArn",
|
|
12821
14010
|
"TopicArn"
|
|
12822
14011
|
]),
|
|
12823
|
-
silentDrop: new Map([["Region", "CFn-only cross-region subscription hint; cdkd uses the SDK client region directly and has no per-resource region override"]])
|
|
14012
|
+
silentDrop: /* @__PURE__ */ new Map([["Region", "CFn-only cross-region subscription hint; cdkd uses the SDK client region directly and has no per-resource region override"]])
|
|
12824
14013
|
}],
|
|
12825
14014
|
["AWS::SNS::Topic", {
|
|
12826
|
-
handled: new Set([
|
|
14015
|
+
handled: /* @__PURE__ */ new Set([
|
|
12827
14016
|
"ArchivePolicy",
|
|
12828
14017
|
"ContentBasedDeduplication",
|
|
12829
14018
|
"DataProtectionPolicy",
|
|
@@ -12841,11 +14030,11 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12841
14030
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12842
14031
|
}],
|
|
12843
14032
|
["AWS::SNS::TopicPolicy", {
|
|
12844
|
-
handled: new Set(["PolicyDocument", "Topics"]),
|
|
14033
|
+
handled: /* @__PURE__ */ new Set(["PolicyDocument", "Topics"]),
|
|
12845
14034
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12846
14035
|
}],
|
|
12847
14036
|
["AWS::SQS::Queue", {
|
|
12848
|
-
handled: new Set([
|
|
14037
|
+
handled: /* @__PURE__ */ new Set([
|
|
12849
14038
|
"ContentBasedDeduplication",
|
|
12850
14039
|
"DeduplicationScope",
|
|
12851
14040
|
"DelaySeconds",
|
|
@@ -12866,11 +14055,11 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12866
14055
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12867
14056
|
}],
|
|
12868
14057
|
["AWS::SQS::QueuePolicy", {
|
|
12869
|
-
handled: new Set(["PolicyDocument", "Queues"]),
|
|
14058
|
+
handled: /* @__PURE__ */ new Set(["PolicyDocument", "Queues"]),
|
|
12870
14059
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12871
14060
|
}],
|
|
12872
14061
|
["AWS::SSM::Parameter", {
|
|
12873
|
-
handled: new Set([
|
|
14062
|
+
handled: /* @__PURE__ */ new Set([
|
|
12874
14063
|
"AllowedPattern",
|
|
12875
14064
|
"DataType",
|
|
12876
14065
|
"Description",
|
|
@@ -12884,7 +14073,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12884
14073
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12885
14074
|
}],
|
|
12886
14075
|
["AWS::StepFunctions::StateMachine", {
|
|
12887
|
-
handled: new Set([
|
|
14076
|
+
handled: /* @__PURE__ */ new Set([
|
|
12888
14077
|
"Definition",
|
|
12889
14078
|
"DefinitionS3Location",
|
|
12890
14079
|
"DefinitionString",
|
|
@@ -12900,7 +14089,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12900
14089
|
silentDrop: /* @__PURE__ */ new Map()
|
|
12901
14090
|
}],
|
|
12902
14091
|
["AWS::WAFv2::WebACL", {
|
|
12903
|
-
handled: new Set([
|
|
14092
|
+
handled: /* @__PURE__ */ new Set([
|
|
12904
14093
|
"AssociationConfig",
|
|
12905
14094
|
"CaptchaConfig",
|
|
12906
14095
|
"ChallengeConfig",
|
|
@@ -12914,7 +14103,7 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
|
|
|
12914
14103
|
"TokenDomains",
|
|
12915
14104
|
"VisibilityConfig"
|
|
12916
14105
|
]),
|
|
12917
|
-
silentDrop: new Map([
|
|
14106
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
12918
14107
|
["ApplicationConfig", "not yet implemented by cdkd"],
|
|
12919
14108
|
["DataProtectionConfig", "not yet implemented by cdkd"],
|
|
12920
14109
|
["OnSourceDDoSProtectionConfig", "not yet implemented by cdkd"]
|
|
@@ -13050,7 +14239,7 @@ function findActionableSilentDrops(resourceType, templateProperties, allowedKeys
|
|
|
13050
14239
|
* bare schedule name as physicalId, and the state properties carry
|
|
13051
14240
|
* GroupName, so the SDK provider addresses existing records correctly.
|
|
13052
14241
|
*/
|
|
13053
|
-
const STICKY_CC_MIGRATION_EXEMPT = new Set(["AWS::Scheduler::Schedule"]);
|
|
14242
|
+
const STICKY_CC_MIGRATION_EXEMPT = /* @__PURE__ */ new Set(["AWS::Scheduler::Schedule"]);
|
|
13054
14243
|
var ProviderRegistry = class {
|
|
13055
14244
|
logger = getLogger().child("ProviderRegistry");
|
|
13056
14245
|
providers = /* @__PURE__ */ new Map();
|
|
@@ -13387,7 +14576,7 @@ function isCustomResource(resourceType) {
|
|
|
13387
14576
|
var IAMRoleProvider = class {
|
|
13388
14577
|
iamClient;
|
|
13389
14578
|
logger = getLogger().child("IAMRoleProvider");
|
|
13390
|
-
handledProperties = new Map([["AWS::IAM::Role", new Set([
|
|
14579
|
+
handledProperties = /* @__PURE__ */ new Map([["AWS::IAM::Role", /* @__PURE__ */ new Set([
|
|
13391
14580
|
"RoleName",
|
|
13392
14581
|
"AssumeRolePolicyDocument",
|
|
13393
14582
|
"Description",
|
|
@@ -14084,7 +15273,7 @@ function formatResourceLine(op, logicalId, resourceType, verbOverride) {
|
|
|
14084
15273
|
* Both conditional checks live in {@link isStatefulRecreateTarget};
|
|
14085
15274
|
* the bare {@link STATEFUL_TYPES} set is the type-only first-cut.
|
|
14086
15275
|
*/
|
|
14087
|
-
const STATEFUL_TYPES = new Set([
|
|
15276
|
+
const STATEFUL_TYPES = /* @__PURE__ */ new Set([
|
|
14088
15277
|
"AWS::RDS::DBInstance",
|
|
14089
15278
|
"AWS::RDS::DBCluster",
|
|
14090
15279
|
"AWS::DocDB::DBInstance",
|
|
@@ -14120,7 +15309,7 @@ const STATEFUL_TYPES = new Set([
|
|
|
14120
15309
|
* loss (bypassable with `--force-stateful-recreation`); this set is
|
|
14121
15310
|
* an out-of-scope refusal (no bypass).
|
|
14122
15311
|
*/
|
|
14123
|
-
const MULTI_REGION_RECREATE_BLOCKED_TYPES = new Set(["AWS::DynamoDB::GlobalTable"]);
|
|
15312
|
+
const MULTI_REGION_RECREATE_BLOCKED_TYPES = /* @__PURE__ */ new Set(["AWS::DynamoDB::GlobalTable"]);
|
|
14124
15313
|
/**
|
|
14125
15314
|
* Cheap, synchronous read of the resource's recorded properties only.
|
|
14126
15315
|
* For `AWS::S3::Bucket` this returns `null` — the live `ListObjectsV2`
|
|
@@ -14416,7 +15605,7 @@ function extractReferencedAlarmNames(alarmRule) {
|
|
|
14416
15605
|
*/
|
|
14417
15606
|
function computeImplicitDeleteEdges(resources) {
|
|
14418
15607
|
const edges = [];
|
|
14419
|
-
const alarmTypes = new Set(["AWS::CloudWatch::Alarm", "AWS::CloudWatch::CompositeAlarm"]);
|
|
15608
|
+
const alarmTypes = /* @__PURE__ */ new Set(["AWS::CloudWatch::Alarm", "AWS::CloudWatch::CompositeAlarm"]);
|
|
14420
15609
|
const nameToLogicalId = /* @__PURE__ */ new Map();
|
|
14421
15610
|
for (const [logicalId, resource] of Object.entries(resources)) {
|
|
14422
15611
|
if (!alarmTypes.has(resource.resourceType)) continue;
|
|
@@ -14489,7 +15678,7 @@ const RETRYABLE_ERROR_MESSAGE_PATTERNS = [
|
|
|
14489
15678
|
* HTTP status codes that always indicate a transient failure worth retrying.
|
|
14490
15679
|
* 429 = Too Many Requests (throttle), 503 = Service Unavailable.
|
|
14491
15680
|
*/
|
|
14492
|
-
const RETRYABLE_HTTP_STATUS_CODES = new Set([429, 503]);
|
|
15681
|
+
const RETRYABLE_HTTP_STATUS_CODES = /* @__PURE__ */ new Set([429, 503]);
|
|
14493
15682
|
/**
|
|
14494
15683
|
* AWS SDK v3 canonical throttling error names. Mirrors
|
|
14495
15684
|
* `@aws-sdk/service-error-classification`'s `THROTTLING_ERROR_CODES` — any
|
|
@@ -14499,7 +15688,7 @@ const RETRYABLE_HTTP_STATUS_CODES = new Set([429, 503]);
|
|
|
14499
15688
|
* (not 429) with the throttling signal carried only in the error code / name
|
|
14500
15689
|
* (e.g. SSM `ThrottlingException` for the `Rate exceeded` message).
|
|
14501
15690
|
*/
|
|
14502
|
-
const THROTTLING_ERROR_NAMES = new Set([
|
|
15691
|
+
const THROTTLING_ERROR_NAMES = /* @__PURE__ */ new Set([
|
|
14503
15692
|
"BandwidthLimitExceeded",
|
|
14504
15693
|
"EC2ThrottledException",
|
|
14505
15694
|
"LimitExceededException",
|
|
@@ -16176,5 +17365,5 @@ var DeployEngine = class {
|
|
|
16176
17365
|
};
|
|
16177
17366
|
|
|
16178
17367
|
//#endregion
|
|
16179
|
-
export {
|
|
16180
|
-
//# sourceMappingURL=deploy-engine-
|
|
17368
|
+
export { ensureAssetStorage as $, SynthesisError as $t, WAFv2WebACLProvider as A, clearBucketRegionCache as At, LockManager as B, LocalInvokeBuildError as Bt, findActionableSilentDrops as C, CFN_TEMPLATE_BODY_LIMIT as Ct, IntrinsicFunctionResolver as D, uploadCfnTemplate as Dt, isTerminationProtectionPropagationError as E, findLargeInlineResources as Et, assertRegionMatch as F, setAwsClients as Ft, stringifyValue as G, NestedStackChildDirectDestroyError as Gt, rebuildClientForBucketRegion as H, LocalStartServiceError as Ht, applyRoleArnIfSet as I, AssetError as It, createAssetRedirectResolver as J, ResourceTimeoutError as Jt, WorkGraph as K, PartialFailureError as Kt, DiffCalculator as L, CdkdError as Lt, matchesCdkPath as M, AwsClients as Mt, normalizeAwsTagsToCfn as N, getAwsClients as Nt, cfnRefValueFromPhysicalId as O, expectedOwnerParam as Ot, resolveExplicitPhysicalId as P, resetAwsClients as Pt, BOOTSTRAP_MARKER_PREFIX as Q, StateError as Qt, DagBuilder as R, ConfigError as Rt, ProviderRegistry as S, warnDeprecatedNoPrefixCliFlag as St, disableInstanceApiTermination as T, MIGRATE_TMP_PREFIX as Tt, shouldRetainResource as U, LockError as Ut, S3StateBackend as V, LocalMigrateError as Vt, AssetPublisher as W, MissingCdkCliError as Wt, rewriteTemplateAssetReferences as X, StackHasActiveImportsError as Xt, loadPublishableAssetManifest as Y, ResourceUpdateNotSupportedError as Yt, AssetModeResolver as Z, StackTerminationProtectionError as Zt, green as _, resolveCaptureObservedState as _t, withRetry as a, formatDockerLoginError as at, IAMRoleProvider as b, resolveStateBucketWithDefaultAndSource as bt, computeImplicitDeleteEdges as c, runDockerStreaming as ct, isStatefulRecreateTargetSync as d, Synthesizer as dt, formatError as en, getBootstrapMarkerKey as et, renderStatefulReason as f, synthesisStatusMessage as ft, gray as g, resolveAutoAssetStorage as gt, cyan as h, resolveApp as ht, withResourceDeadline as i, __exportAll as in, buildDockerImage as it, CDK_PATH_TAG as j, resolveBucketRegion as jt, refStateLookupFromResource as k, AssemblyReader as kt, extractDeploymentEventError as l, AssetManifestLoader as lt, bold as m, getLegacyStateBucketName as mt, DEFAULT_RESOURCE_WARN_AFTER_MS as n, normalizeAwsError as nn, validateAssetBucketName as nt, isRetryableTransientError as o, getDockerCmd as ot, formatResourceLine as p, getDefaultStateBucketName as pt, buildAssetRedirectMap as q, ProvisioningError as qt, DeployEngine as r, withErrorHandling as rn, validateContainerRepoName as rt, IMPLICIT_DELETE_DEPENDENCIES as s, runDockerForeground as st, DEFAULT_RESOURCE_TIMEOUT_MS as t, isCdkdError as tn, parseBootstrapMarker as tt, MULTI_REGION_RECREATE_BLOCKED_TYPES as u, getDockerImageBySourceHash as ut, red as v, resolveSkipPrefix as vt, CloudControlProvider as w, CFN_TEMPLATE_URL_LIMIT as wt, collectInlinePolicyNamesManagedBySiblings as x, resolveUseCdkBootstrapAssets as xt, yellow as y, resolveStateBucketWithDefault as yt, TemplateParser as z, DependencyError as zt };
|
|
17369
|
+
//# sourceMappingURL=deploy-engine-DqAyGFJu.js.map
|