@aws/nx-plugin 0.45.1 → 0.46.0

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 (63) hide show
  1. package/package.json +1 -1
  2. package/src/py/fast-api/__snapshots__/generator.spec.ts.snap +3669 -0
  3. package/src/py/fast-api/generator.js +57 -50
  4. package/src/py/fast-api/generator.js.map +1 -1
  5. package/src/py/fast-api/schema.d.ts +1 -0
  6. package/src/py/fast-api/schema.json +8 -0
  7. package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +590 -0
  8. package/src/py/mcp-server/generator.js +4 -18
  9. package/src/py/mcp-server/generator.js.map +1 -1
  10. package/src/py/mcp-server/schema.d.ts +1 -0
  11. package/src/py/mcp-server/schema.json +8 -0
  12. package/src/py/strands-agent/__snapshots__/generator.spec.ts.snap +590 -0
  13. package/src/py/strands-agent/generator.js +4 -18
  14. package/src/py/strands-agent/generator.js.map +1 -1
  15. package/src/py/strands-agent/schema.d.ts +1 -0
  16. package/src/py/strands-agent/schema.json +8 -0
  17. package/src/terraform/project/generator.js +23 -7
  18. package/src/terraform/project/generator.js.map +1 -1
  19. package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +3669 -0
  20. package/src/trpc/backend/generator.js +6 -17
  21. package/src/trpc/backend/generator.js.map +1 -1
  22. package/src/trpc/backend/schema.d.ts +1 -0
  23. package/src/trpc/backend/schema.json +8 -0
  24. package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +590 -0
  25. package/src/ts/mcp-server/generator.js +4 -18
  26. package/src/ts/mcp-server/generator.js.map +1 -1
  27. package/src/ts/mcp-server/schema.d.ts +1 -0
  28. package/src/ts/mcp-server/schema.json +8 -0
  29. package/src/ts/nx-plugin/generator.js +1 -0
  30. package/src/ts/nx-plugin/generator.js.map +1 -1
  31. package/src/utils/agent-core-constructs/agent-core-constructs.d.ts +11 -5
  32. package/src/utils/agent-core-constructs/agent-core-constructs.js +51 -10
  33. package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
  34. package/src/utils/agent-core-constructs/files/terraform/app/agent-core/__nameKebabCase__/__nameKebabCase__.tf.template +46 -0
  35. package/src/utils/agent-core-constructs/files/terraform/core/agent-core/runtime.tf.template +536 -0
  36. package/src/utils/api-constructs/api-constructs.d.ts +4 -4
  37. package/src/utils/api-constructs/api-constructs.js +45 -5
  38. package/src/utils/api-constructs/api-constructs.js.map +1 -1
  39. package/src/utils/api-constructs/files/terraform/app/apis/http/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +382 -0
  40. package/src/utils/api-constructs/files/terraform/app/apis/rest/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +508 -0
  41. package/src/utils/api-constructs/files/terraform/core/api/http/http-api/http-api.tf.template +250 -0
  42. package/src/utils/api-constructs/files/terraform/core/api/rest/rest-api/rest-api.tf.template +150 -0
  43. package/src/utils/files/terraform/src/metrics/metrics.tf.template +3 -2
  44. package/src/utils/py.d.ts +5 -0
  45. package/src/utils/py.js +9 -1
  46. package/src/utils/py.js.map +1 -1
  47. package/src/utils/shared-constructs-constants.d.ts +2 -0
  48. package/src/utils/shared-constructs-constants.js +3 -1
  49. package/src/utils/shared-constructs-constants.js.map +1 -1
  50. package/src/utils/shared-constructs.js +2 -2
  51. package/src/utils/shared-constructs.js.map +1 -1
  52. package/src/utils/versions.d.ts +3 -1
  53. package/src/utils/versions.js +2 -0
  54. package/src/utils/versions.js.map +1 -1
  55. /package/src/utils/agent-core-constructs/files/{app → cdk/app}/agent-core/__nameKebabCase__/Dockerfile.template +0 -0
  56. /package/src/utils/agent-core-constructs/files/{app → cdk/app}/agent-core/__nameKebabCase__/__nameKebabCase__.ts.template +0 -0
  57. /package/src/utils/agent-core-constructs/files/{core → cdk/core}/agent-core/runtime.ts.template +0 -0
  58. /package/src/utils/api-constructs/files/{app → cdk/app}/apis/http/__apiNameKebabCase__.ts.template +0 -0
  59. /package/src/utils/api-constructs/files/{app → cdk/app}/apis/rest/__apiNameKebabCase__.ts.template +0 -0
  60. /package/src/utils/api-constructs/files/{core → cdk/core}/api/http/http-api.ts.template +0 -0
  61. /package/src/utils/api-constructs/files/{core → cdk/core}/api/rest/rest-api.ts.template +0 -0
  62. /package/src/utils/api-constructs/files/{core → cdk/core}/api/trpc/trpc-utils.ts.template +0 -0
  63. /package/src/utils/api-constructs/files/{core → cdk/core}/api/utils/utils.ts.template +0 -0
