@aws/nx-plugin 1.0.0-rc.83 → 1.0.0-rc.84

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/migrations.json +26 -1
  2. package/package.json +1 -1
  3. package/src/agentcore-gateway/__snapshots__/generator.spec.ts.snap +51 -2
  4. package/src/agentcore-harness/__snapshots__/generator.spec.ts.snap +4 -5
  5. package/src/agentcore-harness/files/project/README.md.template +4 -5
  6. package/src/migrations/latest/agentcore-harness-no-tools-by-default/__snapshots__/migration.spec.ts.snap +79 -0
  7. package/src/migrations/latest/agentcore-harness-no-tools-by-default/metadata.json +3 -0
  8. package/src/migrations/latest/agentcore-harness-no-tools-by-default/migration.d.ts +6 -0
  9. package/src/migrations/latest/agentcore-harness-no-tools-by-default/migration.js +87 -0
  10. package/src/migrations/latest/agentcore-harness-no-tools-by-default/migration.js.map +1 -0
  11. package/src/migrations/latest/rdb-terraform-aurora-app-module-defaults/__snapshots__/migration.spec.ts.snap +54 -0
  12. package/src/migrations/latest/rdb-terraform-aurora-app-module-defaults/metadata.json +3 -0
  13. package/src/migrations/latest/rdb-terraform-aurora-app-module-defaults/migration.d.ts +6 -0
  14. package/src/migrations/latest/rdb-terraform-aurora-app-module-defaults/migration.js +86 -0
  15. package/src/migrations/latest/rdb-terraform-aurora-app-module-defaults/migration.js.map +1 -0
  16. package/src/migrations/latest/terraform-declare-used-providers/metadata.json +3 -0
  17. package/src/migrations/latest/terraform-declare-used-providers/migration.d.ts +6 -0
  18. package/src/migrations/latest/terraform-declare-used-providers/migration.js +147 -0
  19. package/src/migrations/latest/terraform-declare-used-providers/migration.js.map +1 -0
  20. package/src/migrations/latest/terraform-harness-vpc-role-and-memory-grant/__snapshots__/migration.spec.ts.snap +521 -0
  21. package/src/migrations/latest/terraform-harness-vpc-role-and-memory-grant/metadata.json +3 -0
  22. package/src/migrations/latest/terraform-harness-vpc-role-and-memory-grant/migration.d.ts +6 -0
  23. package/src/migrations/latest/terraform-harness-vpc-role-and-memory-grant/migration.js +504 -0
  24. package/src/migrations/latest/terraform-harness-vpc-role-and-memory-grant/migration.js.map +1 -0
  25. package/src/migrations/latest/waf-log-group-cmk-encryption/__snapshots__/migration.spec.ts.snap +286 -0
  26. package/src/migrations/latest/waf-log-group-cmk-encryption/metadata.json +3 -0
  27. package/src/migrations/latest/waf-log-group-cmk-encryption/migration.d.ts +6 -0
  28. package/src/migrations/latest/waf-log-group-cmk-encryption/migration.js +238 -0
  29. package/src/migrations/latest/waf-log-group-cmk-encryption/migration.js.map +1 -0
  30. package/src/py/agent/__snapshots__/generator.protocols.spec.ts.snap +12 -0
  31. package/src/py/fast-api/__snapshots__/generator.terraform.spec.ts.snap +231 -24
  32. package/src/py/lambda-function/__snapshots__/generator.spec.ts.snap +8 -0
  33. package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +4 -0
  34. package/src/py/rdb/__snapshots__/generator.spec.ts.snap +31 -2
  35. package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +216 -25
  36. package/src/terraform/project/files/application/bootstrap/providers.tf.template +9 -0
  37. package/src/terraform/project/files/application/src/providers.tf.template +4 -0
  38. package/src/terraform/project/files/library/src/main.tf.template +9 -0
  39. package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +231 -24
  40. package/src/ts/agent/__snapshots__/generator.spec.ts.snap +8 -0
  41. package/src/ts/dcr-proxy/__snapshots__/generator.spec.ts.snap +4 -0
  42. package/src/ts/lambda-function/__snapshots__/generator.spec.ts.snap +8 -0
  43. package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +4 -0
  44. package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +62 -4
  45. package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +4 -0
  46. package/src/ts/react-website/cognito-auth/__snapshots__/generator.spec.ts.snap +35 -8
  47. package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +4 -0
  48. package/src/utils/agent-core-constructs/files/cdk/app/agentcore-harness/__nameKebabCase__/__nameKebabCase__.ts.template +39 -1
  49. package/src/utils/agent-core-constructs/files/terraform/app/agent-core/__nameKebabCase__/__nameKebabCase__.tf.template +8 -1
  50. package/src/utils/agent-core-constructs/files/terraform/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.tf.template +57 -2
  51. package/src/utils/agent-core-constructs/files/terraform/app/agentcore-harness/__nameKebabCase__/__nameKebabCase__.tf.template +258 -24
  52. package/src/utils/agent-core-constructs/files/terraform/core/agent-core/runtime.tf.template +4 -0
  53. package/src/utils/api-constructs/files/terraform/app/apis/http/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +8 -0
  54. package/src/utils/api-constructs/files/terraform/app/apis/rest/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +9 -1
  55. package/src/utils/api-constructs/files/terraform/core/api/rest/rest-api/rest-api.tf.template +60 -7
  56. package/src/utils/dcr-proxy-constructs/files/terraform/app/dcr-proxies/__nameKebabCase__/__nameKebabCase__.tf.template +4 -0
  57. package/src/utils/files/terraform/src/metrics/providers.tf.template +12 -0
  58. package/src/utils/function-constructs/files/terraform/app/lambda-functions/__nameKebabCase__/__nameKebabCase__.tf.template +4 -0
  59. package/src/utils/identity-constructs/files/cdk/core/user-identity.ts.template +33 -8
  60. package/src/utils/identity-constructs/files/terraform/core/user-identity/add-callback-url/add-callback-url.tf.template +4 -0
  61. package/src/utils/identity-constructs/files/terraform/core/user-identity/identity/identity.tf.template +51 -2
  62. package/src/utils/rdb-constructs/files/cdk/core/rdb/aurora.ts.template +18 -0
  63. package/src/utils/rdb-constructs/files/terraform/app/dbs/__nameKebabCase__/__nameKebabCase__.tf.template +15 -4
  64. package/src/utils/rdb-constructs/files/terraform/core/rdb/aurora/aurora.tf.template +2 -2
  65. package/src/utils/rdb-constructs/rdb-constructs.d.ts +12 -0
  66. package/src/utils/rdb-constructs/rdb-constructs.js +24 -3
  67. package/src/utils/rdb-constructs/rdb-constructs.js.map +1 -1
  68. package/src/utils/website-constructs/files/terraform/core/static-website/static-website.tf.template +4 -0
