diff --git a/.changelog/37153.txt b/.changelog/37153.txt new file mode 100644 index 00000000000..5af39c665fe --- /dev/null +++ b/.changelog/37153.txt @@ -0,0 +1,8 @@ + +```release-note:enhancement +resource/aws_sagemaker_domain: Add `default_user_settings.code_editor_app_settings.custom_image` configuration block +``` + +```release-note:enhancement +resource/aws_sagemaker_user_profile: Add `user_settings.code_editor_app_settings.custom_image` configuration block +``` diff --git a/internal/service/sagemaker/domain.go b/internal/service/sagemaker/domain.go index ba7cbbb8753..f04bdca5e14 100644 --- a/internal/service/sagemaker/domain.go +++ b/internal/service/sagemaker/domain.go @@ -389,6 +389,27 @@ func ResourceDomain() *schema.Resource { ValidateFunc: verify.ValidARN, }, }, + "custom_image": { + Type: schema.TypeList, + Optional: true, + MaxItems: 200, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "app_image_config_name": { + Type: schema.TypeString, + Required: true, + }, + "image_name": { + Type: schema.TypeString, + Required: true, + }, + "image_version_number": { + Type: schema.TypeInt, + Optional: true, + }, + }, + }, + }, }, }, }, @@ -1373,6 +1394,10 @@ func expandDomainCodeEditorAppSettings(l []interface{}) *sagemaker.CodeEditorApp config := &sagemaker.CodeEditorAppSettings{} + if v, ok := m["custom_image"].([]interface{}); ok && len(v) > 0 { + config.CustomImages = expandDomainCustomImages(v) + } + if v, ok := m["default_resource_spec"].([]interface{}); ok && len(v) > 0 { config.DefaultResourceSpec = expandResourceSpec(v) } @@ -1949,6 +1974,10 @@ func flattenDomainCodeEditorAppSettings(config *sagemaker.CodeEditorAppSettings) m := map[string]interface{}{} + if config.CustomImages != nil { + m["custom_image"] = flattenDomainCustomImages(config.CustomImages) + } + if config.DefaultResourceSpec != nil { m["default_resource_spec"] = flattenResourceSpec(config.DefaultResourceSpec) } diff --git a/internal/service/sagemaker/domain_test.go b/internal/service/sagemaker/domain_test.go index 05ac4eafef5..f8431a3a142 100644 --- a/internal/service/sagemaker/domain_test.go +++ b/internal/service/sagemaker/domain_test.go @@ -654,6 +654,85 @@ func testAccDomain_codeEditorAppSettings(t *testing.T) { }) } +func testAccDomain_codeEditorAppSettings_customImage(t *testing.T) { + ctx := acctest.Context(t) + if os.Getenv("SAGEMAKER_IMAGE_VERSION_BASE_IMAGE") == "" { + t.Skip("Environment variable SAGEMAKER_IMAGE_VERSION_BASE_IMAGE is not set") + } + + var domain sagemaker.DescribeDomainOutput + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + resourceName := "aws_sagemaker_domain.test" + baseImage := os.Getenv("SAGEMAKER_IMAGE_VERSION_BASE_IMAGE") + + resource.Test(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(ctx, t) }, + ErrorCheck: acctest.ErrorCheck(t, names.SageMakerServiceID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckDomainDestroy(ctx), + Steps: []resource.TestStep{ + { + Config: testAccDomainConfig_codeEditorAppSettingsCustomImage(rName, baseImage), + Check: resource.ComposeTestCheckFunc( + testAccCheckDomainExists(ctx, resourceName, &domain), + resource.TestCheckResourceAttr(resourceName, "default_user_settings.#", acctest.Ct1), + resource.TestCheckResourceAttr(resourceName, "default_user_settings.0.code_editor_app_settings.#", acctest.Ct1), + resource.TestCheckResourceAttr(resourceName, "default_user_settings.0.code_editor_app_settings.0.default_resource_spec.#", acctest.Ct0), + resource.TestCheckResourceAttr(resourceName, "default_user_settings.0.code_editor_app_settings.0.custom_image.#", acctest.Ct1), + resource.TestCheckResourceAttrPair(resourceName, "default_user_settings.0.code_editor_app_settings.0.custom_image.0.app_image_config_name", "aws_sagemaker_app_image_config.test", "app_image_config_name"), + resource.TestCheckResourceAttrPair(resourceName, "default_user_settings.0.code_editor_app_settings.0.custom_image.0.image_name", "aws_sagemaker_image.test", "image_name"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"retention_policy"}, + }, + }, + }) +} + +func testAccDomain_codeEditorAppSettings_defaultResourceSpecAndCustomImage(t *testing.T) { + ctx := acctest.Context(t) + if os.Getenv("SAGEMAKER_IMAGE_VERSION_BASE_IMAGE") == "" { + t.Skip("Environment variable SAGEMAKER_IMAGE_VERSION_BASE_IMAGE is not set") + } + + var domain sagemaker.DescribeDomainOutput + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + resourceName := "aws_sagemaker_domain.test" + baseImage := os.Getenv("SAGEMAKER_IMAGE_VERSION_BASE_IMAGE") + + resource.Test(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(ctx, t) }, + ErrorCheck: acctest.ErrorCheck(t, names.SageMakerServiceID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckDomainDestroy(ctx), + Steps: []resource.TestStep{ + { + Config: testAccDomainConfig_codeEditorAppSettingsDefaultResourceSpecAndCustomImage(rName, baseImage), + Check: resource.ComposeTestCheckFunc( + testAccCheckDomainExists(ctx, resourceName, &domain), + resource.TestCheckResourceAttr(resourceName, "default_user_settings.#", acctest.Ct1), + resource.TestCheckResourceAttr(resourceName, "default_user_settings.0.code_editor_app_settings.#", acctest.Ct1), + resource.TestCheckResourceAttr(resourceName, "default_user_settings.0.code_editor_app_settings.0.default_resource_spec.#", acctest.Ct1), + resource.TestCheckResourceAttr(resourceName, "default_user_settings.0.code_editor_app_settings.0.custom_image.#", acctest.Ct1), + resource.TestCheckResourceAttrPair(resourceName, "default_user_settings.0.code_editor_app_settings.0.default_resource_spec.0.sagemaker_image_version_arn", "aws_sagemaker_image_version.test", names.AttrARN), + resource.TestCheckResourceAttrPair(resourceName, "default_user_settings.0.code_editor_app_settings.0.custom_image.0.app_image_config_name", "aws_sagemaker_app_image_config.test", "app_image_config_name"), + resource.TestCheckResourceAttrPair(resourceName, "default_user_settings.0.code_editor_app_settings.0.custom_image.0.image_name", "aws_sagemaker_image.test", "image_name"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"retention_policy"}, + }, + }, + }) +} + func testAccDomain_jupyterLabAppSettings(t *testing.T) { ctx := acctest.Context(t) var domain sagemaker.DescribeDomainOutput @@ -1765,6 +1844,95 @@ resource "aws_sagemaker_domain" "test" { `, rName)) } +func testAccDomainConfig_codeEditorAppSettingsCustomImage(rName, baseImage string) string { + return acctest.ConfigCompose(testAccDomainConfig_base(rName), fmt.Sprintf(` +resource "aws_sagemaker_image" "test" { + image_name = %[1]q + role_arn = aws_iam_role.test.arn + + depends_on = [aws_iam_role_policy_attachment.test] +} + +resource "aws_sagemaker_app_image_config" "test" { + app_image_config_name = %[1]q +} + +resource "aws_sagemaker_image_version" "test" { + image_name = aws_sagemaker_image.test.id + base_image = %[2]q +} + +resource "aws_sagemaker_domain" "test" { + domain_name = %[1]q + auth_mode = "IAM" + vpc_id = aws_vpc.test.id + subnet_ids = aws_subnet.test[*].id + + default_user_settings { + execution_role = aws_iam_role.test.arn + + code_editor_app_settings { + custom_image { + app_image_config_name = aws_sagemaker_app_image_config.test.app_image_config_name + image_name = aws_sagemaker_image_version.test.image_name + } + } + } + + retention_policy { + home_efs_file_system = "Delete" + } +} +`, rName, baseImage)) +} + +func testAccDomainConfig_codeEditorAppSettingsDefaultResourceSpecAndCustomImage(rName, baseImage string) string { + return acctest.ConfigCompose(testAccDomainConfig_base(rName), fmt.Sprintf(` +resource "aws_sagemaker_image" "test" { + image_name = %[1]q + role_arn = aws_iam_role.test.arn + + depends_on = [aws_iam_role_policy_attachment.test] +} + +resource "aws_sagemaker_app_image_config" "test" { + app_image_config_name = %[1]q +} + +resource "aws_sagemaker_image_version" "test" { + image_name = aws_sagemaker_image.test.id + base_image = %[2]q +} + +resource "aws_sagemaker_domain" "test" { + domain_name = %[1]q + auth_mode = "IAM" + vpc_id = aws_vpc.test.id + subnet_ids = aws_subnet.test[*].id + + default_user_settings { + execution_role = aws_iam_role.test.arn + + code_editor_app_settings { + default_resource_spec { + instance_type = "ml.t3.micro" + sagemaker_image_version_arn = aws_sagemaker_image_version.test.arn + } + + custom_image { + app_image_config_name = aws_sagemaker_app_image_config.test.app_image_config_name + image_name = aws_sagemaker_image_version.test.image_name + } + } + } + + retention_policy { + home_efs_file_system = "Delete" + } +} +`, rName, baseImage)) +} + func testAccDomainConfig_kernelGatewayAppSettings(rName string) string { return acctest.ConfigCompose(testAccDomainConfig_base(rName), fmt.Sprintf(` resource "aws_sagemaker_domain" "test" { diff --git a/internal/service/sagemaker/sagemaker_test.go b/internal/service/sagemaker/sagemaker_test.go index aef052b01f0..09d08777656 100644 --- a/internal/service/sagemaker/sagemaker_test.go +++ b/internal/service/sagemaker/sagemaker_test.go @@ -46,28 +46,30 @@ func TestAccSageMaker_serial(t *testing.T) { "kernelGatewayAppSettings": testAccDomain_kernelGatewayAppSettings, "kernelGatewayAppSettings_customImage": testAccDomain_kernelGatewayAppSettings_customImage, "kernelGatewayAppSettings_lifecycleConfig": testAccDomain_kernelGatewayAppSettings_lifecycleConfig, - "kernelGatewayAppSettings_defaultResourceAndCustomImage": testAccDomain_kernelGatewayAppSettings_defaultResourceSpecAndCustomImage, - "jupyterServerAppSettings": testAccDomain_jupyterServerAppSettings, - "codeEditorAppSettings": testAccDomain_codeEditorAppSettings, - "jupyterLabAppSettings": testAccDomain_jupyterLabAppSettings, - "kms": testAccDomain_kms, - "securityGroup": testAccDomain_securityGroup, - "sharingSettings": testAccDomain_sharingSettings, - "defaultUserSettingsUpdated": testAccDomain_defaultUserSettingsUpdated, - "canvas": testAccDomain_canvasAppSettings, - "modelRegisterSettings": testAccDomain_modelRegisterSettings, - "identityProviderOauthSettings": testAccDomain_identityProviderOAuthSettings, - "directDeploySettings": testAccDomain_directDeploySettings, - "kendraSettings": testAccDomain_kendraSettings, - "workspaceSettings": testAccDomain_workspaceSettings, - "domainSettings": testAccDomain_domainSettings, - "rSessionAppSettings": testAccDomain_rSessionAppSettings, - "rStudioServerProAppSettings": testAccDomain_rStudioServerProAppSettings, - "spaceSettingsKernelGatewayAppSettings": testAccDomain_spaceSettingsKernelGatewayAppSettings, - "code": testAccDomain_jupyterServerAppSettings_code, - "efs": testAccDomain_efs, - "posix": testAccDomain_posix, - "spaceStorageSettings": testAccDomain_spaceStorageSettings, + "kernelGatewayAppSettings_defaultResourceAndCustomImage": testAccDomain_kernelGatewayAppSettings_defaultResourceSpecAndCustomImage, + "jupyterServerAppSettings": testAccDomain_jupyterServerAppSettings, + "codeEditorAppSettings": testAccDomain_codeEditorAppSettings, + "codeEditorAppSettings_customImage": testAccDomain_codeEditorAppSettings_customImage, + "codeEditorAppSettings_defaultResourceSpecAndCustomImage": testAccDomain_codeEditorAppSettings_defaultResourceSpecAndCustomImage, + "jupyterLabAppSettings": testAccDomain_jupyterLabAppSettings, + "kms": testAccDomain_kms, + "securityGroup": testAccDomain_securityGroup, + "sharingSettings": testAccDomain_sharingSettings, + "defaultUserSettingsUpdated": testAccDomain_defaultUserSettingsUpdated, + "canvas": testAccDomain_canvasAppSettings, + "modelRegisterSettings": testAccDomain_modelRegisterSettings, + "identityProviderOauthSettings": testAccDomain_identityProviderOAuthSettings, + "directDeploySettings": testAccDomain_directDeploySettings, + "kendraSettings": testAccDomain_kendraSettings, + "workspaceSettings": testAccDomain_workspaceSettings, + "domainSettings": testAccDomain_domainSettings, + "rSessionAppSettings": testAccDomain_rSessionAppSettings, + "rStudioServerProAppSettings": testAccDomain_rStudioServerProAppSettings, + "spaceSettingsKernelGatewayAppSettings": testAccDomain_spaceSettingsKernelGatewayAppSettings, + "code": testAccDomain_jupyterServerAppSettings_code, + "efs": testAccDomain_efs, + "posix": testAccDomain_posix, + "spaceStorageSettings": testAccDomain_spaceStorageSettings, }, "FlowDefinition": { acctest.CtBasic: testAccFlowDefinition_basic, @@ -98,6 +100,7 @@ func TestAccSageMaker_serial(t *testing.T) { "kernelGatewayAppSettings": testAccUserProfile_kernelGatewayAppSettings, "kernelGatewayAppSettings_lifecycleConfig": testAccUserProfile_kernelGatewayAppSettings_lifecycleconfig, "kernelGatewayAppSettings_imageConfig": testAccUserProfile_kernelGatewayAppSettings_imageconfig, + "codeEditorAppSettings_customImage": testAccUserProfile_codeEditorAppSettings_customImage, "jupyterServerAppSettings": testAccUserProfile_jupyterServerAppSettings, }, "Workforce": { diff --git a/internal/service/sagemaker/user_profile.go b/internal/service/sagemaker/user_profile.go index 5ff0ec8811a..ae48099f491 100644 --- a/internal/service/sagemaker/user_profile.go +++ b/internal/service/sagemaker/user_profile.go @@ -239,6 +239,27 @@ func ResourceUserProfile() *schema.Resource { ValidateFunc: verify.ValidARN, }, }, + "custom_image": { + Type: schema.TypeList, + Optional: true, + MaxItems: 200, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "app_image_config_name": { + Type: schema.TypeString, + Required: true, + }, + "image_name": { + Type: schema.TypeString, + Required: true, + }, + "image_version_number": { + Type: schema.TypeInt, + Optional: true, + }, + }, + }, + }, }, }, }, diff --git a/internal/service/sagemaker/user_profile_test.go b/internal/service/sagemaker/user_profile_test.go index 940a133a2e8..2ece32de952 100644 --- a/internal/service/sagemaker/user_profile_test.go +++ b/internal/service/sagemaker/user_profile_test.go @@ -277,6 +277,44 @@ func testAccUserProfile_kernelGatewayAppSettings_imageconfig(t *testing.T) { }) } +func testAccUserProfile_codeEditorAppSettings_customImage(t *testing.T) { + ctx := acctest.Context(t) + if os.Getenv("SAGEMAKER_IMAGE_VERSION_BASE_IMAGE") == "" { + t.Skip("Environment variable SAGEMAKER_IMAGE_VERSION_BASE_IMAGE is not set") + } + + var domain sagemaker.DescribeUserProfileOutput + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + resourceName := "aws_sagemaker_user_profile.test" + baseImage := os.Getenv("SAGEMAKER_IMAGE_VERSION_BASE_IMAGE") + + resource.Test(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(ctx, t) }, + ErrorCheck: acctest.ErrorCheck(t, names.SageMakerServiceID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckUserProfileDestroy(ctx), + Steps: []resource.TestStep{ + { + Config: testAccUserProfileConfig_codeEditorAppSettingsImage(rName, baseImage), + Check: resource.ComposeTestCheckFunc( + testAccCheckUserProfileExists(ctx, resourceName, &domain), + resource.TestCheckResourceAttr(resourceName, "user_settings.#", acctest.Ct1), + resource.TestCheckResourceAttr(resourceName, "user_settings.0.code_editor_app_settings.#", acctest.Ct1), + resource.TestCheckResourceAttr(resourceName, "user_settings.0.code_editor_app_settings.0.lifecycle_config_arns.#", acctest.Ct1), + resource.TestCheckResourceAttr(resourceName, "user_settings.0.code_editor_app_settings.0.default_resource_spec.#", acctest.Ct1), + resource.TestCheckResourceAttr(resourceName, "user_settings.0.code_editor_app_settings.0.default_resource_spec.0.instance_type", "ml.t3.micro"), + resource.TestCheckResourceAttrPair(resourceName, "user_settings.0.code_editor_app_settings.0.default_resource_spec.0.sagemaker_image_version_arn", "aws_sagemaker_image_version.test", names.AttrARN), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + func testAccUserProfile_jupyterServerAppSettings(t *testing.T) { ctx := acctest.Context(t) var domain sagemaker.DescribeUserProfileOutput @@ -615,3 +653,46 @@ resource "aws_sagemaker_user_profile" "test" { } `, rName, baseImage)) } + +func testAccUserProfileConfig_codeEditorAppSettingsImage(rName, baseImage string) string { + return acctest.ConfigCompose(testAccUserProfileConfig_base(rName), fmt.Sprintf(` +data "aws_partition" "current" {} + +resource "aws_iam_role_policy_attachment" "test" { + role = aws_iam_role.test.name + policy_arn = "arn:${data.aws_partition.current.partition}:iam::aws:policy/AmazonSageMakerFullAccess" +} + +resource "aws_sagemaker_image" "test" { + image_name = %[1]q + role_arn = aws_image_role.test.arn + + depends_on = [aws_iam_role_policy_attachment.test] +} + +resource "aws_sagemaker_image_version" "test" { + image_name = aws_sagemaker_image.test.id + base_image = %[2]q + + depends_on = [aws_iam_role_policy_attachment.test] +} + +resource "aws_sagemaker_user_profile" "test" { + domain_id = aws_sagemaker_domain.test.id + user_profile_name = %[1]q + + user_settings { + execution_role = aws_iam_role.test.arn + + code_editor_app_settings { + default_resource_spec { + instance_type = "ml.t3.micro" + sagemaker_image_version_arn = aws_sagemaker_image_version.test.arn + } + } + } + + depends_on = [aws_iam_role_policy_attachment.test] +} +`, rName, baseImage)) +} diff --git a/website/docs/cdktf/python/r/sagemaker_domain.html.markdown b/website/docs/cdktf/python/r/sagemaker_domain.html.markdown index 748c096aaf2..f751002aa29 100644 --- a/website/docs/cdktf/python/r/sagemaker_domain.html.markdown +++ b/website/docs/cdktf/python/r/sagemaker_domain.html.markdown @@ -253,6 +253,7 @@ The following arguments are optional: * `default_resource_spec` - (Optional) The default instance type and the Amazon Resource Name (ARN) of the SageMaker image created on the instance. see [`default_resource_spec` Block](#default_resource_spec-block) below. * `lifecycle_config_arns` - (Optional) The Amazon Resource Name (ARN) of the Lifecycle Configurations. +* `custom_image` - (Optional) A list of custom SageMaker images that are configured to run as a CodeEditor app. see [`custom_image` Block](#custom_image-block) below. ##### `code_repository` Block @@ -342,4 +343,4 @@ Using `terraform import`, import SageMaker Domains using the `id`. For example: % terraform import aws_sagemaker_domain.test_domain d-8jgsjtilstu8 ``` - \ No newline at end of file + diff --git a/website/docs/cdktf/python/r/sagemaker_user_profile.html.markdown b/website/docs/cdktf/python/r/sagemaker_user_profile.html.markdown index 2b86374b85b..b65016ac40e 100644 --- a/website/docs/cdktf/python/r/sagemaker_user_profile.html.markdown +++ b/website/docs/cdktf/python/r/sagemaker_user_profile.html.markdown @@ -105,6 +105,7 @@ This resource supports the following arguments: * `default_resource_spec` - (Optional) The default instance type and the Amazon Resource Name (ARN) of the SageMaker image created on the instance. see [Default Resource Spec](#default_resource_spec) below. * `lifecycle_config_arns` - (Optional) The Amazon Resource Name (ARN) of the Lifecycle Configurations. +* `custom_image` - (Optional) A list of custom SageMaker images that are configured to run as a CodeEditor app. see [Custom Image](#custom_image) below. #### r_session_app_settings @@ -232,4 +233,4 @@ Using `terraform import`, import SageMaker User Profiles using the `arn`. For ex % terraform import aws_sagemaker_user_profile.test_user_profile arn:aws:sagemaker:us-west-2:123456789012:user-profile/domain-id/profile-name ``` - \ No newline at end of file + diff --git a/website/docs/cdktf/typescript/r/sagemaker_domain.html.markdown b/website/docs/cdktf/typescript/r/sagemaker_domain.html.markdown index 66e8ca0bb13..3597a04a946 100644 --- a/website/docs/cdktf/typescript/r/sagemaker_domain.html.markdown +++ b/website/docs/cdktf/typescript/r/sagemaker_domain.html.markdown @@ -268,6 +268,7 @@ The following arguments are optional: * `defaultResourceSpec` - (Optional) The default instance type and the Amazon Resource Name (ARN) of the SageMaker image created on the instance. see [`defaultResourceSpec` Block](#default_resource_spec-block) below. * `lifecycleConfigArns` - (Optional) The Amazon Resource Name (ARN) of the Lifecycle Configurations. +* `customImage` - (Optional) A list of custom SageMaker images that are configured to run as a CodeEditor app. see [`customImage` Block](#custom_image-block) below. ##### `codeRepository` Block @@ -364,4 +365,4 @@ Using `terraform import`, import SageMaker Domains using the `id`. For example: % terraform import aws_sagemaker_domain.test_domain d-8jgsjtilstu8 ``` - \ No newline at end of file + diff --git a/website/docs/cdktf/typescript/r/sagemaker_user_profile.html.markdown b/website/docs/cdktf/typescript/r/sagemaker_user_profile.html.markdown index 44c9c3d87bc..d7cc2c0659c 100644 --- a/website/docs/cdktf/typescript/r/sagemaker_user_profile.html.markdown +++ b/website/docs/cdktf/typescript/r/sagemaker_user_profile.html.markdown @@ -108,6 +108,7 @@ This resource supports the following arguments: * `defaultResourceSpec` - (Optional) The default instance type and the Amazon Resource Name (ARN) of the SageMaker image created on the instance. see [Default Resource Spec](#default_resource_spec) below. * `lifecycleConfigArns` - (Optional) The Amazon Resource Name (ARN) of the Lifecycle Configurations. +* `customImage` - (Optional) A list of custom SageMaker images that are configured to run as a CodeEditor app. see [Custom Image](#custom_image) below. #### r_session_app_settings @@ -242,4 +243,4 @@ Using `terraform import`, import SageMaker User Profiles using the `arn`. For ex % terraform import aws_sagemaker_user_profile.test_user_profile arn:aws:sagemaker:us-west-2:123456789012:user-profile/domain-id/profile-name ``` - \ No newline at end of file + diff --git a/website/docs/r/sagemaker_domain.html.markdown b/website/docs/r/sagemaker_domain.html.markdown index 2ac14e33afd..2b94d3793a7 100644 --- a/website/docs/r/sagemaker_domain.html.markdown +++ b/website/docs/r/sagemaker_domain.html.markdown @@ -221,6 +221,7 @@ The following arguments are optional: * `default_resource_spec` - (Optional) The default instance type and the Amazon Resource Name (ARN) of the SageMaker image created on the instance. see [`default_resource_spec` Block](#default_resource_spec-block) below. * `lifecycle_config_arns` - (Optional) The Amazon Resource Name (ARN) of the Lifecycle Configurations. +* `custom_image` - (Optional) A list of custom SageMaker images that are configured to run as a CodeEditor app. see [`custom_image` Block](#custom_image-block) below. ##### `code_repository` Block diff --git a/website/docs/r/sagemaker_user_profile.html.markdown b/website/docs/r/sagemaker_user_profile.html.markdown index d06dfecbec1..c062db7b8ca 100644 --- a/website/docs/r/sagemaker_user_profile.html.markdown +++ b/website/docs/r/sagemaker_user_profile.html.markdown @@ -92,6 +92,7 @@ This resource supports the following arguments: * `default_resource_spec` - (Optional) The default instance type and the Amazon Resource Name (ARN) of the SageMaker image created on the instance. see [Default Resource Spec](#default_resource_spec) below. * `lifecycle_config_arns` - (Optional) The Amazon Resource Name (ARN) of the Lifecycle Configurations. +* `custom_image` - (Optional) A list of custom SageMaker images that are configured to run as a CodeEditor app. see [Custom Image](#custom_image) below. #### r_session_app_settings