@aws/nx-plugin 0.108.0 → 0.109.1

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 (38) hide show
  1. package/package.json +2 -2
  2. package/src/py/fast-api/__snapshots__/generator.spec.ts.snap +167 -89
  3. package/src/py/lambda-function/__snapshots__/generator.spec.ts.snap +72 -16
  4. package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +11 -9
  5. package/src/py/strands-agent/__snapshots__/generator.spec.ts.snap +11 -9
  6. package/src/py/strands-agent/generator.js +95 -2
  7. package/src/py/strands-agent/generator.js.map +1 -1
  8. package/src/py/strands-agent/scripts/http/chat.ts.template +38 -0
  9. package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +113 -61
  10. package/src/terraform/project/files/application/scripts/aws-config.ts.template +41 -0
  11. package/src/terraform/project/files/application/scripts/bootstrap.ts.template +91 -0
  12. package/src/terraform/project/files/application/scripts/init.ts.template +44 -0
  13. package/src/terraform/project/generator.js +16 -11
  14. package/src/terraform/project/generator.js.map +1 -1
  15. package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +167 -89
  16. package/src/ts/lambda-function/__snapshots__/generator.spec.ts.snap +72 -16
  17. package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +11 -9
  18. package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +7 -0
  19. package/src/ts/strands-agent/__snapshots__/generator.spec.ts.snap +11 -9
  20. package/src/ts/strands-agent/generator.js +31 -0
  21. package/src/ts/strands-agent/generator.js.map +1 -1
  22. package/src/ts/strands-agent/scripts/http/chat.ts.template +35 -0
  23. package/src/utils/agent-core-constructs/files/terraform/app/agent-core/__nameKebabCase__/__nameKebabCase__.tf.template +14 -12
  24. package/src/utils/api-constructs/files/terraform/app/apis/http/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +28 -15
  25. package/src/utils/api-constructs/files/terraform/app/apis/rest/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +29 -16
  26. package/src/utils/files/terraform/scripts/reset-runtime-config.ts.template +25 -0
  27. package/src/utils/files/terraform/src/core/asset-bucket/asset-bucket.tf.template +203 -0
  28. package/src/utils/files/terraform/src/core/runtime-config/appconfig/appconfig.tf.template +42 -39
  29. package/src/utils/files/terraform/src/core/runtime-config/appconfig-deployment/appconfig-deployment.tf.template +138 -0
  30. package/src/utils/files/terraform/src/core/runtime-config/entry/entry.tf.template +26 -90
  31. package/src/utils/files/terraform/src/core/runtime-config/read/read.tf.template +61 -5
  32. package/src/utils/function-constructs/files/terraform/app/lambda-functions/__functionNameKebabCase__/__functionNameKebabCase__.tf.template +35 -7
  33. package/src/utils/shared-constructs.js +4 -2
  34. package/src/utils/shared-constructs.js.map +1 -1
  35. package/src/utils/versions.d.ts +7 -3
  36. package/src/utils/versions.js +6 -2
  37. package/src/utils/versions.js.map +1 -1
  38. package/src/utils/website-constructs/files/terraform/core/static-website/static-website.tf.template +7 -0
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/terraform/project/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/terraform/project/generator.ts"],"names":[],"mappings":"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"}
@@ -3209,6 +3209,11 @@ variable "additional_iam_policy_statements" {
3209
3209
  default = []
3210
3210
  }
3211
3211
 
3212
+ variable "asset_bucket_name" {
3213
+ description = "Name of the shared asset S3 bucket used to stage the Lambda deployment zip. Instantiate the \`core/asset-bucket\` module once per deployment and pass its \`bucket_name\` output here."
3214
+ type = string
3215
+ }
3216
+
3212
3217
  # CORS Configuration (passed to core module)