@@ -256,10 +256,18 @@ output "api_log_group_arn" {
256
256
  required_version = ">= 1.0"
257
257
 
258
258
  required_providers {
259
+ archive = {
260
+ source = "hashicorp/archive"
261
+ version = "2.8.0"
262
+ }
259
263
  aws = {
260
264
  source = "hashicorp/aws"
261
265
  version = "6.61.0"
262
266
  }
267
+ random = {
268
+ source = "hashicorp/random"
269
+ version = "3.9.0"
270
+ }
263
271
  }
264
272
  }
265
273
 
@@ -1016,10 +1024,18 @@ output "api_log_group_arn" {
1016
1024
  required_version = ">= 1.0"
1017
1025
 
1018
1026
  required_providers {
1027
+ archive = {
1028
+ source = "hashicorp/archive"
1029
+ version = "2.8.0"
1030
+ }
1019
1031
  aws = {
1020
1032
  source = "hashicorp/aws"
1021
1033
  version = "6.61.0"
1022
1034
  }
1035
+ random = {
1036
+ source = "hashicorp/random"
1037
+ version = "3.9.0"
1038
+ }
1023
1039
  }
1024
1040
  }
1025
1041
 
@@ -1848,10 +1864,18 @@ output "api_log_group_arn" {
1848
1864
  required_version = ">= 1.0"
1849
1865
 
1850
1866
  required_providers {
1867
+ archive = {
1868
+ source = "hashicorp/archive"
1869
+ version = "2.8.0"
1870
+ }
1851
1871
  aws = {
1852
1872
  source = "hashicorp/aws"
1853
1873
  version = "6.61.0"
1854
1874
  }
1875
+ random = {
1876
+ source = "hashicorp/random"
1877
+ version = "3.9.0"
1878
+ }
1855
1879
  }
1856
1880
  }
