{
  "description": "EndpointConfig is the Schema for the EndpointConfigs API",
  "properties": {
    "apiVersion": {
      "description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
      "type": "string"
    },
    "kind": {
      "description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
      "type": "string"
    },
    "metadata": {
      "type": "object"
    },
    "spec": {
      "description": "EndpointConfigSpec defines the desired state of EndpointConfig.",
      "properties": {
        "asyncInferenceConfig": {
          "description": "Specifies configuration for how an endpoint performs asynchronous inference.\nThis is a required field in order for your Endpoint to be invoked using InvokeEndpointAsync\n(https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpointAsync.html).",
          "properties": {
            "clientConfig": {
              "description": "Configures the behavior of the client used by SageMaker to interact with\nthe model container during asynchronous inference.",
              "properties": {
                "maxConcurrentInvocationsPerInstance": {
                  "format": "int64",
                  "type": "integer"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "outputConfig": {
              "description": "Specifies the configuration for asynchronous inference invocation outputs.",
              "properties": {
                "kmsKeyID": {
                  "type": "string"
                },
                "notificationConfig": {
                  "description": "Specifies the configuration for notifications of inference results for asynchronous\ninference.",
                  "properties": {
                    "errorTopic": {
                      "type": "string"
                    },
                    "includeInferenceResponseIn": {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "successTopic": {
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "s3FailurePath": {
                  "type": "string"
                },
                "s3OutputPath": {
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "dataCaptureConfig": {
          "description": "Configuration to control how SageMaker AI captures inference data.",
          "properties": {
            "captureContentTypeHeader": {
              "description": "Configuration specifying how to treat different headers. If no headers are\nspecified Amazon SageMaker AI will by default base64 encode when capturing\nthe data.",
              "properties": {
                "csvContentTypes": {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "jsonContentTypes": {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "captureOptions": {
              "items": {
                "description": "Specifies data Model Monitor will capture.",
                "properties": {
                  "captureMode": {
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "destinationS3URI": {
              "type": "string"
            },
            "enableCapture": {
              "type": "boolean"
            },
            "initialSamplingPercentage": {
              "format": "int64",
              "type": "integer"
            },
            "kmsKeyID": {
              "type": "string"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "enableNetworkIsolation": {
          "description": "Sets whether all model containers deployed to the endpoint are isolated.\nIf they are, no inbound or outbound network calls can be made to or from\nthe model containers.",
          "type": "boolean"
        },
        "endpointConfigName": {
          "description": "The name of the endpoint configuration. You specify this name in a CreateEndpoint\n(https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html)\nrequest.\n\nRegex Pattern: `^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}$`",
          "type": "string"
        },
        "executionRoleARN": {
          "description": "The Amazon Resource Name (ARN) of an IAM role that Amazon SageMaker AI can\nassume to perform actions on your behalf. For more information, see SageMaker\nAI Roles (https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html).\n\nTo be able to pass this role to Amazon SageMaker AI, the caller of this action\nmust have the iam:PassRole permission.\n\nRegex Pattern: `^arn:aws[a-z\\-]*:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$`",
          "type": "string"
        },
        "kmsKeyID": {
          "description": "The Amazon Resource Name (ARN) of a Amazon Web Services Key Management Service\nkey that SageMaker uses to encrypt data on the storage volume attached to\nthe ML compute instance that hosts the endpoint.\n\nThe KmsKeyId can be any of the following formats:\n\n  - Key ID: 1234abcd-12ab-34cd-56ef-1234567890ab\n\n  - Key ARN: arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab\n\n  - Alias name: alias/ExampleAlias\n\n  - Alias name ARN: arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias\n\nThe KMS key policy must grant permission to the IAM role that you specify\nin your CreateEndpoint, UpdateEndpoint requests. For more information, refer\nto the Amazon Web Services Key Management Service section Using Key Policies\nin Amazon Web Services KMS (https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)\n\nCertain Nitro-based instances include local storage, dependent on the instance\ntype. Local storage volumes are encrypted using a hardware module on the\ninstance. You can't request a KmsKeyId when using an instance type with local\nstorage. If any of the models that you specify in the ProductionVariants\nparameter use nitro-based instances with local storage, do not specify a\nvalue for the KmsKeyId parameter. If you specify a value for KmsKeyId when\nusing any nitro-based instances with local storage, the call to CreateEndpointConfig\nfails.\n\nFor a list of instance types that support local instance storage, see Instance\nStore Volumes (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html#instance-store-volumes).\n\nFor more information about local instance storage encryption, see SSD Instance\nStore Volumes (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ssd-instance-store.html).\n\nRegex Pattern: `^[a-zA-Z0-9:/_-]*$`",
          "type": "string"
        },
        "productionVariants": {
          "description": "An array of ProductionVariant objects, one for each model that you want to\nhost at this endpoint.",
          "items": {
            "description": "Identifies a model that you want to host and the resources chosen to deploy\nfor hosting it. If you are deploying multiple models, tell SageMaker how\nto distribute traffic among the models by specifying variant weights. For\nmore information on production variants, check Production variants (https://docs.aws.amazon.com/sagemaker/latest/dg/model-ab-testing.html).",
            "properties": {
              "acceleratorType": {
                "type": "string"
              },
              "capacityReservationConfig": {
                "description": "Settings for the capacity reservation for the compute instances that SageMaker\nAI reserves for an endpoint.",
                "properties": {
                  "capacityReservationPreference": {
                    "type": "string"
                  },
                  "mlReservationARN": {
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "containerStartupHealthCheckTimeoutInSeconds": {
                "format": "int64",
                "type": "integer"
              },
              "coreDumpConfig": {
                "description": "Specifies configuration for a core dump from the model container when the\nprocess crashes.",
                "properties": {
                  "destinationS3URI": {
                    "type": "string"
                  },
                  "kmsKeyID": {
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "enableSSMAccess": {
                "type": "boolean"
              },
              "initialInstanceCount": {
                "format": "int64",
                "type": "integer"
              },
              "initialVariantWeight": {
                "type": "number"
              },
              "instanceType": {
                "type": "string"
              },
              "managedInstanceScaling": {
                "description": "Settings that control the range in the number of instances that the endpoint\nprovisions as it scales up or down to accommodate traffic.",
                "properties": {
                  "maxInstanceCount": {
                    "format": "int64",
                    "type": "integer"
                  },
                  "minInstanceCount": {
                    "format": "int64",
                    "type": "integer"
                  },
                  "status": {
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "modelDataDownloadTimeoutInSeconds": {
                "format": "int64",
                "type": "integer"
              },
              "modelName": {
                "type": "string"
              },
              "routingConfig": {
                "description": "Settings that control how the endpoint routes incoming traffic to the instances\nthat the endpoint hosts.",
                "properties": {
                  "routingStrategy": {
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "serverlessConfig": {
                "description": "Specifies the serverless configuration for an endpoint variant.",
                "properties": {
                  "maxConcurrency": {
                    "format": "int64",
                    "type": "integer"
                  },
                  "memorySizeInMB": {
                    "format": "int64",
                    "type": "integer"
                  },
                  "provisionedConcurrency": {
                    "format": "int64",
                    "type": "integer"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "variantName": {
                "type": "string"
              },
              "volumeSizeInGB": {
                "format": "int64",
                "type": "integer"
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "tags": {
          "description": "An array of key-value pairs. You can use tags to categorize your Amazon Web\nServices resources in different ways, for example, by purpose, owner, or\nenvironment. For more information, see Tagging Amazon Web Services Resources\n(https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html).",
          "items": {
            "description": "A tag object that consists of a key and an optional value, used to manage\nmetadata for SageMaker Amazon Web Services resources.\n\nYou can add tags to notebook instances, training jobs, hyperparameter tuning\njobs, batch transform jobs, models, labeling jobs, work teams, endpoint configurations,\nand endpoints. For more information on adding tags to SageMaker resources,\nsee AddTags (https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AddTags.html).\n\nFor more information on adding metadata to your Amazon Web Services resources\nwith tagging, see Tagging Amazon Web Services resources (https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html).\nFor advice on best practices for managing Amazon Web Services resources with\ntagging, see Tagging Best Practices: Implement an Effective Amazon Web Services\nResource Tagging Strategy (https://d1.awsstatic.com/whitepapers/aws-tagging-best-practices.pdf).",
            "properties": {
              "key": {
                "type": "string"
              },
              "value": {
                "type": "string"
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "vpcConfig": {
          "description": "Specifies an Amazon Virtual Private Cloud (VPC) that your SageMaker jobs,\nhosted models, and compute resources have access to. You can control access\nto and from your resources by configuring a VPC. For more information, see\nGive SageMaker Access to Resources in your Amazon VPC (https://docs.aws.amazon.com/sagemaker/latest/dg/infrastructure-give-access.html).",
          "properties": {
            "securityGroupIDs": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "subnets": {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          },
          "type": "object",
          "additionalProperties": false
        }
      },
      "required": [
        "endpointConfigName",
        "productionVariants"
      ],
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "description": "EndpointConfigStatus defines the observed state of EndpointConfig",
      "properties": {
        "ackResourceMetadata": {
          "description": "All CRs managed by ACK have a common `Status.ACKResourceMetadata` member\nthat is used to contain resource sync state, account ownership,\nconstructed ARN for the resource",
          "properties": {
            "arn": {
              "description": "ARN is the Amazon Resource Name for the resource. This is a\nglobally-unique identifier and is set only by the ACK service controller\nonce the controller has orchestrated the creation of the resource OR\nwhen it has verified that an \"adopted\" resource (a resource where the\nARN annotation was set by the Kubernetes user on the CR) exists and\nmatches the supplied CR's Spec field values.\nhttps://github.com/aws/aws-controllers-k8s/issues/270",
              "type": "string"
            },
            "ownerAccountID": {
              "description": "OwnerAccountID is the AWS Account ID of the account that owns the\nbackend AWS service API resource.",
              "type": "string"
            },
            "region": {
              "description": "Region is the AWS region in which the resource exists or will exist.",
              "type": "string"
            }
          },
          "required": [
            "ownerAccountID",
            "region"
          ],
          "type": "object",
          "additionalProperties": false
        },
        "conditions": {
          "description": "All CRs managed by ACK have a common `Status.Conditions` member that\ncontains a collection of `ackv1alpha1.Condition` objects that describe\nthe various terminal states of the CR and its backend AWS service API\nresource",
          "items": {
            "description": "Condition is the common struct used by all CRDs managed by ACK service\ncontrollers to indicate terminal states  of the CR and its backend AWS\nservice API resource",
            "properties": {
              "lastTransitionTime": {
                "description": "Last time the condition transitioned from one status to another.",
                "format": "date-time",
                "type": "string"
              },
              "message": {
                "description": "A human readable message indicating details about the transition.",
                "type": "string"
              },
              "reason": {
                "description": "The reason for the condition's last transition.",
                "type": "string"
              },
              "status": {
                "description": "Status of the condition, one of True, False, Unknown.",
                "type": "string"
              },
              "type": {
                "description": "Type is the type of the Condition",
                "type": "string"
              }
            },
            "required": [
              "status",
              "type"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  },
  "type": "object"
}
