@aws/nx-plugin 1.0.0-rc.82 → 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 +41 -1
- package/package.json +1 -1
- package/src/agentcore-gateway/__snapshots__/generator.spec.ts.snap +51 -2
- package/src/agentcore-gateway/generator.d.ts +7 -6
- package/src/agentcore-gateway/generator.js +2 -12
- package/src/agentcore-gateway/generator.js.map +1 -1
- 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/dynamodb-terraform-app-module-outputs/metadata.json +3 -0
- package/src/migrations/latest/dynamodb-terraform-app-module-outputs/migration.d.ts +6 -0
- package/src/migrations/latest/dynamodb-terraform-app-module-outputs/migration.js +69 -0
- package/src/migrations/latest/dynamodb-terraform-app-module-outputs/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-data-resource-destroy-protection/__snapshots__/migration.spec.ts.snap +75 -0
- package/src/migrations/latest/terraform-data-resource-destroy-protection/metadata.json +3 -0
- package/src/migrations/latest/terraform-data-resource-destroy-protection/migration.d.ts +6 -0
- package/src/migrations/latest/terraform-data-resource-destroy-protection/migration.js +78 -0
- package/src/migrations/latest/terraform-data-resource-destroy-protection/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-gateway-cedar-render-root-ejs/metadata.json +3 -0
- package/src/migrations/latest/terraform-gateway-cedar-render-root-ejs/migration.d.ts +6 -0
- package/src/migrations/latest/terraform-gateway-cedar-render-root-ejs/migration.js +38 -0
- package/src/migrations/latest/terraform-gateway-cedar-render-root-ejs/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/dynamodb/__snapshots__/generator.spec.ts.snap +21 -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/dynamodb/__snapshots__/generator.spec.ts.snap +21 -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 +74 -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/agent-core-constructs.d.ts +9 -2
- package/src/utils/agent-core-constructs/agent-core-constructs.js +22 -8
- package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
- 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/dynamodb-constructs/files/terraform/app/dynamodb/__nameKebabCase__/__nameKebabCase__.tf.template +15 -0
- package/src/utils/dynamodb-constructs/files/terraform/core/dynamodb/dynamodb.tf.template +6 -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 +8 -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/shared-constructs-constants.d.ts +5 -0
- package/src/utils/shared-constructs-constants.js +4 -0
- package/src/utils/shared-constructs-constants.js.map +1 -1
- package/src/utils/website-constructs/files/terraform/core/static-website/static-website.tf.template +4 -0
|
@@ -3420,10 +3420,18 @@ output "api_log_group_arn" {
|
|
|
3420
3420
|
required_version = ">= 1.0"
|
|
3421
3421
|
|
|
3422
3422
|
required_providers {
|
|
3423
|
+
archive = {
|
|
3424
|
+
source = "hashicorp/archive"
|
|
3425
|
+
version = "2.8.0"
|
|
3426
|
+
}
|
|
3423
3427
|
aws = {
|
|
3424
3428
|
source = "hashicorp/aws"
|
|
3425
3429
|
version = "6.61.0"
|
|
3426
3430
|
}
|
|
3431
|
+
random = {
|
|
3432
|
+
source = "hashicorp/random"
|
|
3433
|
+
version = "3.9.0"
|
|
3434
|
+
}
|
|
3427
3435
|
}
|
|
3428
3436
|
}
|
|
3429
3437
|
|
|
@@ -4162,10 +4170,18 @@ output "api_log_group_arn" {
|
|
|
4162
4170
|
required_version = ">= 1.0"
|
|
4163
4171
|
|
|
4164
4172
|
required_providers {
|
|
4173
|
+
archive = {
|
|
4174
|
+
source = "hashicorp/archive"
|
|
4175
|
+
version = "2.8.0"
|
|
4176
|
+
}
|
|
4165
4177
|
aws = {
|
|
4166
4178
|
source = "hashicorp/aws"
|
|
4167
4179
|
version = "6.61.0"
|
|
4168
4180
|
}
|
|
4181
|
+
random = {
|
|
4182
|
+
source = "hashicorp/random"
|
|
4183
|
+
version = "3.9.0"
|
|
4184
|
+
}
|
|
4169
4185
|
}
|
|
4170
4186
|
}
|
|
4171
4187
|
|
|
@@ -4976,10 +4992,18 @@ output "api_log_group_arn" {
|
|
|
4976
4992
|
required_version = ">= 1.0"
|
|
4977
4993
|
|
|
4978
4994
|
required_providers {
|
|
4995
|
+
archive = {
|
|
4996
|
+
source = "hashicorp/archive"
|
|
4997
|
+
version = "2.8.0"
|
|
4998
|
+
}
|
|
4979
4999
|
aws = {
|
|
4980
5000
|
source = "hashicorp/aws"
|
|
4981
5001
|
version = "6.61.0"
|
|
4982
5002
|
}
|
|
5003
|
+
random = {
|
|
5004
|
+
source = "hashicorp/random"
|
|
5005
|
+
version = "3.9.0"
|
|
5006
|
+
}
|
|
4983
5007
|
}
|
|
4984
5008
|
}
|
|
4985
5009
|
|
|
@@ -5643,22 +5667,75 @@ resource "aws_wafv2_web_acl" "api_waf" {
|
|
|
5643
5667
|
}
|
|
5644
5668
|
}
|
|
5645
5669
|
|
|
5670
|
+
resource "random_id" "waf_log_suffix" {
|
|
5671
|
+
count = var.enable_waf ? 1 : 0
|
|
5672
|
+
byte_length = 4
|
|
5673
|
+
}
|
|
5674
|
+
|
|
5675
|
+
locals {
|
|
5676
|
+
waf_log_group_name = var.enable_waf ? "aws-waf-logs-\${var.api_name}-\${random_id.waf_log_suffix[0].hex}" : null
|
|
5677
|
+
}
|
|
5678
|
+
|
|
5679
|
+
# KMS key for encrypting WAF request logs at rest
|
|
5680
|
+
resource "aws_kms_key" "waf_logs" {
|
|
5681
|
+
count = var.enable_waf ? 1 : 0
|
|
5682
|
+
|
|
5683
|
+
description = "\${var.api_name} API WAF log encryption"
|
|
5684
|
+
deletion_window_in_days = 7
|
|
5685
|
+
enable_key_rotation = true
|
|
5686
|
+
|
|
5687
|
+
policy = jsonencode({
|
|
5688
|
+
Version = "2012-10-17"
|
|
5689
|
+
Statement = [
|
|
5690
|
+
{
|
|
5691
|
+
Sid = "Enable IAM User Permissions"
|
|
5692
|
+
Effect = "Allow"
|
|
5693
|
+
Principal = { AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root" }
|
|
5694
|
+
Action = "kms:*"
|
|
5695
|
+
Resource = "*"
|
|
5696
|
+
},
|
|
5697
|
+
{
|
|
5698
|
+
Sid = "Allow CloudWatch Logs"
|
|
5699
|
+
Effect = "Allow"
|
|
5700
|
+
Principal = { Service = "logs.\${data.aws_region.current.region}.amazonaws.com" }
|
|
5701
|
+
Action = [
|
|
5702
|
+
"kms:Encrypt",
|
|
5703
|
+
"kms:Decrypt",
|
|
5704
|
+
"kms:ReEncrypt*",
|
|
5705
|
+
"kms:GenerateDataKey*",
|
|
5706
|
+
"kms:DescribeKey"
|
|
5707
|
+
]
|
|
5708
|
+
Resource = "*"
|
|
5709
|
+
Condition = {
|
|
5710
|
+
ArnEquals = {
|
|
5711
|
+
"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}"
|
|
5712
|
+
}
|
|
5713
|
+
}
|
|
5714
|
+
}
|
|
5715
|
+
]
|
|
5716
|
+
})
|
|
5717
|
+
|
|
5718
|
+
tags = var.tags
|
|
5719
|
+
}
|
|
5720
|
+
|
|
5721
|
+
resource "aws_kms_alias" "waf_logs" {
|
|
5722
|
+
count = var.enable_waf ? 1 : 0
|
|
5723
|
+
|
|
5724
|
+
name = "alias/\${var.api_name}-\${random_id.waf_log_suffix[0].hex}-waf-logs"
|
|
5725
|
+
target_key_id = aws_kms_key.waf_logs[0].key_id
|
|
5726
|
+
}
|
|
5727
|
+
|
|
5646
5728
|
# CloudWatch Log Group for WAF request logs. Name must start with \`aws-waf-logs-\`.
|
|
5647
5729
|
resource "aws_cloudwatch_log_group" "api_waf_logs" {
|
|
5648
|
-
#checkov:skip=CKV_AWS_158:Using default CloudWatch log encryption
|
|
5649
5730
|
#checkov:skip=CKV_AWS_338:Log retention set to one month which is sufficient for WAF logs
|
|
5650
5731
|
count = var.enable_waf ? 1 : 0
|
|
5651
5732
|
|
|
5652
|
-
name =
|
|
5733
|
+
name = local.waf_log_group_name
|
|
5653
5734
|
retention_in_days = 30
|
|
5735
|
+
kms_key_id = aws_kms_key.waf_logs[0].arn
|
|
5654
5736
|
tags = var.tags
|
|
5655
5737
|
}
|
|
5656
5738
|
|
|
5657
|
-
resource "random_id" "waf_log_suffix" {
|
|
5658
|
-
count = var.enable_waf ? 1 : 0
|
|
5659
|
-
byte_length = 4
|
|
5660
|
-
}
|
|
5661
|
-
|
|
5662
5739
|
resource "aws_wafv2_web_acl_logging_configuration" "api_waf_logging" {
|
|
5663
5740
|
count = var.enable_waf ? 1 : 0
|
|
5664
5741
|
|
|
@@ -5704,10 +5781,18 @@ output "waf_web_acl_arn" {
|
|
|
5704
5781
|
required_version = ">= 1.0"
|
|
5705
5782
|
|
|
5706
5783
|
required_providers {
|
|
5784
|
+
archive = {
|
|
5785
|
+
source = "hashicorp/archive"
|
|
5786
|
+
version = "2.8.0"
|
|
5787
|
+
}
|
|
5707
5788
|
aws = {
|
|
5708
5789
|
source = "hashicorp/aws"
|
|
5709
5790
|
version = "6.61.0"
|
|
5710
5791
|
}
|
|
5792
|
+
random = {
|
|
5793
|
+
source = "hashicorp/random"
|
|
5794
|
+
version = "3.9.0"
|
|
5795
|
+
}
|
|
5711
5796
|
}
|
|
5712
5797
|
}
|
|
5713
5798
|
|
|
@@ -6280,7 +6365,7 @@ module "add_url_to_runtime_config" {
|
|
|
6280
6365
|
|
|
6281
6366
|
namespace = "connection"
|
|
6282
6367
|
key = "apis"
|
|
6283
|
-
value = { "TestApi" = aws_api_gateway_stage.api_stage.invoke_url }
|
|
6368
|
+
value = { "TestApi" = "\${aws_api_gateway_stage.api_stage.invoke_url}/" }
|
|
6284
6369
|
|
|
6285
6370
|
depends_on = [aws_api_gateway_stage.api_stage]
|
|
6286
6371
|
}
|
|
@@ -6619,22 +6704,75 @@ resource "aws_wafv2_web_acl" "api_waf" {
|
|
|
6619
6704
|
}
|
|
6620
6705
|
}
|
|
6621
6706
|
|
|
6707
|
+
resource "random_id" "waf_log_suffix" {
|
|
6708
|
+
count = var.enable_waf ? 1 : 0
|
|
6709
|
+
byte_length = 4
|
|
6710
|
+
}
|
|
6711
|
+
|
|
6712
|
+
locals {
|
|
6713
|
+
waf_log_group_name = var.enable_waf ? "aws-waf-logs-\${var.api_name}-\${random_id.waf_log_suffix[0].hex}" : null
|
|
6714
|
+
}
|
|
6715
|
+
|
|
6716
|
+
# KMS key for encrypting WAF request logs at rest
|
|
6717
|
+
resource "aws_kms_key" "waf_logs" {
|
|
6718
|
+
count = var.enable_waf ? 1 : 0
|
|
6719
|
+
|
|
6720
|
+
description = "\${var.api_name} API WAF log encryption"
|
|
6721
|
+
deletion_window_in_days = 7
|
|
6722
|
+
enable_key_rotation = true
|
|
6723
|
+
|
|
6724
|
+
policy = jsonencode({
|
|
6725
|
+
Version = "2012-10-17"
|
|
6726
|
+
Statement = [
|
|
6727
|
+
{
|
|
6728
|
+
Sid = "Enable IAM User Permissions"
|
|
6729
|
+
Effect = "Allow"
|
|
6730
|
+
Principal = { AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root" }
|
|
6731
|
+
Action = "kms:*"
|
|
6732
|
+
Resource = "*"
|
|
6733
|
+
},
|
|
6734
|
+
{
|
|
6735
|
+
Sid = "Allow CloudWatch Logs"
|
|
6736
|
+
Effect = "Allow"
|
|
6737
|
+
Principal = { Service = "logs.\${data.aws_region.current.region}.amazonaws.com" }
|
|
6738
|
+
Action = [
|
|
6739
|
+
"kms:Encrypt",
|
|
6740
|
+
"kms:Decrypt",
|
|
6741
|
+
"kms:ReEncrypt*",
|
|
6742
|
+
"kms:GenerateDataKey*",
|
|
6743
|
+
"kms:DescribeKey"
|
|
6744
|
+
]
|
|
6745
|
+
Resource = "*"
|
|
6746
|
+
Condition = {
|
|
6747
|
+
ArnEquals = {
|
|
6748
|
+
"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}"
|
|
6749
|
+
}
|
|
6750
|
+
}
|
|
6751
|
+
}
|
|
6752
|
+
]
|
|
6753
|
+
})
|
|
6754
|
+
|
|
6755
|
+
tags = var.tags
|
|
6756
|
+
}
|
|
6757
|
+
|
|
6758
|
+
resource "aws_kms_alias" "waf_logs" {
|
|
6759
|
+
count = var.enable_waf ? 1 : 0
|
|
6760
|
+
|
|
6761
|
+
name = "alias/\${var.api_name}-\${random_id.waf_log_suffix[0].hex}-waf-logs"
|
|
6762
|
+
target_key_id = aws_kms_key.waf_logs[0].key_id
|
|
6763
|
+
}
|
|
6764
|
+
|
|
6622
6765
|
# CloudWatch Log Group for WAF request logs. Name must start with \`aws-waf-logs-\`.
|
|
6623
6766
|
resource "aws_cloudwatch_log_group" "api_waf_logs" {
|
|
6624
|
-
#checkov:skip=CKV_AWS_158:Using default CloudWatch log encryption
|
|
6625
6767
|
#checkov:skip=CKV_AWS_338:Log retention set to one month which is sufficient for WAF logs
|
|
6626
6768
|
count = var.enable_waf ? 1 : 0
|
|
6627
6769
|
|
|
6628
|
-
name =
|
|
6770
|
+
name = local.waf_log_group_name
|
|
6629
6771
|
retention_in_days = 30
|
|
6772
|
+
kms_key_id = aws_kms_key.waf_logs[0].arn
|
|
6630
6773
|
tags = var.tags
|
|
6631
6774
|
}
|
|
6632
6775
|
|
|
6633
|
-
resource "random_id" "waf_log_suffix" {
|
|
6634
|
-
count = var.enable_waf ? 1 : 0
|
|
6635
|
-
byte_length = 4
|
|
6636
|
-
}
|
|
6637
|
-
|
|
6638
6776
|
resource "aws_wafv2_web_acl_logging_configuration" "api_waf_logging" {
|
|
6639
6777
|
count = var.enable_waf ? 1 : 0
|
|
6640
6778
|
|
|
@@ -6680,10 +6818,18 @@ output "waf_web_acl_arn" {
|
|
|
6680
6818
|
required_version = ">= 1.0"
|
|
6681
6819
|
|
|
6682
6820
|
required_providers {
|
|
6821
|
+
archive = {
|
|
6822
|
+
source = "hashicorp/archive"
|
|
6823
|
+
version = "2.8.0"
|
|
6824
|
+
}
|
|
6683
6825
|
aws = {
|
|
6684
6826
|
source = "hashicorp/aws"
|
|
6685
6827
|
version = "6.61.0"
|
|
6686
6828
|
}
|
|
6829
|
+
random = {
|
|
6830
|
+
source = "hashicorp/random"
|
|
6831
|
+
version = "3.9.0"
|
|
6832
|
+
}
|
|
6687
6833
|
}
|
|
6688
6834
|
}
|
|
6689
6835
|
|
|
@@ -7245,7 +7391,7 @@ module "add_url_to_runtime_config" {
|
|
|
7245
7391
|
|
|
7246
7392
|
namespace = "connection"
|
|
7247
7393
|
key = "apis"
|
|
7248
|
-
value = { "TestApi" = aws_api_gateway_stage.api_stage.invoke_url }
|
|
7394
|
+
value = { "TestApi" = "\${aws_api_gateway_stage.api_stage.invoke_url}/" }
|
|
7249
7395
|
|
|
7250
7396
|
depends_on = [aws_api_gateway_stage.api_stage]
|
|
7251
7397
|
}
|
|
@@ -7584,22 +7730,75 @@ resource "aws_wafv2_web_acl" "api_waf" {
|
|
|
7584
7730
|
}
|
|
7585
7731
|
}
|
|
7586
7732
|
|
|
7733
|
+
resource "random_id" "waf_log_suffix" {
|
|
7734
|
+
count = var.enable_waf ? 1 : 0
|
|
7735
|
+
byte_length = 4
|
|
7736
|
+
}
|
|
7737
|
+
|
|
7738
|
+
locals {
|
|
7739
|
+
waf_log_group_name = var.enable_waf ? "aws-waf-logs-\${var.api_name}-\${random_id.waf_log_suffix[0].hex}" : null
|
|
7740
|
+
}
|
|
7741
|
+
|
|
7742
|
+
# KMS key for encrypting WAF request logs at rest
|
|
7743
|
+
resource "aws_kms_key" "waf_logs" {
|
|
7744
|
+
count = var.enable_waf ? 1 : 0
|
|
7745
|
+
|
|
7746
|
+
description = "\${var.api_name} API WAF log encryption"
|
|
7747
|
+
deletion_window_in_days = 7
|
|
7748
|
+
enable_key_rotation = true
|
|
7749
|
+
|
|
7750
|
+
policy = jsonencode({
|
|
7751
|
+
Version = "2012-10-17"
|
|
7752
|
+
Statement = [
|
|
7753
|
+
{
|
|
7754
|
+
Sid = "Enable IAM User Permissions"
|
|
7755
|
+
Effect = "Allow"
|
|
7756
|
+
Principal = { AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root" }
|
|
7757
|
+
Action = "kms:*"
|
|
7758
|
+
Resource = "*"
|
|
7759
|
+
},
|
|
7760
|
+
{
|
|
7761
|
+
Sid = "Allow CloudWatch Logs"
|
|
7762
|
+
Effect = "Allow"
|
|
7763
|
+
Principal = { Service = "logs.\${data.aws_region.current.region}.amazonaws.com" }
|
|
7764
|
+
Action = [
|
|
7765
|
+
"kms:Encrypt",
|
|
7766
|
+
"kms:Decrypt",
|
|
7767
|
+
"kms:ReEncrypt*",
|
|
7768
|
+
"kms:GenerateDataKey*",
|
|
7769
|
+
"kms:DescribeKey"
|
|
7770
|
+
]
|
|
7771
|
+
Resource = "*"
|
|
7772
|
+
Condition = {
|
|
7773
|
+
ArnEquals = {
|
|
7774
|
+
"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}"
|
|
7775
|
+
}
|
|
7776
|
+
}
|
|
7777
|
+
}
|
|
7778
|
+
]
|
|
7779
|
+
})
|
|
7780
|
+
|
|
7781
|
+
tags = var.tags
|
|
7782
|
+
}
|
|
7783
|
+
|
|
7784
|
+
resource "aws_kms_alias" "waf_logs" {
|
|
7785
|
+
count = var.enable_waf ? 1 : 0
|
|
7786
|
+
|
|
7787
|
+
name = "alias/\${var.api_name}-\${random_id.waf_log_suffix[0].hex}-waf-logs"
|
|
7788
|
+
target_key_id = aws_kms_key.waf_logs[0].key_id
|
|
7789
|
+
}
|
|
7790
|
+
|
|
7587
7791
|
# CloudWatch Log Group for WAF request logs. Name must start with \`aws-waf-logs-\`.
|
|
7588
7792
|
resource "aws_cloudwatch_log_group" "api_waf_logs" {
|
|
7589
|
-
#checkov:skip=CKV_AWS_158:Using default CloudWatch log encryption
|
|
7590
7793
|
#checkov:skip=CKV_AWS_338:Log retention set to one month which is sufficient for WAF logs
|
|
7591
7794
|
count = var.enable_waf ? 1 : 0
|
|
7592
7795
|
|
|
7593
|
-
name =
|
|
7796
|
+
name = local.waf_log_group_name
|
|
7594
7797
|
retention_in_days = 30
|
|
7798
|
+
kms_key_id = aws_kms_key.waf_logs[0].arn
|
|
7595
7799
|
tags = var.tags
|
|
7596
7800
|
}
|
|
7597
7801
|
|
|
7598
|
-
resource "random_id" "waf_log_suffix" {
|
|
7599
|
-
count = var.enable_waf ? 1 : 0
|
|
7600
|
-
byte_length = 4
|
|
7601
|
-
}
|
|
7602
|
-
|
|
7603
7802
|
resource "aws_wafv2_web_acl_logging_configuration" "api_waf_logging" {
|
|
7604
7803
|
count = var.enable_waf ? 1 : 0
|
|
7605
7804
|
|
|
@@ -7645,10 +7844,18 @@ output "waf_web_acl_arn" {
|
|
|
7645
7844
|
required_version = ">= 1.0"
|
|
7646
7845
|
|
|
7647
7846
|
required_providers {
|
|
7847
|
+
archive = {
|
|
7848
|
+
source = "hashicorp/archive"
|
|
7849
|
+
version = "2.8.0"
|
|
7850
|
+
}
|
|
7648
7851
|
aws = {
|
|
7649
7852
|
source = "hashicorp/aws"
|
|
7650
7853
|
version = "6.61.0"
|
|
7651
7854
|
}
|
|
7855
|
+
random = {
|
|
7856
|
+
source = "hashicorp/random"
|
|
7857
|
+
version = "3.9.0"
|
|
7858
|
+
}
|
|
7652
7859
|
}
|
|
7653
7860
|
}
|
|
7654
7861
|
|
|
@@ -8293,7 +8500,7 @@ module "add_url_to_runtime_config" {
|
|
|
8293
8500
|
|
|
8294
8501
|
namespace = "connection"
|
|
8295
8502
|
key = "apis"
|
|
8296
|
-
value = { "TestApi" = aws_api_gateway_stage.api_stage.invoke_url }
|
|
8503
|
+
value = { "TestApi" = "\${aws_api_gateway_stage.api_stage.invoke_url}/" }
|
|
8297
8504
|
|
|
8298
8505
|
depends_on = [aws_api_gateway_stage.api_stage]
|
|
8299
8506
|
}
|
|
@@ -982,6 +982,10 @@ export * from './workspace.js';
|
|
|
982
982
|
exports[`ts#agent generator > should match snapshot for Terraform generated files > terraform-agent.tf 1`] = `
|
|
983
983
|
"terraform {
|
|
984
984
|
required_providers {
|
|
985
|
+
aws = {
|
|
986
|
+
source = "hashicorp/aws"
|
|
987
|
+
version = "6.61.0"
|
|
988
|
+
}
|
|
985
989
|
random = {
|
|
986
990
|
source = "hashicorp/random"
|
|
987
991
|
version = "3.9.0"
|
|
@@ -1293,6 +1297,10 @@ exports[`ts#agent generator > should match snapshot for Terraform generated file
|
|
|
1293
1297
|
source = "hashicorp/aws"
|
|
1294
1298
|
version = "6.61.0"
|
|
1295
1299
|
}
|
|
1300
|
+
external = {
|
|
1301
|
+
source = "hashicorp/external"
|
|
1302
|
+
version = "2.4.1"
|
|
1303
|
+
}
|
|
1296
1304
|
null = {
|
|
1297
1305
|
source = "hashicorp/null"
|
|
1298
1306
|
version = "3.3.1"
|
|
@@ -126,6 +126,8 @@ resource "aws_kms_key" "table" {
|
|
|
126
126
|
description = "KMS key for DynamoDB table \${var.name}"
|
|
127
127
|
enable_key_rotation = var.enable_key_rotation
|
|
128
128
|
|
|
129
|
+
deletion_window_in_days = 30
|
|
130
|
+
|
|
129
131
|
policy = jsonencode({
|
|
130
132
|
Version = "2012-10-17"
|
|
131
133
|
Statement = [
|
|
@@ -202,6 +204,10 @@ resource "aws_dynamodb_table" "table" {
|
|
|
202
204
|
enabled = var.encryption != "DEFAULT"
|
|
203
205
|
kms_key_arn = local.table_kms_key_arn
|
|
204
206
|
}
|
|
207
|
+
|
|
208
|
+
lifecycle {
|
|
209
|
+
prevent_destroy = true
|
|
210
|
+
}
|
|
205
211
|
}
|
|
206
212
|
|
|
207
213
|
output "table_name" {
|
|
@@ -320,6 +326,21 @@ module "add_to_runtime_config" {
|
|
|
320
326
|
tableName = module.dynamodb_table.table_name
|
|
321
327
|
}
|
|
322
328
|
}
|
|
329
|
+
|
|
330
|
+
output "table_name" {
|
|
331
|
+
description = "Name of the DynamoDB table"
|
|
332
|
+
value = module.dynamodb_table.table_name
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
output "table_arn" {
|
|
336
|
+
description = "ARN of the DynamoDB table, for use in IAM policies granting access to the table. Suffix with /index/* to cover its global secondary indexes."
|
|
337
|
+
value = module.dynamodb_table.table_arn
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
output "kms_key_arn" {
|
|
341
|
+
description = "ARN of the KMS key used to encrypt the DynamoDB table, for use in IAM policies granting access to the table. Null when using the AWS owned key (encryption = DEFAULT)."
|
|
342
|
+
value = module.dynamodb_table.kms_key_arn
|
|
343
|
+
}
|
|
323
344
|
"
|
|
324
345
|
`;
|
|
325
346
|
|
|
@@ -147,6 +147,10 @@ exports[`ts-lambda-function generator > terraform iac > should generate terrafor
|
|
|
147
147
|
source = "hashicorp/archive"
|
|
148
148
|
version = "2.8.0"
|
|
149
149
|
}
|
|
150
|
+
random = {
|
|
151
|
+
source = "hashicorp/random"
|
|
152
|
+
version = "3.9.0"
|
|
153
|
+
}
|
|
150
154
|
}
|
|
151
155
|
}
|
|
152
156
|
|
|
@@ -328,6 +332,10 @@ exports[`ts-lambda-function generator > terraform iac > should match snapshot fo
|
|
|
328
332
|
source = "hashicorp/archive"
|
|
329
333
|
version = "2.8.0"
|
|
330
334
|
}
|
|
335
|
+
random = {
|
|
336
|
+
source = "hashicorp/random"
|
|
337
|
+
version = "3.9.0"
|
|
338
|
+
}
|
|
331
339
|
}
|
|
332
340
|
}
|
|
333
341
|
|
|
@@ -157,6 +157,10 @@ exports[`ts#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"
|
|
@@ -539,6 +539,20 @@ export interface AuroraDatabaseProps extends _AuroraDatabaseProps {
|
|
|
539
539
|
* @default true
|
|
540
540
|
*/
|
|
541
541
|
readonly enablePerformanceInsights?: boolean;
|
|
542
|
+
|
|
543
|
+
/**
|
|
544
|
+
* Minimum Aurora Serverless v2 ACUs.
|
|
545
|
+
*
|
|
546
|
+
* @default 0.5
|
|
547
|
+
*/
|
|
548
|
+
readonly serverlessV2MinCapacity?: number;
|
|
549
|
+
|
|
550
|
+
/**
|
|
551
|
+
* Maximum Aurora Serverless v2 ACUs.
|
|
552
|
+
*
|
|
553
|
+
* @default 4
|
|
554
|
+
*/
|
|
555
|
+
readonly serverlessV2MaxCapacity?: number;
|
|
542
556
|
}
|
|
543
557
|
|
|
544
558
|
/**
|
|
@@ -568,6 +582,8 @@ export abstract class AuroraDatabase extends Construct {
|
|
|
568
582
|
enableKeyRotation = true,
|
|
569
583
|
enableCloudwatchLogs = true,
|
|
570
584
|
enablePerformanceInsights = true,
|
|
585
|
+
serverlessV2MinCapacity = 0.5,
|
|
586
|
+
serverlessV2MaxCapacity = 4,
|
|
571
587
|
engine,
|
|
572
588
|
engineVersion,
|
|
573
589
|
...clusterProps
|
|
@@ -583,6 +599,8 @@ export abstract class AuroraDatabase extends Construct {
|
|
|
583
599
|
vpc,
|
|
584
600
|
vpcSubnets,
|
|
585
601
|
engine: engine.clusterEngine(engineVersion ?? engine.defaultVersion),
|
|
602
|
+
serverlessV2MinCapacity,
|
|
603
|
+
serverlessV2MaxCapacity,
|
|
586
604
|
writer:
|
|
587
605
|
writer ??
|
|
588
606
|
ClusterInstance.serverlessV2('writer', {
|
|
@@ -1008,6 +1026,8 @@ resource "aws_kms_key" "database" {
|
|
|
1008
1026
|
description = "KMS key for Aurora cluster \${var.name}"
|
|
1009
1027
|
enable_key_rotation = var.enable_key_rotation
|
|
1010
1028
|
|
|
1029
|
+
deletion_window_in_days = 30
|
|
1030
|
+
|
|
1011
1031
|
policy = jsonencode({
|
|
1012
1032
|
Version = "2012-10-17"
|
|
1013
1033
|
Statement = [
|
|
@@ -1150,6 +1170,10 @@ resource "aws_rds_cluster" "database" {
|
|
|
1150
1170
|
tags = merge(var.tags, {
|
|
1151
1171
|
Name = "\${var.name}-aurora"
|
|
1152
1172
|
})
|
|
1173
|
+
|
|
1174
|
+
lifecycle {
|
|
1175
|
+
prevent_destroy = true
|
|
1176
|
+
}
|
|
1153
1177
|
}
|
|
1154
1178
|
|
|
1155
1179
|
resource "aws_rds_cluster_instance" "database" {
|
|
@@ -1556,6 +1580,10 @@ exports[`ts#rdb generator > should generate terraform modules when iac is Terraf
|
|
|
1556
1580
|
source = "hashicorp/aws"
|
|
1557
1581
|
version = "6.61.0"
|
|
1558
1582
|
}
|
|
1583
|
+
external = {
|
|
1584
|
+
source = "hashicorp/external"
|
|
1585
|
+
version = "2.4.1"
|
|
1586
|
+
}
|
|
1559
1587
|
null = {
|
|
1560
1588
|
source = "hashicorp/null"
|
|
1561
1589
|
version = "3.3.1"
|
|
@@ -1637,9 +1665,9 @@ variable "enable_credential_rotation" {
|
|
|
1637
1665
|
}
|
|
1638
1666
|
|
|
1639
1667
|
variable "enable_cloudwatch_logs" {
|
|
1640
|
-
description = "Whether to export Aurora engine logs to CloudWatch. PostgreSQL
|
|
1668
|
+
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."
|
|
1641
1669
|
type = bool
|
|
1642
|
-
default =
|
|
1670
|
+
default = true
|
|
1643
1671
|
}
|
|
1644
1672
|
|
|
1645
1673
|
variable "enable_performance_insights" {
|
|
@@ -1660,6 +1688,12 @@ variable "enable_backup" {
|
|
|
1660
1688
|
default = false
|
|
1661
1689
|
}
|
|
1662
1690
|
|
|
1691
|
+
variable "enable_key_rotation" {
|
|
1692
|
+
description = "Whether to enable automatic key rotation on the KMS key used to encrypt the Aurora cluster and its credentials secret."
|
|
1693
|
+
type = bool
|
|
1694
|
+
default = true
|
|
1695
|
+
}
|
|
1696
|
+
|
|
1663
1697
|
variable "tags" {
|
|
1664
1698
|
description = "Tags to apply to all resources."
|
|
1665
1699
|
type = map(string)
|
|
@@ -1719,6 +1753,7 @@ module "aurora" {
|
|
|
1719
1753
|
enable_performance_insights = var.enable_performance_insights
|
|
1720
1754
|
performance_insights_retention_period = var.performance_insights_retention_period
|
|
1721
1755
|
enable_backup = var.enable_backup
|
|
1756
|
+
enable_key_rotation = var.enable_key_rotation
|
|
1722
1757
|
tags = var.tags
|
|
1723
1758
|
}
|
|
1724
1759
|
|
|
@@ -2494,6 +2529,8 @@ resource "aws_kms_key" "database" {
|
|
|
2494
2529
|
description = "KMS key for Aurora cluster \${var.name}"
|
|
2495
2530
|
enable_key_rotation = var.enable_key_rotation
|
|
2496
2531
|
|
|
2532
|
+
deletion_window_in_days = 30
|
|
2533
|
+
|
|
2497
2534
|
policy = jsonencode({
|
|
2498
2535
|
Version = "2012-10-17"
|
|
2499
2536
|
Statement = [
|
|
@@ -2636,6 +2673,10 @@ resource "aws_rds_cluster" "database" {
|
|
|
2636
2673
|
tags = merge(var.tags, {
|
|
2637
2674
|
Name = "\${var.name}-aurora"
|
|
2638
2675
|
})
|
|
2676
|
+
|
|
2677
|
+
lifecycle {
|
|
2678
|
+
prevent_destroy = true
|
|
2679
|
+
}
|
|
2639
2680
|
}
|
|
2640
2681
|
|
|
2641
2682
|
resource "aws_rds_cluster_instance" "database" {
|
|
@@ -3042,6 +3083,10 @@ exports[`ts#rdb generator > should generate terraform modules with MySQL engine
|
|
|
3042
3083
|
source = "hashicorp/aws"
|
|
3043
3084
|
version = "6.61.0"
|
|
3044
3085
|
}
|
|
3086
|
+
external = {
|
|
3087
|
+
source = "hashicorp/external"
|
|
3088
|
+
version = "2.4.1"
|
|
3089
|
+
}
|
|
3045
3090
|
null = {
|
|
3046
3091
|
source = "hashicorp/null"
|
|
3047
3092
|
version = "3.3.1"
|
|
@@ -3123,9 +3168,9 @@ variable "enable_credential_rotation" {
|
|
|
3123
3168
|
}
|
|
3124
3169
|
|
|
3125
3170
|
variable "enable_cloudwatch_logs" {
|
|
3126
|
-
description = "Whether to export Aurora engine logs to CloudWatch. PostgreSQL
|
|
3171
|
+
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."
|
|
3127
3172
|
type = bool
|
|
3128
|
-
default =
|
|
3173
|
+
default = true
|
|
3129
3174
|
}
|
|
3130
3175
|
|
|
3131
3176
|
variable "enable_performance_insights" {
|
|
@@ -3146,6 +3191,12 @@ variable "enable_backup" {
|
|
|
3146
3191
|
default = false
|
|
3147
3192
|
}
|
|
3148
3193
|
|
|
3194
|
+
variable "enable_key_rotation" {
|
|
3195
|
+
description = "Whether to enable automatic key rotation on the KMS key used to encrypt the Aurora cluster and its credentials secret."
|
|
3196
|
+
type = bool
|
|
3197
|
+
default = true
|
|
3198
|
+
}
|
|
3199
|
+
|
|
3149
3200
|
variable "tags" {
|
|
3150
3201
|
description = "Tags to apply to all resources."
|
|
3151
3202
|
type = map(string)
|
|
@@ -3205,6 +3256,7 @@ module "aurora" {
|
|
|
3205
3256
|
enable_performance_insights = var.enable_performance_insights
|
|
3206
3257
|
performance_insights_retention_period = var.performance_insights_retention_period
|
|
3207
3258
|
enable_backup = var.enable_backup
|
|
3259
|
+
enable_key_rotation = var.enable_key_rotation
|
|
3208
3260
|
tags = var.tags
|
|
3209
3261
|
}
|
|
3210
3262
|
|
|
@@ -4332,6 +4384,20 @@ export interface AuroraDatabaseProps extends _AuroraDatabaseProps {
|
|
|
4332
4384
|
* @default true
|
|
4333
4385
|
*/
|
|
4334
4386
|
readonly enablePerformanceInsights?: boolean;
|
|
4387
|
+
|
|
4388
|
+
/**
|
|
4389
|
+
* Minimum Aurora Serverless v2 ACUs.
|
|
4390
|
+
*
|
|
4391
|
+
* @default 0.5
|
|
4392
|
+
*/
|
|
4393
|
+
readonly serverlessV2MinCapacity?: number;
|
|
4394
|
+
|
|
4395
|
+
/**
|
|
4396
|
+
* Maximum Aurora Serverless v2 ACUs.
|
|
4397
|
+
*
|
|
4398
|
+
* @default 4
|
|
4399
|
+
*/
|
|
4400
|
+
readonly serverlessV2MaxCapacity?: number;
|
|
4335
4401
|
}
|
|
4336
4402
|
|
|
4337
4403
|
/**
|
|
@@ -4361,6 +4427,8 @@ export abstract class AuroraDatabase extends Construct {
|
|
|
4361
4427
|
enableKeyRotation = true,
|
|
4362
4428
|
enableCloudwatchLogs = true,
|
|
4363
4429
|
enablePerformanceInsights = true,
|
|
4430
|
+
serverlessV2MinCapacity = 0.5,
|
|
4431
|
+
serverlessV2MaxCapacity = 4,
|
|
4364
4432
|
engine,
|
|
4365
4433
|
engineVersion,
|
|
4366
4434
|
...clusterProps
|
|
@@ -4376,6 +4444,8 @@ export abstract class AuroraDatabase extends Construct {
|
|
|
4376
4444
|
vpc,
|
|
4377
4445
|
vpcSubnets,
|
|
4378
4446
|
engine: engine.clusterEngine(engineVersion ?? engine.defaultVersion),
|
|
4447
|
+
serverlessV2MinCapacity,
|
|
4448
|
+
serverlessV2MaxCapacity,
|
|
4379
4449
|
writer:
|
|
4380
4450
|
writer ??
|
|
4381
4451
|
ClusterInstance.serverlessV2('writer', {
|