{"id":29943184,"url":"https://github.com/sourcefuse/terraform-aws-arc-sagemaker","last_synced_at":"2026-02-21T23:01:39.503Z","repository":{"id":307601093,"uuid":"998738428","full_name":"sourcefuse/terraform-aws-arc-sagemaker","owner":"sourcefuse","description":null,"archived":false,"fork":false,"pushed_at":"2025-07-11T13:26:16.000Z","size":4559,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-25T04:07:54.365Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HCL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sourcefuse.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-09T07:05:51.000Z","updated_at":"2025-07-11T13:26:12.000Z","dependencies_parsed_at":"2025-08-01T05:56:06.889Z","dependency_job_id":"005bb8af-a49b-4d0f-90e8-19bf9116a873","html_url":"https://github.com/sourcefuse/terraform-aws-arc-sagemaker","commit_stats":null,"previous_names":["sourcefuse/terraform-aws-arc-sagemaker"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/sourcefuse/terraform-aws-arc-sagemaker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sourcefuse%2Fterraform-aws-arc-sagemaker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sourcefuse%2Fterraform-aws-arc-sagemaker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sourcefuse%2Fterraform-aws-arc-sagemaker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sourcefuse%2Fterraform-aws-arc-sagemaker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sourcefuse","download_url":"https://codeload.github.com/sourcefuse/terraform-aws-arc-sagemaker/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sourcefuse%2Fterraform-aws-arc-sagemaker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29696773,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T18:18:25.093Z","status":"ssl_error","status_checked_at":"2026-02-21T18:18:22.435Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-08-03T02:14:32.632Z","updated_at":"2026-02-21T23:01:39.478Z","avatar_url":"https://github.com/sourcefuse.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Module Structure](./static/sagemaker-banner.png)\n# AWS SageMaker Terraform Module\n# [terraform-aws-arc-sagemaker](https://github.com/sourcefuse/terraform-aws-arc-sagemaker)\n\n\u003ca href=\"https://github.com/sourcefuse/terraform-aws-arc-sagemaker/releases/latest\"\u003e\u003cimg src=\"https://img.shields.io/github/release/sourcefuse/terraform-aws-arc-sagemaker.svg?style=for-the-badge\" alt=\"Latest Release\"/\u003e\u003c/a\u003e \u003ca href=\"https://github.com/sourcefuse/terraform-aws-arc-sagemaker/commits\"\u003e\u003cimg src=\"https://img.shields.io/github/last-commit/sourcefuse/terraform-aws-arc-sagemaker.svg?style=for-the-badge\" alt=\"Last Updated\"/\u003e\u003c/a\u003e ![Terraform](https://img.shields.io/badge/terraform-%235835CC.svg?style=for-the-badge\u0026logo=terraform\u0026logoColor=white) ![GitHub Actions](https://img.shields.io/badge/github%20actions-%232671E5.svg?style=for-the-badge\u0026logo=githubactions\u0026logoColor=white)\n\n[![Quality gate](https://sonarcloud.io/api/project_badges/quality_gate?project=sourcefuse_terraform-aws-arc-sagemaker\u0026token=593eae6b5a514b62b2c08871c2f608e4ce172ec5)](https://sonarcloud.io/summary/new_code?id=sourcefuse_terraform-aws-arc-sagemaker)\n\n\n## Overview\n\nThe ARC Terraform module provides a robust and fully extensible solution for managing SageMaker Studio domains, user profiles, models, endpoint, endpoint configurations, and pipelines. It supports custom app settings, and VPC integration to meet enterprise-grade machine learning needs. With dynamic configurations and secure defaults, the module enables rapid, consistent, and scalable SageMaker infrastructure provisioning using best practices.\n\n### Prerequisites\nBefore using this module, ensure you have the following:\n\n- AWS credentials configured.\n- Terraform installed.\n- A working knowledge of Terraform.\n\n## Getting Started\n\n1. **Define the Module**\n\nInitially, it's essential to define a Terraform module, which is organized as a distinct directory encompassing Terraform configuration files. Within this module directory, input variables and output values must be defined in the variables.tf and outputs.tf files, respectively. The following illustrates an example directory structure:\n\n\n\n```plaintext\nsagemaker/\n|-- main.tf\n|-- variables.tf\n|-- outputs.tf\n```\n\n\n2. **Define Input Variables**\n\nInside the `variables.tf` or in `*.tfvars` file, you should define values for the variables that the module requires.\n\n3. **Use the Module in Your Main Configuration**\nIn your main Terraform configuration file (e.g., main.tf), you can use the module. Specify the source of the module, and version, For Example\n\n```hcl\nmodule \"sagemaker_model\" {\n  source                 = \"sourcefuse/arc-sagemaker/aws\"\n  version                = \"0.0.1\"\n\n  name                   = \"terraform-arc\"\n  create_endpoint_config = true\n  create_model           = true\n\n\n  primary_container = {\n    image          = \"683313688378.dkr.ecr.us-east-1.amazonaws.com/sagemaker-scikit-learn:1.0-1-cpu-py3\"\n    model_data_url = \"s3://your-sagemaker-model-bucket-21-05-25/model/model.tar.gz\"\n    environment    = {}\n  }\n\n  production_variants = [\n    {\n      variant_name           = \"AllTraffic\"\n      initial_instance_count = 1\n      instance_type          = \"ml.m5.large\"\n      initial_variant_weight = 1.0\n    }\n  ]\n  tags = module.tags.tags\n}\n```\n\n4. **Output Values**\n\nInside the `outputs.tf` file of the module, you can define output values that can be referenced in the main configuration. For example:\n\n```hcl\noutput \"model_name\" {\n  description = \"Name of the SageMaker model\"\n  value       = module.sagemaker_model.model_name\n}\n\noutput \"model_arn\" {\n  description = \"ARN of the SageMaker model\"\n  value       = module.sagemaker_model.model_arn\n}\n\noutput \"endpoint_config_arn\" {\n  description = \"ARN of the SageMaker endpoint configuration\"\n  value       = module.sagemaker_model.endpoint_config_arn\n}\n\n```\n\n5. **.tfvars**\n\nInside the `.tfvars` file of the module, you can provide desired values that can be referenced in the main configuration.\n\n\n## First Time Usage\n***uncomment the backend block in [main.tf](./examples/endpoint//main.tf)***\n```shell\nterraform init -backend-config=config.dev.hcl\n```\n***If testing locally, `terraform init` should be fine***\n\nCreate a `dev` workspace\n```shell\nterraform workspace new dev\n```\n\nPlan Terraform\n```shell\nterraform plan -var-file dev.tfvars\n```\n\nApply Terraform\n```shell\nterraform apply -var-file dev.tfvars\n```\n\n## Production Setup\n```shell\nterraform init -backend-config=config.prod.hcl\n```\n\nCreate a `prod` workspace\n```shell\nterraform workspace new prod\n```\n\nPlan Terraform\n```shell\nterraform plan -var-file prod.tfvars\n```\n\nApply Terraform\n```shell\nterraform apply -var-file prod.tfvars  \n```\n\n## Cleanup  \nDestroy Terraform\n```shell\nterraform destroy -var-file dev.tfvars\n```\n\n\u003c!-- BEGINNING OF PRE-COMMIT-TERRAFORM DOCS HOOK --\u003e\n## Requirements\n\n| Name | Version |\n|------|---------|\n| \u003ca name=\"requirement_terraform\"\u003e\u003c/a\u003e [terraform](#requirement\\_terraform) | \u003e= 1.5.0 |\n| \u003ca name=\"requirement_aws\"\u003e\u003c/a\u003e [aws](#requirement\\_aws) | ~\u003e 5.0 |\n\n## Providers\n\n| Name | Version |\n|------|---------|\n| \u003ca name=\"provider_aws\"\u003e\u003c/a\u003e [aws](#provider\\_aws) | 5.100.0 |\n\n## Modules\n\n| Name | Source | Version |\n|------|--------|---------|\n| \u003ca name=\"module_arc_security_group\"\u003e\u003c/a\u003e [arc\\_security\\_group](#module\\_arc\\_security\\_group) | sourcefuse/arc-security-group/aws | 0.0.1 |\n\n## Resources\n\n| Name | Type |\n|------|------|\n| [aws_iam_role.execution_role](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role) | resource |\n| [aws_iam_role.pipeline_role](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role) | resource |\n| [aws_iam_role.sagemaker_execution_role](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role) | resource |\n| [aws_iam_role_policy.execution_role_custom](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy) | resource |\n| [aws_iam_role_policy.pipeline_role_custom](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy) | resource |\n| [aws_iam_role_policy_attachment.attach_policy](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |\n| [aws_iam_role_policy_attachment.execution_role_all_policies](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |\n| [aws_iam_role_policy_attachment.pipeline_role_sagemaker_full_access](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |\n| [aws_sagemaker_domain.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/sagemaker_domain) | resource |\n| [aws_sagemaker_endpoint.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/sagemaker_endpoint) | resource |\n| [aws_sagemaker_endpoint_configuration.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/sagemaker_endpoint_configuration) | resource |\n| [aws_sagemaker_model.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/sagemaker_model) | resource |\n| [aws_sagemaker_pipeline.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/sagemaker_pipeline) | resource |\n| [aws_sagemaker_user_profile.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/sagemaker_user_profile) | resource |\n\n## Inputs\n\n| Name | Description | Type | Default | Required |\n|------|-------------|------|---------|:--------:|\n| \u003ca name=\"input_additional_iam_policies\"\u003e\u003c/a\u003e [additional\\_iam\\_policies](#input\\_additional\\_iam\\_policies) | List of additional IAM policy ARNs to attach to the execution role | `list(string)` | `[]` | no |\n| \u003ca name=\"input_additional_security_group_ids\"\u003e\u003c/a\u003e [additional\\_security\\_group\\_ids](#input\\_additional\\_security\\_group\\_ids) | List of additional security group IDs to attach to the domain | `list(string)` | `[]` | no |\n| \u003ca name=\"input_app_network_access_type\"\u003e\u003c/a\u003e [app\\_network\\_access\\_type](#input\\_app\\_network\\_access\\_type) | Specifies the VPC used for non-EFS traffic. Valid values are PublicInternetOnly and VpcOnly | `string` | `\"PublicInternetOnly\"` | no |\n| \u003ca name=\"input_app_security_group_management\"\u003e\u003c/a\u003e [app\\_security\\_group\\_management](#input\\_app\\_security\\_group\\_management) | The entity that creates and manages the required security groups for inter-app communication in VPCOnly mode. Valid values are Service and Customer | `string` | `\"Service\"` | no |\n| \u003ca name=\"input_async_inference_config\"\u003e\u003c/a\u003e [async\\_inference\\_config](#input\\_async\\_inference\\_config) | (Optional) Configuration for asynchronous inference. | \u003cpre\u003eobject({\u003cbr/\u003e    output_config = object({\u003cbr/\u003e      s3_output_path  = string\u003cbr/\u003e      s3_failure_path = optional(string)\u003cbr/\u003e      kms_key_id      = optional(string)\u003cbr/\u003e      notification_config = optional(object({\u003cbr/\u003e        include_inference_response_in = optional(string)\u003cbr/\u003e        error_topic                   = optional(string)\u003cbr/\u003e        success_topic                 = optional(string)\u003cbr/\u003e      }))\u003cbr/\u003e    })\u003cbr/\u003e    client_config = optional(object({\u003cbr/\u003e      max_concurrent_invocations_per_instance = optional(number)\u003cbr/\u003e    }))\u003cbr/\u003e  })\u003c/pre\u003e | `null` | no |\n| \u003ca name=\"input_auth_mode\"\u003e\u003c/a\u003e [auth\\_mode](#input\\_auth\\_mode) | The mode of authentication that members use to access the domain. Valid values are IAM and SSO | `string` | `\"IAM\"` | no |\n| \u003ca name=\"input_container\"\u003e\u003c/a\u003e [container](#input\\_container) | List of containers for inference pipeline (alternative to primary\\_container) | `list(any)` | `null` | no |\n| \u003ca name=\"input_create_domain\"\u003e\u003c/a\u003e [create\\_domain](#input\\_create\\_domain) | Whether to create the SageMaker domain | `bool` | `false` | no |\n| \u003ca name=\"input_create_endpoint\"\u003e\u003c/a\u003e [create\\_endpoint](#input\\_create\\_endpoint) | Whether to create the SageMaker endpoint | `bool` | `false` | no |\n| \u003ca name=\"input_create_endpoint_config\"\u003e\u003c/a\u003e [create\\_endpoint\\_config](#input\\_create\\_endpoint\\_config) | Whether to create the SageMaker endpoint configuration | `bool` | `false` | no |\n| \u003ca name=\"input_create_execution_role\"\u003e\u003c/a\u003e [create\\_execution\\_role](#input\\_create\\_execution\\_role) | Whether to create an execution role for SageMaker | `bool` | `false` | no |\n| \u003ca name=\"input_create_model\"\u003e\u003c/a\u003e [create\\_model](#input\\_create\\_model) | Whether to create the SageMaker model | `bool` | `false` | no |\n| \u003ca name=\"input_create_pipeline\"\u003e\u003c/a\u003e [create\\_pipeline](#input\\_create\\_pipeline) | Whether to create the SageMaker pipeline | `bool` | `false` | no |\n| \u003ca name=\"input_create_pipeline_role\"\u003e\u003c/a\u003e [create\\_pipeline\\_role](#input\\_create\\_pipeline\\_role) | Whether to create a separate role for pipelines | `bool` | `false` | no |\n| \u003ca name=\"input_create_sagemaker_execution_role\"\u003e\u003c/a\u003e [create\\_sagemaker\\_execution\\_role](#input\\_create\\_sagemaker\\_execution\\_role) | Whether to create an SageMaker execution role | `bool` | `false` | no |\n| \u003ca name=\"input_create_security_groups\"\u003e\u003c/a\u003e [create\\_security\\_groups](#input\\_create\\_security\\_groups) | Whether to create security groups for SageMaker Studio | `bool` | `false` | no |\n| \u003ca name=\"input_create_user_profile\"\u003e\u003c/a\u003e [create\\_user\\_profile](#input\\_create\\_user\\_profile) | Whether to create the SageMaker user profile | `bool` | `false` | no |\n| \u003ca name=\"input_data_capture_config\"\u003e\u003c/a\u003e [data\\_capture\\_config](#input\\_data\\_capture\\_config) | (Optional) Configuration for capturing input/output data. | \u003cpre\u003eobject({\u003cbr/\u003e    initial_sampling_percentage = number\u003cbr/\u003e    destination_s3_uri          = string\u003cbr/\u003e    kms_key_id                  = optional(string)\u003cbr/\u003e    enable_capture              = optional(bool)\u003cbr/\u003e    capture_options = list(object({\u003cbr/\u003e      capture_mode = string\u003cbr/\u003e    }))\u003cbr/\u003e    capture_content_type_header = optional(object({\u003cbr/\u003e      csv_content_types  = optional(list(string))\u003cbr/\u003e      json_content_types = optional(list(string))\u003cbr/\u003e    }))\u003cbr/\u003e  })\u003c/pre\u003e | `null` | no |\n| \u003ca name=\"input_default_space_settings\"\u003e\u003c/a\u003e [default\\_space\\_settings](#input\\_default\\_space\\_settings) | The default space settings for the domain | \u003cpre\u003eobject({\u003cbr/\u003e    execution_role_arn = string\u003cbr/\u003e    security_groups    = optional(list(string))\u003cbr/\u003e\u003cbr/\u003e    jupyter_server_app_settings = optional(object({\u003cbr/\u003e      default_resource_spec = optional(object({\u003cbr/\u003e        instance_type                 = optional(string, \"ml.t3.medium\")\u003cbr/\u003e        lifecycle_config_arn          = optional(string)\u003cbr/\u003e        sagemaker_image_arn           = optional(string)\u003cbr/\u003e        sagemaker_image_version_arn   = optional(string)\u003cbr/\u003e        sagemaker_image_version_alias = optional(string)\u003cbr/\u003e      }))\u003cbr/\u003e    }))\u003cbr/\u003e\u003cbr/\u003e    kernel_gateway_app_settings = optional(object({\u003cbr/\u003e      default_resource_spec = optional(object({\u003cbr/\u003e        instance_type                 = optional(string, \"ml.t3.medium\")\u003cbr/\u003e        lifecycle_config_arn          = optional(string)\u003cbr/\u003e        sagemaker_image_arn           = optional(string)\u003cbr/\u003e        sagemaker_image_version_arn   = optional(string)\u003cbr/\u003e        sagemaker_image_version_alias = optional(string)\u003cbr/\u003e      }))\u003cbr/\u003e    }))\u003cbr/\u003e\u003cbr/\u003e    jupyter_lab_app_settings = optional(object({\u003cbr/\u003e      default_resource_spec = optional(object({\u003cbr/\u003e        instance_type                 = optional(string, \"ml.t3.medium\")\u003cbr/\u003e        lifecycle_config_arn          = optional(string)\u003cbr/\u003e        sagemaker_image_arn           = optional(string)\u003cbr/\u003e        sagemaker_image_version_arn   = optional(string)\u003cbr/\u003e        sagemaker_image_version_alias = optional(string)\u003cbr/\u003e      }))\u003cbr/\u003e    }))\u003cbr/\u003e\u003cbr/\u003e    space_storage_settings = optional(object({\u003cbr/\u003e      default_ebs_storage_settings = optional(object({\u003cbr/\u003e        default_ebs_volume_size_in_gb = number\u003cbr/\u003e        maximum_ebs_volume_size_in_gb = number\u003cbr/\u003e      }))\u003cbr/\u003e    }))\u003cbr/\u003e\u003cbr/\u003e    custom_file_system_config = optional(object({\u003cbr/\u003e      efs_file_system_config = optional(object({\u003cbr/\u003e        file_system_id   = string\u003cbr/\u003e        file_system_path = string\u003cbr/\u003e      }))\u003cbr/\u003e    }))\u003cbr/\u003e\u003cbr/\u003e    custom_posix_user_config = optional(object({\u003cbr/\u003e      gid = optional(number)\u003cbr/\u003e      uid = optional(number)\u003cbr/\u003e    }))\u003cbr/\u003e  })\u003c/pre\u003e | `null` | no |\n| \u003ca name=\"input_default_user_settings\"\u003e\u003c/a\u003e [default\\_user\\_settings](#input\\_default\\_user\\_settings) | The default user settings for the domain | \u003cpre\u003eobject({\u003cbr/\u003e    execution_role_arn  = string\u003cbr/\u003e    auto_mount_home_efs = optional(string, \"Disabled\")\u003cbr/\u003e    default_landing_uri = optional(string)\u003cbr/\u003e    studio_web_portal   = optional(string, \"ENABLED\")\u003cbr/\u003e\u003cbr/\u003e    jupyter_lab_app_settings = optional(object({\u003cbr/\u003e      default_resource_spec = optional(object({\u003cbr/\u003e        instance_type                 = optional(string, \"ml.t3.medium\")\u003cbr/\u003e        lifecycle_config_arn          = optional(string)\u003cbr/\u003e        sagemaker_image_arn           = optional(string)\u003cbr/\u003e        sagemaker_image_version_arn   = optional(string)\u003cbr/\u003e        sagemaker_image_version_alias = optional(string)\u003cbr/\u003e      }))\u003cbr/\u003e\u003cbr/\u003e      app_lifecycle_management = optional(object({\u003cbr/\u003e        idle_settings = optional(object({\u003cbr/\u003e          lifecycle_management        = optional(string, \"ENABLED\")\u003cbr/\u003e          idle_timeout_in_minutes     = optional(number, 60)\u003cbr/\u003e          max_idle_timeout_in_minutes = optional(number, 480)\u003cbr/\u003e          min_idle_timeout_in_minutes = optional(number, 60)\u003cbr/\u003e        }))\u003cbr/\u003e      }))\u003cbr/\u003e\u003cbr/\u003e      custom_images = optional(list(object({\u003cbr/\u003e        app_image_config_name = string\u003cbr/\u003e        image_name            = string\u003cbr/\u003e        image_version_number  = optional(number)\u003cbr/\u003e      })))\u003cbr/\u003e\u003cbr/\u003e      code_repositories = optional(list(object({\u003cbr/\u003e        repository_url = string\u003cbr/\u003e      })))\u003cbr/\u003e\u003cbr/\u003e      lifecycle_config_arns         = optional(list(string))\u003cbr/\u003e      built_in_lifecycle_config_arn = optional(string)\u003cbr/\u003e\u003cbr/\u003e      emr_settings = optional(object({\u003cbr/\u003e        assumable_role_arns = optional(list(string))\u003cbr/\u003e        execution_role_arns = optional(list(string))\u003cbr/\u003e      }))\u003cbr/\u003e    }))\u003cbr/\u003e\u003cbr/\u003e    code_editor_app_settings = optional(object({\u003cbr/\u003e      default_resource_spec = optional(object({\u003cbr/\u003e        instance_type                 = optional(string, \"ml.t3.medium\")\u003cbr/\u003e        lifecycle_config_arn          = optional(string)\u003cbr/\u003e        sagemaker_image_arn           = optional(string)\u003cbr/\u003e        sagemaker_image_version_arn   = optional(string)\u003cbr/\u003e        sagemaker_image_version_alias = optional(string)\u003cbr/\u003e      }))\u003cbr/\u003e\u003cbr/\u003e      app_lifecycle_management = optional(object({\u003cbr/\u003e        idle_settings = optional(object({\u003cbr/\u003e          lifecycle_management        = optional(string, \"ENABLED\")\u003cbr/\u003e          idle_timeout_in_minutes     = optional(number, 60)\u003cbr/\u003e          max_idle_timeout_in_minutes = optional(number, 480)\u003cbr/\u003e          min_idle_timeout_in_minutes = optional(number, 60)\u003cbr/\u003e        }))\u003cbr/\u003e      }))\u003cbr/\u003e\u003cbr/\u003e      custom_images = optional(list(object({\u003cbr/\u003e        app_image_config_name = string\u003cbr/\u003e        image_name            = string\u003cbr/\u003e        image_version_number  = optional(number)\u003cbr/\u003e      })))\u003cbr/\u003e\u003cbr/\u003e      lifecycle_config_arns         = optional(list(string))\u003cbr/\u003e      built_in_lifecycle_config_arn = optional(string)\u003cbr/\u003e    }))\u003cbr/\u003e\u003cbr/\u003e    jupyter_server_app_settings = optional(object({\u003cbr/\u003e      default_resource_spec = optional(object({\u003cbr/\u003e        instance_type                 = optional(string, \"ml.t3.medium\")\u003cbr/\u003e        lifecycle_config_arn          = optional(string)\u003cbr/\u003e        sagemaker_image_arn           = optional(string)\u003cbr/\u003e        sagemaker_image_version_arn   = optional(string)\u003cbr/\u003e        sagemaker_image_version_alias = optional(string)\u003cbr/\u003e      }))\u003cbr/\u003e\u003cbr/\u003e      code_repositories = optional(list(object({\u003cbr/\u003e        repository_url = string\u003cbr/\u003e      })))\u003cbr/\u003e\u003cbr/\u003e      lifecycle_config_arns = optional(list(string))\u003cbr/\u003e    }))\u003cbr/\u003e\u003cbr/\u003e    kernel_gateway_app_settings = optional(object({\u003cbr/\u003e      default_resource_spec = optional(object({\u003cbr/\u003e        instance_type                 = optional(string, \"ml.t3.medium\")\u003cbr/\u003e        lifecycle_config_arn          = optional(string)\u003cbr/\u003e        sagemaker_image_arn           = optional(string)\u003cbr/\u003e        sagemaker_image_version_arn   = optional(string)\u003cbr/\u003e        sagemaker_image_version_alias = optional(string)\u003cbr/\u003e      }))\u003cbr/\u003e\u003cbr/\u003e      custom_images = optional(list(object({\u003cbr/\u003e        app_image_config_name = string\u003cbr/\u003e        image_name            = string\u003cbr/\u003e        image_version_number  = optional(number)\u003cbr/\u003e      })))\u003cbr/\u003e\u003cbr/\u003e      lifecycle_config_arns = optional(list(string))\u003cbr/\u003e    }))\u003cbr/\u003e\u003cbr/\u003e    canvas_app_settings = optional(object({\u003cbr/\u003e      time_series_forecasting_settings = optional(object({\u003cbr/\u003e        status                   = optional(string, \"DISABLED\")\u003cbr/\u003e        amazon_forecast_role_arn = optional(string)\u003cbr/\u003e      }))\u003cbr/\u003e\u003cbr/\u003e      model_register_settings = optional(object({\u003cbr/\u003e        status                                = optional(string, \"DISABLED\")\u003cbr/\u003e        cross_account_model_register_role_arn = optional(string)\u003cbr/\u003e      }))\u003cbr/\u003e\u003cbr/\u003e      workspace_settings = optional(object({\u003cbr/\u003e        s3_artifact_path = optional(string)\u003cbr/\u003e        s3_kms_key_id    = optional(string)\u003cbr/\u003e      }))\u003cbr/\u003e\u003cbr/\u003e      direct_deploy_settings = optional(object({\u003cbr/\u003e        status = optional(string, \"DISABLED\")\u003cbr/\u003e      }))\u003cbr/\u003e\u003cbr/\u003e      kendra_settings = optional(object({\u003cbr/\u003e        status = optional(string, \"DISABLED\")\u003cbr/\u003e      }))\u003cbr/\u003e\u003cbr/\u003e      identity_provider_oauth_settings = optional(list(object({\u003cbr/\u003e        data_source_name = optional(string)\u003cbr/\u003e        secret_arn       = optional(string)\u003cbr/\u003e        status           = optional(string, \"DISABLED\")\u003cbr/\u003e      })))\u003cbr/\u003e\u003cbr/\u003e      emr_serverless_settings = optional(object({\u003cbr/\u003e        execution_role_arn = optional(string)\u003cbr/\u003e        status             = optional(string, \"DISABLED\")\u003cbr/\u003e      }))\u003cbr/\u003e    }))\u003cbr/\u003e\u003cbr/\u003e    tensor_board_app_settings = optional(object({\u003cbr/\u003e      default_resource_spec = optional(object({\u003cbr/\u003e        instance_type                 = optional(string, \"ml.t3.medium\")\u003cbr/\u003e        lifecycle_config_arn          = optional(string)\u003cbr/\u003e        sagemaker_image_arn           = optional(string)\u003cbr/\u003e        sagemaker_image_version_arn   = optional(string)\u003cbr/\u003e        sagemaker_image_version_alias = optional(string)\u003cbr/\u003e      }))\u003cbr/\u003e    }))\u003cbr/\u003e\u003cbr/\u003e    r_session_app_settings = optional(object({\u003cbr/\u003e      default_resource_spec = optional(object({\u003cbr/\u003e        instance_type                 = optional(string, \"ml.t3.medium\")\u003cbr/\u003e        lifecycle_config_arn          = optional(string)\u003cbr/\u003e        sagemaker_image_arn           = optional(string)\u003cbr/\u003e        sagemaker_image_version_arn   = optional(string)\u003cbr/\u003e        sagemaker_image_version_alias = optional(string)\u003cbr/\u003e      }))\u003cbr/\u003e\u003cbr/\u003e      custom_images = optional(list(object({\u003cbr/\u003e        app_image_config_name = string\u003cbr/\u003e        image_name            = string\u003cbr/\u003e        image_version_number  = optional(number)\u003cbr/\u003e      })))\u003cbr/\u003e    }))\u003cbr/\u003e\u003cbr/\u003e    r_studio_server_pro_app_settings = optional(object({\u003cbr/\u003e      access_status = optional(string, \"DISABLED\")\u003cbr/\u003e      user_group    = optional(string, \"R_STUDIO_USER\")\u003cbr/\u003e    }))\u003cbr/\u003e\u003cbr/\u003e    sharing_settings = optional(object({\u003cbr/\u003e      notebook_output_option = optional(string, \"Disabled\")\u003cbr/\u003e      s3_kms_key_id          = optional(string)\u003cbr/\u003e      s3_output_path         = optional(string)\u003cbr/\u003e    }))\u003cbr/\u003e\u003cbr/\u003e    space_storage_settings = optional(object({\u003cbr/\u003e      default_ebs_storage_settings = optional(object({\u003cbr/\u003e        default_ebs_volume_size_in_gb = number\u003cbr/\u003e        maximum_ebs_volume_size_in_gb = number\u003cbr/\u003e      }))\u003cbr/\u003e    }))\u003cbr/\u003e\u003cbr/\u003e    custom_file_system_config = optional(object({\u003cbr/\u003e      efs_file_system_config = optional(object({\u003cbr/\u003e        file_system_id   = string\u003cbr/\u003e        file_system_path = string\u003cbr/\u003e      }))\u003cbr/\u003e    }))\u003cbr/\u003e\u003cbr/\u003e    custom_posix_user_config = optional(object({\u003cbr/\u003e      gid = optional(number)\u003cbr/\u003e      uid = optional(number)\u003cbr/\u003e    }))\u003cbr/\u003e\u003cbr/\u003e    studio_web_portal_settings = optional(object({\u003cbr/\u003e      hidden_app_types      = optional(list(string))\u003cbr/\u003e      hidden_instance_types = optional(list(string))\u003cbr/\u003e      hidden_ml_tools       = optional(list(string))\u003cbr/\u003e    }))\u003cbr/\u003e  })\u003c/pre\u003e | `null` | no |\n| \u003ca name=\"input_deployment_config\"\u003e\u003c/a\u003e [deployment\\_config](#input\\_deployment\\_config) | Deployment configuration block | \u003cpre\u003eobject({\u003cbr/\u003e    blue_green_update_policy = optional(object({\u003cbr/\u003e      traffic_routing_configuration = object({\u003cbr/\u003e        type                     = string\u003cbr/\u003e        wait_interval_in_seconds = number\u003cbr/\u003e        canary_size = optional(object({\u003cbr/\u003e          type  = string\u003cbr/\u003e          value = number\u003cbr/\u003e        }))\u003cbr/\u003e        linear_step_size = optional(object({\u003cbr/\u003e          type  = string\u003cbr/\u003e          value = number\u003cbr/\u003e        }))\u003cbr/\u003e      })\u003cbr/\u003e      maximum_execution_timeout_in_seconds = optional(number)\u003cbr/\u003e      termination_wait_in_seconds          = optional(number)\u003cbr/\u003e    }))\u003cbr/\u003e    auto_rollback_configuration = optional(object({\u003cbr/\u003e      alarms = list(object({\u003cbr/\u003e        alarm_name = string\u003cbr/\u003e      }))\u003cbr/\u003e    }))\u003cbr/\u003e    rolling_update_policy = optional(object({\u003cbr/\u003e      wait_interval_in_seconds             = number\u003cbr/\u003e      maximum_execution_timeout_in_seconds = optional(number)\u003cbr/\u003e      maximum_batch_size = object({\u003cbr/\u003e        type  = string\u003cbr/\u003e        value = number\u003cbr/\u003e      })\u003cbr/\u003e      rollback_maximum_batch_size = optional(object({\u003cbr/\u003e        type  = string\u003cbr/\u003e        value = number\u003cbr/\u003e      }))\u003cbr/\u003e    }))\u003cbr/\u003e  })\u003c/pre\u003e | `null` | no |\n| \u003ca name=\"input_domain_name\"\u003e\u003c/a\u003e [domain\\_name](#input\\_domain\\_name) | The name of the SageMaker domain | `string` | `\"arc-sagemaker-domain\"` | no |\n| \u003ca name=\"input_domain_settings\"\u003e\u003c/a\u003e [domain\\_settings](#input\\_domain\\_settings) | The domain settings | \u003cpre\u003eobject({\u003cbr/\u003e    execution_role_identity_config = optional(string, \"USER_PROFILE_NAME\")\u003cbr/\u003e    security_group_ids             = optional(list(string))\u003cbr/\u003e\u003cbr/\u003e    docker_settings = optional(object({\u003cbr/\u003e      enable_docker_access      = optional(string, \"ENABLED\")\u003cbr/\u003e      vpc_only_trusted_accounts = optional(list(string))\u003cbr/\u003e    }))\u003cbr/\u003e\u003cbr/\u003e    r_studio_server_pro_domain_settings = optional(object({\u003cbr/\u003e      domain_execution_role_arn    = string\u003cbr/\u003e      r_studio_connect_url         = optional(string)\u003cbr/\u003e      r_studio_package_manager_url = optional(string)\u003cbr/\u003e\u003cbr/\u003e      default_resource_spec = optional(object({\u003cbr/\u003e        instance_type                 = optional(string, \"ml.t3.medium\")\u003cbr/\u003e        lifecycle_config_arn          = optional(string)\u003cbr/\u003e        sagemaker_image_arn           = optional(string)\u003cbr/\u003e        sagemaker_image_version_arn   = optional(string)\u003cbr/\u003e        sagemaker_image_version_alias = optional(string)\u003cbr/\u003e      }))\u003cbr/\u003e    }))\u003cbr/\u003e  })\u003c/pre\u003e | `null` | no |\n| \u003ca name=\"input_enable_network_isolation\"\u003e\u003c/a\u003e [enable\\_network\\_isolation](#input\\_enable\\_network\\_isolation) | Isolate the model container from external network | `bool` | `null` | no |\n| \u003ca name=\"input_execution_role_name\"\u003e\u003c/a\u003e [execution\\_role\\_name](#input\\_execution\\_role\\_name) | Name of the execution role to create | `string` | `\"SageMakerStudioExecutionRole\"` | no |\n| \u003ca name=\"input_execution_role_path\"\u003e\u003c/a\u003e [execution\\_role\\_path](#input\\_execution\\_role\\_path) | Path for the execution role | `string` | `\"/\"` | no |\n| \u003ca name=\"input_inference_execution_config\"\u003e\u003c/a\u003e [inference\\_execution\\_config](#input\\_inference\\_execution\\_config) | Multi-container execution configuration | \u003cpre\u003eobject({\u003cbr/\u003e    mode = string\u003cbr/\u003e  })\u003c/pre\u003e | `null` | no |\n| \u003ca name=\"input_kms_key_arn\"\u003e\u003c/a\u003e [kms\\_key\\_arn](#input\\_kms\\_key\\_arn) | (Optional) ARN of the KMS key to encrypt storage volume data. | `string` | `null` | no |\n| \u003ca name=\"input_kms_key_id\"\u003e\u003c/a\u003e [kms\\_key\\_id](#input\\_kms\\_key\\_id) | The AWS KMS customer managed CMK used to encrypt the EFS volume attached to the domain | `string` | `null` | no |\n| \u003ca name=\"input_name\"\u003e\u003c/a\u003e [name](#input\\_name) | The name of the SageMaker model. | `string` | `\"terraform-sg\"` | no |\n| \u003ca name=\"input_name_prefix\"\u003e\u003c/a\u003e [name\\_prefix](#input\\_name\\_prefix) | (Optional) Prefix for the endpoint configuration name. Conflicts with name. | `string` | `null` | no |\n| \u003ca name=\"input_pipeline_role_name\"\u003e\u003c/a\u003e [pipeline\\_role\\_name](#input\\_pipeline\\_role\\_name) | Name of the pipeline role to create | `string` | `\"SageMakerPipelineExecutionRole\"` | no |\n| \u003ca name=\"input_pipeline_role_path\"\u003e\u003c/a\u003e [pipeline\\_role\\_path](#input\\_pipeline\\_role\\_path) | Path for the pipeline role | `string` | `\"/\"` | no |\n| \u003ca name=\"input_pipelines\"\u003e\u003c/a\u003e [pipelines](#input\\_pipelines) | List of SageMaker pipelines to create | \u003cpre\u003elist(object({\u003cbr/\u003e    name         = string\u003cbr/\u003e    display_name = string\u003cbr/\u003e    description  = optional(string)\u003cbr/\u003e    definition   = optional(string)\u003cbr/\u003e    role_arn     = optional(string)\u003cbr/\u003e    tags         = optional(map(string))\u003cbr/\u003e\u003cbr/\u003e    pipeline_definition_s3_location = optional(object({\u003cbr/\u003e      bucket     = string\u003cbr/\u003e      object_key = string\u003cbr/\u003e      version_id = optional(string)\u003cbr/\u003e    }))\u003cbr/\u003e\u003cbr/\u003e    parallelism_configuration = optional(object({\u003cbr/\u003e      max_parallel_execution_steps = number\u003cbr/\u003e    }))\u003cbr/\u003e  }))\u003c/pre\u003e | `[]` | no |\n| \u003ca name=\"input_primary_container\"\u003e\u003c/a\u003e [primary\\_container](#input\\_primary\\_container) | Primary container block | \u003cpre\u003eobject({\u003cbr/\u003e    image              = string\u003cbr/\u003e    mode               = optional(string)\u003cbr/\u003e    model_data_url     = optional(string)\u003cbr/\u003e    model_package_name = optional(string)\u003cbr/\u003e    container_hostname = optional(string)\u003cbr/\u003e    environment        = optional(map(string))\u003cbr/\u003e    image_config = optional(object({\u003cbr/\u003e      repository_access_mode = string\u003cbr/\u003e      repository_auth_config = optional(object({\u003cbr/\u003e        repository_credentials_provider_arn = string\u003cbr/\u003e      }))\u003cbr/\u003e    }))\u003cbr/\u003e    inference_specification_name = optional(string)\u003cbr/\u003e    multi_model_config = optional(object({\u003cbr/\u003e      model_cache_setting = string\u003cbr/\u003e    }))\u003cbr/\u003e    model_data_source = optional(object({\u003cbr/\u003e      s3_data_source = object({\u003cbr/\u003e        compression_type = string\u003cbr/\u003e        s3_data_type     = string\u003cbr/\u003e        s3_uri           = string\u003cbr/\u003e        model_access_config = optional(object({\u003cbr/\u003e          accept_eula = bool\u003cbr/\u003e        }))\u003cbr/\u003e      })\u003cbr/\u003e    }))\u003cbr/\u003e  })\u003c/pre\u003e | \u003cpre\u003e{\u003cbr/\u003e  \"environment\": {},\u003cbr/\u003e  \"image\": \"683313688378.dkr.ecr.us-east-1.amazonaws.com/sagemaker-scikit-learn:1.0-1-cpu-py3\",\u003cbr/\u003e  \"model_data_url\": \"s3://your-sagemaker-model-bucket-21-05-25/model/model.tar.gz\"\u003cbr/\u003e}\u003c/pre\u003e | no |\n| \u003ca name=\"input_production_variants\"\u003e\u003c/a\u003e [production\\_variants](#input\\_production\\_variants) | (Required) List of production variant configurations. | \u003cpre\u003elist(object({\u003cbr/\u003e    variant_name                                      = optional(string)\u003cbr/\u003e    model_name                                        = optional(string)\u003cbr/\u003e    initial_instance_count                            = optional(number)\u003cbr/\u003e    instance_type                                     = optional(string)\u003cbr/\u003e    accelerator_type                                  = optional(string)\u003cbr/\u003e    container_startup_health_check_timeout_in_seconds = optional(number)\u003cbr/\u003e    core_dump_config = optional(object({\u003cbr/\u003e      destination_s3_uri = string\u003cbr/\u003e      kms_key_id         = string\u003cbr/\u003e    }))\u003cbr/\u003e    enable_ssm_access                      = optional(bool)\u003cbr/\u003e    inference_ami_version                  = optional(string)\u003cbr/\u003e    initial_variant_weight                 = optional(number)\u003cbr/\u003e    model_data_download_timeout_in_seconds = optional(number)\u003cbr/\u003e    routing_config = optional(object({\u003cbr/\u003e      routing_strategy = string\u003cbr/\u003e    }))\u003cbr/\u003e    serverless_config = optional(object({\u003cbr/\u003e      max_concurrency         = number\u003cbr/\u003e      memory_size_in_mb       = number\u003cbr/\u003e      provisioned_concurrency = optional(number)\u003cbr/\u003e    }))\u003cbr/\u003e    managed_instance_scaling = optional(object({\u003cbr/\u003e      status             = optional(string)\u003cbr/\u003e      min_instance_count = optional(number)\u003cbr/\u003e      max_instance_count = optional(number)\u003cbr/\u003e    }))\u003cbr/\u003e    volume_size_in_gb = optional(number)\u003cbr/\u003e  }))\u003c/pre\u003e | \u003cpre\u003e[\u003cbr/\u003e  {\u003cbr/\u003e    \"initial_instance_count\": 1,\u003cbr/\u003e    \"initial_variant_weight\": 1,\u003cbr/\u003e    \"instance_type\": \"ml.m5.large\",\u003cbr/\u003e    \"variant_name\": \"AllTraffic\"\u003cbr/\u003e  }\u003cbr/\u003e]\u003c/pre\u003e | no |\n| \u003ca name=\"input_retention_policy\"\u003e\u003c/a\u003e [retention\\_policy](#input\\_retention\\_policy) | The retention policy for the domain | \u003cpre\u003eobject({\u003cbr/\u003e    home_efs_file_system = optional(string, \"Retain\")\u003cbr/\u003e  })\u003c/pre\u003e | `null` | no |\n| \u003ca name=\"input_security_group_data\"\u003e\u003c/a\u003e [security\\_group\\_data](#input\\_security\\_group\\_data) | (optional) Security Group data | \u003cpre\u003eobject({\u003cbr/\u003e    security_group_ids_to_attach = optional(list(string), [])\u003cbr/\u003e    create                       = optional(bool, true)\u003cbr/\u003e    description                  = optional(string, null)\u003cbr/\u003e    ingress_rules = optional(list(object({\u003cbr/\u003e      description              = optional(string, null)\u003cbr/\u003e      cidr_block               = optional(string, null)\u003cbr/\u003e      source_security_group_id = optional(string, null)\u003cbr/\u003e      from_port                = number\u003cbr/\u003e      ip_protocol              = string\u003cbr/\u003e      to_port                  = string\u003cbr/\u003e      self                     = optional(bool, false)\u003cbr/\u003e    })), [])\u003cbr/\u003e    egress_rules = optional(list(object({\u003cbr/\u003e      description                   = optional(string, null)\u003cbr/\u003e      cidr_block                    = optional(string, null)\u003cbr/\u003e      destination_security_group_id = optional(string, null)\u003cbr/\u003e      from_port                     = number\u003cbr/\u003e      ip_protocol                   = string\u003cbr/\u003e      to_port                       = string\u003cbr/\u003e      prefix_list_id                = optional(string, null)\u003cbr/\u003e    })), [])\u003cbr/\u003e  })\u003c/pre\u003e | \u003cpre\u003e{\u003cbr/\u003e  \"create\": false\u003cbr/\u003e}\u003c/pre\u003e | no |\n| \u003ca name=\"input_security_group_name\"\u003e\u003c/a\u003e [security\\_group\\_name](#input\\_security\\_group\\_name) | sagemaker security group name | `string` | `\"sagemaker-sg\"` | no |\n| \u003ca name=\"input_shadow_production_variants\"\u003e\u003c/a\u003e [shadow\\_production\\_variants](#input\\_shadow\\_production\\_variants) | (Optional) List of shadow production variant configurations. | \u003cpre\u003elist(object({\u003cbr/\u003e    variant_name           = optional(string)\u003cbr/\u003e    model_name             = string\u003cbr/\u003e    initial_instance_count = optional(number)\u003cbr/\u003e    instance_type          = optional(string)\u003cbr/\u003e    initial_variant_weight = optional(number)\u003cbr/\u003e  }))\u003c/pre\u003e | `[]` | no |\n| \u003ca name=\"input_subnet_ids\"\u003e\u003c/a\u003e [subnet\\_ids](#input\\_subnet\\_ids) | The VPC subnets that Studio uses for communication | `list(string)` | `[]` | no |\n| \u003ca name=\"input_tag_propagation\"\u003e\u003c/a\u003e [tag\\_propagation](#input\\_tag\\_propagation) | Indicates whether custom tag propagation is supported for the domain. Valid values are ENABLED and DISABLED | `string` | `\"DISABLED\"` | no |\n| \u003ca name=\"input_tags\"\u003e\u003c/a\u003e [tags](#input\\_tags) | Tags to assign to the SageMaker model | `map(string)` | `{}` | no |\n| \u003ca name=\"input_user_profiles\"\u003e\u003c/a\u003e [user\\_profiles](#input\\_user\\_profiles) | List of user profiles to create | \u003cpre\u003elist(object({\u003cbr/\u003e    name                           = string\u003cbr/\u003e    single_sign_on_user_identifier = optional(string)\u003cbr/\u003e    single_sign_on_user_value      = optional(string)\u003cbr/\u003e    tags                           = optional(map(string))\u003cbr/\u003e\u003cbr/\u003e    user_settings = optional(object({\u003cbr/\u003e      execution_role_arn  = optional(string)\u003cbr/\u003e      auto_mount_home_efs = optional(string)\u003cbr/\u003e      default_landing_uri = optional(string)\u003cbr/\u003e      studio_web_portal   = optional(string)\u003cbr/\u003e      security_groups     = optional(list(string))\u003cbr/\u003e\u003cbr/\u003e      jupyter_lab_app_settings = optional(object({\u003cbr/\u003e        default_resource_spec = optional(object({\u003cbr/\u003e          instance_type                 = optional(string)\u003cbr/\u003e          lifecycle_config_arn          = optional(string)\u003cbr/\u003e          sagemaker_image_arn           = optional(string)\u003cbr/\u003e          sagemaker_image_version_arn   = optional(string)\u003cbr/\u003e          sagemaker_image_version_alias = optional(string)\u003cbr/\u003e        }))\u003cbr/\u003e\u003cbr/\u003e        app_lifecycle_management = optional(object({\u003cbr/\u003e          idle_settings = optional(object({\u003cbr/\u003e            lifecycle_management        = optional(string)\u003cbr/\u003e            idle_timeout_in_minutes     = optional(number)\u003cbr/\u003e            max_idle_timeout_in_minutes = optional(number)\u003cbr/\u003e            min_idle_timeout_in_minutes = optional(number)\u003cbr/\u003e          }))\u003cbr/\u003e        }))\u003cbr/\u003e\u003cbr/\u003e        custom_images = optional(list(object({\u003cbr/\u003e          app_image_config_name = string\u003cbr/\u003e          image_name            = string\u003cbr/\u003e          image_version_number  = optional(number)\u003cbr/\u003e        })))\u003cbr/\u003e\u003cbr/\u003e        code_repositories = optional(list(object({\u003cbr/\u003e          repository_url = string\u003cbr/\u003e        })))\u003cbr/\u003e\u003cbr/\u003e        lifecycle_config_arns         = optional(list(string))\u003cbr/\u003e        built_in_lifecycle_config_arn = optional(string)\u003cbr/\u003e\u003cbr/\u003e        emr_settings = optional(object({\u003cbr/\u003e          assumable_role_arns = optional(list(string))\u003cbr/\u003e          execution_role_arns = optional(list(string))\u003cbr/\u003e        }))\u003cbr/\u003e      }))\u003cbr/\u003e\u003cbr/\u003e      code_editor_app_settings = optional(object({\u003cbr/\u003e        default_resource_spec = optional(object({\u003cbr/\u003e          instance_type                 = optional(string)\u003cbr/\u003e          lifecycle_config_arn          = optional(string)\u003cbr/\u003e          sagemaker_image_arn           = optional(string)\u003cbr/\u003e          sagemaker_image_version_arn   = optional(string)\u003cbr/\u003e          sagemaker_image_version_alias = optional(string)\u003cbr/\u003e        }))\u003cbr/\u003e\u003cbr/\u003e        app_lifecycle_management = optional(object({\u003cbr/\u003e          idle_settings = optional(object({\u003cbr/\u003e            lifecycle_management        = optional(string)\u003cbr/\u003e            idle_timeout_in_minutes     = optional(number)\u003cbr/\u003e            max_idle_timeout_in_minutes = optional(number)\u003cbr/\u003e            min_idle_timeout_in_minutes = optional(number)\u003cbr/\u003e          }))\u003cbr/\u003e        }))\u003cbr/\u003e\u003cbr/\u003e        custom_images = optional(list(object({\u003cbr/\u003e          app_image_config_name = string\u003cbr/\u003e          image_name            = string\u003cbr/\u003e          image_version_number  = optional(number)\u003cbr/\u003e        })))\u003cbr/\u003e\u003cbr/\u003e        lifecycle_config_arns         = optional(list(string))\u003cbr/\u003e        built_in_lifecycle_config_arn = optional(string)\u003cbr/\u003e      }))\u003cbr/\u003e\u003cbr/\u003e      jupyter_server_app_settings = optional(object({\u003cbr/\u003e        default_resource_spec = optional(object({\u003cbr/\u003e          instance_type                 = optional(string)\u003cbr/\u003e          lifecycle_config_arn          = optional(string)\u003cbr/\u003e          sagemaker_image_arn           = optional(string)\u003cbr/\u003e          sagemaker_image_version_arn   = optional(string)\u003cbr/\u003e          sagemaker_image_version_alias = optional(string)\u003cbr/\u003e        }))\u003cbr/\u003e\u003cbr/\u003e        code_repositories = optional(list(object({\u003cbr/\u003e          repository_url = string\u003cbr/\u003e        })))\u003cbr/\u003e\u003cbr/\u003e        lifecycle_config_arns = optional(list(string))\u003cbr/\u003e      }))\u003cbr/\u003e\u003cbr/\u003e      kernel_gateway_app_settings = optional(object({\u003cbr/\u003e        default_resource_spec = optional(object({\u003cbr/\u003e          instance_type                 = optional(string)\u003cbr/\u003e          lifecycle_config_arn          = optional(string)\u003cbr/\u003e          sagemaker_image_arn           = optional(string)\u003cbr/\u003e          sagemaker_image_version_arn   = optional(string)\u003cbr/\u003e          sagemaker_image_version_alias = optional(string)\u003cbr/\u003e        }))\u003cbr/\u003e\u003cbr/\u003e        custom_images = optional(list(object({\u003cbr/\u003e          app_image_config_name = string\u003cbr/\u003e          image_name            = string\u003cbr/\u003e          image_version_number  = optional(number)\u003cbr/\u003e        })))\u003cbr/\u003e\u003cbr/\u003e        lifecycle_config_arns = optional(list(string))\u003cbr/\u003e      }))\u003cbr/\u003e\u003cbr/\u003e      canvas_app_settings = optional(object({\u003cbr/\u003e        time_series_forecasting_settings = optional(object({\u003cbr/\u003e          status                   = optional(string)\u003cbr/\u003e          amazon_forecast_role_arn = optional(string)\u003cbr/\u003e        }))\u003cbr/\u003e\u003cbr/\u003e        model_register_settings = optional(object({\u003cbr/\u003e          status                                = optional(string)\u003cbr/\u003e          cross_account_model_register_role_arn = optional(string)\u003cbr/\u003e        }))\u003cbr/\u003e\u003cbr/\u003e        workspace_settings = optional(object({\u003cbr/\u003e          s3_artifact_path = optional(string)\u003cbr/\u003e          s3_kms_key_id    = optional(string)\u003cbr/\u003e        }))\u003cbr/\u003e\u003cbr/\u003e        direct_deploy_settings = optional(object({\u003cbr/\u003e          status = optional(string)\u003cbr/\u003e        }))\u003cbr/\u003e\u003cbr/\u003e        kendra_settings = optional(object({\u003cbr/\u003e          status = optional(string)\u003cbr/\u003e        }))\u003cbr/\u003e\u003cbr/\u003e        identity_provider_oauth_settings = optional(list(object({\u003cbr/\u003e          data_source_name = optional(string)\u003cbr/\u003e          secret_arn       = optional(string)\u003cbr/\u003e          status           = optional(string)\u003cbr/\u003e        })))\u003cbr/\u003e\u003cbr/\u003e        emr_serverless_settings = optional(object({\u003cbr/\u003e          execution_role_arn = optional(string)\u003cbr/\u003e          status             = optional(string)\u003cbr/\u003e        }))\u003cbr/\u003e      }))\u003cbr/\u003e\u003cbr/\u003e      tensor_board_app_settings = optional(object({\u003cbr/\u003e        default_resource_spec = optional(object({\u003cbr/\u003e          instance_type                 = optional(string)\u003cbr/\u003e          lifecycle_config_arn          = optional(string)\u003cbr/\u003e          sagemaker_image_arn           = optional(string)\u003cbr/\u003e          sagemaker_image_version_arn   = optional(string)\u003cbr/\u003e          sagemaker_image_version_alias = optional(string)\u003cbr/\u003e        }))\u003cbr/\u003e      }))\u003cbr/\u003e\u003cbr/\u003e      r_session_app_settings = optional(object({\u003cbr/\u003e        default_resource_spec = optional(object({\u003cbr/\u003e          instance_type                 = optional(string)\u003cbr/\u003e          lifecycle_config_arn          = optional(string)\u003cbr/\u003e          sagemaker_image_arn           = optional(string)\u003cbr/\u003e          sagemaker_image_version_arn   = optional(string)\u003cbr/\u003e          sagemaker_image_version_alias = optional(string)\u003cbr/\u003e        }))\u003cbr/\u003e\u003cbr/\u003e        custom_images = optional(list(object({\u003cbr/\u003e          app_image_config_name = string\u003cbr/\u003e          image_name            = string\u003cbr/\u003e          image_version_number  = optional(number)\u003cbr/\u003e        })))\u003cbr/\u003e      }))\u003cbr/\u003e\u003cbr/\u003e      r_studio_server_pro_app_settings = optional(object({\u003cbr/\u003e        access_status = optional(string)\u003cbr/\u003e        user_group    = optional(string)\u003cbr/\u003e      }))\u003cbr/\u003e\u003cbr/\u003e      sharing_settings = optional(object({\u003cbr/\u003e        notebook_output_option = optional(string)\u003cbr/\u003e        s3_kms_key_id          = optional(string)\u003cbr/\u003e        s3_output_path         = optional(string)\u003cbr/\u003e      }))\u003cbr/\u003e\u003cbr/\u003e      space_storage_settings = optional(object({\u003cbr/\u003e        default_ebs_storage_settings = optional(object({\u003cbr/\u003e          default_ebs_volume_size_in_gb = number\u003cbr/\u003e          maximum_ebs_volume_size_in_gb = number\u003cbr/\u003e        }))\u003cbr/\u003e      }))\u003cbr/\u003e\u003cbr/\u003e      custom_file_system_config = optional(object({\u003cbr/\u003e        efs_file_system_config = optional(object({\u003cbr/\u003e          file_system_id   = string\u003cbr/\u003e          file_system_path = string\u003cbr/\u003e        }))\u003cbr/\u003e      }))\u003cbr/\u003e\u003cbr/\u003e      custom_posix_user_config = optional(object({\u003cbr/\u003e        gid = optional(number)\u003cbr/\u003e        uid = optional(number)\u003cbr/\u003e      }))\u003cbr/\u003e\u003cbr/\u003e      studio_web_portal_settings = optional(object({\u003cbr/\u003e        hidden_app_types      = optional(list(string))\u003cbr/\u003e        hidden_instance_types = optional(list(string))\u003cbr/\u003e        hidden_ml_tools       = optional(list(string))\u003cbr/\u003e      }))\u003cbr/\u003e    }))\u003cbr/\u003e  }))\u003c/pre\u003e | `[]` | no |\n| \u003ca name=\"input_vpc_config\"\u003e\u003c/a\u003e [vpc\\_config](#input\\_vpc\\_config) | VPC configuration for the model | \u003cpre\u003eobject({\u003cbr/\u003e    security_group_ids = list(string)\u003cbr/\u003e    subnets            = list(string)\u003cbr/\u003e  })\u003c/pre\u003e | `null` | no |\n| \u003ca name=\"input_vpc_id\"\u003e\u003c/a\u003e [vpc\\_id](#input\\_vpc\\_id) | The ID of the VPC that Studio uses for communication | `string` | `null` | no |\n\n## Outputs\n\n| Name | Description |\n|------|-------------|\n| \u003ca name=\"output_domain_arn\"\u003e\u003c/a\u003e [domain\\_arn](#output\\_domain\\_arn) | ARN of the SageMaker domain |\n| \u003ca name=\"output_domain_id\"\u003e\u003c/a\u003e [domain\\_id](#output\\_domain\\_id) | ID of the SageMaker domain |\n| \u003ca name=\"output_domain_url\"\u003e\u003c/a\u003e [domain\\_url](#output\\_domain\\_url) | URL to access the SageMaker Studio |\n| \u003ca name=\"output_endpoint_arn\"\u003e\u003c/a\u003e [endpoint\\_arn](#output\\_endpoint\\_arn) | ARN of the SageMaker endpoint |\n| \u003ca name=\"output_endpoint_config_arn\"\u003e\u003c/a\u003e [endpoint\\_config\\_arn](#output\\_endpoint\\_config\\_arn) | ARN of the SageMaker endpoint configuration |\n| \u003ca name=\"output_endpoint_config_name\"\u003e\u003c/a\u003e [endpoint\\_config\\_name](#output\\_endpoint\\_config\\_name) | Name of the SageMaker endpoint configuration |\n| \u003ca name=\"output_endpoint_name\"\u003e\u003c/a\u003e [endpoint\\_name](#output\\_endpoint\\_name) | Name of the SageMaker endpoint |\n| \u003ca name=\"output_model_arn\"\u003e\u003c/a\u003e [model\\_arn](#output\\_model\\_arn) | ARN of the SageMaker model |\n| \u003ca name=\"output_model_name\"\u003e\u003c/a\u003e [model\\_name](#output\\_model\\_name) | Name of the SageMaker model |\n| \u003ca name=\"output_pipeline_arns\"\u003e\u003c/a\u003e [pipeline\\_arns](#output\\_pipeline\\_arns) | List of SageMaker pipeline ARNs |\n| \u003ca name=\"output_pipeline_names\"\u003e\u003c/a\u003e [pipeline\\_names](#output\\_pipeline\\_names) | List of SageMaker pipeline names |\n| \u003ca name=\"output_user_profile_names\"\u003e\u003c/a\u003e [user\\_profile\\_names](#output\\_user\\_profile\\_names) | List of SageMaker user profile names |\n| \u003ca name=\"output_user_profiles\"\u003e\u003c/a\u003e [user\\_profiles](#output\\_user\\_profiles) | Map of SageMaker user profiles with their ARNs |\n\u003c!-- END OF PRE-COMMIT-TERRAFORM DOCS HOOK --\u003e\n\n## Versioning  \nThis project uses a `.version` file at the root of the repo which the pipeline reads from and does a git tag.  \n\nWhen you intend to commit to `main`, you will need to increment this version. Once the project is merged,\nthe pipeline will kick off and tag the latest git commit.  \n\n## Development\n\n### Prerequisites\n\n- [terraform](https://learn.hashicorp.com/terraform/getting-started/install#installing-terraform)\n- [terraform-docs](https://github.com/segmentio/terraform-docs)\n- [pre-commit](https://pre-commit.com/#install)\n- [golang](https://golang.org/doc/install#install)\n- [golint](https://github.com/golang/lint#installation)\n\n### Configurations\n\n- Configure pre-commit hooks\n  ```sh\n  pre-commit install\n  ```\n\n### Versioning\n\nwhile Contributing or doing git commit please specify the breaking change in your commit message whether its major,minor or patch\n\nFor Example\n\n```sh\ngit commit -m \"your commit message #major\"\n```\nBy specifying this , it will bump the version and if you don't specify this in your commit message then by default it will consider patch and will bump that accordingly\n\n### Tests\n- Tests are available in `test` directory\n- Configure the dependencies\n  ```sh\n  cd test/\n  go mod init github.com/sourcefuse/terraform-aws-refarch-\u003cmodule_name\u003e\n  go get github.com/gruntwork-io/terratest/modules/terraform\n  ```\n- Now execute the test  \n  ```sh\n  go test -timeout  30m\n  ```\n\n## Authors\n\nThis project is authored by:\n- SourceFuse ARC Team\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsourcefuse%2Fterraform-aws-arc-sagemaker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsourcefuse%2Fterraform-aws-arc-sagemaker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsourcefuse%2Fterraform-aws-arc-sagemaker/lists"}