@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.
- package/migrations.json +26 -1
- package/package.json +1 -1
- package/src/agentcore-gateway/__snapshots__/generator.spec.ts.snap +51 -2
- package/src/agentcore-harness/__snapshots__/generator.spec.ts.snap +4 -5
- package/src/agentcore-harness/files/project/README.md.template +4 -5
- package/src/migrations/latest/agentcore-harness-no-tools-by-default/__snapshots__/migration.spec.ts.snap +79 -0
- package/src/migrations/latest/agentcore-harness-no-tools-by-default/metadata.json +3 -0
- package/src/migrations/latest/agentcore-harness-no-tools-by-default/migration.d.ts +6 -0
- package/src/migrations/latest/agentcore-harness-no-tools-by-default/migration.js +87 -0
- package/src/migrations/latest/agentcore-harness-no-tools-by-default/migration.js.map +1 -0
- package/src/migrations/latest/rdb-terraform-aurora-app-module-defaults/__snapshots__/migration.spec.ts.snap +54 -0
- package/src/migrations/latest/rdb-terraform-aurora-app-module-defaults/metadata.json +3 -0
- package/src/migrations/latest/rdb-terraform-aurora-app-module-defaults/migration.d.ts +6 -0
- package/src/migrations/latest/rdb-terraform-aurora-app-module-defaults/migration.js +86 -0
- package/src/migrations/latest/rdb-terraform-aurora-app-module-defaults/migration.js.map +1 -0
- package/src/migrations/latest/terraform-declare-used-providers/metadata.json +3 -0
- package/src/migrations/latest/terraform-declare-used-providers/migration.d.ts +6 -0
- package/src/migrations/latest/terraform-declare-used-providers/migration.js +147 -0
- package/src/migrations/latest/terraform-declare-used-providers/migration.js.map +1 -0
- package/src/migrations/latest/terraform-harness-vpc-role-and-memory-grant/__snapshots__/migration.spec.ts.snap +521 -0
- package/src/migrations/latest/terraform-harness-vpc-role-and-memory-grant/metadata.json +3 -0
- package/src/migrations/latest/terraform-harness-vpc-role-and-memory-grant/migration.d.ts +6 -0
- package/src/migrations/latest/terraform-harness-vpc-role-and-memory-grant/migration.js +504 -0
- package/src/migrations/latest/terraform-harness-vpc-role-and-memory-grant/migration.js.map +1 -0
- package/src/migrations/latest/waf-log-group-cmk-encryption/__snapshots__/migration.spec.ts.snap +286 -0
- package/src/migrations/latest/waf-log-group-cmk-encryption/metadata.json +3 -0
- package/src/migrations/latest/waf-log-group-cmk-encryption/migration.d.ts +6 -0
- package/src/migrations/latest/waf-log-group-cmk-encryption/migration.js +238 -0
- package/src/migrations/latest/waf-log-group-cmk-encryption/migration.js.map +1 -0
- package/src/py/agent/__snapshots__/generator.protocols.spec.ts.snap +12 -0
- package/src/py/fast-api/__snapshots__/generator.terraform.spec.ts.snap +231 -24
- package/src/py/lambda-function/__snapshots__/generator.spec.ts.snap +8 -0
- package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +4 -0
- package/src/py/rdb/__snapshots__/generator.spec.ts.snap +31 -2
- package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +216 -25
- package/src/terraform/project/files/application/bootstrap/providers.tf.template +9 -0
- package/src/terraform/project/files/application/src/providers.tf.template +4 -0
- package/src/terraform/project/files/library/src/main.tf.template +9 -0
- package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +231 -24
- package/src/ts/agent/__snapshots__/generator.spec.ts.snap +8 -0
- package/src/ts/dcr-proxy/__snapshots__/generator.spec.ts.snap +4 -0
- package/src/ts/lambda-function/__snapshots__/generator.spec.ts.snap +8 -0
- package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +4 -0
- package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +62 -4
- package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +4 -0
- package/src/ts/react-website/cognito-auth/__snapshots__/generator.spec.ts.snap +35 -8
- package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +4 -0
- package/src/utils/agent-core-constructs/files/cdk/app/agentcore-harness/__nameKebabCase__/__nameKebabCase__.ts.template +39 -1
- package/src/utils/agent-core-constructs/files/terraform/app/agent-core/__nameKebabCase__/__nameKebabCase__.tf.template +8 -1
- package/src/utils/agent-core-constructs/files/terraform/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.tf.template +57 -2
- package/src/utils/agent-core-constructs/files/terraform/app/agentcore-harness/__nameKebabCase__/__nameKebabCase__.tf.template +258 -24
- package/src/utils/agent-core-constructs/files/terraform/core/agent-core/runtime.tf.template +4 -0
- package/src/utils/api-constructs/files/terraform/app/apis/http/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +8 -0
- package/src/utils/api-constructs/files/terraform/app/apis/rest/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +9 -1
- package/src/utils/api-constructs/files/terraform/core/api/rest/rest-api/rest-api.tf.template +60 -7
- package/src/utils/dcr-proxy-constructs/files/terraform/app/dcr-proxies/__nameKebabCase__/__nameKebabCase__.tf.template +4 -0
- package/src/utils/files/terraform/src/metrics/providers.tf.template +12 -0
- package/src/utils/function-constructs/files/terraform/app/lambda-functions/__nameKebabCase__/__nameKebabCase__.tf.template +4 -0
- package/src/utils/identity-constructs/files/cdk/core/user-identity.ts.template +33 -8
- package/src/utils/identity-constructs/files/terraform/core/user-identity/add-callback-url/add-callback-url.tf.template +4 -0
- package/src/utils/identity-constructs/files/terraform/core/user-identity/identity/identity.tf.template +51 -2
- package/src/utils/rdb-constructs/files/cdk/core/rdb/aurora.ts.template +18 -0
- package/src/utils/rdb-constructs/files/terraform/app/dbs/__nameKebabCase__/__nameKebabCase__.tf.template +15 -4
- package/src/utils/rdb-constructs/files/terraform/core/rdb/aurora/aurora.tf.template +2 -2
- package/src/utils/rdb-constructs/rdb-constructs.d.ts +12 -0
- package/src/utils/rdb-constructs/rdb-constructs.js +24 -3
- package/src/utils/rdb-constructs/rdb-constructs.js.map +1 -1
- 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 =
|
|
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 =
|
|
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 =
|
|
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
|
|
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 =
|
|
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', {
|