@@ -9,7 +9,6 @@ const tslib_1 = require("tslib");
9
9
  */
10
10
  const devkit_1 = require("@nx/devkit");
11
11
  const shared_constructs_1 = require("../../utils/shared-constructs");
12
- const shared_constructs_constants_1 = require("../../utils/shared-constructs-constants");
13
12
  const generator_1 = tslib_1.__importDefault(require("../../ts/lib/generator"));
14
13
  const npm_scope_1 = require("../../utils/npm-scope");
15
14
  const versions_1 = require("../../utils/versions");
@@ -24,7 +23,9 @@ exports.TRPC_BACKEND_GENERATOR_INFO = (0, nx_1.getGeneratorInfo)(__filename);
24
23
  function tsTrpcApiGenerator(tree, options) {
25
24
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
26
25
  var _a;
27
- yield (0, shared_constructs_1.sharedConstructsGenerator)(tree);
26
+ yield (0, shared_constructs_1.sharedConstructsGenerator)(tree, {
27
+ iacProvider: options.iacProvider,
28
+ });
28
29
  const apiNamespace = (0, npm_scope_1.getNpmScopePrefix)(tree);
29
30
  const apiNameKebabCase = (0, names_1.kebabCase)(options.name);
30
31
  const apiNameClassName = (0, names_1.toClassName)(options.name);
@@ -40,7 +41,8 @@ function tsTrpcApiGenerator(tree, options) {
40
41
  const enhancedOptions = Object.assign({ backendProjectName, backendProjectAlias: (0, npm_scope_1.toScopeAlias)(backendProjectName), apiNameKebabCase,
41
42
  apiNameClassName,
42
43
  backendRoot, pkgMgrCmd: (0, devkit_1.getPackageManagerCommand)().exec, apiGatewayEventType: getApiGatewayEventType(options), port }, options);
43
- (0, api_constructs_1.addApiGatewayConstruct)(tree, {
44
+ (0, api_constructs_1.addApiGatewayInfra)(tree, {
45
+ apiProjectName: backendProjectName,
44
46
  apiNameClassName,
45
47
  apiNameKebabCase,
46
48
  constructType: options.computeType === 'ServerlessApiGatewayHttpApi' ? 'http' : 'rest',
@@ -50,6 +52,7 @@ function tsTrpcApiGenerator(tree, options) {
50
52
  dir: backendRoot,
51
53
  },
52
54
  auth: options.auth,
55
+ iacProvider: options.iacProvider,
53
56
  });
54
57
  projectConfig.metadata = Object.assign(Object.assign({}, projectConfig.metadata), { apiName: options.name, apiType: 'trpc', auth: options.auth });
55
58
  projectConfig.targets.serve = {
@@ -74,20 +77,6 @@ function tsTrpcApiGenerator(tree, options) {
74
77
  ];
75
78
  projectConfig.targets = (0, object_1.sortObjectKeys)(projectConfig.targets);
76
79
  (0, devkit_1.updateProjectConfiguration)(tree, projectConfig.name, projectConfig);
77
- (0, devkit_1.updateJson)(tree, (0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, shared_constructs_constants_1.SHARED_CONSTRUCTS_DIR, 'project.json'), (config) => {
78
- var _a;
79
- if (!config.targets) {
80
- config.targets = {};
81
- }
82
- if (!config.targets.build) {
83
- config.targets.build = {};
84
- }
85
- config.targets.build.dependsOn = [
86
- ...((_a = config.targets.build.dependsOn) !== null && _a !== void 0 ? _a : []),
87
- `${backendProjectName}:build`,
88
- ];
89
- return config;
90
- });
91
80
  (0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files'), backendRoot, enhancedOptions, {
92
81
  overwriteStrategy: devkit_1.OverwriteStrategy.Overwrite,
93
82
  });
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/trpc/backend/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/trpc/backend/generator.ts"],"names":[],"mappings":"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"}
@@ -9,4 +9,5 @@ export interface TsTrpcApiGeneratorSchema {
9
9
  computeType: 'ServerlessApiGatewayRestApi' | 'ServerlessApiGatewayHttpApi';
10
10
  auth: 'IAM' | 'Cognito' | 'None';
11
11
  directory?: TsLibGeneratorSchema['directory'];
12
+ iacProvider: 'CDK' | 'Terraform';
12
13
  }
@@ -36,6 +36,14 @@
36
36
  "x-priority": "important",
37
37
  "default": "packages",
38
38
  "x-prompt": "What directory would you like to store your application in?"
39
+ },
40
+ "iacProvider": {
41
+ "type": "string",
42
+ "description": "The preferred IaC provider",
43
+ "enum": ["CDK", "Terraform"],
44
+ "x-priority": "important",
45
+ "default": "CDK",
46
+ "x-prompt": "Which provider would you like to manage your infrastructure? (default: CDK)"
39
47
  }
40
48
  },
41
49
  "required": ["name"]
@@ -283,6 +283,596 @@ exports[`ts#mcp-server generator > should match snapshot for BedrockAgentCoreRun
283
283
  "
284
284
  `;
285
285
 
286
+ exports[`ts#mcp-server generator > should match snapshot for Terraform generated files > terraform-agent-core-runtime.tf 1`] = `
287
+ "terraform {
288
+ required_version = ">= 1.0"
289
+
290
+ required_providers {
291
+ aws = {
292
+ source = "hashicorp/aws"
293
+ version = ">= 6.0"
294
+ }
295
+ null = {
296
+ source = "hashicorp/null"
297
+ version = ">= 3.0"
298
+ }
299
+ local = {
300
+ source = "hashicorp/local"
301
+ version = ">= 2.0"
302
+ }
303
+ random = {
304
+ source = "hashicorp/random"
305
+ version = ">= 3.0"
306
+ }
307
+ }
308
+ }
309
+
310
+ # Variables
311
+ variable "agent_runtime_name" {
312
+ description = "Name of the agent runtime"
313
+ type = string
314
+ validation {
315
+ condition = can(regex("^[a-zA-Z][a-zA-Z0-9_]{0,42}$", var.agent_runtime_name))
316
+ error_message = "Value must start with a letter and contain only letters, numbers, and underscores (1-43 characters)."
317
+ }
318
+ }
319
+
320
+ variable "server_protocol" {
321
+ description = "Whether this is an Agent (HTTP) or MCP Server (MCP)"
322
+ type = string
323
+ validation {
324
+ condition = contains(["MCP", "HTTP"], var.server_protocol)
325
+ error_message = "Protocol type must be either 'MCP' or 'HTTP'."
326
+ }
327
+ }
328
+
329
+ variable "customJWTAuthorizer" {
330
+ description = "Custom JWTAuthorizer Configuration"
331
+ type = object({
332
+ discoveryUrl = optional(string)
333
+ allowedAudience = optional(list(string))
334
+ allowedClients = optional(list(string))
335
+ })
336
+ default = null
337
+ }
338
+
339
+ variable "docker_image_tag" {
340
+ description = "Name of the docker image tag to use as the agent core runtime"
341
+ type = string
342
+ }
343
+
344
+ variable "env" {
345
+ description = "Environment variables to pass to the agent core runtime"
346
+ type = map(string)
347
+ default = {}
348
+ }
349
+
350
+ variable "additional_iam_policy_statements" {
351
+ description = "Additional IAM policy statements to attach to the agent core runtime role"
352
+ type = list(object({
353
+ Effect = string
354
+ Action = list(string)
355
+ Resource = list(string)
356
+ }))
357
+ default = []
358
+ }
359
+
360
+ variable "tags" {
361
+ description = "Tags to apply to resources"
362
+ type = map(string)
363
+ default = {}
364
+ }
365
+
366
+ # Data sources
367
+ data "aws_caller_identity" "current" {}
368
+ data "aws_region" "current" {}
369
+
370
+ locals {
371
+ aws_account_id = data.aws_caller_identity.current.account_id
372
+ aws_region = data.aws_region.current.name
373
+ }
374
+
375
+ # Random ID for bucket suffix to ensure uniqueness
376
+ resource "random_id" "unique_suffix" {
377
+ byte_length = 4
378
+ }
379
+
380
+ # ECR Repository
381
+ resource "aws_ecr_repository" "agent_core_repository" {
382
+ #checkov:skip=CKV_AWS_136:AES256 encryption is sufficient for ECR repositories
383
+ name = "\${lower(var.agent_runtime_name)}_repository_\${random_id.unique_suffix.hex}"
384
+
385
+ #checkov:skip=CKV_AWS_51:Image tag is reused for latest deployments
386
+ image_tag_mutability = "MUTABLE"
387
+ force_delete = true
388
+
389
+ image_scanning_configuration {
390
+ scan_on_push = true
391
+ }
392
+
393
+ tags = var.tags
394
+ }
395
+
396
+ # ECR Repository Policy
397
+ resource "aws_ecr_repository_policy" "agent_core_ecr_policy" {
398
+ repository = aws_ecr_repository.agent_core_repository.name
399
+
400
+ policy = jsonencode({
401
+ Version = "2012-10-17"
402
+ Statement = [
403
+ {
404
+ Sid = "AllowPushPull"
405
+ Effect = "Allow"
406
+ Principal = {
407
+ AWS = "arn:aws:iam::\${local.aws_account_id}:root"
408
+ }
409
+ Action = [
410
+ "ecr:GetDownloadUrlForLayer",
411
+ "ecr:BatchGetImage",
412
+ "ecr:BatchCheckLayerAvailability",
413
+ "ecr:PutImage",
414
+ "ecr:InitiateLayerUpload",
415
+ "ecr:UploadLayerPart",
416
+ "ecr:CompleteLayerUpload"
417
+ ]
418
+ }
419
+ ]
420
+ })
421
+ }
422
+
423
+ # IAM Role for Agent Core Runtime
424
+ resource "aws_iam_role" "agent_core_runtime_role" {
425
+ name = "\${var.agent_runtime_name}-AgentCoreRuntimeRole-\${random_id.unique_suffix.hex}"
426
+
427
+ assume_role_policy = jsonencode({
428
+ Version = "2012-10-17"
429
+ Statement = [
430
+ {
431
+ Sid = "AgentCoreAssumeRolePolicy"
432
+ Effect = "Allow"
433
+ Principal = {
434
+ Service = "bedrock-agentcore.amazonaws.com"
435
+ }
436
+ Action = "sts:AssumeRole"
437
+ Condition = {
438
+ StringEquals = {
439
+ "aws:SourceAccount" = local.aws_account_id
440
+ }
441
+ ArnLike = {
442
+ "aws:SourceArn" = "arn:aws:bedrock-agentcore:\${local.aws_region}:\${local.aws_account_id}:*"
443
+ }
444
+ }
445
+ }
446
+ ]
447
+ })
448
+
449
+ tags = var.tags
450
+ }
451
+
452
+ # IAM Policy for Query Agent with restricted Athena permissions
453
+ resource "aws_iam_policy" "agent_core_runtime_policy" {
454
+ name = "\${var.agent_runtime_name}-QueryAgentPolicy-\${random_id.unique_suffix.hex}"
455
+ description = "Restricted policy for Agent"
456
+
457
+ policy = jsonencode({
458
+ Version = "2012-10-17"
459
+ Statement = concat([
460
+ {
461
+ Sid = "ECRImageAccess"
462
+ Effect = "Allow"
463
+ Action = [
464
+ "ecr:BatchGetImage",
465
+ "ecr:GetDownloadUrlForLayer"
466
+ ]
467
+ Resource = [
468
+ "arn:aws:ecr:\${local.aws_region}:\${local.aws_account_id}:repository/*"
469
+ ]
470
+ },
471
+ {
472
+ Sid = "ECRTokenAccess"
473
+ Effect = "Allow"
474
+ Action = [
475
+ "ecr:GetAuthorizationToken"
476
+ ]
477
+ Resource = [
478
+ "*"
479
+ ]
480
+ },
481
+ {
482
+ "Effect" : "Allow",
483
+ "Action" : [
484
+ "logs:DescribeLogStreams",
485
+ "logs:CreateLogGroup"
486
+ ],
487
+ "Resource" : [
488
+ "arn:aws:logs:\${local.aws_region}:\${local.aws_account_id}:log-group:/aws/bedrock-agentcore/runtimes/*"
489
+ ]
490
+ },
491
+ {
492
+ "Effect" : "Allow",
493
+ "Action" : [
494
+ "logs:DescribeLogGroups"
495
+ ],
496
+ "Resource" : [
497
+ "arn:aws:logs:\${local.aws_region}:\${local.aws_account_id}:log-group:*"
498
+ ]
499
+ },
500
+ {
501
+ "Effect" : "Allow",
502
+ "Action" : [
503
+ "logs:CreateLogStream",
504
+ "logs:PutLogEvents"
505
+ ],
506
+ "Resource" : [
507
+ "arn:aws:logs:\${local.aws_region}:\${local.aws_account_id}:log-group:/aws/bedrock-agentcore/runtimes/*:log-stream:*"
508
+ ]
509
+ },
510
+ {
511
+ "Effect" : "Allow",
512
+ "Action" : [
513
+ "xray:PutTraceSegments",
514
+ "xray:PutTelemetryRecords",
515
+ "xray:GetSamplingRules",
516
+ "xray:GetSamplingTargets"
517
+ ],
518
+ "Resource" : ["*"]
519
+ },
520
+ {
521
+ "Effect" : "Allow",
522
+ "Resource" : "*",
523
+ "Action" : "cloudwatch:PutMetricData",
524
+ "Condition" : {
525
+ "StringEquals" : {
526
+ "cloudwatch:namespace" : "bedrock-agentcore"
527
+ }
528
+ }
529
+ },
530
+ {
531
+ "Sid" : "GetAgentAccessToken",
532
+ "Effect" : "Allow",
533
+ "Action" : [
534
+ "bedrock-agentcore:GetWorkloadAccessToken",
535
+ "bedrock-agentcore:GetWorkloadAccessTokenForJWT",
536
+ "bedrock-agentcore:GetWorkloadAccessTokenForUserId"
537
+ ],
538
+ "Resource" : [
539
+ "arn:aws:bedrock-agentcore:\${local.aws_region}:\${local.aws_account_id}:workload-identity-directory/default",
540
+ "arn:aws:bedrock-agentcore:\${local.aws_region}:\${local.aws_account_id}:workload-identity-directory/default/workload-identity/*"
541
+ ]
542
+ },
543
+ { "Sid" : "BedrockModelInvocation",
544
+ "Effect" : "Allow",
545
+ "Action" : [
546
+ "bedrock:InvokeModel",
547
+ "bedrock:InvokeModelWithResponseStream"
548
+ ],
549
+ "Resource" : [
550
+ "arn:aws:bedrock:*::foundation-model/*",
551
+ "arn:aws:bedrock:\${local.aws_region}:\${local.aws_account_id}:*"
552
+ ]
553
+ }
554
+ ], var.additional_iam_policy_statements)
555
+ })
556
+
557
+ tags = var.tags
558
+ }
559
+
560
+ # Attach the restricted policy to the role
561
+ resource "aws_iam_role_policy_attachment" "agent_core_policy" {
562
+ role = aws_iam_role.agent_core_runtime_role.name
563
+ policy_arn = aws_iam_policy.agent_core_runtime_policy.arn
564
+ }
565
+
566
+ data "external" "docker_digest" {
567
+ program = ["sh", "-c", "echo '{\\"digest\\":\\"'$(docker inspect \${var.docker_image_tag} --format '{{.Descriptor.digest}}')'\\"}' "]
568
+ }
569
+
570
+ # Null resource for Docker publish
571
+ resource "null_resource" "docker_publish" {
572
+ triggers = {
573
+ # Trigger rebuild when the image changes
574
+ docker_digest = data.external.docker_digest.result.digest
575
+
576
+ repository_url = aws_ecr_repository.agent_core_repository.repository_url
577
+ docker_image_tag = var.docker_image_tag
578
+ }
579
+
580
+ provisioner "local-exec" {
581
+ command = <<-EOT
582
+ # Get ECR login token
583
+ aws ecr get-login-password --region \${local.aws_region} | docker login --username AWS --password-stdin \${self.triggers.repository_url}
584
+
585
+ # Tag the image
586
+ docker tag \${self.triggers.docker_image_tag} \${self.triggers.repository_url}:latest
587
+
588
+ # Push the image
589
+ docker push \${self.triggers.repository_url}:latest
590
+ EOT
591
+ }
592
+
593
+ depends_on = [aws_ecr_repository_policy.agent_core_ecr_policy]
594
+ }
595
+
596
+ # Null resource for agent core deployment with proper lifecycle management
597
+ resource "null_resource" "agent_core_runtime_deployment" {
598
+ triggers = {
599
+ container_uri = "\${aws_ecr_repository.agent_core_repository.repository_url}:latest"
600
+ role_arn = aws_iam_role.agent_core_runtime_role.arn
601
+ config_hash = md5(join("", [jsonencode(var.customJWTAuthorizer), var.server_protocol]))
602
+ env_hash = md5(jsonencode(var.env))
603
+ }
604
+
605
+ provisioner "local-exec" {
606
+ command = <<-EOT
607
+ uv run --with boto3 python -c '
608
+ import boto3
609
+ import json
610
+ import sys
611
+
612
+ # Create the client
613
+ client = boto3.client("bedrock-agentcore-control", region_name="\${local.aws_region}")
614
+
615
+ # Environment variables for QueryAgentConfig
616
+ environment_variables = json.loads("""\${jsonencode(var.env)}""")
617
+ agent_name = "\${var.agent_runtime_name}_\${random_id.unique_suffix.hex}"
618
+ authorization_config = json.loads("""{"customJWTAuthorizer": \${jsonencode(var.customJWTAuthorizer != null ? {
619
+ for k, v in var.customJWTAuthorizer : k => v if v != null
620
+ } : {})}}""")
621
+
622
+ try:
623
+ # First, check if an agent runtime with this name already exists
624
+ existing_agent_runtime_id = None
625
+ try:
626
+ list_response = client.list_agent_runtimes()
627
+ for runtime in list_response.get("agentRuntimes", []):
628
+ if runtime.get("agentRuntimeName") == agent_name:
629
+ existing_agent_runtime_id = runtime.get("agentRuntimeId")
630
+ print(f"Found existing agent runtime with ID: {existing_agent_runtime_id}")
631
+ break
632
+ except Exception as e:
633
+ print(f"Error listing agent runtimes: {e}")
634
+
635
+ if existing_agent_runtime_id:
636
+ # Update the existing agent runtime
637
+ try:
638
+ update_response = client.update_agent_runtime(
639
+ agentRuntimeId=existing_agent_runtime_id,
640
+ agentRuntimeArtifact={
641
+ "containerConfiguration": {
642
+ "containerUri": "\${aws_ecr_repository.agent_core_repository.repository_url}:latest"
643
+ }
644
+ },
645
+ environmentVariables=environment_variables,
646
+ networkConfiguration={"networkMode": "PUBLIC"},
647
+ protocolConfiguration={"serverProtocol": "\${var.server_protocol}"},
648
+ \${var.customJWTAuthorizer == null ? "" : "authorizerConfiguration=authorization_config,"}
649
+ roleArn="\${aws_iam_role.agent_core_runtime_role.arn}"
650
+ )
651
+ agent_runtime_id = existing_agent_runtime_id
652
+ print(f"Agent runtime updated successfully: {agent_runtime_id}")
653
+ except Exception as e:
654
+ print(f"Error updating agent runtime: {e}")
655
+ # If update fails, try to create a new one
656
+ existing_agent_runtime_id = None
657
+
658
+ if not existing_agent_runtime_id:
659
+ # Agent runtime doesn"t exist or update failed, create it
660
+ response = client.create_agent_runtime(
661
+ agentRuntimeName=agent_name,
662
+ agentRuntimeArtifact={
663
+ "containerConfiguration": {
664
+ "containerUri": "\${aws_ecr_repository.agent_core_repository.repository_url}:latest"
665
+ }
666
+ },
667
+ environmentVariables=environment_variables,
668
+ networkConfiguration={"networkMode": "PUBLIC"},
669
+ protocolConfiguration={"serverProtocol": "\${var.server_protocol}"},
670
+ \${var.customJWTAuthorizer == null ? "" : "authorizerConfiguration=authorization_config,"}
671
+ roleArn="\${aws_iam_role.agent_core_runtime_role.arn}"
672
+ )
673
+
674
+ agent_runtime_id = response.get("agentRuntimeId", "")
675
+ print(f"Agent runtime created successfully with ID: {agent_runtime_id}")
676
+
677
+ except Exception as e:
678
+ print(f"Error managing agent runtime: {str(e)}")
679
+ sys.exit(1)
680
+ '
681
+ EOT
682
+ }
683
+
684
+ depends_on = [
685
+ null_resource.docker_publish,
686
+ aws_iam_role_policy_attachment.agent_core_policy
687
+ ]
688
+ }
689
+
690
+
691
+ # Null resource for cleanup/destroy
692
+ resource "null_resource" "agent_core_cleanup" {
693
+ triggers = {
694
+ aws_region = local.aws_region
695
+ agent_name = var.agent_runtime_name
696
+ unique_suffix = random_id.unique_suffix.hex
697
+ }
698
+
699
+ provisioner "local-exec" {
700
+ when = destroy
701
+ command = <<-EOT
702
+ uv run --with boto3 python -c "
703
+ import boto3
704
+ import json
705
+ import os
706
+
707
+ # Create the client
708
+ client = boto3.client('bedrock-agentcore-control', region_name='\${self.triggers.aws_region}')
709
+
710
+ agent_name = '\${self.triggers.agent_name}_\${self.triggers.unique_suffix}'
711
+
712
+ try:
713
+ # Find the agent runtime by name
714
+ agent_runtime_id = None
715
+ try:
716
+ list_response = client.list_agent_runtimes()
717
+ for runtime in list_response.get('agentRuntimes', []):
718
+ if runtime.get('agentRuntimeName') == agent_name:
719
+ agent_runtime_id = runtime.get('agentRuntimeId')
720
+ print(f'Found agent runtime to delete: {agent_name} (ID: {agent_runtime_id})')
721
+ break
722
+ except Exception as e:
723
+ print(f'Error listing agent runtimes: {e}')
724
+
725
+ if not agent_runtime_id:
726
+ print(f'No agent runtime found with name: {agent_name}')
727
+ exit(0)
728
+
729
+ # Delete the agent runtime using the found ID
730
+ response = client.delete_agent_runtime(
731
+ agentRuntimeId=agent_runtime_id
732
+ )
733
+ print(f'Agent runtime {agent_name} (ID: {agent_runtime_id}) deleted successfully:', json.dumps(response, indent=2, default=str))
734
+
735
+ except client.exceptions.ResourceNotFoundException:
736
+ print(f'Agent runtime {agent_name} not found, may have been already deleted')
737
+ except Exception as e:
738
+ print(f'Error deleting agent runtime {agent_name}:', str(e))
739
+ # Don't exit with error code during destroy to avoid blocking cleanup
740
+ "
741
+ EOT
742
+ }
743
+
744
+ depends_on = [null_resource.agent_core_runtime_deployment]
745
+ }
746
+
747
+ # Data source to find the agent runtime by name and get its ID
748
+ data "external" "agent_runtime_lookup" {
749
+ program = ["uv", "run", "--with", "boto3", "python", "-c", <<-EOT
750
+ import boto3
751
+ import json
752
+ import sys
753
+
754
+ # Create the client
755
+ client = boto3.client("bedrock-agentcore-control", region_name="\${local.aws_region}")
756
+
757
+ agent_name = "\${var.agent_runtime_name}_\${random_id.unique_suffix.hex}"
758
+
759
+ try:
760
+ # Find the agent runtime by name
761
+ list_response = client.list_agent_runtimes()
762
+ for runtime in list_response.get("agentRuntimes", []):
763
+ if runtime.get("agentRuntimeName") == agent_name:
764
+ agent_runtime_id = runtime.get("agentRuntimeId")
765
+ runtime_arn = f"arn:aws:bedrock-agentcore:\${local.aws_region}:\${local.aws_account_id}:runtime/{agent_runtime_id}"
766
+
767
+ result = {
768
+ "agent_runtime_id": agent_runtime_id,
769
+ "agent_runtime_arn": runtime_arn,
770
+ "agent_name": agent_name
771
+ }
772
+ print(json.dumps(result))
773
+ sys.exit(0)
774
+
775
+ # If not found, return empty values
776
+ result = {
777
+ "agent_runtime_id": "",
778
+ "agent_runtime_arn": "",
779
+ "agent_name": agent_name
780
+ }
781
+ print(json.dumps(result))
782
+
783
+ except Exception as e:
784
+ print(f"Error looking up agent runtime: {str(e)}", file=sys.stderr)
785
+ # Return empty values on error to avoid breaking Terraform
786
+ result = {
787
+ "agent_runtime_id": "",
788
+ "agent_runtime_arn": "",
789
+ "agent_name": agent_name
790
+ }
791
+ print(json.dumps(result))
792
+ EOT
793
+ ]
794
+
795
+ depends_on = [null_resource.agent_core_runtime_deployment]
796
+ }
797
+
798
+ # Outputs
799
+ output "agent_core_runtime_role_arn" {
800
+ description = "ARN of the Agent Core Runtime IAM role"
801
+ value = aws_iam_role.agent_core_runtime_role.arn
802
+ }
803
+
804
+ output "agent_core_runtime_role_name" {
805
+ description = "Name of the Agent Core Runtime IAM role"
806
+ value = aws_iam_role.agent_core_runtime_role.name
807
+ }
808
+
809
+ output "agent_runtime_name" {
810
+ description = "Name of the deployed agent runtime"
811
+ value = "\${var.agent_runtime_name}-\${random_id.unique_suffix.hex}"
812
+ }
813
+
814
+ output "agent_core_runtime_arn" {
815
+ description = "ARN of the Bedrock Agent Core runtime"
816
+ value = data.external.agent_runtime_lookup.result.agent_runtime_arn
817
+ }
818
+
819
+ output "agent_runtime_id" {
820
+ description = "ID of the Bedrock Agent Core runtime"
821
+ value = data.external.agent_runtime_lookup.result.agent_runtime_id
822
+ }
823
+ "
824
+ `;
825
+
826
+ exports[`ts#mcp-server generator > should match snapshot for Terraform generated files > terraform-mcp-server.tf 1`] = `
827
+ "variable "env" {
828
+ description = "Environment variables to pass to the agent core runtime"
829
+ type = map(string)
830
+ default = {}
831
+ }
832
+
833
+ variable "additional_iam_policy_statements" {
834
+ description = "Additional IAM policy statements to attach to the agent core runtime role"
835
+ type = list(object({
836
+ Effect = string
837
+ Action = list(string)
838
+ Resource = list(string)
839
+ }))
840
+ default = []
841
+ }
842
+
843
+ variable "tags" {
844
+ description = "Tags to apply to resources"
845
+ type = map(string)
846
+ default = {}
847
+ }
848
+
849
+ module "agent_core_runtime" {
850
+ source = "../../../core/agent-core"
851
+ agent_runtime_name = "TerraformSnapshotServer"
852
+ docker_image_tag = "proj-terraform-snapshot-server:latest"
853
+ server_protocol = "MCP"
854
+ # customJWTAuthorizer = {
855
+ # discoveryUrl = "https://xxx/.well-known/openid-configuration",
856
+ # allowedClients = [ "xxx" ]
857
+ # }
858
+
859
+ env = var.env
860
+ additional_iam_policy_statements = var.additional_iam_policy_statements
861
+ tags = var.tags
862
+ }
863
+
864
+ output "agent_core_runtime_role_arn" {
865
+ description = "ARN of the agent core runtime role"
866
+ value = module.agent_core_runtime.agent_core_runtime_role_arn
867
+ }
868
+
869
+ output "agent_core_runtime_arn" {
870
+ description = "ARN of the Bedrock Agent Core runtime"
871
+ value = module.agent_core_runtime.agent_core_runtime_arn
872
+ }
873
+ "
874
+ `;
875
+
286
876
  exports[`ts#mcp-server generator > should match snapshot for generated files > mcp-server-http.ts 1`] = `
287
877
  "#!/usr/bin/env node
288
878
  import { createServer } from './server';