3213
3218
  variable "cors_allow_credentials" {
3214
3219
  description = "Whether to allow credentials in CORS requests"
@@ -3257,6 +3262,12 @@ variable "tags" {
3257
3262
  data "aws_region" "current" {}
3258
3263
  data "aws_caller_identity" "current" {}
3259
3264
 
3265
+ resource "random_string" "suffix" {
3266
+ length = 8
3267
+ special = false
3268
+ upper = false
3269
+ }
3270
+
3260
3271
  # Resources
3261
3272
 
3262
3273
  # Create Lambda ZIP file from the bundle directory
@@ -3266,12 +3277,20 @@ data "archive_file" "lambda_zip" {
3266
3277
  output_path = "\${path.module}/../../../../../../../dist/packages/common/terraform/apis/test-api/lambda.zip"
3267
3278
  }
3268
3279
 
3280
+ resource "aws_s3_object" "lambda_zip" {
3281
+ bucket = var.asset_bucket_name
3282
+ key = "apis/test-api/\${data.archive_file.lambda_zip.output_base64sha256}.zip"
3283
+ source = data.archive_file.lambda_zip.output_path
3284
+ source_hash = data.archive_file.lambda_zip.output_base64sha256
3285
+ etag = data.archive_file.lambda_zip.output_md5
3286
+ }
3287
+
3269
3288
 
3270
3289
  # Use the core HTTP API module
3271
3290
  module "http_api" {
3272
3291
  source = "../../../core/api/http-api"
3273
3292
 
3274
- api_name = "TestApi"
3293
+ api_name = "TestApi-\${random_string.suffix.result}"
3275
3294
  api_description = "TestApi HTTP API"
3276
3295
  stage_name = "$default"
3277
3296
  stage_auto_deploy = true
@@ -3296,8 +3315,10 @@ resource "aws_lambda_function" "api_lambda" {
3296
3315
  #checkov:skip=CKV_AWS_272:Code signing not required for this use case
3297
3316
  #checkov:skip=CKV_AWS_115:Concurrent execution limit not required for this use case
3298
3317
  #checkov:skip=CKV_AWS_173:Lambda environment variables encrypted by managed key
3299
- filename = data.archive_file.lambda_zip.output_path
3300
- function_name = "TestApiHandler"
3318
+ s3_bucket = aws_s3_object.lambda_zip.bucket
3319
+ s3_key = aws_s3_object.lambda_zip.key
3320
+ s3_object_version = aws_s3_object.lambda_zip.version_id
3321
+ function_name = "TestApiHandler-\${random_string.suffix.result}"
3301
3322
  role = aws_iam_role.lambda_execution_role.arn
3302
3323
  handler = "index.handler"
3303
3324
  runtime = "nodejs22.x"
@@ -3322,7 +3343,7 @@ resource "aws_lambda_function" "api_lambda" {
3322
3343
 
3323
3344
  # IAM role for Lambda execution
3324
3345
  resource "aws_iam_role" "lambda_execution_role" {
3325
- name = "TestApiHandler-execution-role"
3346
+ name = "TestApiHandler-execution-role-\${random_string.suffix.result}"
3326
3347
 
3327
3348
  assume_role_policy = jsonencode({
3328
3349
  Version = "2012-10-17"
@@ -3355,7 +3376,7 @@ resource "aws_iam_role_policy_attachment" "lambda_xray_execution" {
3355
3376
  # Additional IAM policies for Lambda (if provided)
3356
3377
  resource "aws_iam_role_policy" "lambda_additional_policies" {
3357
3378
  count = length(var.additional_iam_policy_statements) > 0 ? 1 : 0
3358
- name = "TestApiHandler-additional-policies"
3379
+ name = "TestApiHandler-additional-policies-\${random_string.suffix.result}"
3359
3380
  role = aws_iam_role.lambda_execution_role.id
3360
3381
 
3361
3382
  policy = jsonencode({
@@ -3369,7 +3390,7 @@ resource "aws_cloudwatch_log_group" "lambda_logs" {
3369
3390
  #checkov:skip=CKV_AWS_158:Using default CloudWatch log encryption
3370
3391
  #checkov:skip=CKV_AWS_338:Log retention set to forever
3371
3392
  #checkov:skip=CKV_AWS_66:Log retention set to forever
3372
- name = "/aws/lambda/TestApiHandler"
3393
+ name = "/aws/lambda/TestApiHandler-\${random_string.suffix.result}"
3373
3394
  tags = var.tags
3374
3395
  }
3375
3396
 
@@ -3379,7 +3400,7 @@ resource "aws_apigatewayv2_authorizer" "cognito_authorizer" {
3379
3400
  api_id = module.http_api.api_id
3380
3401
  authorizer_type = "JWT"
3381
3402
  identity_sources = ["$request.header.Authorization"]
3382
- name = "TestApiAuthorizer"
3403
+ name = "TestApiAuthorizer-\${random_string.suffix.result}"
3383
3404
 
3384
3405
  jwt_configuration {
3385
3406
  audience = var.user_pool_client_ids
@@ -3426,14 +3447,6 @@ module "add_url_to_runtime_config" {
3426
3447
  depends_on = [module.http_api]
3427
3448
  }
3428
3449
 
3429
- module "appconfig" {
3430
- source = "../../../core/runtime-config/appconfig"
3431
-
3432
- application_name = "TestApi-runtime-config"
3433
-
3434
- depends_on = [module.add_url_to_runtime_config]
3435
- }
3436
-
3437
3450
  # Lambda permission for API Gateway to invoke the function
3438
3451
  resource "aws_lambda_permission" "api_gateway_invoke" {
3439
3452
  statement_id = "AllowExecutionFromAPIGateway"
@@ -3839,6 +3852,11 @@ variable "additional_iam_policy_statements" {
3839
3852
  default = []
3840
3853
  }
3841
3854
 
3855
+ variable "asset_bucket_name" {
3856
+ description = "Name of the shared asset S3 bucket used to stage the Lambda deployment zip. Instantiate the \`core/asset-bucket\` module once per deployment and pass its \`bucket_name\` output here."
3857
+ type = string
3858
+ }
3859
+
3842
3860
  # CORS Configuration (passed to core module)
3843
3861
  variable "cors_allow_credentials" {
3844
3862
  description = "Whether to allow credentials in CORS requests"
@@ -3887,6 +3905,12 @@ variable "tags" {
3887
3905
  data "aws_region" "current" {}
3888
3906
  data "aws_caller_identity" "current" {}
3889
3907
 
3908
+ resource "random_string" "suffix" {
3909
+ length = 8
3910
+ special = false
3911
+ upper = false
3912
+ }
3913
+
3890
3914
  # Resources
3891
3915
 
3892
3916
  # Create Lambda ZIP file from the bundle directory
@@ -3896,12 +3920,20 @@ data "archive_file" "lambda_zip" {
3896
3920
  output_path = "\${path.module}/../../../../../../../dist/packages/common/terraform/apis/test-api/lambda.zip"
3897
3921
  }
3898
3922
 
3923
+ resource "aws_s3_object" "lambda_zip" {
3924
+ bucket = var.asset_bucket_name
3925
+ key = "apis/test-api/\${data.archive_file.lambda_zip.output_base64sha256}.zip"
3926
+ source = data.archive_file.lambda_zip.output_path
3927
+ source_hash = data.archive_file.lambda_zip.output_base64sha256
3928
+ etag = data.archive_file.lambda_zip.output_md5
3929
+ }
3930
+
3899
3931
 
3900
3932
  # Use the core HTTP API module
3901
3933
  module "http_api" {
3902
3934
  source = "../../../core/api/http-api"
3903
3935
 
3904
- api_name = "TestApi"
3936
+ api_name = "TestApi-\${random_string.suffix.result}"
3905
3937
  api_description = "TestApi HTTP API"
3906
3938
  stage_name = "$default"
3907
3939
  stage_auto_deploy = true
@@ -3926,8 +3958,10 @@ resource "aws_lambda_function" "api_lambda" {
3926
3958
  #checkov:skip=CKV_AWS_272:Code signing not required for this use case
3927
3959
  #checkov:skip=CKV_AWS_115:Concurrent execution limit not required for this use case
3928
3960
  #checkov:skip=CKV_AWS_173:Lambda environment variables encrypted by managed key
3929
- filename = data.archive_file.lambda_zip.output_path
3930
- function_name = "TestApiHandler"
3961
+ s3_bucket = aws_s3_object.lambda_zip.bucket
3962
+ s3_key = aws_s3_object.lambda_zip.key
3963
+ s3_object_version = aws_s3_object.lambda_zip.version_id
3964
+ function_name = "TestApiHandler-\${random_string.suffix.result}"
3931
3965
  role = aws_iam_role.lambda_execution_role.arn
3932
3966
  handler = "index.handler"
3933
3967
  runtime = "nodejs22.x"
@@ -3952,7 +3986,7 @@ resource "aws_lambda_function" "api_lambda" {
3952
3986
 
3953
3987
  # IAM role for Lambda execution
3954
3988
  resource "aws_iam_role" "lambda_execution_role" {
3955
- name = "TestApiHandler-execution-role"
3989
+ name = "TestApiHandler-execution-role-\${random_string.suffix.result}"
3956
3990
 
3957
3991
  assume_role_policy = jsonencode({
3958
3992
  Version = "2012-10-17"
@@ -3985,7 +4019,7 @@ resource "aws_iam_role_policy_attachment" "lambda_xray_execution" {
3985
4019
  # Additional IAM policies for Lambda (if provided)
3986
4020
  resource "aws_iam_role_policy" "lambda_additional_policies" {
3987
4021
  count = length(var.additional_iam_policy_statements) > 0 ? 1 : 0
3988
- name = "TestApiHandler-additional-policies"
4022
+ name = "TestApiHandler-additional-policies-\${random_string.suffix.result}"
3989
4023
  role = aws_iam_role.lambda_execution_role.id
3990
4024
 
3991
4025
  policy = jsonencode({
@@ -3999,7 +4033,7 @@ resource "aws_cloudwatch_log_group" "lambda_logs" {
3999
4033
  #checkov:skip=CKV_AWS_158:Using default CloudWatch log encryption
4000
4034
  #checkov:skip=CKV_AWS_338:Log retention set to forever
4001
4035
  #checkov:skip=CKV_AWS_66:Log retention set to forever
4002
- name = "/aws/lambda/TestApiHandler"
4036
+ name = "/aws/lambda/TestApiHandler-\${random_string.suffix.result}"
4003
4037
  tags = var.tags
4004
4038
  }
4005
4039
 
@@ -4043,14 +4077,6 @@ module "add_url_to_runtime_config" {
4043
4077
  depends_on = [module.http_api]
4044
4078
  }
4045
4079
 
4046
- module "appconfig" {
4047
- source = "../../../core/runtime-config/appconfig"
4048
-
4049
- application_name = "TestApi-runtime-config"
4050
-
4051
- depends_on = [module.add_url_to_runtime_config]
4052
- }
4053
-
4054
4080
  # Lambda permission for API Gateway to invoke the function
4055
4081
  resource "aws_lambda_permission" "api_gateway_invoke" {
4056
4082
  statement_id = "AllowExecutionFromAPIGateway"
@@ -4456,6 +4482,11 @@ variable "additional_iam_policy_statements" {
4456
4482
  default = []
4457
4483
  }
4458
4484
 
4485
+ variable "asset_bucket_name" {
4486
+ description = "Name of the shared asset S3 bucket used to stage the Lambda deployment zip. Instantiate the \`core/asset-bucket\` module once per deployment and pass its \`bucket_name\` output here."
4487
+ type = string
4488
+ }
4489
+
4459
4490
  # CORS Configuration (passed to core module)
4460
4491
  variable "cors_allow_credentials" {
4461
4492
  description = "Whether to allow credentials in CORS requests"
@@ -4504,6 +4535,12 @@ variable "tags" {
4504
4535
  data "aws_region" "current" {}
4505
4536
  data "aws_caller_identity" "current" {}
4506
4537
 
4538
+ resource "random_string" "suffix" {
4539
+ length = 8
4540
+ special = false
4541
+ upper = false
4542
+ }
4543
+
4507
4544
  # Resources
4508
4545
 
4509
4546
  # Create Lambda ZIP file from the bundle directory
@@ -4513,12 +4550,20 @@ data "archive_file" "lambda_zip" {
4513
4550
  output_path = "\${path.module}/../../../../../../../dist/packages/common/terraform/apis/test-api/lambda.zip"
4514
4551
  }
4515
4552
 
4553
+ resource "aws_s3_object" "lambda_zip" {
4554
+ bucket = var.asset_bucket_name
4555
+ key = "apis/test-api/\${data.archive_file.lambda_zip.output_base64sha256}.zip"
4556
+ source = data.archive_file.lambda_zip.output_path
4557
+ source_hash = data.archive_file.lambda_zip.output_base64sha256
4558
+ etag = data.archive_file.lambda_zip.output_md5
4559
+ }
4560
+
4516
4561
 
4517
4562
  # Use the core HTTP API module
4518
4563
  module "http_api" {
4519
4564
  source = "../../../core/api/http-api"
4520
4565
 
4521
- api_name = "TestApi"
4566
+ api_name = "TestApi-\${random_string.suffix.result}"
4522
4567
  api_description = "TestApi HTTP API"
4523
4568
  stage_name = "$default"
4524
4569
  stage_auto_deploy = true
@@ -4543,8 +4588,10 @@ resource "aws_lambda_function" "api_lambda" {
4543
4588
  #checkov:skip=CKV_AWS_272:Code signing not required for this use case
4544
4589
  #checkov:skip=CKV_AWS_115:Concurrent execution limit not required for this use case
4545
4590
  #checkov:skip=CKV_AWS_173:Lambda environment variables encrypted by managed key
4546
- filename = data.archive_file.lambda_zip.output_path
4547
- function_name = "TestApiHandler"
4591
+ s3_bucket = aws_s3_object.lambda_zip.bucket
4592
+ s3_key = aws_s3_object.lambda_zip.key
4593
+ s3_object_version = aws_s3_object.lambda_zip.version_id
4594
+ function_name = "TestApiHandler-\${random_string.suffix.result}"
4548
4595
  role = aws_iam_role.lambda_execution_role.arn
4549
4596
  handler = "index.handler"
4550
4597
  runtime = "nodejs22.x"
@@ -4569,7 +4616,7 @@ resource "aws_lambda_function" "api_lambda" {
4569
4616
 
4570
4617
  # IAM role for Lambda execution
4571
4618
  resource "aws_iam_role" "lambda_execution_role" {
4572
- name = "TestApiHandler-execution-role"
4619
+ name = "TestApiHandler-execution-role-\${random_string.suffix.result}"
4573
4620
 
4574
4621
  assume_role_policy = jsonencode({
4575
4622
  Version = "2012-10-17"
@@ -4602,7 +4649,7 @@ resource "aws_iam_role_policy_attachment" "lambda_xray_execution" {
4602
4649
  # Additional IAM policies for Lambda (if provided)
4603
4650
  resource "aws_iam_role_policy" "lambda_additional_policies" {
4604
4651
  count = length(var.additional_iam_policy_statements) > 0 ? 1 : 0
4605
- name = "TestApiHandler-additional-policies"
4652
+ name = "TestApiHandler-additional-policies-\${random_string.suffix.result}"
4606
4653
  role = aws_iam_role.lambda_execution_role.id
4607
4654
 
4608
4655
  policy = jsonencode({
@@ -4616,7 +4663,7 @@ resource "aws_cloudwatch_log_group" "lambda_logs" {
4616
4663
  #checkov:skip=CKV_AWS_158:Using default CloudWatch log encryption
4617
4664
  #checkov:skip=CKV_AWS_338:Log retention set to forever
4618
4665
  #checkov:skip=CKV_AWS_66:Log retention set to forever
4619
- name = "/aws/lambda/TestApiHandler"
4666
+ name = "/aws/lambda/TestApiHandler-\${random_string.suffix.result}"
4620
4667
  tags = var.tags
4621
4668
  }
4622
4669
 
@@ -4662,14 +4709,6 @@ module "add_url_to_runtime_config" {
4662
4709
  depends_on = [module.http_api]
4663
4710
  }
4664
4711
 
4665
- module "appconfig" {
4666
- source = "../../../core/runtime-config/appconfig"
4667
-
4668
- application_name = "TestApi-runtime-config"
4669
-
4670
- depends_on = [module.add_url_to_runtime_config]
4671
- }
4672
-
4673
4712
  # Lambda permission for API Gateway to invoke the function
4674
4713
  resource "aws_lambda_permission" "api_gateway_invoke" {
4675
4714
  statement_id = "AllowExecutionFromAPIGateway"
@@ -5100,6 +5139,11 @@ variable "additional_iam_policy_statements" {
5100
5139
  default = []
5101
5140
  }
5102
5141
 
5142
+ variable "asset_bucket_name" {
5143
+ description = "Name of the shared asset S3 bucket used to stage the Lambda deployment zip. Instantiate the \`core/asset-bucket\` module once per deployment and pass its \`bucket_name\` output here."
5144
+ type = string
5145
+ }
5146
+
5103
5147
  # CORS Configuration (passed to core module)
5104
5148
 
5105
5149
  variable "cors_allow_headers" {
@@ -5138,20 +5182,34 @@ variable "tags" {
5138
5182
  data "aws_region" "current" {}
5139
5183
  data "aws_caller_identity" "current" {}
5140
5184
 
5185
+ resource "random_string" "suffix" {
5186
+ length = 8
5187
+ special = false
5188
+ upper = false
5189
+ }
5190
+
5141
5191
  # Resources
5142
5192
 
5143
- # Create Lambda ZIP file from the FastAPI bundle directory
5193
+ # Create Lambda ZIP file from the bundle directory
5144
5194
  data "archive_file" "lambda_zip" {
5145
5195
  type = "zip"
5146
5196
  source_dir = "\${path.module}/../../../../../../../dist/apps/test-api/bundle"
5147
5197
  output_path = "\${path.module}/../../../../../../../dist/packages/common/terraform/apis/test-api/lambda.zip"
5148
5198
  }
5149
5199
 
5200
+ resource "aws_s3_object" "lambda_zip" {
5201
+ bucket = var.asset_bucket_name
5202
+ key = "apis/test-api/\${data.archive_file.lambda_zip.output_base64sha256}.zip"
5203
+ source = data.archive_file.lambda_zip.output_path
5204
+ source_hash = data.archive_file.lambda_zip.output_base64sha256
5205
+ etag = data.archive_file.lambda_zip.output_md5
5206
+ }
5207
+
5150
5208
  # Use the core REST API module
5151
5209
  module "rest_api" {
5152
5210
  source = "../../../core/api/rest-api"
5153
5211
 
5154
- api_name = "TestApi"
5212
+ api_name = "TestApi-\${random_string.suffix.result}"
5155
5213
  api_description = "TestApi REST API"
5156
5214
  stage_name = "prod"
5157
5215
  stage_auto_deploy = true
@@ -5184,8 +5242,10 @@ resource "aws_lambda_function" "api_lambda" {
5184
5242
  #checkov:skip=CKV_AWS_272:Code signing not required for this use case
5185
5243
  #checkov:skip=CKV_AWS_115:Concurrent execution limit not required for this use case
5186
5244
  #checkov:skip=CKV_AWS_173:Lambda environment variables encrypted by managed key
5187
- filename = data.archive_file.lambda_zip.output_path
5188
- function_name = "TestApiHandler"
5245
+ s3_bucket = aws_s3_object.lambda_zip.bucket
5246
+ s3_key = aws_s3_object.lambda_zip.key
5247
+ s3_object_version = aws_s3_object.lambda_zip.version_id
5248
+ function_name = "TestApiHandler-\${random_string.suffix.result}"
5189
5249
  role = aws_iam_role.lambda_execution_role.arn
5190
5250
  handler = "index.handler"
5191
5251
  runtime = "nodejs22.x"
@@ -5210,7 +5270,7 @@ resource "aws_lambda_function" "api_lambda" {
5210
5270
 
5211
5271
  # IAM role for Lambda execution
5212
5272
  resource "aws_iam_role" "lambda_execution_role" {
5213
- name = "TestApiHandler-execution-role"
5273
+ name = "TestApiHandler-execution-role-\${random_string.suffix.result}"
5214
5274
 
5215
5275
  assume_role_policy = jsonencode({
5216
5276
  Version = "2012-10-17"
@@ -5243,7 +5303,7 @@ resource "aws_iam_role_policy_attachment" "lambda_xray_execution" {
5243
5303
  # Additional IAM policies for Lambda (if provided)
5244
5304
  resource "aws_iam_role_policy" "lambda_additional_policies" {
5245
5305
  count = length(var.additional_iam_policy_statements) > 0 ? 1 : 0
5246
- name = "TestApiHandler-additional-policies"
5306
+ name = "TestApiHandler-additional-policies-\${random_string.suffix.result}"
5247
5307
  role = aws_iam_role.lambda_execution_role.id
5248
5308
 
5249
5309
  policy = jsonencode({
@@ -5257,14 +5317,14 @@ resource "aws_cloudwatch_log_group" "lambda_logs" {
5257
5317
  #checkov:skip=CKV_AWS_158:Using default CloudWatch log encryption
5258
5318
  #checkov:skip=CKV_AWS_338:Log retention set to forever
5259
5319
  #checkov:skip=CKV_AWS_66:Log retention set to forever
5260
- name = "/aws/lambda/TestApiHandler"
5320
+ name = "/aws/lambda/TestApiHandler-\${random_string.suffix.result}"
5261
5321
  tags = var.tags
5262
5322
  }
5263
5323
 
5264
5324
 
5265
5325
  # Cognito User Pool Authorizer
5266
5326
  resource "aws_api_gateway_authorizer" "cognito_authorizer" {
5267
- name = "TestApiAuthorizer"
5327
+ name = "TestApiAuthorizer-\${random_string.suffix.result}"
5268
5328
  rest_api_id = module.rest_api.api_id
5269
5329
  type = "COGNITO_USER_POOLS"
5270
5330
  provider_arns = ["arn:aws:cognito-idp:\${data.aws_region.current.name}:\${data.aws_caller_identity.current.account_id}:userpool/\${var.user_pool_id}"]
@@ -5445,14 +5505,6 @@ module "add_url_to_runtime_config" {
5445
5505
  depends_on = [aws_api_gateway_stage.api_stage]
5446
5506
  }
5447
5507
 
5448
- module "appconfig" {
5449
- source = "../../../core/runtime-config/appconfig"
5450
-
5451
- application_name = "TestApi-runtime-config"
5452
-
5453
- depends_on = [module.add_url_to_runtime_config]
5454
- }
5455
-
5456
5508
  # Outputs
5457
5509
 
5458
5510
  # API Gateway Outputs (from core module)
@@ -5873,6 +5925,11 @@ variable "additional_iam_policy_statements" {
5873
5925
  default = []
5874
5926
  }
5875
5927
 
5928
+ variable "asset_bucket_name" {
5929
+ description = "Name of the shared asset S3 bucket used to stage the Lambda deployment zip. Instantiate the \`core/asset-bucket\` module once per deployment and pass its \`bucket_name\` output here."
5930
+ type = string
5931
+ }
5932
+
5876
5933
  # CORS Configuration (passed to core module)
5877
5934
 
5878
5935
  variable "cors_allow_headers" {
@@ -5911,20 +5968,34 @@ variable "tags" {
5911
5968
  data "aws_region" "current" {}
5912
5969
  data "aws_caller_identity" "current" {}
5913
5970
 
5971
+ resource "random_string" "suffix" {
5972
+ length = 8
5973
+ special = false
5974
+ upper = false
5975
+ }
5976
+
5914
5977
  # Resources
5915
5978
 
5916
- # Create Lambda ZIP file from the FastAPI bundle directory
5979
+ # Create Lambda ZIP file from the bundle directory
5917
5980
  data "archive_file" "lambda_zip" {
5918
5981
  type = "zip"
5919
5982
  source_dir = "\${path.module}/../../../../../../../dist/apps/test-api/bundle"
5920
5983
  output_path = "\${path.module}/../../../../../../../dist/packages/common/terraform/apis/test-api/lambda.zip"
5921
5984
  }
5922
5985
 
5986
+ resource "aws_s3_object" "lambda_zip" {
5987
+ bucket = var.asset_bucket_name
5988
+ key = "apis/test-api/\${data.archive_file.lambda_zip.output_base64sha256}.zip"
5989
+ source = data.archive_file.lambda_zip.output_path
5990
+ source_hash = data.archive_file.lambda_zip.output_base64sha256
5991
+ etag = data.archive_file.lambda_zip.output_md5
5992
+ }
5993
+
5923
5994
  # Use the core REST API module
5924
5995
  module "rest_api" {
5925
5996
  source = "../../../core/api/rest-api"
5926
5997
 
5927
- api_name = "TestApi"
5998
+ api_name = "TestApi-\${random_string.suffix.result}"
5928
5999
  api_description = "TestApi REST API"
5929
6000
  stage_name = "prod"
5930
6001
  stage_auto_deploy = true
@@ -5957,8 +6028,10 @@ resource "aws_lambda_function" "api_lambda" {
5957
6028
  #checkov:skip=CKV_AWS_272:Code signing not required for this use case
5958
6029
  #checkov:skip=CKV_AWS_115:Concurrent execution limit not required for this use case
5959
6030
  #checkov:skip=CKV_AWS_173:Lambda environment variables encrypted by managed key
5960
- filename = data.archive_file.lambda_zip.output_path
5961
- function_name = "TestApiHandler"
6031
+ s3_bucket = aws_s3_object.lambda_zip.bucket
6032
+ s3_key = aws_s3_object.lambda_zip.key
6033
+ s3_object_version = aws_s3_object.lambda_zip.version_id
6034
+ function_name = "TestApiHandler-\${random_string.suffix.result}"
5962
6035
  role = aws_iam_role.lambda_execution_role.arn
5963
6036
  handler = "index.handler"
5964
6037
  runtime = "nodejs22.x"
@@ -5983,7 +6056,7 @@ resource "aws_lambda_function" "api_lambda" {
5983
6056
 
5984
6057
  # IAM role for Lambda execution
5985
6058
  resource "aws_iam_role" "lambda_execution_role" {
5986
- name = "TestApiHandler-execution-role"
6059
+ name = "TestApiHandler-execution-role-\${random_string.suffix.result}"
5987
6060
 
5988
6061
  assume_role_policy = jsonencode({
5989
6062
  Version = "2012-10-17"
@@ -6016,7 +6089,7 @@ resource "aws_iam_role_policy_attachment" "lambda_xray_execution" {
6016
6089
  # Additional IAM policies for Lambda (if provided)
6017
6090
  resource "aws_iam_role_policy" "lambda_additional_policies" {
6018
6091
  count = length(var.additional_iam_policy_statements) > 0 ? 1 : 0
6019
- name = "TestApiHandler-additional-policies"
6092
+ name = "TestApiHandler-additional-policies-\${random_string.suffix.result}"
6020
6093
  role = aws_iam_role.lambda_execution_role.id
6021
6094
 
6022
6095
  policy = jsonencode({
@@ -6030,7 +6103,7 @@ resource "aws_cloudwatch_log_group" "lambda_logs" {
6030
6103
  #checkov:skip=CKV_AWS_158:Using default CloudWatch log encryption
6031
6104
  #checkov:skip=CKV_AWS_338:Log retention set to forever
6032
6105
  #checkov:skip=CKV_AWS_66:Log retention set to forever
6033
- name = "/aws/lambda/TestApiHandler"
6106
+ name = "/aws/lambda/TestApiHandler-\${random_string.suffix.result}"
6034
6107
  tags = var.tags
6035
6108
  }
6036
6109
 
@@ -6220,14 +6293,6 @@ module "add_url_to_runtime_config" {
6220
6293
  depends_on = [aws_api_gateway_stage.api_stage]
6221
6294
  }
6222
6295
 
6223
- module "appconfig" {
6224
- source = "../../../core/runtime-config/appconfig"
6225
-
6226
- application_name = "TestApi-runtime-config"
6227
-
6228
- depends_on = [module.add_url_to_runtime_config]
6229
- }
6230
-
6231
6296
  # Outputs
6232
6297
 
6233
6298
  # API Gateway Outputs (from core module)
@@ -6648,6 +6713,11 @@ variable "additional_iam_policy_statements" {
6648
6713
  default = []
6649
6714
  }
6650
6715
 
6716
+ variable "asset_bucket_name" {
6717
+ description = "Name of the shared asset S3 bucket used to stage the Lambda deployment zip. Instantiate the \`core/asset-bucket\` module once per deployment and pass its \`bucket_name\` output here."
6718
+ type = string
6719
+ }
6720
+
6651
6721
  # CORS Configuration (passed to core module)
6652
6722
 
6653
6723
  variable "cors_allow_headers" {
@@ -6686,20 +6756,34 @@ variable "tags" {
6686
6756
  data "aws_region" "current" {}
6687
6757
  data "aws_caller_identity" "current" {}
6688
6758
 
6759
+ resource "random_string" "suffix" {
6760
+ length = 8
6761
+ special = false
6762
+ upper = false
6763
+ }
6764
+
6689
6765
  # Resources
6690
6766
 
6691
- # Create Lambda ZIP file from the FastAPI bundle directory
6767
+ # Create Lambda ZIP file from the bundle directory
6692
6768
  data "archive_file" "lambda_zip" {
6693
6769
  type = "zip"
6694
6770
  source_dir = "\${path.module}/../../../../../../../dist/apps/test-api/bundle"
6695
6771
  output_path = "\${path.module}/../../../../../../../dist/packages/common/terraform/apis/test-api/lambda.zip"
6696
6772
  }
6697
6773
 
6774
+ resource "aws_s3_object" "lambda_zip" {
6775
+ bucket = var.asset_bucket_name
6776
+ key = "apis/test-api/\${data.archive_file.lambda_zip.output_base64sha256}.zip"
6777
+ source = data.archive_file.lambda_zip.output_path
6778
+ source_hash = data.archive_file.lambda_zip.output_base64sha256
6779
+ etag = data.archive_file.lambda_zip.output_md5
6780
+ }
6781
+
6698
6782
  # Use the core REST API module
6699
6783
  module "rest_api" {
6700
6784
  source = "../../../core/api/rest-api"
6701
6785
 
6702
- api_name = "TestApi"
6786
+ api_name = "TestApi-\${random_string.suffix.result}"
6703
6787
  api_description = "TestApi REST API"
6704
6788
  stage_name = "prod"
6705
6789
  stage_auto_deploy = true
@@ -6732,8 +6816,10 @@ resource "aws_lambda_function" "api_lambda" {
6732
6816
  #checkov:skip=CKV_AWS_272:Code signing not required for this use case
6733
6817
  #checkov:skip=CKV_AWS_115:Concurrent execution limit not required for this use case
6734
6818
  #checkov:skip=CKV_AWS_173:Lambda environment variables encrypted by managed key
6735
- filename = data.archive_file.lambda_zip.output_path
6736
- function_name = "TestApiHandler"
6819
+ s3_bucket = aws_s3_object.lambda_zip.bucket
6820
+ s3_key = aws_s3_object.lambda_zip.key
6821
+ s3_object_version = aws_s3_object.lambda_zip.version_id
6822
+ function_name = "TestApiHandler-\${random_string.suffix.result}"
6737
6823
  role = aws_iam_role.lambda_execution_role.arn
6738
6824
  handler = "index.handler"
6739
6825
  runtime = "nodejs22.x"
@@ -6758,7 +6844,7 @@ resource "aws_lambda_function" "api_lambda" {
6758
6844
 
6759
6845
  # IAM role for Lambda execution
6760
6846
  resource "aws_iam_role" "lambda_execution_role" {
6761
- name = "TestApiHandler-execution-role"
6847
+ name = "TestApiHandler-execution-role-\${random_string.suffix.result}"
6762
6848
 
6763
6849
  assume_role_policy = jsonencode({
6764
6850
  Version = "2012-10-17"
@@ -6791,7 +6877,7 @@ resource "aws_iam_role_policy_attachment" "lambda_xray_execution" {
6791
6877
  # Additional IAM policies for Lambda (if provided)
6792
6878
  resource "aws_iam_role_policy" "lambda_additional_policies" {
6793
6879
  count = length(var.additional_iam_policy_statements) > 0 ? 1 : 0
6794
- name = "TestApiHandler-additional-policies"
6880
+ name = "TestApiHandler-additional-policies-\${random_string.suffix.result}"
6795
6881
  role = aws_iam_role.lambda_execution_role.id
6796
6882
 
6797
6883
  policy = jsonencode({
@@ -6805,7 +6891,7 @@ resource "aws_cloudwatch_log_group" "lambda_logs" {
6805
6891
  #checkov:skip=CKV_AWS_158:Using default CloudWatch log encryption
6806
6892
  #checkov:skip=CKV_AWS_338:Log retention set to forever
6807
6893
  #checkov:skip=CKV_AWS_66:Log retention set to forever
6808
- name = "/aws/lambda/TestApiHandler"
6894
+ name = "/aws/lambda/TestApiHandler-\${random_string.suffix.result}"
6809
6895
  tags = var.tags
6810
6896
  }
6811
6897
 
@@ -6986,14 +7072,6 @@ module "add_url_to_runtime_config" {
6986
7072
  depends_on = [aws_api_gateway_stage.api_stage]
6987
7073
  }
6988
7074
 
6989
- module "appconfig" {
6990
- source = "../../../core/runtime-config/appconfig"
6991
-
6992
- application_name = "TestApi-runtime-config"
6993
-
6994
- depends_on = [module.add_url_to_runtime_config]
6995
- }
6996
-
6997
7075
  # Outputs
6998
7076
 
6999
7077
  # API Gateway Outputs (from core module)