├── .github └── workflows │ └── release.yml ├── .gitignore ├── .jsii ├── .npmignore ├── LICENSE ├── README.md ├── lib ├── index.ts └── lambda-log-handler │ └── index.ts ├── package-lock.json ├── package.json ├── tests ├── __snapshots__ │ └── snapshot.test.ts.snap └── snapshot.test.ts ├── tsconfig.json └── vitest.config.mts /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: release 2 | on: 3 | push: 4 | tags: 5 | - 'v[0-9]+.[0-9]+.[0-9]+' 6 | workflow_dispatch: 7 | jobs: 8 | release_npm: 9 | name: Publish to npm 10 | runs-on: ubuntu-latest 11 | permissions: 12 | id-token: write 13 | contents: read 14 | steps: 15 | - uses: actions/checkout@v4 16 | - uses: actions/setup-node@v4 17 | with: 18 | node-version: 20.x 19 | - run: npm ci 20 | - run: npx jsii -v 21 | - run: npx jsii-pacmak -v --target js 22 | - run: npx publib-npm 23 | env: 24 | NPM_DIST_TAG: latest 25 | NPM_REGISTRY: registry.npmjs.org 26 | NPM_CONFIG_PROVENANCE: "true" 27 | NPM_TOKEN: ${{ secrets.NPM_TOKEN }} 28 | release_maven: 29 | name: Publish to Maven Central 30 | runs-on: ubuntu-latest 31 | permissions: 32 | contents: read 33 | steps: 34 | - uses: actions/checkout@v4 35 | - uses: actions/setup-java@v4 36 | with: 37 | distribution: corretto 38 | java-version: "11" 39 | - uses: actions/setup-node@v4 40 | with: 41 | node-version: 20.x 42 | - run: npm ci 43 | - run: npx jsii-pacmak -v --target java 44 | - run: npx publib-maven 45 | env: 46 | MAVEN_ENDPOINT: https://s01.oss.sonatype.org 47 | MAVEN_GPG_PRIVATE_KEY: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }} 48 | MAVEN_GPG_PRIVATE_KEY_PASSPHRASE: ${{ secrets.MAVEN_GPG_PRIVATE_KEY_PASSPHRASE }} 49 | MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }} 50 | MAVEN_USERNAME: ${{ secrets.MAVEN_USERNAME }} 51 | MAVEN_STAGING_PROFILE_ID: ${{ secrets.MAVEN_STAGING_PROFILE_ID }} 52 | MAVEN_OPTS: --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.text=ALL-UNNAMED --add-opens=java.desktop/java.awt.font=ALL-UNNAMED 53 | release_pypi: 54 | name: Publish to PyPI 55 | runs-on: ubuntu-latest 56 | permissions: 57 | contents: read 58 | steps: 59 | - uses: actions/checkout@v4 60 | - uses: actions/setup-node@v4 61 | with: 62 | node-version: 20.x 63 | - uses: actions/setup-python@v5 64 | with: 65 | python-version: 3.x 66 | - run: npm ci 67 | - run: npx jsii-pacmak -v --target python 68 | - run: npx publib-pypi 69 | env: 70 | TWINE_USERNAME: ${{ secrets.TWINE_USERNAME }} 71 | TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }} 72 | release_nuget: 73 | name: Publish to NuGet Gallery 74 | runs-on: ubuntu-latest 75 | permissions: 76 | contents: read 77 | steps: 78 | - uses: actions/checkout@v4 79 | - uses: actions/setup-node@v4 80 | with: 81 | node-version: 20.x 82 | - uses: actions/setup-dotnet@v4 83 | with: 84 | dotnet-version: 6.x 85 | - run: npm ci 86 | - run: npx jsii-pacmak -v --target dotnet 87 | - run: npx publib-nuget 88 | env: 89 | NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }} 90 | release_golang: 91 | name: Publish to GitHub Go Module Repository 92 | runs-on: ubuntu-latest 93 | permissions: 94 | contents: read 95 | steps: 96 | - uses: actions/checkout@v4 97 | - uses: actions/setup-node@v4 98 | with: 99 | node-version: 20.x 100 | - uses: actions/setup-go@v5 101 | with: 102 | go-version: ^1.18.0 103 | - run: npm ci 104 | - run: npx jsii-pacmak -v --target go 105 | - run: npx publib-golang 106 | env: 107 | GIT_USER_NAME: cdklabs-automation 108 | GIT_USER_EMAIL: cdklabs-automation@amazon.com 109 | GITHUB_TOKEN: ${{ secrets.GO_GITHUB_TOKEN }} 110 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.d.ts 2 | *.js 3 | *.tsbuildinfo 4 | node_modules 5 | dist 6 | -------------------------------------------------------------------------------- /.jsii: -------------------------------------------------------------------------------- 1 | { 2 | "author": { 3 | "name": "Yuki Ito", 4 | "roles": [ 5 | "author" 6 | ] 7 | }, 8 | "bundled": { 9 | "change-case": "^5.4.4" 10 | }, 11 | "dependencies": { 12 | "aws-cdk-lib": "^2.150.0", 13 | "constructs": "^10.3.0" 14 | }, 15 | "dependencyClosure": { 16 | "@aws-cdk/asset-awscli-v1": { 17 | "targets": { 18 | "dotnet": { 19 | "namespace": "Amazon.CDK.Asset.AwsCliV1", 20 | "packageId": "Amazon.CDK.Asset.AwsCliV1" 21 | }, 22 | "go": { 23 | "moduleName": "github.com/cdklabs/awscdk-asset-awscli-go", 24 | "packageName": "awscliv1" 25 | }, 26 | "java": { 27 | "maven": { 28 | "artifactId": "cdk-asset-awscli-v1", 29 | "groupId": "software.amazon.awscdk" 30 | }, 31 | "package": "software.amazon.awscdk.cdk.asset.awscli.v1" 32 | }, 33 | "js": { 34 | "npm": "@aws-cdk/asset-awscli-v1" 35 | }, 36 | "python": { 37 | "distName": "aws-cdk.asset-awscli-v1", 38 | "module": "aws_cdk.asset_awscli_v1" 39 | } 40 | } 41 | }, 42 | "@aws-cdk/asset-kubectl-v20": { 43 | "targets": { 44 | "dotnet": { 45 | "namespace": "Amazon.CDK.Asset.KubectlV20", 46 | "packageId": "Amazon.CDK.Asset.KubectlV20" 47 | }, 48 | "go": { 49 | "moduleName": "github.com/cdklabs/awscdk-asset-kubectl-go", 50 | "packageName": "kubectlv20" 51 | }, 52 | "java": { 53 | "maven": { 54 | "artifactId": "cdk-asset-kubectl-v20", 55 | "groupId": "software.amazon.awscdk" 56 | }, 57 | "package": "software.amazon.awscdk.cdk.asset.kubectl.v20" 58 | }, 59 | "js": { 60 | "npm": "@aws-cdk/asset-kubectl-v20" 61 | }, 62 | "python": { 63 | "distName": "aws-cdk.asset-kubectl-v20", 64 | "module": "aws_cdk.asset_kubectl_v20" 65 | } 66 | } 67 | }, 68 | "@aws-cdk/asset-node-proxy-agent-v6": { 69 | "targets": { 70 | "dotnet": { 71 | "namespace": "Amazon.CDK.Asset.NodeProxyAgentV6", 72 | "packageId": "Amazon.CDK.Asset.NodeProxyAgentV6" 73 | }, 74 | "go": { 75 | "moduleName": "github.com/cdklabs/awscdk-asset-node-proxy-agent-go", 76 | "packageName": "nodeproxyagentv6" 77 | }, 78 | "java": { 79 | "maven": { 80 | "artifactId": "cdk-asset-node-proxy-agent-v6", 81 | "groupId": "software.amazon.awscdk" 82 | }, 83 | "package": "software.amazon.awscdk.cdk.asset.node.proxy.agent.v6" 84 | }, 85 | "js": { 86 | "npm": "@aws-cdk/asset-node-proxy-agent-v6" 87 | }, 88 | "python": { 89 | "distName": "aws-cdk.asset-node-proxy-agent-v6", 90 | "module": "aws_cdk.asset_node_proxy_agent_v6" 91 | } 92 | } 93 | }, 94 | "aws-cdk-lib": { 95 | "submodules": { 96 | "aws-cdk-lib.alexa_ask": { 97 | "targets": { 98 | "dotnet": { 99 | "namespace": "Amazon.CDK.Alexa.Ask" 100 | }, 101 | "java": { 102 | "package": "software.amazon.awscdk.alexa.ask" 103 | }, 104 | "python": { 105 | "module": "aws_cdk.alexa_ask" 106 | } 107 | } 108 | }, 109 | "aws-cdk-lib.assertions": { 110 | "targets": { 111 | "dotnet": { 112 | "namespace": "Amazon.CDK.Assertions" 113 | }, 114 | "java": { 115 | "package": "software.amazon.awscdk.assertions" 116 | }, 117 | "python": { 118 | "module": "aws_cdk.assertions" 119 | } 120 | } 121 | }, 122 | "aws-cdk-lib.assets": { 123 | "targets": { 124 | "dotnet": { 125 | "namespace": "Amazon.CDK.Assets" 126 | }, 127 | "java": { 128 | "package": "software.amazon.awscdk.assets" 129 | }, 130 | "python": { 131 | "module": "aws_cdk.assets" 132 | } 133 | } 134 | }, 135 | "aws-cdk-lib.aws_accessanalyzer": { 136 | "targets": { 137 | "dotnet": { 138 | "namespace": "Amazon.CDK.AWS.AccessAnalyzer" 139 | }, 140 | "java": { 141 | "package": "software.amazon.awscdk.services.accessanalyzer" 142 | }, 143 | "python": { 144 | "module": "aws_cdk.aws_accessanalyzer" 145 | } 146 | } 147 | }, 148 | "aws-cdk-lib.aws_acmpca": { 149 | "targets": { 150 | "dotnet": { 151 | "namespace": "Amazon.CDK.AWS.ACMPCA" 152 | }, 153 | "java": { 154 | "package": "software.amazon.awscdk.services.acmpca" 155 | }, 156 | "python": { 157 | "module": "aws_cdk.aws_acmpca" 158 | } 159 | } 160 | }, 161 | "aws-cdk-lib.aws_amazonmq": { 162 | "targets": { 163 | "dotnet": { 164 | "namespace": "Amazon.CDK.AWS.AmazonMQ" 165 | }, 166 | "java": { 167 | "package": "software.amazon.awscdk.services.amazonmq" 168 | }, 169 | "python": { 170 | "module": "aws_cdk.aws_amazonmq" 171 | } 172 | } 173 | }, 174 | "aws-cdk-lib.aws_amplify": { 175 | "targets": { 176 | "dotnet": { 177 | "namespace": "Amazon.CDK.AWS.Amplify" 178 | }, 179 | "java": { 180 | "package": "software.amazon.awscdk.services.amplify" 181 | }, 182 | "python": { 183 | "module": "aws_cdk.aws_amplify" 184 | } 185 | } 186 | }, 187 | "aws-cdk-lib.aws_amplifyuibuilder": { 188 | "targets": { 189 | "dotnet": { 190 | "namespace": "Amazon.CDK.AWS.AmplifyUIBuilder" 191 | }, 192 | "java": { 193 | "package": "software.amazon.awscdk.services.amplifyuibuilder" 194 | }, 195 | "python": { 196 | "module": "aws_cdk.aws_amplifyuibuilder" 197 | } 198 | } 199 | }, 200 | "aws-cdk-lib.aws_apigateway": { 201 | "targets": { 202 | "dotnet": { 203 | "namespace": "Amazon.CDK.AWS.APIGateway" 204 | }, 205 | "java": { 206 | "package": "software.amazon.awscdk.services.apigateway" 207 | }, 208 | "python": { 209 | "module": "aws_cdk.aws_apigateway" 210 | } 211 | } 212 | }, 213 | "aws-cdk-lib.aws_apigatewayv2": { 214 | "targets": { 215 | "dotnet": { 216 | "namespace": "Amazon.CDK.AWS.Apigatewayv2" 217 | }, 218 | "java": { 219 | "package": "software.amazon.awscdk.services.apigatewayv2" 220 | }, 221 | "python": { 222 | "module": "aws_cdk.aws_apigatewayv2" 223 | } 224 | } 225 | }, 226 | "aws-cdk-lib.aws_apigatewayv2_authorizers": { 227 | "targets": { 228 | "dotnet": { 229 | "namespace": "Amazon.CDK.AwsApigatewayv2Authorizers" 230 | }, 231 | "java": { 232 | "package": "software.amazon.awscdk.aws_apigatewayv2_authorizers" 233 | }, 234 | "python": { 235 | "module": "aws_cdk.aws_apigatewayv2_authorizers" 236 | } 237 | } 238 | }, 239 | "aws-cdk-lib.aws_apigatewayv2_integrations": { 240 | "targets": { 241 | "dotnet": { 242 | "namespace": "Amazon.CDK.AwsApigatewayv2Integrations" 243 | }, 244 | "java": { 245 | "package": "software.amazon.awscdk.aws_apigatewayv2_integrations" 246 | }, 247 | "python": { 248 | "module": "aws_cdk.aws_apigatewayv2_integrations" 249 | } 250 | } 251 | }, 252 | "aws-cdk-lib.aws_appconfig": { 253 | "targets": { 254 | "dotnet": { 255 | "namespace": "Amazon.CDK.AWS.AppConfig" 256 | }, 257 | "java": { 258 | "package": "software.amazon.awscdk.services.appconfig" 259 | }, 260 | "python": { 261 | "module": "aws_cdk.aws_appconfig" 262 | } 263 | } 264 | }, 265 | "aws-cdk-lib.aws_appflow": { 266 | "targets": { 267 | "dotnet": { 268 | "namespace": "Amazon.CDK.AWS.AppFlow" 269 | }, 270 | "java": { 271 | "package": "software.amazon.awscdk.services.appflow" 272 | }, 273 | "python": { 274 | "module": "aws_cdk.aws_appflow" 275 | } 276 | } 277 | }, 278 | "aws-cdk-lib.aws_appintegrations": { 279 | "targets": { 280 | "dotnet": { 281 | "namespace": "Amazon.CDK.AWS.AppIntegrations" 282 | }, 283 | "java": { 284 | "package": "software.amazon.awscdk.services.appintegrations" 285 | }, 286 | "python": { 287 | "module": "aws_cdk.aws_appintegrations" 288 | } 289 | } 290 | }, 291 | "aws-cdk-lib.aws_applicationautoscaling": { 292 | "targets": { 293 | "dotnet": { 294 | "namespace": "Amazon.CDK.AWS.ApplicationAutoScaling" 295 | }, 296 | "java": { 297 | "package": "software.amazon.awscdk.services.applicationautoscaling" 298 | }, 299 | "python": { 300 | "module": "aws_cdk.aws_applicationautoscaling" 301 | } 302 | } 303 | }, 304 | "aws-cdk-lib.aws_applicationinsights": { 305 | "targets": { 306 | "dotnet": { 307 | "namespace": "Amazon.CDK.AWS.ApplicationInsights" 308 | }, 309 | "java": { 310 | "package": "software.amazon.awscdk.services.applicationinsights" 311 | }, 312 | "python": { 313 | "module": "aws_cdk.aws_applicationinsights" 314 | } 315 | } 316 | }, 317 | "aws-cdk-lib.aws_applicationsignals": { 318 | "targets": { 319 | "dotnet": { 320 | "package": "Amazon.CDK.AWS.ApplicationSignals" 321 | }, 322 | "java": { 323 | "package": "software.amazon.awscdk.services.applicationsignals" 324 | }, 325 | "python": { 326 | "module": "aws_cdk.aws_applicationsignals" 327 | } 328 | } 329 | }, 330 | "aws-cdk-lib.aws_appmesh": { 331 | "targets": { 332 | "dotnet": { 333 | "namespace": "Amazon.CDK.AWS.AppMesh" 334 | }, 335 | "java": { 336 | "package": "software.amazon.awscdk.services.appmesh" 337 | }, 338 | "python": { 339 | "module": "aws_cdk.aws_appmesh" 340 | } 341 | } 342 | }, 343 | "aws-cdk-lib.aws_apprunner": { 344 | "targets": { 345 | "dotnet": { 346 | "namespace": "Amazon.CDK.AWS.AppRunner" 347 | }, 348 | "java": { 349 | "package": "software.amazon.awscdk.services.apprunner" 350 | }, 351 | "python": { 352 | "module": "aws_cdk.aws_apprunner" 353 | } 354 | } 355 | }, 356 | "aws-cdk-lib.aws_appstream": { 357 | "targets": { 358 | "dotnet": { 359 | "namespace": "Amazon.CDK.AWS.AppStream" 360 | }, 361 | "java": { 362 | "package": "software.amazon.awscdk.services.appstream" 363 | }, 364 | "python": { 365 | "module": "aws_cdk.aws_appstream" 366 | } 367 | } 368 | }, 369 | "aws-cdk-lib.aws_appsync": { 370 | "targets": { 371 | "dotnet": { 372 | "namespace": "Amazon.CDK.AWS.AppSync" 373 | }, 374 | "java": { 375 | "package": "software.amazon.awscdk.services.appsync" 376 | }, 377 | "python": { 378 | "module": "aws_cdk.aws_appsync" 379 | } 380 | } 381 | }, 382 | "aws-cdk-lib.aws_apptest": { 383 | "targets": { 384 | "dotnet": { 385 | "package": "Amazon.CDK.AWS.AppTest" 386 | }, 387 | "java": { 388 | "package": "software.amazon.awscdk.services.apptest" 389 | }, 390 | "python": { 391 | "module": "aws_cdk.aws_apptest" 392 | } 393 | } 394 | }, 395 | "aws-cdk-lib.aws_aps": { 396 | "targets": { 397 | "dotnet": { 398 | "namespace": "Amazon.CDK.AWS.APS" 399 | }, 400 | "java": { 401 | "package": "software.amazon.awscdk.services.aps" 402 | }, 403 | "python": { 404 | "module": "aws_cdk.aws_aps" 405 | } 406 | } 407 | }, 408 | "aws-cdk-lib.aws_arczonalshift": { 409 | "targets": { 410 | "dotnet": { 411 | "package": "Amazon.CDK.AWS.ARCZonalShift" 412 | }, 413 | "java": { 414 | "package": "software.amazon.awscdk.services.arczonalshift" 415 | }, 416 | "python": { 417 | "module": "aws_cdk.aws_arczonalshift" 418 | } 419 | } 420 | }, 421 | "aws-cdk-lib.aws_athena": { 422 | "targets": { 423 | "dotnet": { 424 | "namespace": "Amazon.CDK.AWS.Athena" 425 | }, 426 | "java": { 427 | "package": "software.amazon.awscdk.services.athena" 428 | }, 429 | "python": { 430 | "module": "aws_cdk.aws_athena" 431 | } 432 | } 433 | }, 434 | "aws-cdk-lib.aws_auditmanager": { 435 | "targets": { 436 | "dotnet": { 437 | "namespace": "Amazon.CDK.AWS.AuditManager" 438 | }, 439 | "java": { 440 | "package": "software.amazon.awscdk.services.auditmanager" 441 | }, 442 | "python": { 443 | "module": "aws_cdk.aws_auditmanager" 444 | } 445 | } 446 | }, 447 | "aws-cdk-lib.aws_autoscaling": { 448 | "targets": { 449 | "dotnet": { 450 | "namespace": "Amazon.CDK.AWS.AutoScaling" 451 | }, 452 | "java": { 453 | "package": "software.amazon.awscdk.services.autoscaling" 454 | }, 455 | "python": { 456 | "module": "aws_cdk.aws_autoscaling" 457 | } 458 | } 459 | }, 460 | "aws-cdk-lib.aws_autoscaling_common": { 461 | "targets": { 462 | "dotnet": { 463 | "namespace": "Amazon.CDK.AWS.AutoScaling.Common" 464 | }, 465 | "java": { 466 | "package": "software.amazon.awscdk.services.autoscaling.common" 467 | }, 468 | "python": { 469 | "module": "aws_cdk.aws_autoscaling_common" 470 | } 471 | } 472 | }, 473 | "aws-cdk-lib.aws_autoscaling_hooktargets": { 474 | "targets": { 475 | "dotnet": { 476 | "namespace": "Amazon.CDK.AWS.AutoScaling.HookTargets" 477 | }, 478 | "java": { 479 | "package": "software.amazon.awscdk.services.autoscaling.hooktargets" 480 | }, 481 | "python": { 482 | "module": "aws_cdk.aws_autoscaling_hooktargets" 483 | } 484 | } 485 | }, 486 | "aws-cdk-lib.aws_autoscalingplans": { 487 | "targets": { 488 | "dotnet": { 489 | "namespace": "Amazon.CDK.AWS.AutoScalingPlans" 490 | }, 491 | "java": { 492 | "package": "software.amazon.awscdk.services.autoscalingplans" 493 | }, 494 | "python": { 495 | "module": "aws_cdk.aws_autoscalingplans" 496 | } 497 | } 498 | }, 499 | "aws-cdk-lib.aws_b2bi": { 500 | "targets": { 501 | "dotnet": { 502 | "package": "Amazon.CDK.AWS.B2BI" 503 | }, 504 | "java": { 505 | "package": "software.amazon.awscdk.services.b2bi" 506 | }, 507 | "python": { 508 | "module": "aws_cdk.aws_b2bi" 509 | } 510 | } 511 | }, 512 | "aws-cdk-lib.aws_backup": { 513 | "targets": { 514 | "dotnet": { 515 | "namespace": "Amazon.CDK.AWS.Backup" 516 | }, 517 | "java": { 518 | "package": "software.amazon.awscdk.services.backup" 519 | }, 520 | "python": { 521 | "module": "aws_cdk.aws_backup" 522 | } 523 | } 524 | }, 525 | "aws-cdk-lib.aws_backupgateway": { 526 | "targets": { 527 | "dotnet": { 528 | "package": "Amazon.CDK.AWS.BackupGateway" 529 | }, 530 | "java": { 531 | "package": "software.amazon.awscdk.services.backupgateway" 532 | }, 533 | "python": { 534 | "module": "aws_cdk.aws_backupgateway" 535 | } 536 | } 537 | }, 538 | "aws-cdk-lib.aws_batch": { 539 | "targets": { 540 | "dotnet": { 541 | "namespace": "Amazon.CDK.AWS.Batch" 542 | }, 543 | "java": { 544 | "package": "software.amazon.awscdk.services.batch" 545 | }, 546 | "python": { 547 | "module": "aws_cdk.aws_batch" 548 | } 549 | } 550 | }, 551 | "aws-cdk-lib.aws_bcmdataexports": { 552 | "targets": { 553 | "dotnet": { 554 | "package": "Amazon.CDK.AWS.BCMDataExports" 555 | }, 556 | "java": { 557 | "package": "software.amazon.awscdk.services.bcmdataexports" 558 | }, 559 | "python": { 560 | "module": "aws_cdk.aws_bcmdataexports" 561 | } 562 | } 563 | }, 564 | "aws-cdk-lib.aws_bedrock": { 565 | "targets": { 566 | "dotnet": { 567 | "package": "Amazon.CDK.AWS.Bedrock" 568 | }, 569 | "java": { 570 | "package": "software.amazon.awscdk.services.bedrock" 571 | }, 572 | "python": { 573 | "module": "aws_cdk.aws_bedrock" 574 | } 575 | } 576 | }, 577 | "aws-cdk-lib.aws_billingconductor": { 578 | "targets": { 579 | "dotnet": { 580 | "namespace": "Amazon.CDK.AWS.BillingConductor" 581 | }, 582 | "java": { 583 | "package": "software.amazon.awscdk.services.billingconductor" 584 | }, 585 | "python": { 586 | "module": "aws_cdk.aws_billingconductor" 587 | } 588 | } 589 | }, 590 | "aws-cdk-lib.aws_budgets": { 591 | "targets": { 592 | "dotnet": { 593 | "namespace": "Amazon.CDK.AWS.Budgets" 594 | }, 595 | "java": { 596 | "package": "software.amazon.awscdk.services.budgets" 597 | }, 598 | "python": { 599 | "module": "aws_cdk.aws_budgets" 600 | } 601 | } 602 | }, 603 | "aws-cdk-lib.aws_cassandra": { 604 | "targets": { 605 | "dotnet": { 606 | "namespace": "Amazon.CDK.AWS.Cassandra" 607 | }, 608 | "java": { 609 | "package": "software.amazon.awscdk.services.cassandra" 610 | }, 611 | "python": { 612 | "module": "aws_cdk.aws_cassandra" 613 | } 614 | } 615 | }, 616 | "aws-cdk-lib.aws_ce": { 617 | "targets": { 618 | "dotnet": { 619 | "namespace": "Amazon.CDK.AWS.CE" 620 | }, 621 | "java": { 622 | "package": "software.amazon.awscdk.services.ce" 623 | }, 624 | "python": { 625 | "module": "aws_cdk.aws_ce" 626 | } 627 | } 628 | }, 629 | "aws-cdk-lib.aws_certificatemanager": { 630 | "targets": { 631 | "dotnet": { 632 | "namespace": "Amazon.CDK.AWS.CertificateManager" 633 | }, 634 | "java": { 635 | "package": "software.amazon.awscdk.services.certificatemanager" 636 | }, 637 | "python": { 638 | "module": "aws_cdk.aws_certificatemanager" 639 | } 640 | } 641 | }, 642 | "aws-cdk-lib.aws_chatbot": { 643 | "targets": { 644 | "dotnet": { 645 | "namespace": "Amazon.CDK.AWS.Chatbot" 646 | }, 647 | "java": { 648 | "package": "software.amazon.awscdk.services.chatbot" 649 | }, 650 | "python": { 651 | "module": "aws_cdk.aws_chatbot" 652 | } 653 | } 654 | }, 655 | "aws-cdk-lib.aws_cleanrooms": { 656 | "targets": { 657 | "dotnet": { 658 | "package": "Amazon.CDK.AWS.CleanRooms" 659 | }, 660 | "java": { 661 | "package": "software.amazon.awscdk.services.cleanrooms" 662 | }, 663 | "python": { 664 | "module": "aws_cdk.aws_cleanrooms" 665 | } 666 | } 667 | }, 668 | "aws-cdk-lib.aws_cleanroomsml": { 669 | "targets": { 670 | "dotnet": { 671 | "package": "Amazon.CDK.AWS.CleanRoomsML" 672 | }, 673 | "java": { 674 | "package": "software.amazon.awscdk.services.cleanroomsml" 675 | }, 676 | "python": { 677 | "module": "aws_cdk.aws_cleanroomsml" 678 | } 679 | } 680 | }, 681 | "aws-cdk-lib.aws_cloud9": { 682 | "targets": { 683 | "dotnet": { 684 | "namespace": "Amazon.CDK.AWS.Cloud9" 685 | }, 686 | "java": { 687 | "package": "software.amazon.awscdk.services.cloud9" 688 | }, 689 | "python": { 690 | "module": "aws_cdk.aws_cloud9" 691 | } 692 | } 693 | }, 694 | "aws-cdk-lib.aws_cloudformation": { 695 | "targets": { 696 | "dotnet": { 697 | "namespace": "Amazon.CDK.AWS.CloudFormation" 698 | }, 699 | "java": { 700 | "package": "software.amazon.awscdk.services.cloudformation" 701 | }, 702 | "python": { 703 | "module": "aws_cdk.aws_cloudformation" 704 | } 705 | } 706 | }, 707 | "aws-cdk-lib.aws_cloudfront": { 708 | "targets": { 709 | "dotnet": { 710 | "namespace": "Amazon.CDK.AWS.CloudFront" 711 | }, 712 | "java": { 713 | "package": "software.amazon.awscdk.services.cloudfront" 714 | }, 715 | "python": { 716 | "module": "aws_cdk.aws_cloudfront" 717 | } 718 | } 719 | }, 720 | "aws-cdk-lib.aws_cloudfront.experimental": {}, 721 | "aws-cdk-lib.aws_cloudfront_origins": { 722 | "targets": { 723 | "dotnet": { 724 | "namespace": "Amazon.CDK.AWS.CloudFront.Origins" 725 | }, 726 | "java": { 727 | "package": "software.amazon.awscdk.services.cloudfront.origins" 728 | }, 729 | "python": { 730 | "module": "aws_cdk.aws_cloudfront_origins" 731 | } 732 | } 733 | }, 734 | "aws-cdk-lib.aws_cloudtrail": { 735 | "targets": { 736 | "dotnet": { 737 | "namespace": "Amazon.CDK.AWS.CloudTrail" 738 | }, 739 | "java": { 740 | "package": "software.amazon.awscdk.services.cloudtrail" 741 | }, 742 | "python": { 743 | "module": "aws_cdk.aws_cloudtrail" 744 | } 745 | } 746 | }, 747 | "aws-cdk-lib.aws_cloudwatch": { 748 | "targets": { 749 | "dotnet": { 750 | "namespace": "Amazon.CDK.AWS.CloudWatch" 751 | }, 752 | "java": { 753 | "package": "software.amazon.awscdk.services.cloudwatch" 754 | }, 755 | "python": { 756 | "module": "aws_cdk.aws_cloudwatch" 757 | } 758 | } 759 | }, 760 | "aws-cdk-lib.aws_cloudwatch_actions": { 761 | "targets": { 762 | "dotnet": { 763 | "namespace": "Amazon.CDK.AWS.CloudWatch.Actions" 764 | }, 765 | "java": { 766 | "package": "software.amazon.awscdk.services.cloudwatch.actions" 767 | }, 768 | "python": { 769 | "module": "aws_cdk.aws_cloudwatch_actions" 770 | } 771 | } 772 | }, 773 | "aws-cdk-lib.aws_codeartifact": { 774 | "targets": { 775 | "dotnet": { 776 | "namespace": "Amazon.CDK.AWS.CodeArtifact" 777 | }, 778 | "java": { 779 | "package": "software.amazon.awscdk.services.codeartifact" 780 | }, 781 | "python": { 782 | "module": "aws_cdk.aws_codeartifact" 783 | } 784 | } 785 | }, 786 | "aws-cdk-lib.aws_codebuild": { 787 | "targets": { 788 | "dotnet": { 789 | "namespace": "Amazon.CDK.AWS.CodeBuild" 790 | }, 791 | "java": { 792 | "package": "software.amazon.awscdk.services.codebuild" 793 | }, 794 | "python": { 795 | "module": "aws_cdk.aws_codebuild" 796 | } 797 | } 798 | }, 799 | "aws-cdk-lib.aws_codecommit": { 800 | "targets": { 801 | "dotnet": { 802 | "namespace": "Amazon.CDK.AWS.CodeCommit" 803 | }, 804 | "java": { 805 | "package": "software.amazon.awscdk.services.codecommit" 806 | }, 807 | "python": { 808 | "module": "aws_cdk.aws_codecommit" 809 | } 810 | } 811 | }, 812 | "aws-cdk-lib.aws_codeconnections": { 813 | "targets": { 814 | "dotnet": { 815 | "package": "Amazon.CDK.AWS.CodeConnections" 816 | }, 817 | "java": { 818 | "package": "software.amazon.awscdk.services.codeconnections" 819 | }, 820 | "python": { 821 | "module": "aws_cdk.aws_codeconnections" 822 | } 823 | } 824 | }, 825 | "aws-cdk-lib.aws_codedeploy": { 826 | "targets": { 827 | "dotnet": { 828 | "namespace": "Amazon.CDK.AWS.CodeDeploy" 829 | }, 830 | "java": { 831 | "package": "software.amazon.awscdk.services.codedeploy" 832 | }, 833 | "python": { 834 | "module": "aws_cdk.aws_codedeploy" 835 | } 836 | } 837 | }, 838 | "aws-cdk-lib.aws_codeguruprofiler": { 839 | "targets": { 840 | "dotnet": { 841 | "namespace": "Amazon.CDK.AWS.CodeGuruProfiler" 842 | }, 843 | "java": { 844 | "package": "software.amazon.awscdk.services.codeguruprofiler" 845 | }, 846 | "python": { 847 | "module": "aws_cdk.aws_codeguruprofiler" 848 | } 849 | } 850 | }, 851 | "aws-cdk-lib.aws_codegurureviewer": { 852 | "targets": { 853 | "dotnet": { 854 | "namespace": "Amazon.CDK.AWS.CodeGuruReviewer" 855 | }, 856 | "java": { 857 | "package": "software.amazon.awscdk.services.codegurureviewer" 858 | }, 859 | "python": { 860 | "module": "aws_cdk.aws_codegurureviewer" 861 | } 862 | } 863 | }, 864 | "aws-cdk-lib.aws_codepipeline": { 865 | "targets": { 866 | "dotnet": { 867 | "namespace": "Amazon.CDK.AWS.CodePipeline" 868 | }, 869 | "java": { 870 | "package": "software.amazon.awscdk.services.codepipeline" 871 | }, 872 | "python": { 873 | "module": "aws_cdk.aws_codepipeline" 874 | } 875 | } 876 | }, 877 | "aws-cdk-lib.aws_codepipeline_actions": { 878 | "targets": { 879 | "dotnet": { 880 | "namespace": "Amazon.CDK.AWS.CodePipeline.Actions" 881 | }, 882 | "java": { 883 | "package": "software.amazon.awscdk.services.codepipeline.actions" 884 | }, 885 | "python": { 886 | "module": "aws_cdk.aws_codepipeline_actions" 887 | } 888 | } 889 | }, 890 | "aws-cdk-lib.aws_codestar": { 891 | "targets": { 892 | "dotnet": { 893 | "namespace": "Amazon.CDK.AWS.Codestar" 894 | }, 895 | "java": { 896 | "package": "software.amazon.awscdk.services.codestar" 897 | }, 898 | "python": { 899 | "module": "aws_cdk.aws_codestar" 900 | } 901 | } 902 | }, 903 | "aws-cdk-lib.aws_codestarconnections": { 904 | "targets": { 905 | "dotnet": { 906 | "namespace": "Amazon.CDK.AWS.CodeStarConnections" 907 | }, 908 | "java": { 909 | "package": "software.amazon.awscdk.services.codestarconnections" 910 | }, 911 | "python": { 912 | "module": "aws_cdk.aws_codestarconnections" 913 | } 914 | } 915 | }, 916 | "aws-cdk-lib.aws_codestarnotifications": { 917 | "targets": { 918 | "dotnet": { 919 | "namespace": "Amazon.CDK.AWS.CodeStarNotifications" 920 | }, 921 | "java": { 922 | "package": "software.amazon.awscdk.services.codestarnotifications" 923 | }, 924 | "python": { 925 | "module": "aws_cdk.aws_codestarnotifications" 926 | } 927 | } 928 | }, 929 | "aws-cdk-lib.aws_cognito": { 930 | "targets": { 931 | "dotnet": { 932 | "namespace": "Amazon.CDK.AWS.Cognito" 933 | }, 934 | "java": { 935 | "package": "software.amazon.awscdk.services.cognito" 936 | }, 937 | "python": { 938 | "module": "aws_cdk.aws_cognito" 939 | } 940 | } 941 | }, 942 | "aws-cdk-lib.aws_comprehend": { 943 | "targets": { 944 | "dotnet": { 945 | "namespace": "Amazon.CDK.AWS.Comprehend" 946 | }, 947 | "java": { 948 | "package": "software.amazon.awscdk.services.comprehend" 949 | }, 950 | "python": { 951 | "module": "aws_cdk.aws_comprehend" 952 | } 953 | } 954 | }, 955 | "aws-cdk-lib.aws_config": { 956 | "targets": { 957 | "dotnet": { 958 | "namespace": "Amazon.CDK.AWS.Config" 959 | }, 960 | "java": { 961 | "package": "software.amazon.awscdk.services.config" 962 | }, 963 | "python": { 964 | "module": "aws_cdk.aws_config" 965 | } 966 | } 967 | }, 968 | "aws-cdk-lib.aws_connect": { 969 | "targets": { 970 | "dotnet": { 971 | "namespace": "Amazon.CDK.AWS.Connect" 972 | }, 973 | "java": { 974 | "package": "software.amazon.awscdk.services.connect" 975 | }, 976 | "python": { 977 | "module": "aws_cdk.aws_connect" 978 | } 979 | } 980 | }, 981 | "aws-cdk-lib.aws_connectcampaigns": { 982 | "targets": { 983 | "dotnet": { 984 | "namespace": "Amazon.CDK.AWS.ConnectCampaigns" 985 | }, 986 | "java": { 987 | "package": "software.amazon.awscdk.services.connectcampaigns" 988 | }, 989 | "python": { 990 | "module": "aws_cdk.aws_connectcampaigns" 991 | } 992 | } 993 | }, 994 | "aws-cdk-lib.aws_controltower": { 995 | "targets": { 996 | "dotnet": { 997 | "namespace": "Amazon.CDK.AWS.ControlTower" 998 | }, 999 | "java": { 1000 | "package": "software.amazon.awscdk.services.controltower" 1001 | }, 1002 | "python": { 1003 | "module": "aws_cdk.aws_controltower" 1004 | } 1005 | } 1006 | }, 1007 | "aws-cdk-lib.aws_cur": { 1008 | "targets": { 1009 | "dotnet": { 1010 | "namespace": "Amazon.CDK.AWS.CUR" 1011 | }, 1012 | "java": { 1013 | "package": "software.amazon.awscdk.services.cur" 1014 | }, 1015 | "python": { 1016 | "module": "aws_cdk.aws_cur" 1017 | } 1018 | } 1019 | }, 1020 | "aws-cdk-lib.aws_customerprofiles": { 1021 | "targets": { 1022 | "dotnet": { 1023 | "namespace": "Amazon.CDK.AWS.CustomerProfiles" 1024 | }, 1025 | "java": { 1026 | "package": "software.amazon.awscdk.services.customerprofiles" 1027 | }, 1028 | "python": { 1029 | "module": "aws_cdk.aws_customerprofiles" 1030 | } 1031 | } 1032 | }, 1033 | "aws-cdk-lib.aws_databrew": { 1034 | "targets": { 1035 | "dotnet": { 1036 | "namespace": "Amazon.CDK.AWS.DataBrew" 1037 | }, 1038 | "java": { 1039 | "package": "software.amazon.awscdk.services.databrew" 1040 | }, 1041 | "python": { 1042 | "module": "aws_cdk.aws_databrew" 1043 | } 1044 | } 1045 | }, 1046 | "aws-cdk-lib.aws_datapipeline": { 1047 | "targets": { 1048 | "dotnet": { 1049 | "namespace": "Amazon.CDK.AWS.DataPipeline" 1050 | }, 1051 | "java": { 1052 | "package": "software.amazon.awscdk.services.datapipeline" 1053 | }, 1054 | "python": { 1055 | "module": "aws_cdk.aws_datapipeline" 1056 | } 1057 | } 1058 | }, 1059 | "aws-cdk-lib.aws_datasync": { 1060 | "targets": { 1061 | "dotnet": { 1062 | "namespace": "Amazon.CDK.AWS.DataSync" 1063 | }, 1064 | "java": { 1065 | "package": "software.amazon.awscdk.services.datasync" 1066 | }, 1067 | "python": { 1068 | "module": "aws_cdk.aws_datasync" 1069 | } 1070 | } 1071 | }, 1072 | "aws-cdk-lib.aws_datazone": { 1073 | "targets": { 1074 | "dotnet": { 1075 | "package": "Amazon.CDK.AWS.DataZone" 1076 | }, 1077 | "java": { 1078 | "package": "software.amazon.awscdk.services.datazone" 1079 | }, 1080 | "python": { 1081 | "module": "aws_cdk.aws_datazone" 1082 | } 1083 | } 1084 | }, 1085 | "aws-cdk-lib.aws_dax": { 1086 | "targets": { 1087 | "dotnet": { 1088 | "namespace": "Amazon.CDK.AWS.DAX" 1089 | }, 1090 | "java": { 1091 | "package": "software.amazon.awscdk.services.dax" 1092 | }, 1093 | "python": { 1094 | "module": "aws_cdk.aws_dax" 1095 | } 1096 | } 1097 | }, 1098 | "aws-cdk-lib.aws_deadline": { 1099 | "targets": { 1100 | "dotnet": { 1101 | "package": "Amazon.CDK.AWS.Deadline" 1102 | }, 1103 | "java": { 1104 | "package": "software.amazon.awscdk.services.deadline" 1105 | }, 1106 | "python": { 1107 | "module": "aws_cdk.aws_deadline" 1108 | } 1109 | } 1110 | }, 1111 | "aws-cdk-lib.aws_detective": { 1112 | "targets": { 1113 | "dotnet": { 1114 | "namespace": "Amazon.CDK.AWS.Detective" 1115 | }, 1116 | "java": { 1117 | "package": "software.amazon.awscdk.services.detective" 1118 | }, 1119 | "python": { 1120 | "module": "aws_cdk.aws_detective" 1121 | } 1122 | } 1123 | }, 1124 | "aws-cdk-lib.aws_devicefarm": { 1125 | "targets": { 1126 | "dotnet": { 1127 | "namespace": "Amazon.CDK.AWS.DeviceFarm" 1128 | }, 1129 | "java": { 1130 | "package": "software.amazon.awscdk.services.devicefarm" 1131 | }, 1132 | "python": { 1133 | "module": "aws_cdk.aws_devicefarm" 1134 | } 1135 | } 1136 | }, 1137 | "aws-cdk-lib.aws_devopsguru": { 1138 | "targets": { 1139 | "dotnet": { 1140 | "namespace": "Amazon.CDK.AWS.DevOpsGuru" 1141 | }, 1142 | "java": { 1143 | "package": "software.amazon.awscdk.services.devopsguru" 1144 | }, 1145 | "python": { 1146 | "module": "aws_cdk.aws_devopsguru" 1147 | } 1148 | } 1149 | }, 1150 | "aws-cdk-lib.aws_directoryservice": { 1151 | "targets": { 1152 | "dotnet": { 1153 | "namespace": "Amazon.CDK.AWS.DirectoryService" 1154 | }, 1155 | "java": { 1156 | "package": "software.amazon.awscdk.services.directoryservice" 1157 | }, 1158 | "python": { 1159 | "module": "aws_cdk.aws_directoryservice" 1160 | } 1161 | } 1162 | }, 1163 | "aws-cdk-lib.aws_dlm": { 1164 | "targets": { 1165 | "dotnet": { 1166 | "namespace": "Amazon.CDK.AWS.DLM" 1167 | }, 1168 | "java": { 1169 | "package": "software.amazon.awscdk.services.dlm" 1170 | }, 1171 | "python": { 1172 | "module": "aws_cdk.aws_dlm" 1173 | } 1174 | } 1175 | }, 1176 | "aws-cdk-lib.aws_dms": { 1177 | "targets": { 1178 | "dotnet": { 1179 | "namespace": "Amazon.CDK.AWS.DMS" 1180 | }, 1181 | "java": { 1182 | "package": "software.amazon.awscdk.services.dms" 1183 | }, 1184 | "python": { 1185 | "module": "aws_cdk.aws_dms" 1186 | } 1187 | } 1188 | }, 1189 | "aws-cdk-lib.aws_docdb": { 1190 | "targets": { 1191 | "dotnet": { 1192 | "namespace": "Amazon.CDK.AWS.DocDB" 1193 | }, 1194 | "java": { 1195 | "package": "software.amazon.awscdk.services.docdb" 1196 | }, 1197 | "python": { 1198 | "module": "aws_cdk.aws_docdb" 1199 | } 1200 | } 1201 | }, 1202 | "aws-cdk-lib.aws_docdbelastic": { 1203 | "targets": { 1204 | "dotnet": { 1205 | "namespace": "Amazon.CDK.AWS.DocDBElastic" 1206 | }, 1207 | "java": { 1208 | "package": "software.amazon.awscdk.services.docdbelastic" 1209 | }, 1210 | "python": { 1211 | "module": "aws_cdk.aws_docdbelastic" 1212 | } 1213 | } 1214 | }, 1215 | "aws-cdk-lib.aws_dynamodb": { 1216 | "targets": { 1217 | "dotnet": { 1218 | "namespace": "Amazon.CDK.AWS.DynamoDB" 1219 | }, 1220 | "java": { 1221 | "package": "software.amazon.awscdk.services.dynamodb" 1222 | }, 1223 | "python": { 1224 | "module": "aws_cdk.aws_dynamodb" 1225 | } 1226 | } 1227 | }, 1228 | "aws-cdk-lib.aws_ec2": { 1229 | "targets": { 1230 | "dotnet": { 1231 | "namespace": "Amazon.CDK.AWS.EC2" 1232 | }, 1233 | "java": { 1234 | "package": "software.amazon.awscdk.services.ec2" 1235 | }, 1236 | "python": { 1237 | "module": "aws_cdk.aws_ec2" 1238 | } 1239 | } 1240 | }, 1241 | "aws-cdk-lib.aws_ecr": { 1242 | "targets": { 1243 | "dotnet": { 1244 | "namespace": "Amazon.CDK.AWS.ECR" 1245 | }, 1246 | "java": { 1247 | "package": "software.amazon.awscdk.services.ecr" 1248 | }, 1249 | "python": { 1250 | "module": "aws_cdk.aws_ecr" 1251 | } 1252 | } 1253 | }, 1254 | "aws-cdk-lib.aws_ecr_assets": { 1255 | "targets": { 1256 | "dotnet": { 1257 | "namespace": "Amazon.CDK.AWS.Ecr.Assets" 1258 | }, 1259 | "java": { 1260 | "package": "software.amazon.awscdk.services.ecr.assets" 1261 | }, 1262 | "python": { 1263 | "module": "aws_cdk.aws_ecr_assets" 1264 | } 1265 | } 1266 | }, 1267 | "aws-cdk-lib.aws_ecs": { 1268 | "targets": { 1269 | "dotnet": { 1270 | "namespace": "Amazon.CDK.AWS.ECS" 1271 | }, 1272 | "java": { 1273 | "package": "software.amazon.awscdk.services.ecs" 1274 | }, 1275 | "python": { 1276 | "module": "aws_cdk.aws_ecs" 1277 | } 1278 | } 1279 | }, 1280 | "aws-cdk-lib.aws_ecs_patterns": { 1281 | "targets": { 1282 | "dotnet": { 1283 | "namespace": "Amazon.CDK.AWS.ECS.Patterns" 1284 | }, 1285 | "java": { 1286 | "package": "software.amazon.awscdk.services.ecs.patterns" 1287 | }, 1288 | "python": { 1289 | "module": "aws_cdk.aws_ecs_patterns" 1290 | } 1291 | } 1292 | }, 1293 | "aws-cdk-lib.aws_efs": { 1294 | "targets": { 1295 | "dotnet": { 1296 | "namespace": "Amazon.CDK.AWS.EFS" 1297 | }, 1298 | "java": { 1299 | "package": "software.amazon.awscdk.services.efs" 1300 | }, 1301 | "python": { 1302 | "module": "aws_cdk.aws_efs" 1303 | } 1304 | } 1305 | }, 1306 | "aws-cdk-lib.aws_eks": { 1307 | "targets": { 1308 | "dotnet": { 1309 | "namespace": "Amazon.CDK.AWS.EKS" 1310 | }, 1311 | "java": { 1312 | "package": "software.amazon.awscdk.services.eks" 1313 | }, 1314 | "python": { 1315 | "module": "aws_cdk.aws_eks" 1316 | } 1317 | } 1318 | }, 1319 | "aws-cdk-lib.aws_elasticache": { 1320 | "targets": { 1321 | "dotnet": { 1322 | "namespace": "Amazon.CDK.AWS.ElastiCache" 1323 | }, 1324 | "java": { 1325 | "package": "software.amazon.awscdk.services.elasticache" 1326 | }, 1327 | "python": { 1328 | "module": "aws_cdk.aws_elasticache" 1329 | } 1330 | } 1331 | }, 1332 | "aws-cdk-lib.aws_elasticbeanstalk": { 1333 | "targets": { 1334 | "dotnet": { 1335 | "namespace": "Amazon.CDK.AWS.ElasticBeanstalk" 1336 | }, 1337 | "java": { 1338 | "package": "software.amazon.awscdk.services.elasticbeanstalk" 1339 | }, 1340 | "python": { 1341 | "module": "aws_cdk.aws_elasticbeanstalk" 1342 | } 1343 | } 1344 | }, 1345 | "aws-cdk-lib.aws_elasticloadbalancing": { 1346 | "targets": { 1347 | "dotnet": { 1348 | "namespace": "Amazon.CDK.AWS.ElasticLoadBalancing" 1349 | }, 1350 | "java": { 1351 | "package": "software.amazon.awscdk.services.elasticloadbalancing" 1352 | }, 1353 | "python": { 1354 | "module": "aws_cdk.aws_elasticloadbalancing" 1355 | } 1356 | } 1357 | }, 1358 | "aws-cdk-lib.aws_elasticloadbalancingv2": { 1359 | "targets": { 1360 | "dotnet": { 1361 | "namespace": "Amazon.CDK.AWS.ElasticLoadBalancingV2" 1362 | }, 1363 | "java": { 1364 | "package": "software.amazon.awscdk.services.elasticloadbalancingv2" 1365 | }, 1366 | "python": { 1367 | "module": "aws_cdk.aws_elasticloadbalancingv2" 1368 | } 1369 | } 1370 | }, 1371 | "aws-cdk-lib.aws_elasticloadbalancingv2_actions": { 1372 | "targets": { 1373 | "dotnet": { 1374 | "namespace": "Amazon.CDK.AWS.ElasticLoadBalancingV2.Actions" 1375 | }, 1376 | "java": { 1377 | "package": "software.amazon.awscdk.services.elasticloadbalancingv2.actions" 1378 | }, 1379 | "python": { 1380 | "module": "aws_cdk.aws_elasticloadbalancingv2_actions" 1381 | } 1382 | } 1383 | }, 1384 | "aws-cdk-lib.aws_elasticloadbalancingv2_targets": { 1385 | "targets": { 1386 | "dotnet": { 1387 | "namespace": "Amazon.CDK.AWS.ElasticLoadBalancingV2.Targets" 1388 | }, 1389 | "java": { 1390 | "package": "software.amazon.awscdk.services.elasticloadbalancingv2.targets" 1391 | }, 1392 | "python": { 1393 | "module": "aws_cdk.aws_elasticloadbalancingv2_targets" 1394 | } 1395 | } 1396 | }, 1397 | "aws-cdk-lib.aws_elasticsearch": { 1398 | "targets": { 1399 | "dotnet": { 1400 | "namespace": "Amazon.CDK.AWS.Elasticsearch" 1401 | }, 1402 | "java": { 1403 | "package": "software.amazon.awscdk.services.elasticsearch" 1404 | }, 1405 | "python": { 1406 | "module": "aws_cdk.aws_elasticsearch" 1407 | } 1408 | } 1409 | }, 1410 | "aws-cdk-lib.aws_emr": { 1411 | "targets": { 1412 | "dotnet": { 1413 | "namespace": "Amazon.CDK.AWS.EMR" 1414 | }, 1415 | "java": { 1416 | "package": "software.amazon.awscdk.services.emr" 1417 | }, 1418 | "python": { 1419 | "module": "aws_cdk.aws_emr" 1420 | } 1421 | } 1422 | }, 1423 | "aws-cdk-lib.aws_emrcontainers": { 1424 | "targets": { 1425 | "dotnet": { 1426 | "namespace": "Amazon.CDK.AWS.EMRContainers" 1427 | }, 1428 | "java": { 1429 | "package": "software.amazon.awscdk.services.emrcontainers" 1430 | }, 1431 | "python": { 1432 | "module": "aws_cdk.aws_emrcontainers" 1433 | } 1434 | } 1435 | }, 1436 | "aws-cdk-lib.aws_emrserverless": { 1437 | "targets": { 1438 | "dotnet": { 1439 | "namespace": "Amazon.CDK.AWS.EMRServerless" 1440 | }, 1441 | "java": { 1442 | "package": "software.amazon.awscdk.services.emrserverless" 1443 | }, 1444 | "python": { 1445 | "module": "aws_cdk.aws_emrserverless" 1446 | } 1447 | } 1448 | }, 1449 | "aws-cdk-lib.aws_entityresolution": { 1450 | "targets": { 1451 | "dotnet": { 1452 | "package": "Amazon.CDK.AWS.EntityResolution" 1453 | }, 1454 | "java": { 1455 | "package": "software.amazon.awscdk.services.entityresolution" 1456 | }, 1457 | "python": { 1458 | "module": "aws_cdk.aws_entityresolution" 1459 | } 1460 | } 1461 | }, 1462 | "aws-cdk-lib.aws_events": { 1463 | "targets": { 1464 | "dotnet": { 1465 | "namespace": "Amazon.CDK.AWS.Events" 1466 | }, 1467 | "java": { 1468 | "package": "software.amazon.awscdk.services.events" 1469 | }, 1470 | "python": { 1471 | "module": "aws_cdk.aws_events" 1472 | } 1473 | } 1474 | }, 1475 | "aws-cdk-lib.aws_events_targets": { 1476 | "targets": { 1477 | "dotnet": { 1478 | "namespace": "Amazon.CDK.AWS.Events.Targets" 1479 | }, 1480 | "java": { 1481 | "package": "software.amazon.awscdk.services.events.targets" 1482 | }, 1483 | "python": { 1484 | "module": "aws_cdk.aws_events_targets" 1485 | } 1486 | } 1487 | }, 1488 | "aws-cdk-lib.aws_eventschemas": { 1489 | "targets": { 1490 | "dotnet": { 1491 | "namespace": "Amazon.CDK.AWS.EventSchemas" 1492 | }, 1493 | "java": { 1494 | "package": "software.amazon.awscdk.services.eventschemas" 1495 | }, 1496 | "python": { 1497 | "module": "aws_cdk.aws_eventschemas" 1498 | } 1499 | } 1500 | }, 1501 | "aws-cdk-lib.aws_evidently": { 1502 | "targets": { 1503 | "dotnet": { 1504 | "namespace": "Amazon.CDK.AWS.Evidently" 1505 | }, 1506 | "java": { 1507 | "package": "software.amazon.awscdk.services.evidently" 1508 | }, 1509 | "python": { 1510 | "module": "aws_cdk.aws_evidently" 1511 | } 1512 | } 1513 | }, 1514 | "aws-cdk-lib.aws_finspace": { 1515 | "targets": { 1516 | "dotnet": { 1517 | "namespace": "Amazon.CDK.AWS.FinSpace" 1518 | }, 1519 | "java": { 1520 | "package": "software.amazon.awscdk.services.finspace" 1521 | }, 1522 | "python": { 1523 | "module": "aws_cdk.aws_finspace" 1524 | } 1525 | } 1526 | }, 1527 | "aws-cdk-lib.aws_fis": { 1528 | "targets": { 1529 | "dotnet": { 1530 | "namespace": "Amazon.CDK.AWS.FIS" 1531 | }, 1532 | "java": { 1533 | "package": "software.amazon.awscdk.services.fis" 1534 | }, 1535 | "python": { 1536 | "module": "aws_cdk.aws_fis" 1537 | } 1538 | } 1539 | }, 1540 | "aws-cdk-lib.aws_fms": { 1541 | "targets": { 1542 | "dotnet": { 1543 | "namespace": "Amazon.CDK.AWS.FMS" 1544 | }, 1545 | "java": { 1546 | "package": "software.amazon.awscdk.services.fms" 1547 | }, 1548 | "python": { 1549 | "module": "aws_cdk.aws_fms" 1550 | } 1551 | } 1552 | }, 1553 | "aws-cdk-lib.aws_forecast": { 1554 | "targets": { 1555 | "dotnet": { 1556 | "namespace": "Amazon.CDK.AWS.Forecast" 1557 | }, 1558 | "java": { 1559 | "package": "software.amazon.awscdk.services.forecast" 1560 | }, 1561 | "python": { 1562 | "module": "aws_cdk.aws_forecast" 1563 | } 1564 | } 1565 | }, 1566 | "aws-cdk-lib.aws_frauddetector": { 1567 | "targets": { 1568 | "dotnet": { 1569 | "namespace": "Amazon.CDK.AWS.FraudDetector" 1570 | }, 1571 | "java": { 1572 | "package": "software.amazon.awscdk.services.frauddetector" 1573 | }, 1574 | "python": { 1575 | "module": "aws_cdk.aws_frauddetector" 1576 | } 1577 | } 1578 | }, 1579 | "aws-cdk-lib.aws_fsx": { 1580 | "targets": { 1581 | "dotnet": { 1582 | "namespace": "Amazon.CDK.AWS.FSx" 1583 | }, 1584 | "java": { 1585 | "package": "software.amazon.awscdk.services.fsx" 1586 | }, 1587 | "python": { 1588 | "module": "aws_cdk.aws_fsx" 1589 | } 1590 | } 1591 | }, 1592 | "aws-cdk-lib.aws_gamelift": { 1593 | "targets": { 1594 | "dotnet": { 1595 | "namespace": "Amazon.CDK.AWS.GameLift" 1596 | }, 1597 | "java": { 1598 | "package": "software.amazon.awscdk.services.gamelift" 1599 | }, 1600 | "python": { 1601 | "module": "aws_cdk.aws_gamelift" 1602 | } 1603 | } 1604 | }, 1605 | "aws-cdk-lib.aws_globalaccelerator": { 1606 | "targets": { 1607 | "dotnet": { 1608 | "namespace": "Amazon.CDK.AWS.GlobalAccelerator" 1609 | }, 1610 | "java": { 1611 | "package": "software.amazon.awscdk.services.globalaccelerator" 1612 | }, 1613 | "python": { 1614 | "module": "aws_cdk.aws_globalaccelerator" 1615 | } 1616 | } 1617 | }, 1618 | "aws-cdk-lib.aws_globalaccelerator_endpoints": { 1619 | "targets": { 1620 | "dotnet": { 1621 | "namespace": "Amazon.CDK.AWS.GlobalAccelerator.Endpoints" 1622 | }, 1623 | "java": { 1624 | "package": "software.amazon.awscdk.services.globalaccelerator.endpoints" 1625 | }, 1626 | "python": { 1627 | "module": "aws_cdk.aws_globalaccelerator_endpoints" 1628 | } 1629 | } 1630 | }, 1631 | "aws-cdk-lib.aws_glue": { 1632 | "targets": { 1633 | "dotnet": { 1634 | "namespace": "Amazon.CDK.AWS.Glue" 1635 | }, 1636 | "java": { 1637 | "package": "software.amazon.awscdk.services.glue" 1638 | }, 1639 | "python": { 1640 | "module": "aws_cdk.aws_glue" 1641 | } 1642 | } 1643 | }, 1644 | "aws-cdk-lib.aws_grafana": { 1645 | "targets": { 1646 | "dotnet": { 1647 | "namespace": "Amazon.CDK.AWS.Grafana" 1648 | }, 1649 | "java": { 1650 | "package": "software.amazon.awscdk.services.grafana" 1651 | }, 1652 | "python": { 1653 | "module": "aws_cdk.aws_grafana" 1654 | } 1655 | } 1656 | }, 1657 | "aws-cdk-lib.aws_greengrass": { 1658 | "targets": { 1659 | "dotnet": { 1660 | "namespace": "Amazon.CDK.AWS.Greengrass" 1661 | }, 1662 | "java": { 1663 | "package": "software.amazon.awscdk.services.greengrass" 1664 | }, 1665 | "python": { 1666 | "module": "aws_cdk.aws_greengrass" 1667 | } 1668 | } 1669 | }, 1670 | "aws-cdk-lib.aws_greengrassv2": { 1671 | "targets": { 1672 | "dotnet": { 1673 | "namespace": "Amazon.CDK.AWS.GreengrassV2" 1674 | }, 1675 | "java": { 1676 | "package": "software.amazon.awscdk.services.greengrassv2" 1677 | }, 1678 | "python": { 1679 | "module": "aws_cdk.aws_greengrassv2" 1680 | } 1681 | } 1682 | }, 1683 | "aws-cdk-lib.aws_groundstation": { 1684 | "targets": { 1685 | "dotnet": { 1686 | "namespace": "Amazon.CDK.AWS.GroundStation" 1687 | }, 1688 | "java": { 1689 | "package": "software.amazon.awscdk.services.groundstation" 1690 | }, 1691 | "python": { 1692 | "module": "aws_cdk.aws_groundstation" 1693 | } 1694 | } 1695 | }, 1696 | "aws-cdk-lib.aws_guardduty": { 1697 | "targets": { 1698 | "dotnet": { 1699 | "namespace": "Amazon.CDK.AWS.GuardDuty" 1700 | }, 1701 | "java": { 1702 | "package": "software.amazon.awscdk.services.guardduty" 1703 | }, 1704 | "python": { 1705 | "module": "aws_cdk.aws_guardduty" 1706 | } 1707 | } 1708 | }, 1709 | "aws-cdk-lib.aws_healthimaging": { 1710 | "targets": { 1711 | "dotnet": { 1712 | "package": "Amazon.CDK.AWS.HealthImaging" 1713 | }, 1714 | "java": { 1715 | "package": "software.amazon.awscdk.services.healthimaging" 1716 | }, 1717 | "python": { 1718 | "module": "aws_cdk.aws_healthimaging" 1719 | } 1720 | } 1721 | }, 1722 | "aws-cdk-lib.aws_healthlake": { 1723 | "targets": { 1724 | "dotnet": { 1725 | "namespace": "Amazon.CDK.AWS.HealthLake" 1726 | }, 1727 | "java": { 1728 | "package": "software.amazon.awscdk.services.healthlake" 1729 | }, 1730 | "python": { 1731 | "module": "aws_cdk.aws_healthlake" 1732 | } 1733 | } 1734 | }, 1735 | "aws-cdk-lib.aws_iam": { 1736 | "targets": { 1737 | "dotnet": { 1738 | "namespace": "Amazon.CDK.AWS.IAM" 1739 | }, 1740 | "java": { 1741 | "package": "software.amazon.awscdk.services.iam" 1742 | }, 1743 | "python": { 1744 | "module": "aws_cdk.aws_iam" 1745 | } 1746 | } 1747 | }, 1748 | "aws-cdk-lib.aws_identitystore": { 1749 | "targets": { 1750 | "dotnet": { 1751 | "namespace": "Amazon.CDK.AWS.IdentityStore" 1752 | }, 1753 | "java": { 1754 | "package": "software.amazon.awscdk.services.identitystore" 1755 | }, 1756 | "python": { 1757 | "module": "aws_cdk.aws_identitystore" 1758 | } 1759 | } 1760 | }, 1761 | "aws-cdk-lib.aws_imagebuilder": { 1762 | "targets": { 1763 | "dotnet": { 1764 | "namespace": "Amazon.CDK.AWS.ImageBuilder" 1765 | }, 1766 | "java": { 1767 | "package": "software.amazon.awscdk.services.imagebuilder" 1768 | }, 1769 | "python": { 1770 | "module": "aws_cdk.aws_imagebuilder" 1771 | } 1772 | } 1773 | }, 1774 | "aws-cdk-lib.aws_inspector": { 1775 | "targets": { 1776 | "dotnet": { 1777 | "namespace": "Amazon.CDK.AWS.Inspector" 1778 | }, 1779 | "java": { 1780 | "package": "software.amazon.awscdk.services.inspector" 1781 | }, 1782 | "python": { 1783 | "module": "aws_cdk.aws_inspector" 1784 | } 1785 | } 1786 | }, 1787 | "aws-cdk-lib.aws_inspectorv2": { 1788 | "targets": { 1789 | "dotnet": { 1790 | "namespace": "Amazon.CDK.AWS.InspectorV2" 1791 | }, 1792 | "java": { 1793 | "package": "software.amazon.awscdk.services.inspectorv2" 1794 | }, 1795 | "python": { 1796 | "module": "aws_cdk.aws_inspectorv2" 1797 | } 1798 | } 1799 | }, 1800 | "aws-cdk-lib.aws_internetmonitor": { 1801 | "targets": { 1802 | "dotnet": { 1803 | "namespace": "Amazon.CDK.AWS.InternetMonitor" 1804 | }, 1805 | "java": { 1806 | "package": "software.amazon.awscdk.services.internetmonitor" 1807 | }, 1808 | "python": { 1809 | "module": "aws_cdk.aws_internetmonitor" 1810 | } 1811 | } 1812 | }, 1813 | "aws-cdk-lib.aws_iot": { 1814 | "targets": { 1815 | "dotnet": { 1816 | "namespace": "Amazon.CDK.AWS.IoT" 1817 | }, 1818 | "java": { 1819 | "package": "software.amazon.awscdk.services.iot" 1820 | }, 1821 | "python": { 1822 | "module": "aws_cdk.aws_iot" 1823 | } 1824 | } 1825 | }, 1826 | "aws-cdk-lib.aws_iot1click": { 1827 | "targets": { 1828 | "dotnet": { 1829 | "namespace": "Amazon.CDK.AWS.IoT1Click" 1830 | }, 1831 | "java": { 1832 | "package": "software.amazon.awscdk.services.iot1click" 1833 | }, 1834 | "python": { 1835 | "module": "aws_cdk.aws_iot1click" 1836 | } 1837 | } 1838 | }, 1839 | "aws-cdk-lib.aws_iotanalytics": { 1840 | "targets": { 1841 | "dotnet": { 1842 | "namespace": "Amazon.CDK.AWS.IoTAnalytics" 1843 | }, 1844 | "java": { 1845 | "package": "software.amazon.awscdk.services.iotanalytics" 1846 | }, 1847 | "python": { 1848 | "module": "aws_cdk.aws_iotanalytics" 1849 | } 1850 | } 1851 | }, 1852 | "aws-cdk-lib.aws_iotcoredeviceadvisor": { 1853 | "targets": { 1854 | "dotnet": { 1855 | "namespace": "Amazon.CDK.AWS.IoTCoreDeviceAdvisor" 1856 | }, 1857 | "java": { 1858 | "package": "software.amazon.awscdk.services.iotcoredeviceadvisor" 1859 | }, 1860 | "python": { 1861 | "module": "aws_cdk.aws_iotcoredeviceadvisor" 1862 | } 1863 | } 1864 | }, 1865 | "aws-cdk-lib.aws_iotevents": { 1866 | "targets": { 1867 | "dotnet": { 1868 | "namespace": "Amazon.CDK.AWS.IoTEvents" 1869 | }, 1870 | "java": { 1871 | "package": "software.amazon.awscdk.services.iotevents" 1872 | }, 1873 | "python": { 1874 | "module": "aws_cdk.aws_iotevents" 1875 | } 1876 | } 1877 | }, 1878 | "aws-cdk-lib.aws_iotfleethub": { 1879 | "targets": { 1880 | "dotnet": { 1881 | "namespace": "Amazon.CDK.AWS.IoTFleetHub" 1882 | }, 1883 | "java": { 1884 | "package": "software.amazon.awscdk.services.iotfleethub" 1885 | }, 1886 | "python": { 1887 | "module": "aws_cdk.aws_iotfleethub" 1888 | } 1889 | } 1890 | }, 1891 | "aws-cdk-lib.aws_iotfleetwise": { 1892 | "targets": { 1893 | "dotnet": { 1894 | "namespace": "Amazon.CDK.AWS.IoTFleetWise" 1895 | }, 1896 | "java": { 1897 | "package": "software.amazon.awscdk.services.iotfleetwise" 1898 | }, 1899 | "python": { 1900 | "module": "aws_cdk.aws_iotfleetwise" 1901 | } 1902 | } 1903 | }, 1904 | "aws-cdk-lib.aws_iotsitewise": { 1905 | "targets": { 1906 | "dotnet": { 1907 | "namespace": "Amazon.CDK.AWS.IoTSiteWise" 1908 | }, 1909 | "java": { 1910 | "package": "software.amazon.awscdk.services.iotsitewise" 1911 | }, 1912 | "python": { 1913 | "module": "aws_cdk.aws_iotsitewise" 1914 | } 1915 | } 1916 | }, 1917 | "aws-cdk-lib.aws_iotthingsgraph": { 1918 | "targets": { 1919 | "dotnet": { 1920 | "namespace": "Amazon.CDK.AWS.IoTThingsGraph" 1921 | }, 1922 | "java": { 1923 | "package": "software.amazon.awscdk.services.iotthingsgraph" 1924 | }, 1925 | "python": { 1926 | "module": "aws_cdk.aws_iotthingsgraph" 1927 | } 1928 | } 1929 | }, 1930 | "aws-cdk-lib.aws_iottwinmaker": { 1931 | "targets": { 1932 | "dotnet": { 1933 | "namespace": "Amazon.CDK.AWS.IoTTwinMaker" 1934 | }, 1935 | "java": { 1936 | "package": "software.amazon.awscdk.services.iottwinmaker" 1937 | }, 1938 | "python": { 1939 | "module": "aws_cdk.aws_iottwinmaker" 1940 | } 1941 | } 1942 | }, 1943 | "aws-cdk-lib.aws_iotwireless": { 1944 | "targets": { 1945 | "dotnet": { 1946 | "namespace": "Amazon.CDK.AWS.IoTWireless" 1947 | }, 1948 | "java": { 1949 | "package": "software.amazon.awscdk.services.iotwireless" 1950 | }, 1951 | "python": { 1952 | "module": "aws_cdk.aws_iotwireless" 1953 | } 1954 | } 1955 | }, 1956 | "aws-cdk-lib.aws_ivs": { 1957 | "targets": { 1958 | "dotnet": { 1959 | "namespace": "Amazon.CDK.AWS.Ivs" 1960 | }, 1961 | "java": { 1962 | "package": "software.amazon.awscdk.services.ivs" 1963 | }, 1964 | "python": { 1965 | "module": "aws_cdk.aws_ivs" 1966 | } 1967 | } 1968 | }, 1969 | "aws-cdk-lib.aws_ivschat": { 1970 | "targets": { 1971 | "dotnet": { 1972 | "namespace": "Amazon.CDK.AWS.IVSChat" 1973 | }, 1974 | "java": { 1975 | "package": "software.amazon.awscdk.services.ivschat" 1976 | }, 1977 | "python": { 1978 | "module": "aws_cdk.aws_ivschat" 1979 | } 1980 | } 1981 | }, 1982 | "aws-cdk-lib.aws_kafkaconnect": { 1983 | "targets": { 1984 | "dotnet": { 1985 | "namespace": "Amazon.CDK.AWS.KafkaConnect" 1986 | }, 1987 | "java": { 1988 | "package": "software.amazon.awscdk.services.kafkaconnect" 1989 | }, 1990 | "python": { 1991 | "module": "aws_cdk.aws_kafkaconnect" 1992 | } 1993 | } 1994 | }, 1995 | "aws-cdk-lib.aws_kendra": { 1996 | "targets": { 1997 | "dotnet": { 1998 | "namespace": "Amazon.CDK.AWS.Kendra" 1999 | }, 2000 | "java": { 2001 | "package": "software.amazon.awscdk.services.kendra" 2002 | }, 2003 | "python": { 2004 | "module": "aws_cdk.aws_kendra" 2005 | } 2006 | } 2007 | }, 2008 | "aws-cdk-lib.aws_kendraranking": { 2009 | "targets": { 2010 | "dotnet": { 2011 | "namespace": "Amazon.CDK.AWS.KendraRanking" 2012 | }, 2013 | "java": { 2014 | "package": "software.amazon.awscdk.services.kendraranking" 2015 | }, 2016 | "python": { 2017 | "module": "aws_cdk.aws_kendraranking" 2018 | } 2019 | } 2020 | }, 2021 | "aws-cdk-lib.aws_kinesis": { 2022 | "targets": { 2023 | "dotnet": { 2024 | "namespace": "Amazon.CDK.AWS.Kinesis" 2025 | }, 2026 | "java": { 2027 | "package": "software.amazon.awscdk.services.kinesis" 2028 | }, 2029 | "python": { 2030 | "module": "aws_cdk.aws_kinesis" 2031 | } 2032 | } 2033 | }, 2034 | "aws-cdk-lib.aws_kinesisanalytics": { 2035 | "targets": { 2036 | "dotnet": { 2037 | "namespace": "Amazon.CDK.AWS.KinesisAnalytics" 2038 | }, 2039 | "java": { 2040 | "package": "software.amazon.awscdk.services.kinesisanalytics" 2041 | }, 2042 | "python": { 2043 | "module": "aws_cdk.aws_kinesisanalytics" 2044 | } 2045 | } 2046 | }, 2047 | "aws-cdk-lib.aws_kinesisanalyticsv2": { 2048 | "targets": { 2049 | "dotnet": { 2050 | "namespace": "Amazon.CDK.AWS.KinesisAnalyticsV2" 2051 | }, 2052 | "java": { 2053 | "package": "software.amazon.awscdk.services.kinesisanalyticsv2" 2054 | }, 2055 | "python": { 2056 | "module": "aws_cdk.aws_kinesisanalyticsv2" 2057 | } 2058 | } 2059 | }, 2060 | "aws-cdk-lib.aws_kinesisfirehose": { 2061 | "targets": { 2062 | "dotnet": { 2063 | "namespace": "Amazon.CDK.AWS.KinesisFirehose" 2064 | }, 2065 | "java": { 2066 | "package": "software.amazon.awscdk.services.kinesisfirehose" 2067 | }, 2068 | "python": { 2069 | "module": "aws_cdk.aws_kinesisfirehose" 2070 | } 2071 | } 2072 | }, 2073 | "aws-cdk-lib.aws_kinesisvideo": { 2074 | "targets": { 2075 | "dotnet": { 2076 | "namespace": "Amazon.CDK.AWS.KinesisVideo" 2077 | }, 2078 | "java": { 2079 | "package": "software.amazon.awscdk.services.kinesisvideo" 2080 | }, 2081 | "python": { 2082 | "module": "aws_cdk.aws_kinesisvideo" 2083 | } 2084 | } 2085 | }, 2086 | "aws-cdk-lib.aws_kms": { 2087 | "targets": { 2088 | "dotnet": { 2089 | "namespace": "Amazon.CDK.AWS.KMS" 2090 | }, 2091 | "java": { 2092 | "package": "software.amazon.awscdk.services.kms" 2093 | }, 2094 | "python": { 2095 | "module": "aws_cdk.aws_kms" 2096 | } 2097 | } 2098 | }, 2099 | "aws-cdk-lib.aws_lakeformation": { 2100 | "targets": { 2101 | "dotnet": { 2102 | "namespace": "Amazon.CDK.AWS.LakeFormation" 2103 | }, 2104 | "java": { 2105 | "package": "software.amazon.awscdk.services.lakeformation" 2106 | }, 2107 | "python": { 2108 | "module": "aws_cdk.aws_lakeformation" 2109 | } 2110 | } 2111 | }, 2112 | "aws-cdk-lib.aws_lambda": { 2113 | "targets": { 2114 | "dotnet": { 2115 | "namespace": "Amazon.CDK.AWS.Lambda" 2116 | }, 2117 | "java": { 2118 | "package": "software.amazon.awscdk.services.lambda" 2119 | }, 2120 | "python": { 2121 | "module": "aws_cdk.aws_lambda" 2122 | } 2123 | } 2124 | }, 2125 | "aws-cdk-lib.aws_lambda_destinations": { 2126 | "targets": { 2127 | "dotnet": { 2128 | "namespace": "Amazon.CDK.AWS.Lambda.Destinations" 2129 | }, 2130 | "java": { 2131 | "package": "software.amazon.awscdk.services.lambda.destinations" 2132 | }, 2133 | "python": { 2134 | "module": "aws_cdk.aws_lambda_destinations" 2135 | } 2136 | } 2137 | }, 2138 | "aws-cdk-lib.aws_lambda_event_sources": { 2139 | "targets": { 2140 | "dotnet": { 2141 | "namespace": "Amazon.CDK.AWS.Lambda.EventSources" 2142 | }, 2143 | "java": { 2144 | "package": "software.amazon.awscdk.services.lambda.eventsources" 2145 | }, 2146 | "python": { 2147 | "module": "aws_cdk.aws_lambda_event_sources" 2148 | } 2149 | } 2150 | }, 2151 | "aws-cdk-lib.aws_lambda_nodejs": { 2152 | "targets": { 2153 | "dotnet": { 2154 | "namespace": "Amazon.CDK.AWS.Lambda.Nodejs" 2155 | }, 2156 | "java": { 2157 | "package": "software.amazon.awscdk.services.lambda.nodejs" 2158 | }, 2159 | "python": { 2160 | "module": "aws_cdk.aws_lambda_nodejs" 2161 | } 2162 | } 2163 | }, 2164 | "aws-cdk-lib.aws_lex": { 2165 | "targets": { 2166 | "dotnet": { 2167 | "namespace": "Amazon.CDK.AWS.Lex" 2168 | }, 2169 | "java": { 2170 | "package": "software.amazon.awscdk.services.lex" 2171 | }, 2172 | "python": { 2173 | "module": "aws_cdk.aws_lex" 2174 | } 2175 | } 2176 | }, 2177 | "aws-cdk-lib.aws_licensemanager": { 2178 | "targets": { 2179 | "dotnet": { 2180 | "namespace": "Amazon.CDK.AWS.LicenseManager" 2181 | }, 2182 | "java": { 2183 | "package": "software.amazon.awscdk.services.licensemanager" 2184 | }, 2185 | "python": { 2186 | "module": "aws_cdk.aws_licensemanager" 2187 | } 2188 | } 2189 | }, 2190 | "aws-cdk-lib.aws_lightsail": { 2191 | "targets": { 2192 | "dotnet": { 2193 | "namespace": "Amazon.CDK.AWS.Lightsail" 2194 | }, 2195 | "java": { 2196 | "package": "software.amazon.awscdk.services.lightsail" 2197 | }, 2198 | "python": { 2199 | "module": "aws_cdk.aws_lightsail" 2200 | } 2201 | } 2202 | }, 2203 | "aws-cdk-lib.aws_location": { 2204 | "targets": { 2205 | "dotnet": { 2206 | "namespace": "Amazon.CDK.AWS.Location" 2207 | }, 2208 | "java": { 2209 | "package": "software.amazon.awscdk.services.location" 2210 | }, 2211 | "python": { 2212 | "module": "aws_cdk.aws_location" 2213 | } 2214 | } 2215 | }, 2216 | "aws-cdk-lib.aws_logs": { 2217 | "targets": { 2218 | "dotnet": { 2219 | "namespace": "Amazon.CDK.AWS.Logs" 2220 | }, 2221 | "java": { 2222 | "package": "software.amazon.awscdk.services.logs" 2223 | }, 2224 | "python": { 2225 | "module": "aws_cdk.aws_logs" 2226 | } 2227 | } 2228 | }, 2229 | "aws-cdk-lib.aws_logs_destinations": { 2230 | "targets": { 2231 | "dotnet": { 2232 | "namespace": "Amazon.CDK.AWS.Logs.Destinations" 2233 | }, 2234 | "java": { 2235 | "package": "software.amazon.awscdk.services.logs.destinations" 2236 | }, 2237 | "python": { 2238 | "module": "aws_cdk.aws_logs_destinations" 2239 | } 2240 | } 2241 | }, 2242 | "aws-cdk-lib.aws_lookoutequipment": { 2243 | "targets": { 2244 | "dotnet": { 2245 | "namespace": "Amazon.CDK.AWS.LookoutEquipment" 2246 | }, 2247 | "java": { 2248 | "package": "software.amazon.awscdk.services.lookoutequipment" 2249 | }, 2250 | "python": { 2251 | "module": "aws_cdk.aws_lookoutequipment" 2252 | } 2253 | } 2254 | }, 2255 | "aws-cdk-lib.aws_lookoutmetrics": { 2256 | "targets": { 2257 | "dotnet": { 2258 | "namespace": "Amazon.CDK.AWS.LookoutMetrics" 2259 | }, 2260 | "java": { 2261 | "package": "software.amazon.awscdk.services.lookoutmetrics" 2262 | }, 2263 | "python": { 2264 | "module": "aws_cdk.aws_lookoutmetrics" 2265 | } 2266 | } 2267 | }, 2268 | "aws-cdk-lib.aws_lookoutvision": { 2269 | "targets": { 2270 | "dotnet": { 2271 | "namespace": "Amazon.CDK.AWS.LookoutVision" 2272 | }, 2273 | "java": { 2274 | "package": "software.amazon.awscdk.services.lookoutvision" 2275 | }, 2276 | "python": { 2277 | "module": "aws_cdk.aws_lookoutvision" 2278 | } 2279 | } 2280 | }, 2281 | "aws-cdk-lib.aws_m2": { 2282 | "targets": { 2283 | "dotnet": { 2284 | "namespace": "Amazon.CDK.AWS.M2" 2285 | }, 2286 | "java": { 2287 | "package": "software.amazon.awscdk.services.m2" 2288 | }, 2289 | "python": { 2290 | "module": "aws_cdk.aws_m2" 2291 | } 2292 | } 2293 | }, 2294 | "aws-cdk-lib.aws_macie": { 2295 | "targets": { 2296 | "dotnet": { 2297 | "namespace": "Amazon.CDK.AWS.Macie" 2298 | }, 2299 | "java": { 2300 | "package": "software.amazon.awscdk.services.macie" 2301 | }, 2302 | "python": { 2303 | "module": "aws_cdk.aws_macie" 2304 | } 2305 | } 2306 | }, 2307 | "aws-cdk-lib.aws_managedblockchain": { 2308 | "targets": { 2309 | "dotnet": { 2310 | "namespace": "Amazon.CDK.AWS.ManagedBlockchain" 2311 | }, 2312 | "java": { 2313 | "package": "software.amazon.awscdk.services.managedblockchain" 2314 | }, 2315 | "python": { 2316 | "module": "aws_cdk.aws_managedblockchain" 2317 | } 2318 | } 2319 | }, 2320 | "aws-cdk-lib.aws_mediaconnect": { 2321 | "targets": { 2322 | "dotnet": { 2323 | "namespace": "Amazon.CDK.AWS.MediaConnect" 2324 | }, 2325 | "java": { 2326 | "package": "software.amazon.awscdk.services.mediaconnect" 2327 | }, 2328 | "python": { 2329 | "module": "aws_cdk.aws_mediaconnect" 2330 | } 2331 | } 2332 | }, 2333 | "aws-cdk-lib.aws_mediaconvert": { 2334 | "targets": { 2335 | "dotnet": { 2336 | "namespace": "Amazon.CDK.AWS.MediaConvert" 2337 | }, 2338 | "java": { 2339 | "package": "software.amazon.awscdk.services.mediaconvert" 2340 | }, 2341 | "python": { 2342 | "module": "aws_cdk.aws_mediaconvert" 2343 | } 2344 | } 2345 | }, 2346 | "aws-cdk-lib.aws_medialive": { 2347 | "targets": { 2348 | "dotnet": { 2349 | "namespace": "Amazon.CDK.AWS.MediaLive" 2350 | }, 2351 | "java": { 2352 | "package": "software.amazon.awscdk.services.medialive" 2353 | }, 2354 | "python": { 2355 | "module": "aws_cdk.aws_medialive" 2356 | } 2357 | } 2358 | }, 2359 | "aws-cdk-lib.aws_mediapackage": { 2360 | "targets": { 2361 | "dotnet": { 2362 | "namespace": "Amazon.CDK.AWS.MediaPackage" 2363 | }, 2364 | "java": { 2365 | "package": "software.amazon.awscdk.services.mediapackage" 2366 | }, 2367 | "python": { 2368 | "module": "aws_cdk.aws_mediapackage" 2369 | } 2370 | } 2371 | }, 2372 | "aws-cdk-lib.aws_mediapackagev2": { 2373 | "targets": { 2374 | "dotnet": { 2375 | "package": "Amazon.CDK.AWS.MediaPackageV2" 2376 | }, 2377 | "java": { 2378 | "package": "software.amazon.awscdk.services.mediapackagev2" 2379 | }, 2380 | "python": { 2381 | "module": "aws_cdk.aws_mediapackagev2" 2382 | } 2383 | } 2384 | }, 2385 | "aws-cdk-lib.aws_mediastore": { 2386 | "targets": { 2387 | "dotnet": { 2388 | "namespace": "Amazon.CDK.AWS.MediaStore" 2389 | }, 2390 | "java": { 2391 | "package": "software.amazon.awscdk.services.mediastore" 2392 | }, 2393 | "python": { 2394 | "module": "aws_cdk.aws_mediastore" 2395 | } 2396 | } 2397 | }, 2398 | "aws-cdk-lib.aws_mediatailor": { 2399 | "targets": { 2400 | "dotnet": { 2401 | "namespace": "Amazon.CDK.AWS.MediaTailor" 2402 | }, 2403 | "java": { 2404 | "package": "software.amazon.awscdk.services.mediatailor" 2405 | }, 2406 | "python": { 2407 | "module": "aws_cdk.aws_mediatailor" 2408 | } 2409 | } 2410 | }, 2411 | "aws-cdk-lib.aws_memorydb": { 2412 | "targets": { 2413 | "dotnet": { 2414 | "namespace": "Amazon.CDK.AWS.MemoryDB" 2415 | }, 2416 | "java": { 2417 | "package": "software.amazon.awscdk.services.memorydb" 2418 | }, 2419 | "python": { 2420 | "module": "aws_cdk.aws_memorydb" 2421 | } 2422 | } 2423 | }, 2424 | "aws-cdk-lib.aws_msk": { 2425 | "targets": { 2426 | "dotnet": { 2427 | "namespace": "Amazon.CDK.AWS.MSK" 2428 | }, 2429 | "java": { 2430 | "package": "software.amazon.awscdk.services.msk" 2431 | }, 2432 | "python": { 2433 | "module": "aws_cdk.aws_msk" 2434 | } 2435 | } 2436 | }, 2437 | "aws-cdk-lib.aws_mwaa": { 2438 | "targets": { 2439 | "dotnet": { 2440 | "namespace": "Amazon.CDK.AWS.MWAA" 2441 | }, 2442 | "java": { 2443 | "package": "software.amazon.awscdk.services.mwaa" 2444 | }, 2445 | "python": { 2446 | "module": "aws_cdk.aws_mwaa" 2447 | } 2448 | } 2449 | }, 2450 | "aws-cdk-lib.aws_neptune": { 2451 | "targets": { 2452 | "dotnet": { 2453 | "namespace": "Amazon.CDK.AWS.Neptune" 2454 | }, 2455 | "java": { 2456 | "package": "software.amazon.awscdk.services.neptune" 2457 | }, 2458 | "python": { 2459 | "module": "aws_cdk.aws_neptune" 2460 | } 2461 | } 2462 | }, 2463 | "aws-cdk-lib.aws_neptunegraph": { 2464 | "targets": { 2465 | "dotnet": { 2466 | "package": "Amazon.CDK.AWS.NeptuneGraph" 2467 | }, 2468 | "java": { 2469 | "package": "software.amazon.awscdk.services.neptunegraph" 2470 | }, 2471 | "python": { 2472 | "module": "aws_cdk.aws_neptunegraph" 2473 | } 2474 | } 2475 | }, 2476 | "aws-cdk-lib.aws_networkfirewall": { 2477 | "targets": { 2478 | "dotnet": { 2479 | "namespace": "Amazon.CDK.AWS.NetworkFirewall" 2480 | }, 2481 | "java": { 2482 | "package": "software.amazon.awscdk.services.networkfirewall" 2483 | }, 2484 | "python": { 2485 | "module": "aws_cdk.aws_networkfirewall" 2486 | } 2487 | } 2488 | }, 2489 | "aws-cdk-lib.aws_networkmanager": { 2490 | "targets": { 2491 | "dotnet": { 2492 | "namespace": "Amazon.CDK.AWS.NetworkManager" 2493 | }, 2494 | "java": { 2495 | "package": "software.amazon.awscdk.services.networkmanager" 2496 | }, 2497 | "python": { 2498 | "module": "aws_cdk.aws_networkmanager" 2499 | } 2500 | } 2501 | }, 2502 | "aws-cdk-lib.aws_nimblestudio": { 2503 | "targets": { 2504 | "dotnet": { 2505 | "namespace": "Amazon.CDK.AWS.NimbleStudio" 2506 | }, 2507 | "java": { 2508 | "package": "software.amazon.awscdk.services.nimblestudio" 2509 | }, 2510 | "python": { 2511 | "module": "aws_cdk.aws_nimblestudio" 2512 | } 2513 | } 2514 | }, 2515 | "aws-cdk-lib.aws_oam": { 2516 | "targets": { 2517 | "dotnet": { 2518 | "namespace": "Amazon.CDK.AWS.Oam" 2519 | }, 2520 | "java": { 2521 | "package": "software.amazon.awscdk.services.oam" 2522 | }, 2523 | "python": { 2524 | "module": "aws_cdk.aws_oam" 2525 | } 2526 | } 2527 | }, 2528 | "aws-cdk-lib.aws_omics": { 2529 | "targets": { 2530 | "dotnet": { 2531 | "namespace": "Amazon.CDK.AWS.Omics" 2532 | }, 2533 | "java": { 2534 | "package": "software.amazon.awscdk.services.omics" 2535 | }, 2536 | "python": { 2537 | "module": "aws_cdk.aws_omics" 2538 | } 2539 | } 2540 | }, 2541 | "aws-cdk-lib.aws_opensearchserverless": { 2542 | "targets": { 2543 | "dotnet": { 2544 | "namespace": "Amazon.CDK.AWS.OpenSearchServerless" 2545 | }, 2546 | "java": { 2547 | "package": "software.amazon.awscdk.services.opensearchserverless" 2548 | }, 2549 | "python": { 2550 | "module": "aws_cdk.aws_opensearchserverless" 2551 | } 2552 | } 2553 | }, 2554 | "aws-cdk-lib.aws_opensearchservice": { 2555 | "targets": { 2556 | "dotnet": { 2557 | "namespace": "Amazon.CDK.AWS.OpenSearchService" 2558 | }, 2559 | "java": { 2560 | "package": "software.amazon.awscdk.services.opensearchservice" 2561 | }, 2562 | "python": { 2563 | "module": "aws_cdk.aws_opensearchservice" 2564 | } 2565 | } 2566 | }, 2567 | "aws-cdk-lib.aws_opsworks": { 2568 | "targets": { 2569 | "dotnet": { 2570 | "namespace": "Amazon.CDK.AWS.OpsWorks" 2571 | }, 2572 | "java": { 2573 | "package": "software.amazon.awscdk.services.opsworks" 2574 | }, 2575 | "python": { 2576 | "module": "aws_cdk.aws_opsworks" 2577 | } 2578 | } 2579 | }, 2580 | "aws-cdk-lib.aws_opsworkscm": { 2581 | "targets": { 2582 | "dotnet": { 2583 | "namespace": "Amazon.CDK.AWS.OpsWorksCM" 2584 | }, 2585 | "java": { 2586 | "package": "software.amazon.awscdk.services.opsworkscm" 2587 | }, 2588 | "python": { 2589 | "module": "aws_cdk.aws_opsworkscm" 2590 | } 2591 | } 2592 | }, 2593 | "aws-cdk-lib.aws_organizations": { 2594 | "targets": { 2595 | "dotnet": { 2596 | "namespace": "Amazon.CDK.AWS.Organizations" 2597 | }, 2598 | "java": { 2599 | "package": "software.amazon.awscdk.services.organizations" 2600 | }, 2601 | "python": { 2602 | "module": "aws_cdk.aws_organizations" 2603 | } 2604 | } 2605 | }, 2606 | "aws-cdk-lib.aws_osis": { 2607 | "targets": { 2608 | "dotnet": { 2609 | "package": "Amazon.CDK.AWS.OSIS" 2610 | }, 2611 | "java": { 2612 | "package": "software.amazon.awscdk.services.osis" 2613 | }, 2614 | "python": { 2615 | "module": "aws_cdk.aws_osis" 2616 | } 2617 | } 2618 | }, 2619 | "aws-cdk-lib.aws_panorama": { 2620 | "targets": { 2621 | "dotnet": { 2622 | "namespace": "Amazon.CDK.AWS.Panorama" 2623 | }, 2624 | "java": { 2625 | "package": "software.amazon.awscdk.services.panorama" 2626 | }, 2627 | "python": { 2628 | "module": "aws_cdk.aws_panorama" 2629 | } 2630 | } 2631 | }, 2632 | "aws-cdk-lib.aws_paymentcryptography": { 2633 | "targets": { 2634 | "dotnet": { 2635 | "package": "Amazon.CDK.AWS.PaymentCryptography" 2636 | }, 2637 | "java": { 2638 | "package": "software.amazon.awscdk.services.paymentcryptography" 2639 | }, 2640 | "python": { 2641 | "module": "aws_cdk.aws_paymentcryptography" 2642 | } 2643 | } 2644 | }, 2645 | "aws-cdk-lib.aws_pcaconnectorad": { 2646 | "targets": { 2647 | "dotnet": { 2648 | "package": "Amazon.CDK.AWS.PCAConnectorAD" 2649 | }, 2650 | "java": { 2651 | "package": "software.amazon.awscdk.services.pcaconnectorad" 2652 | }, 2653 | "python": { 2654 | "module": "aws_cdk.aws_pcaconnectorad" 2655 | } 2656 | } 2657 | }, 2658 | "aws-cdk-lib.aws_personalize": { 2659 | "targets": { 2660 | "dotnet": { 2661 | "namespace": "Amazon.CDK.AWS.Personalize" 2662 | }, 2663 | "java": { 2664 | "package": "software.amazon.awscdk.services.personalize" 2665 | }, 2666 | "python": { 2667 | "module": "aws_cdk.aws_personalize" 2668 | } 2669 | } 2670 | }, 2671 | "aws-cdk-lib.aws_pinpoint": { 2672 | "targets": { 2673 | "dotnet": { 2674 | "namespace": "Amazon.CDK.AWS.Pinpoint" 2675 | }, 2676 | "java": { 2677 | "package": "software.amazon.awscdk.services.pinpoint" 2678 | }, 2679 | "python": { 2680 | "module": "aws_cdk.aws_pinpoint" 2681 | } 2682 | } 2683 | }, 2684 | "aws-cdk-lib.aws_pinpointemail": { 2685 | "targets": { 2686 | "dotnet": { 2687 | "namespace": "Amazon.CDK.AWS.PinpointEmail" 2688 | }, 2689 | "java": { 2690 | "package": "software.amazon.awscdk.services.pinpointemail" 2691 | }, 2692 | "python": { 2693 | "module": "aws_cdk.aws_pinpointemail" 2694 | } 2695 | } 2696 | }, 2697 | "aws-cdk-lib.aws_pipes": { 2698 | "targets": { 2699 | "dotnet": { 2700 | "namespace": "Amazon.CDK.AWS.Pipes" 2701 | }, 2702 | "java": { 2703 | "package": "software.amazon.awscdk.services.pipes" 2704 | }, 2705 | "python": { 2706 | "module": "aws_cdk.aws_pipes" 2707 | } 2708 | } 2709 | }, 2710 | "aws-cdk-lib.aws_proton": { 2711 | "targets": { 2712 | "dotnet": { 2713 | "package": "Amazon.CDK.AWS.Proton" 2714 | }, 2715 | "java": { 2716 | "package": "software.amazon.awscdk.services.proton" 2717 | }, 2718 | "python": { 2719 | "module": "aws_cdk.aws_proton" 2720 | } 2721 | } 2722 | }, 2723 | "aws-cdk-lib.aws_qbusiness": { 2724 | "targets": { 2725 | "dotnet": { 2726 | "package": "Amazon.CDK.AWS.QBusiness" 2727 | }, 2728 | "java": { 2729 | "package": "software.amazon.awscdk.services.qbusiness" 2730 | }, 2731 | "python": { 2732 | "module": "aws_cdk.aws_qbusiness" 2733 | } 2734 | } 2735 | }, 2736 | "aws-cdk-lib.aws_qldb": { 2737 | "targets": { 2738 | "dotnet": { 2739 | "namespace": "Amazon.CDK.AWS.QLDB" 2740 | }, 2741 | "java": { 2742 | "package": "software.amazon.awscdk.services.qldb" 2743 | }, 2744 | "python": { 2745 | "module": "aws_cdk.aws_qldb" 2746 | } 2747 | } 2748 | }, 2749 | "aws-cdk-lib.aws_quicksight": { 2750 | "targets": { 2751 | "dotnet": { 2752 | "namespace": "Amazon.CDK.AWS.QuickSight" 2753 | }, 2754 | "java": { 2755 | "package": "software.amazon.awscdk.services.quicksight" 2756 | }, 2757 | "python": { 2758 | "module": "aws_cdk.aws_quicksight" 2759 | } 2760 | } 2761 | }, 2762 | "aws-cdk-lib.aws_ram": { 2763 | "targets": { 2764 | "dotnet": { 2765 | "namespace": "Amazon.CDK.AWS.RAM" 2766 | }, 2767 | "java": { 2768 | "package": "software.amazon.awscdk.services.ram" 2769 | }, 2770 | "python": { 2771 | "module": "aws_cdk.aws_ram" 2772 | } 2773 | } 2774 | }, 2775 | "aws-cdk-lib.aws_rds": { 2776 | "targets": { 2777 | "dotnet": { 2778 | "namespace": "Amazon.CDK.AWS.RDS" 2779 | }, 2780 | "java": { 2781 | "package": "software.amazon.awscdk.services.rds" 2782 | }, 2783 | "python": { 2784 | "module": "aws_cdk.aws_rds" 2785 | } 2786 | } 2787 | }, 2788 | "aws-cdk-lib.aws_redshift": { 2789 | "targets": { 2790 | "dotnet": { 2791 | "namespace": "Amazon.CDK.AWS.Redshift" 2792 | }, 2793 | "java": { 2794 | "package": "software.amazon.awscdk.services.redshift" 2795 | }, 2796 | "python": { 2797 | "module": "aws_cdk.aws_redshift" 2798 | } 2799 | } 2800 | }, 2801 | "aws-cdk-lib.aws_redshiftserverless": { 2802 | "targets": { 2803 | "dotnet": { 2804 | "namespace": "Amazon.CDK.AWS.RedshiftServerless" 2805 | }, 2806 | "java": { 2807 | "package": "software.amazon.awscdk.services.redshiftserverless" 2808 | }, 2809 | "python": { 2810 | "module": "aws_cdk.aws_redshiftserverless" 2811 | } 2812 | } 2813 | }, 2814 | "aws-cdk-lib.aws_refactorspaces": { 2815 | "targets": { 2816 | "dotnet": { 2817 | "namespace": "Amazon.CDK.AWS.RefactorSpaces" 2818 | }, 2819 | "java": { 2820 | "package": "software.amazon.awscdk.services.refactorspaces" 2821 | }, 2822 | "python": { 2823 | "module": "aws_cdk.aws_refactorspaces" 2824 | } 2825 | } 2826 | }, 2827 | "aws-cdk-lib.aws_rekognition": { 2828 | "targets": { 2829 | "dotnet": { 2830 | "namespace": "Amazon.CDK.AWS.Rekognition" 2831 | }, 2832 | "java": { 2833 | "package": "software.amazon.awscdk.services.rekognition" 2834 | }, 2835 | "python": { 2836 | "module": "aws_cdk.aws_rekognition" 2837 | } 2838 | } 2839 | }, 2840 | "aws-cdk-lib.aws_resiliencehub": { 2841 | "targets": { 2842 | "dotnet": { 2843 | "namespace": "Amazon.CDK.AWS.ResilienceHub" 2844 | }, 2845 | "java": { 2846 | "package": "software.amazon.awscdk.services.resiliencehub" 2847 | }, 2848 | "python": { 2849 | "module": "aws_cdk.aws_resiliencehub" 2850 | } 2851 | } 2852 | }, 2853 | "aws-cdk-lib.aws_resourceexplorer2": { 2854 | "targets": { 2855 | "dotnet": { 2856 | "namespace": "Amazon.CDK.AWS.ResourceExplorer2" 2857 | }, 2858 | "java": { 2859 | "package": "software.amazon.awscdk.services.resourceexplorer2" 2860 | }, 2861 | "python": { 2862 | "module": "aws_cdk.aws_resourceexplorer2" 2863 | } 2864 | } 2865 | }, 2866 | "aws-cdk-lib.aws_resourcegroups": { 2867 | "targets": { 2868 | "dotnet": { 2869 | "namespace": "Amazon.CDK.AWS.ResourceGroups" 2870 | }, 2871 | "java": { 2872 | "package": "software.amazon.awscdk.services.resourcegroups" 2873 | }, 2874 | "python": { 2875 | "module": "aws_cdk.aws_resourcegroups" 2876 | } 2877 | } 2878 | }, 2879 | "aws-cdk-lib.aws_robomaker": { 2880 | "targets": { 2881 | "dotnet": { 2882 | "namespace": "Amazon.CDK.AWS.RoboMaker" 2883 | }, 2884 | "java": { 2885 | "package": "software.amazon.awscdk.services.robomaker" 2886 | }, 2887 | "python": { 2888 | "module": "aws_cdk.aws_robomaker" 2889 | } 2890 | } 2891 | }, 2892 | "aws-cdk-lib.aws_rolesanywhere": { 2893 | "targets": { 2894 | "dotnet": { 2895 | "namespace": "Amazon.CDK.AWS.RolesAnywhere" 2896 | }, 2897 | "java": { 2898 | "package": "software.amazon.awscdk.services.rolesanywhere" 2899 | }, 2900 | "python": { 2901 | "module": "aws_cdk.aws_rolesanywhere" 2902 | } 2903 | } 2904 | }, 2905 | "aws-cdk-lib.aws_route53": { 2906 | "targets": { 2907 | "dotnet": { 2908 | "namespace": "Amazon.CDK.AWS.Route53" 2909 | }, 2910 | "java": { 2911 | "package": "software.amazon.awscdk.services.route53" 2912 | }, 2913 | "python": { 2914 | "module": "aws_cdk.aws_route53" 2915 | } 2916 | } 2917 | }, 2918 | "aws-cdk-lib.aws_route53_patterns": { 2919 | "targets": { 2920 | "dotnet": { 2921 | "namespace": "Amazon.CDK.AWS.Route53.Patterns" 2922 | }, 2923 | "java": { 2924 | "package": "software.amazon.awscdk.services.route53.patterns" 2925 | }, 2926 | "python": { 2927 | "module": "aws_cdk.aws_route53_patterns" 2928 | } 2929 | } 2930 | }, 2931 | "aws-cdk-lib.aws_route53_targets": { 2932 | "targets": { 2933 | "dotnet": { 2934 | "namespace": "Amazon.CDK.AWS.Route53.Targets" 2935 | }, 2936 | "java": { 2937 | "package": "software.amazon.awscdk.services.route53.targets" 2938 | }, 2939 | "python": { 2940 | "module": "aws_cdk.aws_route53_targets" 2941 | } 2942 | } 2943 | }, 2944 | "aws-cdk-lib.aws_route53profiles": { 2945 | "targets": { 2946 | "dotnet": { 2947 | "package": "Amazon.CDK.AWS.Route53Profiles" 2948 | }, 2949 | "java": { 2950 | "package": "software.amazon.awscdk.services.route53profiles" 2951 | }, 2952 | "python": { 2953 | "module": "aws_cdk.aws_route53profiles" 2954 | } 2955 | } 2956 | }, 2957 | "aws-cdk-lib.aws_route53recoverycontrol": { 2958 | "targets": { 2959 | "dotnet": { 2960 | "namespace": "Amazon.CDK.AWS.Route53RecoveryControl" 2961 | }, 2962 | "java": { 2963 | "package": "software.amazon.awscdk.services.route53recoverycontrol" 2964 | }, 2965 | "python": { 2966 | "module": "aws_cdk.aws_route53recoverycontrol" 2967 | } 2968 | } 2969 | }, 2970 | "aws-cdk-lib.aws_route53recoveryreadiness": { 2971 | "targets": { 2972 | "dotnet": { 2973 | "namespace": "Amazon.CDK.AWS.Route53RecoveryReadiness" 2974 | }, 2975 | "java": { 2976 | "package": "software.amazon.awscdk.services.route53recoveryreadiness" 2977 | }, 2978 | "python": { 2979 | "module": "aws_cdk.aws_route53recoveryreadiness" 2980 | } 2981 | } 2982 | }, 2983 | "aws-cdk-lib.aws_route53resolver": { 2984 | "targets": { 2985 | "dotnet": { 2986 | "namespace": "Amazon.CDK.AWS.Route53Resolver" 2987 | }, 2988 | "java": { 2989 | "package": "software.amazon.awscdk.services.route53resolver" 2990 | }, 2991 | "python": { 2992 | "module": "aws_cdk.aws_route53resolver" 2993 | } 2994 | } 2995 | }, 2996 | "aws-cdk-lib.aws_rum": { 2997 | "targets": { 2998 | "dotnet": { 2999 | "namespace": "Amazon.CDK.AWS.RUM" 3000 | }, 3001 | "java": { 3002 | "package": "software.amazon.awscdk.services.rum" 3003 | }, 3004 | "python": { 3005 | "module": "aws_cdk.aws_rum" 3006 | } 3007 | } 3008 | }, 3009 | "aws-cdk-lib.aws_s3": { 3010 | "targets": { 3011 | "dotnet": { 3012 | "namespace": "Amazon.CDK.AWS.S3" 3013 | }, 3014 | "java": { 3015 | "package": "software.amazon.awscdk.services.s3" 3016 | }, 3017 | "python": { 3018 | "module": "aws_cdk.aws_s3" 3019 | } 3020 | } 3021 | }, 3022 | "aws-cdk-lib.aws_s3_assets": { 3023 | "targets": { 3024 | "dotnet": { 3025 | "namespace": "Amazon.CDK.AWS.S3.Assets" 3026 | }, 3027 | "java": { 3028 | "package": "software.amazon.awscdk.services.s3.assets" 3029 | }, 3030 | "python": { 3031 | "module": "aws_cdk.aws_s3_assets" 3032 | } 3033 | } 3034 | }, 3035 | "aws-cdk-lib.aws_s3_deployment": { 3036 | "targets": { 3037 | "dotnet": { 3038 | "namespace": "Amazon.CDK.AWS.S3.Deployment" 3039 | }, 3040 | "java": { 3041 | "package": "software.amazon.awscdk.services.s3.deployment" 3042 | }, 3043 | "python": { 3044 | "module": "aws_cdk.aws_s3_deployment" 3045 | } 3046 | } 3047 | }, 3048 | "aws-cdk-lib.aws_s3_notifications": { 3049 | "targets": { 3050 | "dotnet": { 3051 | "namespace": "Amazon.CDK.AWS.S3.Notifications" 3052 | }, 3053 | "java": { 3054 | "package": "software.amazon.awscdk.services.s3.notifications" 3055 | }, 3056 | "python": { 3057 | "module": "aws_cdk.aws_s3_notifications" 3058 | } 3059 | } 3060 | }, 3061 | "aws-cdk-lib.aws_s3express": { 3062 | "targets": { 3063 | "dotnet": { 3064 | "package": "Amazon.CDK.AWS.S3Express" 3065 | }, 3066 | "java": { 3067 | "package": "software.amazon.awscdk.services.s3express" 3068 | }, 3069 | "python": { 3070 | "module": "aws_cdk.aws_s3express" 3071 | } 3072 | } 3073 | }, 3074 | "aws-cdk-lib.aws_s3objectlambda": { 3075 | "targets": { 3076 | "dotnet": { 3077 | "namespace": "Amazon.CDK.AWS.S3ObjectLambda" 3078 | }, 3079 | "java": { 3080 | "package": "software.amazon.awscdk.services.s3objectlambda" 3081 | }, 3082 | "python": { 3083 | "module": "aws_cdk.aws_s3objectlambda" 3084 | } 3085 | } 3086 | }, 3087 | "aws-cdk-lib.aws_s3outposts": { 3088 | "targets": { 3089 | "dotnet": { 3090 | "namespace": "Amazon.CDK.AWS.S3Outposts" 3091 | }, 3092 | "java": { 3093 | "package": "software.amazon.awscdk.services.s3outposts" 3094 | }, 3095 | "python": { 3096 | "module": "aws_cdk.aws_s3outposts" 3097 | } 3098 | } 3099 | }, 3100 | "aws-cdk-lib.aws_sagemaker": { 3101 | "targets": { 3102 | "dotnet": { 3103 | "namespace": "Amazon.CDK.AWS.Sagemaker" 3104 | }, 3105 | "java": { 3106 | "package": "software.amazon.awscdk.services.sagemaker" 3107 | }, 3108 | "python": { 3109 | "module": "aws_cdk.aws_sagemaker" 3110 | } 3111 | } 3112 | }, 3113 | "aws-cdk-lib.aws_sam": { 3114 | "targets": { 3115 | "dotnet": { 3116 | "namespace": "Amazon.CDK.AWS.SAM" 3117 | }, 3118 | "java": { 3119 | "package": "software.amazon.awscdk.services.sam" 3120 | }, 3121 | "python": { 3122 | "module": "aws_cdk.aws_sam" 3123 | } 3124 | } 3125 | }, 3126 | "aws-cdk-lib.aws_scheduler": { 3127 | "targets": { 3128 | "dotnet": { 3129 | "namespace": "Amazon.CDK.AWS.Scheduler" 3130 | }, 3131 | "java": { 3132 | "package": "software.amazon.awscdk.services.scheduler" 3133 | }, 3134 | "python": { 3135 | "module": "aws_cdk.aws_scheduler" 3136 | } 3137 | } 3138 | }, 3139 | "aws-cdk-lib.aws_sdb": { 3140 | "targets": { 3141 | "dotnet": { 3142 | "namespace": "Amazon.CDK.AWS.SDB" 3143 | }, 3144 | "java": { 3145 | "package": "software.amazon.awscdk.services.sdb" 3146 | }, 3147 | "python": { 3148 | "module": "aws_cdk.aws_sdb" 3149 | } 3150 | } 3151 | }, 3152 | "aws-cdk-lib.aws_secretsmanager": { 3153 | "targets": { 3154 | "dotnet": { 3155 | "namespace": "Amazon.CDK.AWS.SecretsManager" 3156 | }, 3157 | "java": { 3158 | "package": "software.amazon.awscdk.services.secretsmanager" 3159 | }, 3160 | "python": { 3161 | "module": "aws_cdk.aws_secretsmanager" 3162 | } 3163 | } 3164 | }, 3165 | "aws-cdk-lib.aws_securityhub": { 3166 | "targets": { 3167 | "dotnet": { 3168 | "namespace": "Amazon.CDK.AWS.SecurityHub" 3169 | }, 3170 | "java": { 3171 | "package": "software.amazon.awscdk.services.securityhub" 3172 | }, 3173 | "python": { 3174 | "module": "aws_cdk.aws_securityhub" 3175 | } 3176 | } 3177 | }, 3178 | "aws-cdk-lib.aws_securitylake": { 3179 | "targets": { 3180 | "dotnet": { 3181 | "package": "Amazon.CDK.AWS.SecurityLake" 3182 | }, 3183 | "java": { 3184 | "package": "software.amazon.awscdk.services.securitylake" 3185 | }, 3186 | "python": { 3187 | "module": "aws_cdk.aws_securitylake" 3188 | } 3189 | } 3190 | }, 3191 | "aws-cdk-lib.aws_servicecatalog": { 3192 | "targets": { 3193 | "dotnet": { 3194 | "namespace": "Amazon.CDK.AWS.Servicecatalog" 3195 | }, 3196 | "java": { 3197 | "package": "software.amazon.awscdk.services.servicecatalog" 3198 | }, 3199 | "python": { 3200 | "module": "aws_cdk.aws_servicecatalog" 3201 | } 3202 | } 3203 | }, 3204 | "aws-cdk-lib.aws_servicecatalogappregistry": { 3205 | "targets": { 3206 | "dotnet": { 3207 | "namespace": "Amazon.CDK.AWS.Servicecatalogappregistry" 3208 | }, 3209 | "java": { 3210 | "package": "software.amazon.awscdk.services.servicecatalogappregistry" 3211 | }, 3212 | "python": { 3213 | "module": "aws_cdk.aws_servicecatalogappregistry" 3214 | } 3215 | } 3216 | }, 3217 | "aws-cdk-lib.aws_servicediscovery": { 3218 | "targets": { 3219 | "dotnet": { 3220 | "namespace": "Amazon.CDK.AWS.ServiceDiscovery" 3221 | }, 3222 | "java": { 3223 | "package": "software.amazon.awscdk.services.servicediscovery" 3224 | }, 3225 | "python": { 3226 | "module": "aws_cdk.aws_servicediscovery" 3227 | } 3228 | } 3229 | }, 3230 | "aws-cdk-lib.aws_ses": { 3231 | "targets": { 3232 | "dotnet": { 3233 | "namespace": "Amazon.CDK.AWS.SES" 3234 | }, 3235 | "java": { 3236 | "package": "software.amazon.awscdk.services.ses" 3237 | }, 3238 | "python": { 3239 | "module": "aws_cdk.aws_ses" 3240 | } 3241 | } 3242 | }, 3243 | "aws-cdk-lib.aws_ses_actions": { 3244 | "targets": { 3245 | "dotnet": { 3246 | "namespace": "Amazon.CDK.AWS.SES.Actions" 3247 | }, 3248 | "java": { 3249 | "package": "software.amazon.awscdk.services.ses.actions" 3250 | }, 3251 | "python": { 3252 | "module": "aws_cdk.aws_ses_actions" 3253 | } 3254 | } 3255 | }, 3256 | "aws-cdk-lib.aws_shield": { 3257 | "targets": { 3258 | "dotnet": { 3259 | "package": "Amazon.CDK.AWS.Shield" 3260 | }, 3261 | "java": { 3262 | "package": "software.amazon.awscdk.services.shield" 3263 | }, 3264 | "python": { 3265 | "module": "aws_cdk.aws_shield" 3266 | } 3267 | } 3268 | }, 3269 | "aws-cdk-lib.aws_signer": { 3270 | "targets": { 3271 | "dotnet": { 3272 | "namespace": "Amazon.CDK.AWS.Signer" 3273 | }, 3274 | "java": { 3275 | "package": "software.amazon.awscdk.services.signer" 3276 | }, 3277 | "python": { 3278 | "module": "aws_cdk.aws_signer" 3279 | } 3280 | } 3281 | }, 3282 | "aws-cdk-lib.aws_simspaceweaver": { 3283 | "targets": { 3284 | "dotnet": { 3285 | "namespace": "Amazon.CDK.AWS.SimSpaceWeaver" 3286 | }, 3287 | "java": { 3288 | "package": "software.amazon.awscdk.services.simspaceweaver" 3289 | }, 3290 | "python": { 3291 | "module": "aws_cdk.aws_simspaceweaver" 3292 | } 3293 | } 3294 | }, 3295 | "aws-cdk-lib.aws_sns": { 3296 | "targets": { 3297 | "dotnet": { 3298 | "namespace": "Amazon.CDK.AWS.SNS" 3299 | }, 3300 | "java": { 3301 | "package": "software.amazon.awscdk.services.sns" 3302 | }, 3303 | "python": { 3304 | "module": "aws_cdk.aws_sns" 3305 | } 3306 | } 3307 | }, 3308 | "aws-cdk-lib.aws_sns_subscriptions": { 3309 | "targets": { 3310 | "dotnet": { 3311 | "namespace": "Amazon.CDK.AWS.SNS.Subscriptions" 3312 | }, 3313 | "java": { 3314 | "package": "software.amazon.awscdk.services.sns.subscriptions" 3315 | }, 3316 | "python": { 3317 | "module": "aws_cdk.aws_sns_subscriptions" 3318 | } 3319 | } 3320 | }, 3321 | "aws-cdk-lib.aws_sqs": { 3322 | "targets": { 3323 | "dotnet": { 3324 | "namespace": "Amazon.CDK.AWS.SQS" 3325 | }, 3326 | "java": { 3327 | "package": "software.amazon.awscdk.services.sqs" 3328 | }, 3329 | "python": { 3330 | "module": "aws_cdk.aws_sqs" 3331 | } 3332 | } 3333 | }, 3334 | "aws-cdk-lib.aws_ssm": { 3335 | "targets": { 3336 | "dotnet": { 3337 | "namespace": "Amazon.CDK.AWS.SSM" 3338 | }, 3339 | "java": { 3340 | "package": "software.amazon.awscdk.services.ssm" 3341 | }, 3342 | "python": { 3343 | "module": "aws_cdk.aws_ssm" 3344 | } 3345 | } 3346 | }, 3347 | "aws-cdk-lib.aws_ssmcontacts": { 3348 | "targets": { 3349 | "dotnet": { 3350 | "namespace": "Amazon.CDK.AWS.SSMContacts" 3351 | }, 3352 | "java": { 3353 | "package": "software.amazon.awscdk.services.ssmcontacts" 3354 | }, 3355 | "python": { 3356 | "module": "aws_cdk.aws_ssmcontacts" 3357 | } 3358 | } 3359 | }, 3360 | "aws-cdk-lib.aws_ssmincidents": { 3361 | "targets": { 3362 | "dotnet": { 3363 | "namespace": "Amazon.CDK.AWS.SSMIncidents" 3364 | }, 3365 | "java": { 3366 | "package": "software.amazon.awscdk.services.ssmincidents" 3367 | }, 3368 | "python": { 3369 | "module": "aws_cdk.aws_ssmincidents" 3370 | } 3371 | } 3372 | }, 3373 | "aws-cdk-lib.aws_sso": { 3374 | "targets": { 3375 | "dotnet": { 3376 | "namespace": "Amazon.CDK.AWS.SSO" 3377 | }, 3378 | "java": { 3379 | "package": "software.amazon.awscdk.services.sso" 3380 | }, 3381 | "python": { 3382 | "module": "aws_cdk.aws_sso" 3383 | } 3384 | } 3385 | }, 3386 | "aws-cdk-lib.aws_stepfunctions": { 3387 | "targets": { 3388 | "dotnet": { 3389 | "namespace": "Amazon.CDK.AWS.StepFunctions" 3390 | }, 3391 | "java": { 3392 | "package": "software.amazon.awscdk.services.stepfunctions" 3393 | }, 3394 | "python": { 3395 | "module": "aws_cdk.aws_stepfunctions" 3396 | } 3397 | } 3398 | }, 3399 | "aws-cdk-lib.aws_stepfunctions_tasks": { 3400 | "targets": { 3401 | "dotnet": { 3402 | "namespace": "Amazon.CDK.AWS.StepFunctions.Tasks" 3403 | }, 3404 | "java": { 3405 | "package": "software.amazon.awscdk.services.stepfunctions.tasks" 3406 | }, 3407 | "python": { 3408 | "module": "aws_cdk.aws_stepfunctions_tasks" 3409 | } 3410 | } 3411 | }, 3412 | "aws-cdk-lib.aws_supportapp": { 3413 | "targets": { 3414 | "dotnet": { 3415 | "namespace": "Amazon.CDK.AWS.SupportApp" 3416 | }, 3417 | "java": { 3418 | "package": "software.amazon.awscdk.services.supportapp" 3419 | }, 3420 | "python": { 3421 | "module": "aws_cdk.aws_supportapp" 3422 | } 3423 | } 3424 | }, 3425 | "aws-cdk-lib.aws_synthetics": { 3426 | "targets": { 3427 | "dotnet": { 3428 | "namespace": "Amazon.CDK.AWS.Synthetics" 3429 | }, 3430 | "java": { 3431 | "package": "software.amazon.awscdk.services.synthetics" 3432 | }, 3433 | "python": { 3434 | "module": "aws_cdk.aws_synthetics" 3435 | } 3436 | } 3437 | }, 3438 | "aws-cdk-lib.aws_systemsmanagersap": { 3439 | "targets": { 3440 | "dotnet": { 3441 | "namespace": "Amazon.CDK.AWS.SystemsManagerSAP" 3442 | }, 3443 | "java": { 3444 | "package": "software.amazon.awscdk.services.systemsmanagersap" 3445 | }, 3446 | "python": { 3447 | "module": "aws_cdk.aws_systemsmanagersap" 3448 | } 3449 | } 3450 | }, 3451 | "aws-cdk-lib.aws_timestream": { 3452 | "targets": { 3453 | "dotnet": { 3454 | "namespace": "Amazon.CDK.AWS.Timestream" 3455 | }, 3456 | "java": { 3457 | "package": "software.amazon.awscdk.services.timestream" 3458 | }, 3459 | "python": { 3460 | "module": "aws_cdk.aws_timestream" 3461 | } 3462 | } 3463 | }, 3464 | "aws-cdk-lib.aws_transfer": { 3465 | "targets": { 3466 | "dotnet": { 3467 | "namespace": "Amazon.CDK.AWS.Transfer" 3468 | }, 3469 | "java": { 3470 | "package": "software.amazon.awscdk.services.transfer" 3471 | }, 3472 | "python": { 3473 | "module": "aws_cdk.aws_transfer" 3474 | } 3475 | } 3476 | }, 3477 | "aws-cdk-lib.aws_verifiedpermissions": { 3478 | "targets": { 3479 | "dotnet": { 3480 | "package": "Amazon.CDK.AWS.VerifiedPermissions" 3481 | }, 3482 | "java": { 3483 | "package": "software.amazon.awscdk.services.verifiedpermissions" 3484 | }, 3485 | "python": { 3486 | "module": "aws_cdk.aws_verifiedpermissions" 3487 | } 3488 | } 3489 | }, 3490 | "aws-cdk-lib.aws_voiceid": { 3491 | "targets": { 3492 | "dotnet": { 3493 | "namespace": "Amazon.CDK.AWS.VoiceID" 3494 | }, 3495 | "java": { 3496 | "package": "software.amazon.awscdk.services.voiceid" 3497 | }, 3498 | "python": { 3499 | "module": "aws_cdk.aws_voiceid" 3500 | } 3501 | } 3502 | }, 3503 | "aws-cdk-lib.aws_vpclattice": { 3504 | "targets": { 3505 | "dotnet": { 3506 | "namespace": "Amazon.CDK.AWS.VpcLattice" 3507 | }, 3508 | "java": { 3509 | "package": "software.amazon.awscdk.services.vpclattice" 3510 | }, 3511 | "python": { 3512 | "module": "aws_cdk.aws_vpclattice" 3513 | } 3514 | } 3515 | }, 3516 | "aws-cdk-lib.aws_waf": { 3517 | "targets": { 3518 | "dotnet": { 3519 | "namespace": "Amazon.CDK.AWS.WAF" 3520 | }, 3521 | "java": { 3522 | "package": "software.amazon.awscdk.services.waf" 3523 | }, 3524 | "python": { 3525 | "module": "aws_cdk.aws_waf" 3526 | } 3527 | } 3528 | }, 3529 | "aws-cdk-lib.aws_wafregional": { 3530 | "targets": { 3531 | "dotnet": { 3532 | "namespace": "Amazon.CDK.AWS.WAFRegional" 3533 | }, 3534 | "java": { 3535 | "package": "software.amazon.awscdk.services.waf.regional" 3536 | }, 3537 | "python": { 3538 | "module": "aws_cdk.aws_wafregional" 3539 | } 3540 | } 3541 | }, 3542 | "aws-cdk-lib.aws_wafv2": { 3543 | "targets": { 3544 | "dotnet": { 3545 | "namespace": "Amazon.CDK.AWS.WAFv2" 3546 | }, 3547 | "java": { 3548 | "package": "software.amazon.awscdk.services.wafv2" 3549 | }, 3550 | "python": { 3551 | "module": "aws_cdk.aws_wafv2" 3552 | } 3553 | } 3554 | }, 3555 | "aws-cdk-lib.aws_wisdom": { 3556 | "targets": { 3557 | "dotnet": { 3558 | "namespace": "Amazon.CDK.AWS.Wisdom" 3559 | }, 3560 | "java": { 3561 | "package": "software.amazon.awscdk.services.wisdom" 3562 | }, 3563 | "python": { 3564 | "module": "aws_cdk.aws_wisdom" 3565 | } 3566 | } 3567 | }, 3568 | "aws-cdk-lib.aws_workspaces": { 3569 | "targets": { 3570 | "dotnet": { 3571 | "namespace": "Amazon.CDK.AWS.WorkSpaces" 3572 | }, 3573 | "java": { 3574 | "package": "software.amazon.awscdk.services.workspaces" 3575 | }, 3576 | "python": { 3577 | "module": "aws_cdk.aws_workspaces" 3578 | } 3579 | } 3580 | }, 3581 | "aws-cdk-lib.aws_workspacesthinclient": { 3582 | "targets": { 3583 | "dotnet": { 3584 | "package": "Amazon.CDK.AWS.WorkSpacesThinClient" 3585 | }, 3586 | "java": { 3587 | "package": "software.amazon.awscdk.services.workspacesthinclient" 3588 | }, 3589 | "python": { 3590 | "module": "aws_cdk.aws_workspacesthinclient" 3591 | } 3592 | } 3593 | }, 3594 | "aws-cdk-lib.aws_workspacesweb": { 3595 | "targets": { 3596 | "dotnet": { 3597 | "package": "Amazon.CDK.AWS.WorkSpacesWeb" 3598 | }, 3599 | "java": { 3600 | "package": "software.amazon.awscdk.services.workspacesweb" 3601 | }, 3602 | "python": { 3603 | "module": "aws_cdk.aws_workspacesweb" 3604 | } 3605 | } 3606 | }, 3607 | "aws-cdk-lib.aws_xray": { 3608 | "targets": { 3609 | "dotnet": { 3610 | "namespace": "Amazon.CDK.AWS.XRay" 3611 | }, 3612 | "java": { 3613 | "package": "software.amazon.awscdk.services.xray" 3614 | }, 3615 | "python": { 3616 | "module": "aws_cdk.aws_xray" 3617 | } 3618 | } 3619 | }, 3620 | "aws-cdk-lib.cloud_assembly_schema": { 3621 | "targets": { 3622 | "dotnet": { 3623 | "namespace": "Amazon.CDK.CloudAssembly.Schema" 3624 | }, 3625 | "java": { 3626 | "package": "software.amazon.awscdk.cloudassembly.schema" 3627 | }, 3628 | "python": { 3629 | "module": "aws_cdk.cloud_assembly_schema" 3630 | } 3631 | } 3632 | }, 3633 | "aws-cdk-lib.cloudformation_include": { 3634 | "targets": { 3635 | "dotnet": { 3636 | "namespace": "Amazon.CDK.CloudFormation.Include" 3637 | }, 3638 | "java": { 3639 | "package": "software.amazon.awscdk.cloudformation.include" 3640 | }, 3641 | "python": { 3642 | "module": "aws_cdk.cloudformation_include" 3643 | } 3644 | } 3645 | }, 3646 | "aws-cdk-lib.custom_resources": { 3647 | "targets": { 3648 | "dotnet": { 3649 | "namespace": "Amazon.CDK.CustomResources" 3650 | }, 3651 | "java": { 3652 | "package": "software.amazon.awscdk.customresources" 3653 | }, 3654 | "python": { 3655 | "module": "aws_cdk.custom_resources" 3656 | } 3657 | } 3658 | }, 3659 | "aws-cdk-lib.cx_api": { 3660 | "targets": { 3661 | "dotnet": { 3662 | "namespace": "Amazon.CDK.CXAPI" 3663 | }, 3664 | "java": { 3665 | "package": "software.amazon.awscdk.cxapi" 3666 | }, 3667 | "python": { 3668 | "module": "aws_cdk.cx_api" 3669 | } 3670 | } 3671 | }, 3672 | "aws-cdk-lib.lambda_layer_awscli": { 3673 | "targets": { 3674 | "dotnet": { 3675 | "namespace": "Amazon.CDK.LambdaLayer.AwsCli" 3676 | }, 3677 | "java": { 3678 | "package": "software.amazon.awscdk.lambdalayer.awscli" 3679 | }, 3680 | "python": { 3681 | "module": "aws_cdk.lambda_layer_awscli" 3682 | } 3683 | } 3684 | }, 3685 | "aws-cdk-lib.lambda_layer_kubectl": { 3686 | "targets": { 3687 | "dotnet": { 3688 | "namespace": "Amazon.CDK.LambdaLayer.Kubectl" 3689 | }, 3690 | "java": { 3691 | "package": "software.amazon.awscdk.lambdalayer.kubectl" 3692 | }, 3693 | "python": { 3694 | "module": "aws_cdk.lambda_layer_kubectl" 3695 | } 3696 | } 3697 | }, 3698 | "aws-cdk-lib.lambda_layer_node_proxy_agent": { 3699 | "targets": { 3700 | "dotnet": { 3701 | "namespace": "Amazon.CDK.LambdaLayer.NodeProxyAgent" 3702 | }, 3703 | "java": { 3704 | "package": "software.amazon.awscdk.lambda.layer.node.proxy.agent" 3705 | }, 3706 | "python": { 3707 | "module": "aws_cdk.lambda_layer_node_proxy_agent" 3708 | } 3709 | } 3710 | }, 3711 | "aws-cdk-lib.pipelines": { 3712 | "targets": { 3713 | "dotnet": { 3714 | "namespace": "Amazon.CDK.Pipelines" 3715 | }, 3716 | "java": { 3717 | "package": "software.amazon.awscdk.pipelines" 3718 | }, 3719 | "python": { 3720 | "module": "aws_cdk.pipelines" 3721 | } 3722 | } 3723 | }, 3724 | "aws-cdk-lib.region_info": { 3725 | "targets": { 3726 | "dotnet": { 3727 | "namespace": "Amazon.CDK.RegionInfo" 3728 | }, 3729 | "java": { 3730 | "package": "software.amazon.awscdk.regioninfo" 3731 | }, 3732 | "python": { 3733 | "module": "aws_cdk.region_info" 3734 | } 3735 | } 3736 | }, 3737 | "aws-cdk-lib.triggers": { 3738 | "targets": { 3739 | "dotnet": { 3740 | "namespace": "Amazon.CDK.Triggers" 3741 | }, 3742 | "java": { 3743 | "package": "software.amazon.awscdk.triggers" 3744 | }, 3745 | "python": { 3746 | "module": "aws_cdk.triggers" 3747 | } 3748 | } 3749 | } 3750 | }, 3751 | "targets": { 3752 | "dotnet": { 3753 | "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/main/logo/default-256-dark.png", 3754 | "namespace": "Amazon.CDK", 3755 | "packageId": "Amazon.CDK.Lib" 3756 | }, 3757 | "go": { 3758 | "moduleName": "github.com/aws/aws-cdk-go", 3759 | "packageName": "awscdk" 3760 | }, 3761 | "java": { 3762 | "maven": { 3763 | "artifactId": "aws-cdk-lib", 3764 | "groupId": "software.amazon.awscdk" 3765 | }, 3766 | "package": "software.amazon.awscdk" 3767 | }, 3768 | "js": { 3769 | "npm": "aws-cdk-lib" 3770 | }, 3771 | "python": { 3772 | "distName": "aws-cdk-lib", 3773 | "module": "aws_cdk" 3774 | } 3775 | } 3776 | }, 3777 | "constructs": { 3778 | "targets": { 3779 | "dotnet": { 3780 | "namespace": "Constructs", 3781 | "packageId": "Constructs" 3782 | }, 3783 | "go": { 3784 | "moduleName": "github.com/aws/constructs-go" 3785 | }, 3786 | "java": { 3787 | "maven": { 3788 | "artifactId": "constructs", 3789 | "groupId": "software.constructs" 3790 | }, 3791 | "package": "software.constructs" 3792 | }, 3793 | "js": { 3794 | "npm": "constructs" 3795 | }, 3796 | "python": { 3797 | "distName": "constructs", 3798 | "module": "constructs" 3799 | } 3800 | } 3801 | } 3802 | }, 3803 | "description": "@thedesignium/cdk-log-notifier", 3804 | "homepage": "https://github.com/TheDesignium/cdk-log-notifier.git", 3805 | "jsiiVersion": "5.4.29 (build d02a91b)", 3806 | "keywords": [ 3807 | "awscdk" 3808 | ], 3809 | "license": "MIT", 3810 | "metadata": { 3811 | "jsii": { 3812 | "pacmak": { 3813 | "hasDefaultInterfaces": true 3814 | } 3815 | } 3816 | }, 3817 | "name": "@thedesignium/cdk-log-notifier", 3818 | "readme": { 3819 | "markdown": "# cdk-log-notifier: Filter CloudWatch logs and post to Slack.\n\nThe AWS CDK Construct to build a system that gather CloudWatch logs, filter and post to Slack.\n\n![screenshot](https://i.imgur.com/Qx2A9n2.png)\n\n## Example Usage\n\nWatch the all logs contains \"ERROR\" from Lambda functions.\n\n```typescript\nconst logNotifier = new LogNotifier(this, 'logNotifier', {\n filterPattern: logs.FilterPattern.allTerms('ERROR'),\n slackIncomingWebhookUrl: 'https://hooks.slack.com/...', // Use yours.\n});\n\nlogNotifier.watch(lambdaFunc1.logGroup);\nlogNotifier.watch(lambdaFunc2.logGroup);\n```\n\n## Installation\n\n```sh\nnpm i @thedesignium/cdk-log-notifier\n```\n\n## API Reference\n\n### Class: `LogNotifier`\n\n```typescript\nnew LogNotifier(scope: cdk.Construct, id: string, props: LogNotifierProps)\n```\n\nThe properties in `props`:\n\n- `filterPattern`: The [FilterPattern object in aws-cloudwatch module](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-logs.FilterPattern.html). The logs is filtered as specified here. *Required.*\n- `slackIncomingWebhookUrl`: The [Incoming Webhook URL](https://api.slack.com/messaging/webhooks) of Slack. Create for the Slack channel the logs should be posted. *Required.*\n- `dateTimeFormatOptions`: The [arguments of the DateTimeFormat constructor](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#parameters), used to format the datetime which shown at the bottom of the Slack message. If omitted, it's formatted like `12/20, 3:00:00 AM UTC`. *Optional.*\n\n Example:\n\n ```typescript\n dateTimeFormatOptions: {\n locales: 'ja-JP',\n timeZone: 'Asia/Tokyo',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n }\n ```\n\n#### Static Method: `fromAttributes`\n\n```typescript\nLogNotifier.fromAttributes(scope: cdk.Construct, id: string, attrs: LogNotifierAttributes): LogNotifier\n```\n\nInstantiate from the attributes. Put the value of `logNotifier.attributes` as `attrs` parameter.\n\n#### Method: `watch`\n\n```typescript\nlogNotifier.watch(logGroup: logs.LogGroup): void\n```\n\nAdd the log group to watch list to notify. The logs in the watched log groups are filtered by the filterPattern and posted to Slack.\n\n#### Property: `attributes`\n\n```typescript\nattributes: LogNotifierAttributes\n```\n\nTo use with `LogNotifier.fromAttributes()`.\n\n## Containing Resources\n\n- [logs.SubscriptionFilter](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-logs.SubscriptionFilter.html)\n- [lambda.Function](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-lambda.Function.html)\n\n## Limitation\n\nThe `watch()` method attaches a [Subscription](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Subscriptions.html) to the subject logGroup. The number of subscription can be attached to a logGroup, however, is only one. So it'll fail if the logGroup has another subscription already. Similary, the watched logGroup can't be attached another subscription nor watched from another LogNotifier.\n\n## Motivation\n\nThere were 2 requirements:\n\n1. Notice the all logs produced by `console.error()`(not only the crash report such InvocationError)\n2. Jump easily to CloudWatch via link\n\nWe tried `Lambda's error metric + CloudWatch Alarm + Chatbot` and `CloudWatch Metrics Filter + CloudWatch Alarm + Chatbot`, but the former system don't satisfy [1] and the latter system don't satisfy [2]. That's why we need this.\n\n## FAQ\n\n### Cross Stack?\n\nPossible. Export all values in `LogNotifier.prototype.attributes`, import it and use `LogNotifier.fromAttributes()` in another Stack.\n\n### How can I customize the Slack bot icon or name?\n\nYou can set at [Slack App setting page](https://api.slack.com/apps), or Incoming Webhook configuration page if you use [Legacy Incoming Webhook](https://api.slack.com/legacy/custom-integrations/incoming-webhooks).\n\n### No support for other languages than TypeScript?\n\nSupports Python, Java, Go and .NET.\n" 3820 | }, 3821 | "repository": { 3822 | "type": "git", 3823 | "url": "https://github.com/TheDesignium/cdk-log-notifier.git" 3824 | }, 3825 | "schema": "jsii/0.10.0", 3826 | "targets": { 3827 | "dotnet": { 3828 | "namespace": "TheDesignium.CDKLogNotifier", 3829 | "packageId": "TheDesignium.CDKLogNotifier" 3830 | }, 3831 | "go": { 3832 | "moduleName": "github.com/TheDesignium/cdk-log-notifier-go", 3833 | "packageName": "lognotifier" 3834 | }, 3835 | "java": { 3836 | "maven": { 3837 | "artifactId": "cdk-log-notifier", 3838 | "groupId": "com.thedesignium" 3839 | }, 3840 | "package": "com.thedesignium.cdklognotifier" 3841 | }, 3842 | "js": { 3843 | "npm": "@thedesignium/cdk-log-notifier" 3844 | }, 3845 | "python": { 3846 | "distName": "cdk-log-notifier", 3847 | "module": "cdk_log_notifier" 3848 | } 3849 | }, 3850 | "types": { 3851 | "@thedesignium/cdk-log-notifier.DateTimeFormatOptions": { 3852 | "assembly": "@thedesignium/cdk-log-notifier", 3853 | "datatype": true, 3854 | "fqn": "@thedesignium/cdk-log-notifier.DateTimeFormatOptions", 3855 | "kind": "interface", 3856 | "locationInModule": { 3857 | "filename": "lib/index.ts", 3858 | "line": 40 3859 | }, 3860 | "name": "DateTimeFormatOptions", 3861 | "properties": [ 3862 | { 3863 | "abstract": true, 3864 | "immutable": true, 3865 | "locationInModule": { 3866 | "filename": "lib/index.ts", 3867 | "line": 46 3868 | }, 3869 | "name": "day", 3870 | "optional": true, 3871 | "type": { 3872 | "primitive": "string" 3873 | } 3874 | }, 3875 | { 3876 | "abstract": true, 3877 | "immutable": true, 3878 | "locationInModule": { 3879 | "filename": "lib/index.ts", 3880 | "line": 43 3881 | }, 3882 | "name": "era", 3883 | "optional": true, 3884 | "type": { 3885 | "primitive": "string" 3886 | } 3887 | }, 3888 | { 3889 | "abstract": true, 3890 | "immutable": true, 3891 | "locationInModule": { 3892 | "filename": "lib/index.ts", 3893 | "line": 51 3894 | }, 3895 | "name": "formatMatcher", 3896 | "optional": true, 3897 | "type": { 3898 | "primitive": "string" 3899 | } 3900 | }, 3901 | { 3902 | "abstract": true, 3903 | "immutable": true, 3904 | "locationInModule": { 3905 | "filename": "lib/index.ts", 3906 | "line": 47 3907 | }, 3908 | "name": "hour", 3909 | "optional": true, 3910 | "type": { 3911 | "primitive": "string" 3912 | } 3913 | }, 3914 | { 3915 | "abstract": true, 3916 | "immutable": true, 3917 | "locationInModule": { 3918 | "filename": "lib/index.ts", 3919 | "line": 52 3920 | }, 3921 | "name": "hour12", 3922 | "optional": true, 3923 | "type": { 3924 | "primitive": "boolean" 3925 | } 3926 | }, 3927 | { 3928 | "abstract": true, 3929 | "immutable": true, 3930 | "locationInModule": { 3931 | "filename": "lib/index.ts", 3932 | "line": 41 3933 | }, 3934 | "name": "localeMatcher", 3935 | "optional": true, 3936 | "type": { 3937 | "primitive": "string" 3938 | } 3939 | }, 3940 | { 3941 | "abstract": true, 3942 | "immutable": true, 3943 | "locationInModule": { 3944 | "filename": "lib/index.ts", 3945 | "line": 54 3946 | }, 3947 | "name": "locales", 3948 | "optional": true, 3949 | "type": { 3950 | "union": { 3951 | "types": [ 3952 | { 3953 | "primitive": "string" 3954 | }, 3955 | { 3956 | "collection": { 3957 | "elementtype": { 3958 | "primitive": "string" 3959 | }, 3960 | "kind": "array" 3961 | } 3962 | } 3963 | ] 3964 | } 3965 | } 3966 | }, 3967 | { 3968 | "abstract": true, 3969 | "immutable": true, 3970 | "locationInModule": { 3971 | "filename": "lib/index.ts", 3972 | "line": 48 3973 | }, 3974 | "name": "minute", 3975 | "optional": true, 3976 | "type": { 3977 | "primitive": "string" 3978 | } 3979 | }, 3980 | { 3981 | "abstract": true, 3982 | "immutable": true, 3983 | "locationInModule": { 3984 | "filename": "lib/index.ts", 3985 | "line": 45 3986 | }, 3987 | "name": "month", 3988 | "optional": true, 3989 | "type": { 3990 | "primitive": "string" 3991 | } 3992 | }, 3993 | { 3994 | "abstract": true, 3995 | "immutable": true, 3996 | "locationInModule": { 3997 | "filename": "lib/index.ts", 3998 | "line": 49 3999 | }, 4000 | "name": "second", 4001 | "optional": true, 4002 | "type": { 4003 | "primitive": "string" 4004 | } 4005 | }, 4006 | { 4007 | "abstract": true, 4008 | "immutable": true, 4009 | "locationInModule": { 4010 | "filename": "lib/index.ts", 4011 | "line": 53 4012 | }, 4013 | "name": "timeZone", 4014 | "optional": true, 4015 | "type": { 4016 | "primitive": "string" 4017 | } 4018 | }, 4019 | { 4020 | "abstract": true, 4021 | "immutable": true, 4022 | "locationInModule": { 4023 | "filename": "lib/index.ts", 4024 | "line": 50 4025 | }, 4026 | "name": "timeZoneName", 4027 | "optional": true, 4028 | "type": { 4029 | "primitive": "string" 4030 | } 4031 | }, 4032 | { 4033 | "abstract": true, 4034 | "immutable": true, 4035 | "locationInModule": { 4036 | "filename": "lib/index.ts", 4037 | "line": 42 4038 | }, 4039 | "name": "weekday", 4040 | "optional": true, 4041 | "type": { 4042 | "primitive": "string" 4043 | } 4044 | }, 4045 | { 4046 | "abstract": true, 4047 | "immutable": true, 4048 | "locationInModule": { 4049 | "filename": "lib/index.ts", 4050 | "line": 44 4051 | }, 4052 | "name": "year", 4053 | "optional": true, 4054 | "type": { 4055 | "primitive": "string" 4056 | } 4057 | } 4058 | ], 4059 | "symbolId": "lib/index:DateTimeFormatOptions" 4060 | }, 4061 | "@thedesignium/cdk-log-notifier.ILogNotifier": { 4062 | "assembly": "@thedesignium/cdk-log-notifier", 4063 | "fqn": "@thedesignium/cdk-log-notifier.ILogNotifier", 4064 | "kind": "interface", 4065 | "locationInModule": { 4066 | "filename": "lib/index.ts", 4067 | "line": 13 4068 | }, 4069 | "methods": [ 4070 | { 4071 | "abstract": true, 4072 | "locationInModule": { 4073 | "filename": "lib/index.ts", 4074 | "line": 16 4075 | }, 4076 | "name": "watch", 4077 | "parameters": [ 4078 | { 4079 | "name": "logGroup", 4080 | "type": { 4081 | "fqn": "aws-cdk-lib.aws_logs.ILogGroup" 4082 | } 4083 | } 4084 | ] 4085 | } 4086 | ], 4087 | "name": "ILogNotifier", 4088 | "properties": [ 4089 | { 4090 | "abstract": true, 4091 | "immutable": true, 4092 | "locationInModule": { 4093 | "filename": "lib/index.ts", 4094 | "line": 14 4095 | }, 4096 | "name": "destinationFunctionArn", 4097 | "type": { 4098 | "primitive": "string" 4099 | } 4100 | }, 4101 | { 4102 | "abstract": true, 4103 | "immutable": true, 4104 | "locationInModule": { 4105 | "filename": "lib/index.ts", 4106 | "line": 15 4107 | }, 4108 | "name": "filterPattern", 4109 | "type": { 4110 | "fqn": "aws-cdk-lib.aws_logs.IFilterPattern" 4111 | } 4112 | } 4113 | ], 4114 | "symbolId": "lib/index:ILogNotifier" 4115 | }, 4116 | "@thedesignium/cdk-log-notifier.LogNotifier": { 4117 | "assembly": "@thedesignium/cdk-log-notifier", 4118 | "base": "aws-cdk-lib.Resource", 4119 | "fqn": "@thedesignium/cdk-log-notifier.LogNotifier", 4120 | "initializer": { 4121 | "locationInModule": { 4122 | "filename": "lib/index.ts", 4123 | "line": 66 4124 | }, 4125 | "parameters": [ 4126 | { 4127 | "name": "scope", 4128 | "type": { 4129 | "fqn": "constructs.Construct" 4130 | } 4131 | }, 4132 | { 4133 | "name": "id", 4134 | "type": { 4135 | "primitive": "string" 4136 | } 4137 | }, 4138 | { 4139 | "name": "props", 4140 | "type": { 4141 | "fqn": "@thedesignium/cdk-log-notifier.LogNotifierProps" 4142 | } 4143 | } 4144 | ] 4145 | }, 4146 | "interfaces": [ 4147 | "@thedesignium/cdk-log-notifier.ILogNotifier" 4148 | ], 4149 | "kind": "class", 4150 | "locationInModule": { 4151 | "filename": "lib/index.ts", 4152 | "line": 63 4153 | }, 4154 | "methods": [ 4155 | { 4156 | "locationInModule": { 4157 | "filename": "lib/index.ts", 4158 | "line": 96 4159 | }, 4160 | "name": "fromAttributes", 4161 | "parameters": [ 4162 | { 4163 | "name": "scope", 4164 | "type": { 4165 | "fqn": "constructs.Construct" 4166 | } 4167 | }, 4168 | { 4169 | "name": "id", 4170 | "type": { 4171 | "primitive": "string" 4172 | } 4173 | }, 4174 | { 4175 | "name": "attrs", 4176 | "type": { 4177 | "fqn": "@thedesignium/cdk-log-notifier.LogNotifierAttributes" 4178 | } 4179 | } 4180 | ], 4181 | "returns": { 4182 | "type": { 4183 | "fqn": "@thedesignium/cdk-log-notifier.ILogNotifier" 4184 | } 4185 | }, 4186 | "static": true 4187 | }, 4188 | { 4189 | "locationInModule": { 4190 | "filename": "lib/index.ts", 4191 | "line": 31 4192 | }, 4193 | "name": "watch", 4194 | "overrides": "@thedesignium/cdk-log-notifier.ILogNotifier", 4195 | "parameters": [ 4196 | { 4197 | "name": "logGroup", 4198 | "type": { 4199 | "fqn": "aws-cdk-lib.aws_logs.ILogGroup" 4200 | } 4201 | } 4202 | ] 4203 | } 4204 | ], 4205 | "name": "LogNotifier", 4206 | "properties": [ 4207 | { 4208 | "immutable": true, 4209 | "locationInModule": { 4210 | "filename": "lib/index.ts", 4211 | "line": 25 4212 | }, 4213 | "name": "attributes", 4214 | "type": { 4215 | "fqn": "@thedesignium/cdk-log-notifier.LogNotifierAttributes" 4216 | } 4217 | }, 4218 | { 4219 | "immutable": true, 4220 | "locationInModule": { 4221 | "filename": "lib/index.ts", 4222 | "line": 22 4223 | }, 4224 | "name": "destinationFunctionArn", 4225 | "overrides": "@thedesignium/cdk-log-notifier.ILogNotifier", 4226 | "type": { 4227 | "primitive": "string" 4228 | } 4229 | }, 4230 | { 4231 | "immutable": true, 4232 | "locationInModule": { 4233 | "filename": "lib/index.ts", 4234 | "line": 64 4235 | }, 4236 | "name": "filterPattern", 4237 | "overrides": "@thedesignium/cdk-log-notifier.ILogNotifier", 4238 | "type": { 4239 | "fqn": "aws-cdk-lib.aws_logs.IFilterPattern" 4240 | } 4241 | }, 4242 | { 4243 | "locationInModule": { 4244 | "filename": "lib/index.ts", 4245 | "line": 65 4246 | }, 4247 | "name": "handleLogFunc", 4248 | "protected": true, 4249 | "type": { 4250 | "fqn": "aws-cdk-lib.aws_lambda.IFunction" 4251 | } 4252 | } 4253 | ], 4254 | "symbolId": "lib/index:LogNotifier" 4255 | }, 4256 | "@thedesignium/cdk-log-notifier.LogNotifierAttributes": { 4257 | "assembly": "@thedesignium/cdk-log-notifier", 4258 | "datatype": true, 4259 | "fqn": "@thedesignium/cdk-log-notifier.LogNotifierAttributes", 4260 | "kind": "interface", 4261 | "locationInModule": { 4262 | "filename": "lib/index.ts", 4263 | "line": 8 4264 | }, 4265 | "name": "LogNotifierAttributes", 4266 | "properties": [ 4267 | { 4268 | "abstract": true, 4269 | "immutable": true, 4270 | "locationInModule": { 4271 | "filename": "lib/index.ts", 4272 | "line": 9 4273 | }, 4274 | "name": "destinationFunctionArn", 4275 | "type": { 4276 | "primitive": "string" 4277 | } 4278 | }, 4279 | { 4280 | "abstract": true, 4281 | "immutable": true, 4282 | "locationInModule": { 4283 | "filename": "lib/index.ts", 4284 | "line": 10 4285 | }, 4286 | "name": "filterPattern", 4287 | "type": { 4288 | "fqn": "aws-cdk-lib.aws_logs.IFilterPattern" 4289 | } 4290 | } 4291 | ], 4292 | "symbolId": "lib/index:LogNotifierAttributes" 4293 | }, 4294 | "@thedesignium/cdk-log-notifier.LogNotifierProps": { 4295 | "assembly": "@thedesignium/cdk-log-notifier", 4296 | "datatype": true, 4297 | "fqn": "@thedesignium/cdk-log-notifier.LogNotifierProps", 4298 | "kind": "interface", 4299 | "locationInModule": { 4300 | "filename": "lib/index.ts", 4301 | "line": 57 4302 | }, 4303 | "name": "LogNotifierProps", 4304 | "properties": [ 4305 | { 4306 | "abstract": true, 4307 | "immutable": true, 4308 | "locationInModule": { 4309 | "filename": "lib/index.ts", 4310 | "line": 59 4311 | }, 4312 | "name": "filterPattern", 4313 | "type": { 4314 | "fqn": "aws-cdk-lib.aws_logs.IFilterPattern" 4315 | } 4316 | }, 4317 | { 4318 | "abstract": true, 4319 | "immutable": true, 4320 | "locationInModule": { 4321 | "filename": "lib/index.ts", 4322 | "line": 60 4323 | }, 4324 | "name": "slackIncomingWebhookUrl", 4325 | "type": { 4326 | "primitive": "string" 4327 | } 4328 | }, 4329 | { 4330 | "abstract": true, 4331 | "immutable": true, 4332 | "locationInModule": { 4333 | "filename": "lib/index.ts", 4334 | "line": 58 4335 | }, 4336 | "name": "dateTimeFormatOptions", 4337 | "optional": true, 4338 | "type": { 4339 | "fqn": "@thedesignium/cdk-log-notifier.DateTimeFormatOptions" 4340 | } 4341 | } 4342 | ], 4343 | "symbolId": "lib/index:LogNotifierProps" 4344 | } 4345 | }, 4346 | "version": "2.2.0", 4347 | "fingerprint": "7O9aUc8dF4Mncobcn9yrPuTgVbvnlz6QRRx3BXmGvCA=" 4348 | } -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | *.png 2 | *.tsbuildinfo 3 | node_modules 4 | 5 | 6 | # Exclude jsii outdir 7 | dist 8 | 9 | # Include .jsii and .jsii.gz 10 | !.jsii 11 | !.jsii.gz 12 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2020 TheDesignium, Inc. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # cdk-log-notifier: Filter CloudWatch logs and post to Slack. 2 | 3 | The AWS CDK Construct to build a system that gather CloudWatch logs, filter and post to Slack. 4 | 5 | ![screenshot](https://i.imgur.com/Qx2A9n2.png) 6 | 7 | ## Example Usage 8 | 9 | Watch the all logs contains "ERROR" from Lambda functions. 10 | 11 | ```typescript 12 | const logNotifier = new LogNotifier(this, 'logNotifier', { 13 | filterPattern: logs.FilterPattern.allTerms('ERROR'), 14 | slackIncomingWebhookUrl: 'https://hooks.slack.com/...', // Use yours. 15 | }); 16 | 17 | logNotifier.watch(lambdaFunc1.logGroup); 18 | logNotifier.watch(lambdaFunc2.logGroup); 19 | ``` 20 | 21 | ## Installation 22 | 23 | ```sh 24 | npm i @thedesignium/cdk-log-notifier 25 | ``` 26 | 27 | ## API Reference 28 | 29 | ### Class: `LogNotifier` 30 | 31 | ```typescript 32 | new LogNotifier(scope: cdk.Construct, id: string, props: LogNotifierProps) 33 | ``` 34 | 35 | The properties in `props`: 36 | 37 | - `filterPattern`: The [FilterPattern object in aws-cloudwatch module](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-logs.FilterPattern.html). The logs is filtered as specified here. *Required.* 38 | - `slackIncomingWebhookUrl`: The [Incoming Webhook URL](https://api.slack.com/messaging/webhooks) of Slack. Create for the Slack channel the logs should be posted. *Required.* 39 | - `dateTimeFormatOptions`: The [arguments of the DateTimeFormat constructor](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#parameters), used to format the datetime which shown at the bottom of the Slack message. If omitted, it's formatted like `12/20, 3:00:00 AM UTC`. *Optional.* 40 | 41 | Example: 42 | 43 | ```typescript 44 | dateTimeFormatOptions: { 45 | locales: 'ja-JP', 46 | timeZone: 'Asia/Tokyo', 47 | month: 'numeric', 48 | day: 'numeric', 49 | hour: 'numeric', 50 | minute: 'numeric', 51 | second: 'numeric', 52 | } 53 | ``` 54 | 55 | #### Static Method: `fromAttributes` 56 | 57 | ```typescript 58 | LogNotifier.fromAttributes(scope: cdk.Construct, id: string, attrs: LogNotifierAttributes): LogNotifier 59 | ``` 60 | 61 | Instantiate from the attributes. Put the value of `logNotifier.attributes` as `attrs` parameter. 62 | 63 | #### Method: `watch` 64 | 65 | ```typescript 66 | logNotifier.watch(logGroup: logs.LogGroup): void 67 | ``` 68 | 69 | Add the log group to watch list to notify. The logs in the watched log groups are filtered by the filterPattern and posted to Slack. 70 | 71 | #### Property: `attributes` 72 | 73 | ```typescript 74 | attributes: LogNotifierAttributes 75 | ``` 76 | 77 | To use with `LogNotifier.fromAttributes()`. 78 | 79 | ## Containing Resources 80 | 81 | - [logs.SubscriptionFilter](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-logs.SubscriptionFilter.html) 82 | - [lambda.Function](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-lambda.Function.html) 83 | 84 | ## Limitation 85 | 86 | The `watch()` method attaches a [Subscription](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Subscriptions.html) to the subject logGroup. The number of subscription can be attached to a logGroup, however, is only one. So it'll fail if the logGroup has another subscription already. Similary, the watched logGroup can't be attached another subscription nor watched from another LogNotifier. 87 | 88 | ## Motivation 89 | 90 | There were 2 requirements: 91 | 92 | 1. Notice the all logs produced by `console.error()`(not only the crash report such InvocationError) 93 | 2. Jump easily to CloudWatch via link 94 | 95 | We tried `Lambda's error metric + CloudWatch Alarm + Chatbot` and `CloudWatch Metrics Filter + CloudWatch Alarm + Chatbot`, but the former system don't satisfy [1] and the latter system don't satisfy [2]. That's why we need this. 96 | 97 | ## FAQ 98 | 99 | ### Cross Stack? 100 | 101 | Possible. Export all values in `LogNotifier.prototype.attributes`, import it and use `LogNotifier.fromAttributes()` in another Stack. 102 | 103 | ### How can I customize the Slack bot icon or name? 104 | 105 | You can set at [Slack App setting page](https://api.slack.com/apps), or Incoming Webhook configuration page if you use [Legacy Incoming Webhook](https://api.slack.com/legacy/custom-integrations/incoming-webhooks). 106 | 107 | ### No support for other languages than TypeScript? 108 | 109 | Supports Python, Java, Go and .NET. 110 | -------------------------------------------------------------------------------- /lib/index.ts: -------------------------------------------------------------------------------- 1 | import * as cdk from 'aws-cdk-lib'; 2 | import * as lambda from 'aws-cdk-lib/aws-lambda'; 3 | import * as logs from 'aws-cdk-lib/aws-logs'; 4 | import * as logsDestinations from 'aws-cdk-lib/aws-logs-destinations'; 5 | import * as constructs from 'constructs'; 6 | import * as path from 'path'; 7 | 8 | export interface LogNotifierAttributes { 9 | readonly destinationFunctionArn: string; 10 | readonly filterPattern: logs.IFilterPattern; 11 | } 12 | 13 | export interface ILogNotifier { 14 | readonly destinationFunctionArn: string; 15 | readonly filterPattern: logs.IFilterPattern; 16 | watch(logGroup: logs.ILogGroup): void; 17 | }; 18 | 19 | abstract class LogNotifierImpl extends cdk.Resource implements ILogNotifier { 20 | abstract readonly filterPattern: logs.IFilterPattern; 21 | protected abstract readonly handleLogFunc: lambda.IFunction; 22 | get destinationFunctionArn(): string { 23 | return this.handleLogFunc.functionArn; 24 | } 25 | get attributes(): LogNotifierAttributes { 26 | return { 27 | destinationFunctionArn: this.destinationFunctionArn, 28 | filterPattern: this.filterPattern, 29 | }; 30 | } 31 | watch(logGroup: logs.ILogGroup) { 32 | new logs.SubscriptionFilter(this, `${logGroup.node.id}SubscriptionFilter`, { 33 | destination: new logsDestinations.LambdaDestination(this.handleLogFunc), 34 | filterPattern: this.filterPattern, 35 | logGroup, 36 | }); 37 | } 38 | } 39 | 40 | export interface DateTimeFormatOptions { 41 | readonly localeMatcher?: "best fit" | "lookup" | undefined; 42 | readonly weekday?: "long" | "short" | "narrow" | undefined; 43 | readonly era?: "long" | "short" | "narrow" | undefined; 44 | readonly year?: "numeric" | "2-digit" | undefined; 45 | readonly month?: "numeric" | "2-digit" | "long" | "short" | "narrow" | undefined; 46 | readonly day?: "numeric" | "2-digit" | undefined; 47 | readonly hour?: "numeric" | "2-digit" | undefined; 48 | readonly minute?: "numeric" | "2-digit" | undefined; 49 | readonly second?: "numeric" | "2-digit" | undefined; 50 | readonly timeZoneName?: "short" | "long" | "shortOffset" | "longOffset" | "shortGeneric" | "longGeneric" | undefined; 51 | readonly formatMatcher?: "best fit" | "basic" | undefined; 52 | readonly hour12?: boolean | undefined; 53 | readonly timeZone?: string | undefined; 54 | readonly locales?: string | string[]; 55 | }; 56 | 57 | export interface LogNotifierProps { 58 | readonly dateTimeFormatOptions?: DateTimeFormatOptions; 59 | readonly filterPattern: logs.IFilterPattern; 60 | readonly slackIncomingWebhookUrl: string; 61 | } 62 | 63 | export class LogNotifier extends LogNotifierImpl { 64 | readonly filterPattern: logs.IFilterPattern; 65 | protected handleLogFunc: lambda.IFunction; 66 | constructor( 67 | scope: constructs.Construct, 68 | id: string, 69 | props: LogNotifierProps, 70 | ) { 71 | super(scope, id, { physicalName: id }); 72 | 73 | const dateTimeFormatOptions = props.dateTimeFormatOptions ?? { 74 | locales: 'en-US', 75 | timeZone: 'UTC', 76 | timeZoneName: 'short', 77 | month: 'numeric', 78 | day: 'numeric', 79 | hour: 'numeric', 80 | minute: 'numeric', 81 | second: 'numeric', 82 | }; 83 | const dateTimeFormat = new Intl.DateTimeFormat(dateTimeFormatOptions.locales, dateTimeFormatOptions); 84 | 85 | this.filterPattern = props.filterPattern; 86 | this.handleLogFunc = new lambda.Function(this, 'LogHandler', { 87 | code: lambda.Code.fromAsset(path.join(__dirname, 'lambda-log-handler')), 88 | runtime: lambda.Runtime.NODEJS_LATEST, 89 | handler: 'index.handler', 90 | environment: { 91 | 'RESOLVED_DATETIME_FORMAT_OPTIONS': JSON.stringify(dateTimeFormat.resolvedOptions()), 92 | 'SLACK_INCOMING_WEBHOOK_URL': props.slackIncomingWebhookUrl, 93 | }, 94 | }); 95 | } 96 | static fromAttributes(scope: constructs.Construct, id: string, attrs: LogNotifierAttributes): ILogNotifier { 97 | class LogNotifierFromAttributes extends LogNotifierImpl { 98 | filterPattern = attrs.filterPattern; 99 | protected handleLogFunc; 100 | constructor() { 101 | super(scope, id, { physicalName: id }); 102 | this.handleLogFunc = lambda.Function.fromFunctionAttributes(this, 'DestinationFunc', { 103 | functionArn: attrs.destinationFunctionArn, 104 | sameEnvironment: true, 105 | }); 106 | } 107 | } 108 | return new LogNotifierFromAttributes(); 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /lib/lambda-log-handler/index.ts: -------------------------------------------------------------------------------- 1 | import * as zlib from 'zlib'; 2 | import * as https from 'https'; 3 | import type * as http from 'http'; 4 | 5 | if (process.env.SLACK_INCOMING_WEBHOOK_URL === undefined) throw 'SLACK_INCOMING_WEBHOOK_URL is not set.'; 6 | const slackIncomingWebhookUrl = process.env.SLACK_INCOMING_WEBHOOK_URL; 7 | 8 | if (process.env.RESOLVED_DATETIME_FORMAT_OPTIONS === undefined) throw 'RESOLVED_DATETIME_FORMAT_OPTIONS is not set.'; 9 | const resolvedDateTimeFormatOptionsStr = process.env.RESOLVED_DATETIME_FORMAT_OPTIONS; 10 | 11 | function isResolvedDateTimeFormatOptions(v: any): v is Intl.ResolvedDateTimeFormatOptions { 12 | if (typeof v.locale !== 'string') return false; 13 | if (typeof v.calendar !== 'string') return false; 14 | if (typeof v.numberingSystem !== 'string') return false; 15 | if (typeof v.timeZone !== 'string') return false; 16 | if (v.hour12 !== undefined && typeof v.hour12 !== 'boolean') return false; 17 | if (v.weekday !== undefined && typeof v.weekday !== 'string') return false; 18 | if (v.era !== undefined && typeof v.era !== 'string') return false; 19 | if (v.year !== undefined && typeof v.year !== 'string') return false; 20 | if (v.month !== undefined && typeof v.month !== 'string') return false; 21 | if (v.day !== undefined && typeof v.day !== 'string') return false; 22 | if (v.hour !== undefined && typeof v.hour !== 'string') return false; 23 | if (v.minute !== undefined && typeof v.minute !== 'string') return false; 24 | if (v.second !== undefined && typeof v.second !== 'string') return false; 25 | if (v.timeZoneName !== undefined && typeof v.timeZoneName !== 'string') return false; 26 | return true; 27 | } 28 | 29 | const resolvedDateTimeFormatOptions = JSON.parse(resolvedDateTimeFormatOptionsStr); 30 | if (!isResolvedDateTimeFormatOptions(resolvedDateTimeFormatOptions)) throw 'RESOLVED_DATETIME_FORMAT_OPTIONS is invalid.'; 31 | 32 | interface CloudWatchLogsEvent { 33 | awslogs: { 34 | data: string; 35 | }; 36 | } 37 | 38 | interface LogData { 39 | logEvents: { 40 | id: string; 41 | timestamp: number; 42 | message: string; 43 | }[]; 44 | logGroup: string; 45 | logStream: string; 46 | messageType: string; 47 | } 48 | 49 | function isLogData(v: any): v is LogData { 50 | if (!Array.isArray(v.logEvents)) return false; 51 | for (const logEvent of v.logEvents) { 52 | if (typeof logEvent.id !== 'string') return false; 53 | if (typeof logEvent.timestamp !== 'number') return false; 54 | if (typeof logEvent.message !== 'string') return false; 55 | } 56 | if (typeof v.logGroup !== 'string') return false; 57 | if (typeof v.logStream !== 'string') return false; 58 | if (typeof v.messageType !== 'string') return false; 59 | return true; 60 | } 61 | 62 | export const handler = async (event: CloudWatchLogsEvent) => { 63 | console.log('Received Event:', JSON.stringify(event)); 64 | 65 | const logData = JSON.parse(zlib.gunzipSync(Buffer.from(event.awslogs.data, 'base64')).toString()); 66 | 67 | if (!isLogData(logData)) { 68 | console.warn('Unregocgnizable message is received. Ignoreing.'); 69 | return; 70 | } 71 | 72 | for (const logEvent of logData.logEvents) { 73 | let msg = logEvent.message; 74 | try { 75 | const jsonRegex = /{.*}/; 76 | const mayJson = msg.match(jsonRegex)?.[0]; 77 | if (!mayJson) throw ''; 78 | const json = JSON.parse(mayJson); 79 | msg = msg.replace(jsonRegex, JSON.stringify(json, null, 2)); 80 | } catch (e) { } 81 | 82 | let mainPostText = `${logData.logGroup}\n\`\`\`${msg}\n\`\`\``; 83 | if (mainPostText.length > 3000) { 84 | const ellipsisMsg = '\n... Too long. See the rest at CloudWatch.'; 85 | msg = msg.substring(0, 3000 + msg.length - mainPostText.length - ellipsisMsg.length); 86 | mainPostText = `${logData.logGroup}\n\`\`\`${msg}\n${ellipsisMsg}\`\`\``; 87 | } 88 | 89 | const resp = await fetch(slackIncomingWebhookUrl, { 90 | method: 'POST', 91 | headers: { 92 | 'content-type': 'application/json', 93 | }, 94 | body: JSON.stringify({ 95 | "blocks": [ 96 | { 97 | "type": "section", 98 | "text": { 99 | "type": "mrkdwn", 100 | "text": mainPostText, 101 | }, 102 | }, 103 | { 104 | "type": "context", 105 | "elements": [ 106 | { 107 | "type": "plain_text", 108 | "text": new Date(logEvent.timestamp).toLocaleString(resolvedDateTimeFormatOptions.locale, resolvedDateTimeFormatOptions as Intl.DateTimeFormatOptions), 109 | }, 110 | { 111 | "type": "mrkdwn", 112 | "text": ``, 113 | }, 114 | ], 115 | }, 116 | ], 117 | }), 118 | }); 119 | 120 | if (!resp.ok) { 121 | console.error(`Posting message failed: status ${resp.status}; ${await resp.text()}`); 122 | } 123 | } 124 | }; 125 | 126 | async function fetch(url: string, props: https.RequestOptions & { body: string }) { 127 | const res = await new Promise((resolve, reject) => { 128 | const req = https.request(url, props, resolve); 129 | req.on('error', reject); 130 | req.end(props.body); 131 | }); 132 | 133 | const bodyPromise = new Promise((resolve) => { 134 | let body = ''; 135 | res.on('data', dat => body += dat); 136 | res.on('end', () => resolve(body)); 137 | }); 138 | 139 | return { 140 | ok: res.statusCode && res.statusCode >= 200 && res.statusCode < 300, 141 | status: res.statusCode, 142 | text: () => bodyPromise, 143 | }; 144 | } 145 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@thedesignium/cdk-log-notifier", 3 | "version": "2.2.1", 4 | "main": "lib/index.js", 5 | "license": "MIT", 6 | "keywords": [ 7 | "awscdk" 8 | ], 9 | "types": "lib/index.d.ts", 10 | "scripts": { 11 | "build": "jsii", 12 | "watch": "jsii -w", 13 | "package": "jsii-pacmak", 14 | "test": "vitest" 15 | }, 16 | "author": { 17 | "name": "Yuki Ito" 18 | }, 19 | "repository": { 20 | "url": "https://github.com/TheDesignium/cdk-log-notifier.git", 21 | "type": "git" 22 | }, 23 | "jsii": { 24 | "outdir": "dist", 25 | "targets": { 26 | "dotnet": { 27 | "namespace": "TheDesignium.CDKLogNotifier", 28 | "packageId": "TheDesignium.CDKLogNotifier" 29 | }, 30 | "java": { 31 | "package": "com.thedesignium.cdklognotifier", 32 | "maven": { 33 | "groupId": "com.thedesignium", 34 | "artifactId": "cdk-log-notifier" 35 | } 36 | }, 37 | "python": { 38 | "distName": "cdk-log-notifier", 39 | "module": "cdk_log_notifier" 40 | }, 41 | "go": { 42 | "moduleName": "github.com/TheDesignium/cdk-log-notifier-go", 43 | "packageName": "lognotifier" 44 | } 45 | } 46 | }, 47 | "bundledDependencies": [ 48 | "change-case" 49 | ], 50 | "publishConfig": { 51 | "access": "public" 52 | }, 53 | "dependencies": { 54 | "change-case": "^5.4.4" 55 | }, 56 | "devDependencies": { 57 | "@types/node": "22.0.0", 58 | "aws-cdk-lib": "2.177.0", 59 | "constructs": "10.3.0", 60 | "jest-cdk-snapshot": "^2.2.2", 61 | "jsii": "^5.4.46", 62 | "jsii-pacmak": "^1.101.0", 63 | "jsii-rosetta": "^5.4.28", 64 | "publib": "^0.2.806", 65 | "reflect-metadata": "^0.2.2", 66 | "typescript": "^5.5.4", 67 | "vitest": "^2.0.4" 68 | }, 69 | "peerDependencies": { 70 | "aws-cdk-lib": "^2.150.0", 71 | "constructs": "^10.3.0" 72 | }, 73 | "bundleDependencies": [ 74 | "change-case" 75 | ] 76 | } 77 | -------------------------------------------------------------------------------- /tests/__snapshots__/snapshot.test.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`snapshot test 1`] = ` 4 | { 5 | "Mappings": { 6 | "LatestNodeRuntimeMap": { 7 | "af-south-1": { 8 | "value": "nodejs20.x", 9 | }, 10 | "ap-east-1": { 11 | "value": "nodejs20.x", 12 | }, 13 | "ap-northeast-1": { 14 | "value": "nodejs20.x", 15 | }, 16 | "ap-northeast-2": { 17 | "value": "nodejs20.x", 18 | }, 19 | "ap-northeast-3": { 20 | "value": "nodejs20.x", 21 | }, 22 | "ap-south-1": { 23 | "value": "nodejs20.x", 24 | }, 25 | "ap-south-2": { 26 | "value": "nodejs20.x", 27 | }, 28 | "ap-southeast-1": { 29 | "value": "nodejs20.x", 30 | }, 31 | "ap-southeast-2": { 32 | "value": "nodejs20.x", 33 | }, 34 | "ap-southeast-3": { 35 | "value": "nodejs20.x", 36 | }, 37 | "ap-southeast-4": { 38 | "value": "nodejs20.x", 39 | }, 40 | "ap-southeast-5": { 41 | "value": "nodejs20.x", 42 | }, 43 | "ap-southeast-7": { 44 | "value": "nodejs20.x", 45 | }, 46 | "ca-central-1": { 47 | "value": "nodejs20.x", 48 | }, 49 | "ca-west-1": { 50 | "value": "nodejs20.x", 51 | }, 52 | "cn-north-1": { 53 | "value": "nodejs18.x", 54 | }, 55 | "cn-northwest-1": { 56 | "value": "nodejs18.x", 57 | }, 58 | "eu-central-1": { 59 | "value": "nodejs20.x", 60 | }, 61 | "eu-central-2": { 62 | "value": "nodejs20.x", 63 | }, 64 | "eu-isoe-west-1": { 65 | "value": "nodejs18.x", 66 | }, 67 | "eu-north-1": { 68 | "value": "nodejs20.x", 69 | }, 70 | "eu-south-1": { 71 | "value": "nodejs20.x", 72 | }, 73 | "eu-south-2": { 74 | "value": "nodejs20.x", 75 | }, 76 | "eu-west-1": { 77 | "value": "nodejs20.x", 78 | }, 79 | "eu-west-2": { 80 | "value": "nodejs20.x", 81 | }, 82 | "eu-west-3": { 83 | "value": "nodejs20.x", 84 | }, 85 | "il-central-1": { 86 | "value": "nodejs20.x", 87 | }, 88 | "me-central-1": { 89 | "value": "nodejs20.x", 90 | }, 91 | "me-south-1": { 92 | "value": "nodejs20.x", 93 | }, 94 | "mx-central-1": { 95 | "value": "nodejs20.x", 96 | }, 97 | "sa-east-1": { 98 | "value": "nodejs20.x", 99 | }, 100 | "us-east-1": { 101 | "value": "nodejs20.x", 102 | }, 103 | "us-east-2": { 104 | "value": "nodejs20.x", 105 | }, 106 | "us-gov-east-1": { 107 | "value": "nodejs18.x", 108 | }, 109 | "us-gov-west-1": { 110 | "value": "nodejs18.x", 111 | }, 112 | "us-iso-east-1": { 113 | "value": "nodejs18.x", 114 | }, 115 | "us-iso-west-1": { 116 | "value": "nodejs18.x", 117 | }, 118 | "us-isob-east-1": { 119 | "value": "nodejs18.x", 120 | }, 121 | "us-west-1": { 122 | "value": "nodejs20.x", 123 | }, 124 | "us-west-2": { 125 | "value": "nodejs20.x", 126 | }, 127 | }, 128 | }, 129 | "Resources": { 130 | "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A": { 131 | "DependsOn": [ 132 | "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB", 133 | "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", 134 | ], 135 | "Properties": { 136 | "Code": Any, 137 | "Handler": "index.handler", 138 | "Role": { 139 | "Fn::GetAtt": [ 140 | "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", 141 | "Arn", 142 | ], 143 | }, 144 | "Runtime": { 145 | "Fn::FindInMap": [ 146 | "LatestNodeRuntimeMap", 147 | { 148 | "Ref": "AWS::Region", 149 | }, 150 | "value", 151 | ], 152 | }, 153 | "Timeout": 900, 154 | }, 155 | "Type": "AWS::Lambda::Function", 156 | }, 157 | "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB": { 158 | "Properties": { 159 | "AssumeRolePolicyDocument": { 160 | "Statement": [ 161 | { 162 | "Action": "sts:AssumeRole", 163 | "Effect": "Allow", 164 | "Principal": { 165 | "Service": "lambda.amazonaws.com", 166 | }, 167 | }, 168 | ], 169 | "Version": "2012-10-17", 170 | }, 171 | "ManagedPolicyArns": [ 172 | { 173 | "Fn::Join": [ 174 | "", 175 | [ 176 | "arn:", 177 | { 178 | "Ref": "AWS::Partition", 179 | }, 180 | ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", 181 | ], 182 | ], 183 | }, 184 | ], 185 | }, 186 | "Type": "AWS::IAM::Role", 187 | }, 188 | "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB": { 189 | "Properties": { 190 | "PolicyDocument": { 191 | "Statement": [ 192 | { 193 | "Action": [ 194 | "logs:PutRetentionPolicy", 195 | "logs:DeleteRetentionPolicy", 196 | ], 197 | "Effect": "Allow", 198 | "Resource": "*", 199 | }, 200 | ], 201 | "Version": "2012-10-17", 202 | }, 203 | "PolicyName": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB", 204 | "Roles": [ 205 | { 206 | "Ref": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", 207 | }, 208 | ], 209 | }, 210 | "Type": "AWS::IAM::Policy", 211 | }, 212 | "lambda8B5974B5": { 213 | "DependsOn": [ 214 | "lambdaServiceRole494E4CA6", 215 | ], 216 | "Properties": { 217 | "Code": Any, 218 | "Handler": "index.handler", 219 | "Role": { 220 | "Fn::GetAtt": [ 221 | "lambdaServiceRole494E4CA6", 222 | "Arn", 223 | ], 224 | }, 225 | "Runtime": "nodejs20.x", 226 | }, 227 | "Type": "AWS::Lambda::Function", 228 | }, 229 | "lambdaLogRetention4CE10F74": { 230 | "Properties": { 231 | "LogGroupName": { 232 | "Fn::Join": [ 233 | "", 234 | [ 235 | "/aws/lambda/", 236 | { 237 | "Ref": "lambda8B5974B5", 238 | }, 239 | ], 240 | ], 241 | }, 242 | "ServiceToken": { 243 | "Fn::GetAtt": [ 244 | "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", 245 | "Arn", 246 | ], 247 | }, 248 | }, 249 | "Type": "Custom::LogRetention", 250 | }, 251 | "lambdaServiceRole494E4CA6": { 252 | "Properties": { 253 | "AssumeRolePolicyDocument": { 254 | "Statement": [ 255 | { 256 | "Action": "sts:AssumeRole", 257 | "Effect": "Allow", 258 | "Principal": { 259 | "Service": "lambda.amazonaws.com", 260 | }, 261 | }, 262 | ], 263 | "Version": "2012-10-17", 264 | }, 265 | "ManagedPolicyArns": [ 266 | { 267 | "Fn::Join": [ 268 | "", 269 | [ 270 | "arn:", 271 | { 272 | "Ref": "AWS::Partition", 273 | }, 274 | ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", 275 | ], 276 | ], 277 | }, 278 | ], 279 | }, 280 | "Type": "AWS::IAM::Role", 281 | }, 282 | "logNotifierLogHandler893A9F2E": { 283 | "DependsOn": [ 284 | "logNotifierLogHandlerServiceRole20A6D23C", 285 | ], 286 | "Properties": { 287 | "Code": Any, 288 | "Environment": { 289 | "Variables": { 290 | "RESOLVED_DATETIME_FORMAT_OPTIONS": "{"locale":"en-US","calendar":"gregory","numberingSystem":"latn","timeZone":"UTC","hourCycle":"h12","hour12":true,"month":"numeric","day":"numeric","hour":"numeric","minute":"2-digit","second":"2-digit","timeZoneName":"short"}", 291 | "SLACK_INCOMING_WEBHOOK_URL": "https://hooks.slack.com/test", 292 | }, 293 | }, 294 | "Handler": "index.handler", 295 | "Role": { 296 | "Fn::GetAtt": [ 297 | "logNotifierLogHandlerServiceRole20A6D23C", 298 | "Arn", 299 | ], 300 | }, 301 | "Runtime": "nodejs18.x", 302 | }, 303 | "Type": "AWS::Lambda::Function", 304 | }, 305 | "logNotifierLogHandlerServiceRole20A6D23C": { 306 | "Properties": { 307 | "AssumeRolePolicyDocument": { 308 | "Statement": [ 309 | { 310 | "Action": "sts:AssumeRole", 311 | "Effect": "Allow", 312 | "Principal": { 313 | "Service": "lambda.amazonaws.com", 314 | }, 315 | }, 316 | ], 317 | "Version": "2012-10-17", 318 | }, 319 | "ManagedPolicyArns": [ 320 | { 321 | "Fn::Join": [ 322 | "", 323 | [ 324 | "arn:", 325 | { 326 | "Ref": "AWS::Partition", 327 | }, 328 | ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", 329 | ], 330 | ], 331 | }, 332 | ], 333 | }, 334 | "Type": "AWS::IAM::Role", 335 | }, 336 | "logNotifierlambdaLogGroupSubscriptionFilterB8C78BD2": { 337 | "DependsOn": [ 338 | "logNotifierlambdaLogGroupSubscriptionFilterCanInvokeLambda52A75F3B", 339 | ], 340 | "Properties": { 341 | "DestinationArn": { 342 | "Fn::GetAtt": [ 343 | "logNotifierLogHandler893A9F2E", 344 | "Arn", 345 | ], 346 | }, 347 | "FilterPattern": ""ERROR"", 348 | "LogGroupName": { 349 | "Fn::GetAtt": [ 350 | "lambdaLogRetention4CE10F74", 351 | "LogGroupName", 352 | ], 353 | }, 354 | }, 355 | "Type": "AWS::Logs::SubscriptionFilter", 356 | }, 357 | "logNotifierlambdaLogGroupSubscriptionFilterCanInvokeLambda52A75F3B": { 358 | "Properties": { 359 | "Action": "lambda:InvokeFunction", 360 | "FunctionName": { 361 | "Fn::GetAtt": [ 362 | "logNotifierLogHandler893A9F2E", 363 | "Arn", 364 | ], 365 | }, 366 | "Principal": "logs.amazonaws.com", 367 | "SourceArn": { 368 | "Fn::Join": [ 369 | "", 370 | [ 371 | "arn:", 372 | { 373 | "Ref": "AWS::Partition", 374 | }, 375 | ":logs:", 376 | { 377 | "Ref": "AWS::Region", 378 | }, 379 | ":", 380 | { 381 | "Ref": "AWS::AccountId", 382 | }, 383 | ":log-group:", 384 | { 385 | "Fn::GetAtt": [ 386 | "lambdaLogRetention4CE10F74", 387 | "LogGroupName", 388 | ], 389 | }, 390 | ":*", 391 | ], 392 | ], 393 | }, 394 | }, 395 | "Type": "AWS::Lambda::Permission", 396 | }, 397 | }, 398 | } 399 | `; 400 | -------------------------------------------------------------------------------- /tests/snapshot.test.ts: -------------------------------------------------------------------------------- 1 | import 'jest-cdk-snapshot'; 2 | import { expect, test } from 'vitest'; 3 | import { LogNotifier } from '../lib'; 4 | import * as logs from 'aws-cdk-lib/aws-logs'; 5 | import * as lambda from 'aws-cdk-lib/aws-lambda'; 6 | import { Stack } from 'aws-cdk-lib/core'; 7 | 8 | test('snapshot test', () => { 9 | const stack = new Stack(); 10 | const lambda1 = new lambda.Function(stack, 'lambda', { 11 | runtime: lambda.Runtime.NODEJS_20_X, 12 | handler: 'index.handler', 13 | code: lambda.Code.fromInline('exports.handler = async function() { return "Hello, world!"; }'), 14 | }); 15 | const logNotifier = new LogNotifier(stack, 'logNotifier', { 16 | filterPattern: logs.FilterPattern.allTerms('ERROR'), 17 | slackIncomingWebhookUrl: 'https://hooks.slack.com/test', 18 | }); 19 | 20 | logNotifier.watch(lambda1.logGroup); 21 | 22 | expect(stack).toMatchCdkSnapshot({ 23 | ignoreAssets: true, 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "declarationMap": false, 4 | "inlineSourceMap": true, 5 | "inlineSources": true, 6 | "alwaysStrict": true, 7 | "declaration": true, 8 | "experimentalDecorators": true, 9 | "incremental": true, 10 | "lib": [ 11 | "es2020" 12 | ], 13 | "module": "commonjs", 14 | "noEmitOnError": true, 15 | "noFallthroughCasesInSwitch": true, 16 | "noImplicitAny": true, 17 | "noImplicitReturns": true, 18 | "noImplicitThis": true, 19 | "noUnusedLocals": true, 20 | "noUnusedParameters": true, 21 | "resolveJsonModule": true, 22 | "skipLibCheck": true, 23 | "strict": true, 24 | "strictNullChecks": true, 25 | "strictPropertyInitialization": true, 26 | "stripInternal": false, 27 | "target": "es2020", 28 | "composite": false, 29 | "tsBuildInfoFile": "tsconfig.tsbuildinfo" 30 | }, 31 | "include": [ 32 | "**/*.ts" 33 | ], 34 | "exclude": [ 35 | "node_modules", 36 | ".types-compat" 37 | ], 38 | "_generated_by_jsii_": "Generated by jsii - safe to delete, and ideally should be in .gitignore" 39 | } -------------------------------------------------------------------------------- /vitest.config.mts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vitest/config'; 2 | 3 | export default defineConfig({ 4 | test: { 5 | include: ['tests/*.test.ts'], 6 | globals: true, 7 | }, 8 | }); 9 | --------------------------------------------------------------------------------