1857
1881
 
@@ -2533,22 +2557,75 @@ resource "aws_wafv2_web_acl" "api_waf" {
2533
2557
  }
2534
2558
  }
2535
2559
 
2560
+ resource "random_id" "waf_log_suffix" {
2561
+ count = var.enable_waf ? 1 : 0
2562
+ byte_length = 4
2563
+ }
2564
+
2565
+ locals {
2566
+ waf_log_group_name = var.enable_waf ? "aws-waf-logs-\${var.api_name}-\${random_id.waf_log_suffix[0].hex}" : null
2567
+ }
2568
+
2569
+ # KMS key for encrypting WAF request logs at rest
2570
+ resource "aws_kms_key" "waf_logs" {
2571
+ count = var.enable_waf ? 1 : 0
2572
+
2573
+ description = "\${var.api_name} API WAF log encryption"
2574
+ deletion_window_in_days = 7
2575
+ enable_key_rotation = true
2576
+
2577
+ policy = jsonencode({
2578
+ Version = "2012-10-17"
2579
+ Statement = [
2580
+ {
2581
+ Sid = "Enable IAM User Permissions"
2582
+ Effect = "Allow"
2583
+ Principal = { AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root" }
2584
+ Action = "kms:*"
2585
+ Resource = "*"
2586
+ },
2587
+ {
2588
+ Sid = "Allow CloudWatch Logs"
2589
+ Effect = "Allow"
2590
+ Principal = { Service = "logs.\${data.aws_region.current.region}.amazonaws.com" }
2591
+ Action = [
2592
+ "kms:Encrypt",
2593
+ "kms:Decrypt",
2594
+ "kms:ReEncrypt*",
2595
+ "kms:GenerateDataKey*",
2596
+ "kms:DescribeKey"
2597
+ ]
2598
+ Resource = "*"
2599
+ Condition = {
2600
+ ArnEquals = {
2601
+ "kms:EncryptionContext:aws:logs:arn" = "arn:aws:logs:\${data.aws_region.current.region}:\${data.aws_caller_identity.current.account_id}:log-group:\${local.waf_log_group_name}"
2602
+ }
2603
+ }
2604
+ }
2605
+ ]
2606
+ })
2607
+
2608
+ tags = var.tags
2609
+ }
2610
+
2611
+ resource "aws_kms_alias" "waf_logs" {
2612
+ count = var.enable_waf ? 1 : 0
2613
+
2614
+ name = "alias/\${var.api_name}-\${random_id.waf_log_suffix[0].hex}-waf-logs"
2615
+ target_key_id = aws_kms_key.waf_logs[0].key_id
2616
+ }
2617
+
2536
2618
  # CloudWatch Log Group for WAF request logs. Name must start with \`aws-waf-logs-\`.
2537
2619
  resource "aws_cloudwatch_log_group" "api_waf_logs" {
2538
- #checkov:skip=CKV_AWS_158:Using default CloudWatch log encryption
2539
2620
  #checkov:skip=CKV_AWS_338:Log retention set to one month which is sufficient for WAF logs
2540
2621
  count = var.enable_waf ? 1 : 0
2541
2622
 
2542
- name = "aws-waf-logs-\${var.api_name}-\${random_id.waf_log_suffix[0].hex}"
2623
+ name = local.waf_log_group_name
2543
2624
  retention_in_days = 30
2625
+ kms_key_id = aws_kms_key.waf_logs[0].arn
2544
2626
  tags = var.tags
2545
2627
  }
2546
2628
 
2547
- resource "random_id" "waf_log_suffix" {
2548
- count = var.enable_waf ? 1 : 0
2549
- byte_length = 4
2550
- }
2551
-
2552
2629
  resource "aws_wafv2_web_acl_logging_configuration" "api_waf_logging" {
2553
2630
  count = var.enable_waf ? 1 : 0
2554
2631
 
@@ -2594,10 +2671,18 @@ output "waf_web_acl_arn" {
2594
2671
  required_version = ">= 1.0"
2595
2672
 
2596
2673
  required_providers {
2674
+ archive = {
2675
+ source = "hashicorp/archive"
2676
+ version = "2.8.0"
2677
+ }
2597
2678
  aws = {
2598
2679
  source = "hashicorp/aws"
2599
2680
  version = "6.61.0"
2600
2681
  }
2682
+ random = {
2683
+ source = "hashicorp/random"
2684
+ version = "3.9.0"
2685
+ }
2601
2686
  }
2602
2687
  }
2603
2688
 
@@ -3200,7 +3285,7 @@ module "add_url_to_runtime_config" {
3200
3285
 
3201
3286
  namespace = "connection"
3202
3287
  key = "apis"
3203
- value = { "TestApi" = aws_api_gateway_stage.api_stage.invoke_url }
3288
+ value = { "TestApi" = "\${aws_api_gateway_stage.api_stage.invoke_url}/" }
3204
3289
 
3205
3290
  depends_on = [aws_api_gateway_stage.api_stage]
3206
3291
  }
@@ -3539,22 +3624,75 @@ resource "aws_wafv2_web_acl" "api_waf" {
3539
3624
  }
3540
3625
  }
3541
3626
 
3627
+ resource "random_id" "waf_log_suffix" {
3628
+ count = var.enable_waf ? 1 : 0
3629
+ byte_length = 4
3630
+ }
3631
+
3632
+ locals {
3633
+ waf_log_group_name = var.enable_waf ? "aws-waf-logs-\${var.api_name}-\${random_id.waf_log_suffix[0].hex}" : null
3634
+ }
3635
+
3636
+ # KMS key for encrypting WAF request logs at rest
3637
+ resource "aws_kms_key" "waf_logs" {
3638
+ count = var.enable_waf ? 1 : 0
3639
+
3640
+ description = "\${var.api_name} API WAF log encryption"
3641
+ deletion_window_in_days = 7
3642
+ enable_key_rotation = true
3643
+
3644
+ policy = jsonencode({
3645
+ Version = "2012-10-17"
3646
+ Statement = [
3647
+ {
3648
+ Sid = "Enable IAM User Permissions"
3649
+ Effect = "Allow"
3650
+ Principal = { AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root" }
3651
+ Action = "kms:*"
3652
+ Resource = "*"
3653
+ },
3654
+ {
3655
+ Sid = "Allow CloudWatch Logs"
3656
+ Effect = "Allow"
3657
+ Principal = { Service = "logs.\${data.aws_region.current.region}.amazonaws.com" }
3658
+ Action = [
3659
+ "kms:Encrypt",
3660
+ "kms:Decrypt",
3661
+ "kms:ReEncrypt*",
3662
+ "kms:GenerateDataKey*",
3663
+ "kms:DescribeKey"
3664
+ ]
3665
+ Resource = "*"
3666
+ Condition = {
3667
+ ArnEquals = {
3668
+ "kms:EncryptionContext:aws:logs:arn" = "arn:aws:logs:\${data.aws_region.current.region}:\${data.aws_caller_identity.current.account_id}:log-group:\${local.waf_log_group_name}"
3669
+ }
3670
+ }
3671
+ }
3672
+ ]
3673
+ })
3674
+
3675
+ tags = var.tags
3676
+ }
3677
+
3678
+ resource "aws_kms_alias" "waf_logs" {
3679
+ count = var.enable_waf ? 1 : 0
3680
+
3681
+ name = "alias/\${var.api_name}-\${random_id.waf_log_suffix[0].hex}-waf-logs"
3682
+ target_key_id = aws_kms_key.waf_logs[0].key_id
3683
+ }
3684
+
3542
3685
  # CloudWatch Log Group for WAF request logs. Name must start with \`aws-waf-logs-\`.
3543
3686
  resource "aws_cloudwatch_log_group" "api_waf_logs" {
3544
- #checkov:skip=CKV_AWS_158:Using default CloudWatch log encryption
3545
3687
  #checkov:skip=CKV_AWS_338:Log retention set to one month which is sufficient for WAF logs
3546
3688
  count = var.enable_waf ? 1 : 0
3547
3689
 
3548
- name = "aws-waf-logs-\${var.api_name}-\${random_id.waf_log_suffix[0].hex}"
3690
+ name = local.waf_log_group_name
3549
3691
  retention_in_days = 30
3692
+ kms_key_id = aws_kms_key.waf_logs[0].arn
3550
3693
  tags = var.tags
3551
3694
  }
3552
3695
 
3553
- resource "random_id" "waf_log_suffix" {
3554
- count = var.enable_waf ? 1 : 0
3555
- byte_length = 4
3556
- }
3557
-
3558
3696
  resource "aws_wafv2_web_acl_logging_configuration" "api_waf_logging" {
3559
3697
  count = var.enable_waf ? 1 : 0
3560
3698
 
@@ -3600,10 +3738,18 @@ output "waf_web_acl_arn" {
3600
3738
  required_version = ">= 1.0"
3601
3739
 
3602
3740
  required_providers {
3741
+ archive = {
3742
+ source = "hashicorp/archive"
3743
+ version = "2.8.0"
3744
+ }
3603
3745
  aws = {
3604
3746
  source = "hashicorp/aws"
3605
3747
  version = "6.61.0"
3606
3748
  }
3749
+ random = {
3750
+ source = "hashicorp/random"
3751
+ version = "3.9.0"
3752
+ }
3607
3753
  }
3608
3754
  }
3609
3755
 
@@ -4195,7 +4341,7 @@ module "add_url_to_runtime_config" {
4195
4341
 
4196
4342
  namespace = "connection"
4197
4343
  key = "apis"
4198
- value = { "TestApi" = aws_api_gateway_stage.api_stage.invoke_url }
4344
+ value = { "TestApi" = "\${aws_api_gateway_stage.api_stage.invoke_url}/" }
4199
4345
 
4200
4346
  depends_on = [aws_api_gateway_stage.api_stage]
4201
4347
  }
@@ -4534,22 +4680,75 @@ resource "aws_wafv2_web_acl" "api_waf" {
4534
4680
  }
4535
4681
  }
4536
4682
 
4683
+ resource "random_id" "waf_log_suffix" {
4684
+ count = var.enable_waf ? 1 : 0
4685
+ byte_length = 4
4686
+ }
4687
+
4688
+ locals {
4689
+ waf_log_group_name = var.enable_waf ? "aws-waf-logs-\${var.api_name}-\${random_id.waf_log_suffix[0].hex}" : null
4690
+ }
4691
+
4692
+ # KMS key for encrypting WAF request logs at rest
4693
+ resource "aws_kms_key" "waf_logs" {
4694
+ count = var.enable_waf ? 1 : 0
4695
+
4696
+ description = "\${var.api_name} API WAF log encryption"
4697
+ deletion_window_in_days = 7
4698
+ enable_key_rotation = true
4699
+
4700
+ policy = jsonencode({
4701
+ Version = "2012-10-17"
4702
+ Statement = [
4703
+ {
4704
+ Sid = "Enable IAM User Permissions"
4705
+ Effect = "Allow"
4706
+ Principal = { AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root" }
4707
+ Action = "kms:*"
4708
+ Resource = "*"
4709
+ },
4710
+ {
4711
+ Sid = "Allow CloudWatch Logs"
4712
+ Effect = "Allow"
4713
+ Principal = { Service = "logs.\${data.aws_region.current.region}.amazonaws.com" }
4714
+ Action = [
4715
+ "kms:Encrypt",
4716
+ "kms:Decrypt",
4717
+ "kms:ReEncrypt*",
4718
+ "kms:GenerateDataKey*",
4719
+ "kms:DescribeKey"
4720
+ ]
4721
+ Resource = "*"
4722
+ Condition = {
4723
+ ArnEquals = {
4724
+ "kms:EncryptionContext:aws:logs:arn" = "arn:aws:logs:\${data.aws_region.current.region}:\${data.aws_caller_identity.current.account_id}:log-group:\${local.waf_log_group_name}"
4725
+ }
4726
+ }
4727
+ }
4728
+ ]
4729
+ })
4730
+
4731
+ tags = var.tags
4732
+ }
4733
+
4734
+ resource "aws_kms_alias" "waf_logs" {
4735
+ count = var.enable_waf ? 1 : 0
4736
+
4737
+ name = "alias/\${var.api_name}-\${random_id.waf_log_suffix[0].hex}-waf-logs"
4738
+ target_key_id = aws_kms_key.waf_logs[0].key_id
4739
+ }
4740
+
4537
4741
  # CloudWatch Log Group for WAF request logs. Name must start with \`aws-waf-logs-\`.
4538
4742
  resource "aws_cloudwatch_log_group" "api_waf_logs" {
4539
- #checkov:skip=CKV_AWS_158:Using default CloudWatch log encryption
4540
4743
  #checkov:skip=CKV_AWS_338:Log retention set to one month which is sufficient for WAF logs
4541
4744
  count = var.enable_waf ? 1 : 0
4542
4745
 
4543
- name = "aws-waf-logs-\${var.api_name}-\${random_id.waf_log_suffix[0].hex}"
4746
+ name = local.waf_log_group_name
4544
4747
  retention_in_days = 30
4748
+ kms_key_id = aws_kms_key.waf_logs[0].arn
4545
4749
  tags = var.tags
4546
4750
  }
4547
4751
 
4548
- resource "random_id" "waf_log_suffix" {
4549
- count = var.enable_waf ? 1 : 0
4550
- byte_length = 4
4551
- }
4552
-
4553
4752
  resource "aws_wafv2_web_acl_logging_configuration" "api_waf_logging" {
4554
4753
  count = var.enable_waf ? 1 : 0
4555
4754
 
@@ -4595,10 +4794,18 @@ output "waf_web_acl_arn" {
4595
4794
  required_version = ">= 1.0"
4596
4795
 
4597
4796
  required_providers {
4797
+ archive = {
4798
+ source = "hashicorp/archive"
4799
+ version = "2.8.0"
4800
+ }
4598
4801
  aws = {
4599
4802
  source = "hashicorp/aws"
4600
4803
  version = "6.61.0"
4601
4804
  }
4805
+ random = {
4806
+ source = "hashicorp/random"
4807
+ version = "3.9.0"
4808
+ }
4602
4809
  }
4603
4810
  }
4604
4811
 
@@ -5273,7 +5480,7 @@ module "add_url_to_runtime_config" {
5273
5480
 
5274
5481
  namespace = "connection"
5275
5482
  key = "apis"
5276
- value = { "TestApi" = aws_api_gateway_stage.api_stage.invoke_url }
5483
+ value = { "TestApi" = "\${aws_api_gateway_stage.api_stage.invoke_url}/" }
5277
5484
 
5278
5485
  depends_on = [aws_api_gateway_stage.api_stage]
5279
5486
  }
@@ -76,6 +76,10 @@ exports[`lambda-handler project generator > terraform iac > should generate terr
76
76
  source = "hashicorp/archive"
77
77
  version = "2.8.0"
78
78
  }
79
+ random = {
80
+ source = "hashicorp/random"
81
+ version = "3.9.0"
82
+ }
79
83
  }
80
84
  }
81
85
 
@@ -257,6 +261,10 @@ exports[`lambda-handler project generator > terraform iac > should match snapsho
257
261
  source = "hashicorp/archive"
258
262
  version = "2.8.0"
259
263
  }
264
+ random = {
265
+ source = "hashicorp/random"
266
+ version = "3.9.0"
267
+ }
260
268
  }
261
269
  }
262
270
 
@@ -157,6 +157,10 @@ exports[`py#mcp-server generator > should match snapshot for Terraform generated
157
157
  source = "hashicorp/aws"
158
158
  version = "6.61.0"
159
159
  }
160
+ external = {
161
+ source = "hashicorp/external"
162
+ version = "2.4.1"
163
+ }
160
164
  null = {
161
165
  source = "hashicorp/null"
162
166
  version = "3.3.1"
@@ -216,6 +216,10 @@ exports[`py#rdb generator > should generate Terraform modules 1`] = `
216
216
  source = "hashicorp/aws"
217
217
  version = "6.61.0"
218
218
  }
219
+ external = {
220
+ source = "hashicorp/external"
221
+ version = "2.4.1"
222
+ }
219
223
  null = {
220
224
  source = "hashicorp/null"
221
225
  version = "3.3.1"
@@ -297,9 +301,9 @@ variable "enable_credential_rotation" {
297
301
  }
298
302
 
299
303
  variable "enable_cloudwatch_logs" {
300
- description = "Whether to export Aurora engine logs to CloudWatch. PostgreSQL also enables verbose statement logging."
304
+ description = "Whether to export Aurora engine logs to CloudWatch. PostgreSQL logs DDL statements only (log_statement=ddl); MySQL enables Advanced Auditing scoped to connections and DDL (server_audit_events=CONNECT,QUERY_DDL). Neither logs statement parameter values, to avoid leaking PII into log data."
301
305
  type = bool
302
- default = false
306
+ default = true
303
307
  }
304
308
 
305
309
  variable "enable_performance_insights" {
@@ -320,6 +324,12 @@ variable "enable_backup" {
320
324
  default = false
321
325
  }
322
326
 
327
+ variable "enable_key_rotation" {
328
+ description = "Whether to enable automatic key rotation on the KMS key used to encrypt the Aurora cluster and its credentials secret."
329
+ type = bool
330
+ default = true
331
+ }
332
+
323
333
  variable "tags" {
324
334
  description = "Tags to apply to all resources."
325
335
  type = map(string)
@@ -379,6 +389,7 @@ module "aurora" {
379
389
  enable_performance_insights = var.enable_performance_insights
380
390
  performance_insights_retention_period = var.performance_insights_retention_period
381
391
  enable_backup = var.enable_backup
392
+ enable_key_rotation = var.enable_key_rotation
382
393
  tags = var.tags
383
394
  }
384
395
 
@@ -1846,6 +1857,20 @@ export interface AuroraDatabaseProps extends _AuroraDatabaseProps {
1846
1857
  * @default true
1847
1858
  */
1848
1859
  readonly enablePerformanceInsights?: boolean;
1860
+
1861
+ /**
1862
+ * Minimum Aurora Serverless v2 ACUs.
1863
+ *
1864
+ * @default 0.5
1865
+ */
1866
+ readonly serverlessV2MinCapacity?: number;
1867
+
1868
+ /**
1869
+ * Maximum Aurora Serverless v2 ACUs.
1870
+ *
1871
+ * @default 4
1872
+ */
1873
+ readonly serverlessV2MaxCapacity?: number;
1849
1874
  }
1850
1875
 
1851
1876
  /**
@@ -1875,6 +1900,8 @@ export abstract class AuroraDatabase extends Construct {
1875
1900
  enableKeyRotation = true,
1876
1901
  enableCloudwatchLogs = true,
1877
1902
  enablePerformanceInsights = true,
1903
+ serverlessV2MinCapacity = 0.5,
1904
+ serverlessV2MaxCapacity = 4,
1878
1905
  engine,
1879
1906
  engineVersion,
1880
1907
  ...clusterProps
@@ -1890,6 +1917,8 @@ export abstract class AuroraDatabase extends Construct {
1890
1917
  vpc,
1891
1918
  vpcSubnets,
1892
1919
  engine: engine.clusterEngine(engineVersion ?? engine.defaultVersion),
1920
+ serverlessV2MinCapacity,
1921
+ serverlessV2MaxCapacity,
1893
1922
  writer:
1894
1923
  writer ??
1895
1924
  ClusterInstance.serverlessV2('writer', {