/*
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 * 
 *  http://aws.amazon.com/apache2.0
 * 
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */
/*
 * Do not modify this file. This file is generated from the sagemaker-2017-07-24.normal.json service model.
 */
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.Text;
using System.IO;
using System.Net;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
namespace Amazon.SageMaker.Model
{
    /// 
    /// Describes the container, as part of model definition.
    /// 
    public partial class ContainerDefinition
    {
        private string _containerHostname;
        private Dictionary _environment = new Dictionary();
        private string _image;
        private ImageConfig _imageConfig;
        private string _inferenceSpecificationName;
        private ContainerMode _mode;
        private ModelDataSource _modelDataSource;
        private string _modelDataUrl;
        private string _modelPackageName;
        private MultiModelConfig _multiModelConfig;
        /// 
        /// Gets and sets the property ContainerHostname. 
        /// 
        /// This parameter is ignored for models that contain only a PrimaryContainer.
        /// 
        ///  
        /// 
        /// When a ContainerDefinition is part of an inference pipeline, the value
        /// of the parameter uniquely identifies the container for the purposes of logging and
        /// metrics. For information, see Use
        /// Logs and Metrics to Monitor an Inference Pipeline. If you don't specify a value
        /// for this parameter for a ContainerDefinition that is part of an inference
        /// pipeline, a unique name is automatically assigned based on the position of the ContainerDefinition
        /// in the pipeline. If you specify a value for the ContainerHostName for
        /// any ContainerDefinition that is part of an inference pipeline, you must
        /// specify a value for the ContainerHostName parameter of every ContainerDefinition
        /// in that pipeline.
        /// 
        /// 
        [AWSProperty(Max=63)]
        public string ContainerHostname
        {
            get { return this._containerHostname; }
            set { this._containerHostname = value; }
        }
        // Check to see if ContainerHostname property is set
        internal bool IsSetContainerHostname()
        {
            return this._containerHostname != null;
        }
        /// 
        /// Gets and sets the property Environment. 
        /// 
        /// The environment variables to set in the Docker container. Each key and value in the
        /// Environment string to string map can have length of up to 1024. We support
        /// up to 16 entries in the map. 
        /// 
        /// 
        [AWSProperty(Max=16)]
        public Dictionary Environment
        {
            get { return this._environment; }
            set { this._environment = value; }
        }
        // Check to see if Environment property is set
        internal bool IsSetEnvironment()
        {
            return this._environment != null && this._environment.Count > 0; 
        }
        /// 
        /// Gets and sets the property Image. 
        /// 
        /// The path where inference code is stored. This can be either in Amazon EC2 Container
        /// Registry or in a Docker registry that is accessible from the same VPC that you configure
        /// for your endpoint. If you are using your own custom algorithm instead of an algorithm
        /// provided by SageMaker, the inference code must meet SageMaker requirements. SageMaker
        /// supports both registry/repository[:tag] and registry/repository[@digest]
        /// image path formats. For more information, see Using
        /// Your Own Algorithms with Amazon SageMaker. 
        /// 
        ///   
        /// 
        /// The model artifacts in an Amazon S3 bucket and the Docker image for inference container
        /// in Amazon EC2 Container Registry must be in the same region as the model or endpoint
        /// you are creating.
        /// 
        ///  
        /// 
        [AWSProperty(Max=255)]
        public string Image
        {
            get { return this._image; }
            set { this._image = value; }
        }
        // Check to see if Image property is set
        internal bool IsSetImage()
        {
            return this._image != null;
        }
        /// 
        /// Gets and sets the property ImageConfig. 
        /// 
        /// Specifies whether the model container is in Amazon ECR or a private Docker registry
        /// accessible from your Amazon Virtual Private Cloud (VPC). For information about storing
        /// containers in a private Docker registry, see Use
        /// a Private Docker Registry for Real-Time Inference Containers. 
        /// 
        ///   
        /// 
        /// The model artifacts in an Amazon S3 bucket and the Docker image for inference container
        /// in Amazon EC2 Container Registry must be in the same region as the model or endpoint
        /// you are creating.
        /// 
        ///  
        /// 
        public ImageConfig ImageConfig
        {
            get { return this._imageConfig; }
            set { this._imageConfig = value; }
        }
        // Check to see if ImageConfig property is set
        internal bool IsSetImageConfig()
        {
            return this._imageConfig != null;
        }
        /// 
        /// Gets and sets the property InferenceSpecificationName. 
        /// 
        /// The inference specification name in the model package version.
        /// 
        /// 
        [AWSProperty(Min=1, Max=63)]
        public string InferenceSpecificationName
        {
            get { return this._inferenceSpecificationName; }
            set { this._inferenceSpecificationName = value; }
        }
        // Check to see if InferenceSpecificationName property is set
        internal bool IsSetInferenceSpecificationName()
        {
            return this._inferenceSpecificationName != null;
        }
        /// 
        /// Gets and sets the property Mode. 
        /// 
        /// Whether the container hosts a single model or multiple models.
        /// 
        /// 
        public ContainerMode Mode
        {
            get { return this._mode; }
            set { this._mode = value; }
        }
        // Check to see if Mode property is set
        internal bool IsSetMode()
        {
            return this._mode != null;
        }
        /// 
        /// Gets and sets the property ModelDataSource. 
        /// 
        /// Specifies the location of ML model data to deploy.
        /// 
        ///   
        /// 
        /// Currently you cannot use ModelDataSource in conjunction with SageMaker
        /// batch transform, SageMaker serverless endpoints, SageMaker multi-model endpoints,
        /// and SageMaker Marketplace.
        /// 
        ///  
        /// 
        public ModelDataSource ModelDataSource
        {
            get { return this._modelDataSource; }
            set { this._modelDataSource = value; }
        }
        // Check to see if ModelDataSource property is set
        internal bool IsSetModelDataSource()
        {
            return this._modelDataSource != null;
        }
        /// 
        /// Gets and sets the property ModelDataUrl. 
        /// 
        /// The S3 path where the model artifacts, which result from model training, are stored.
        /// This path must point to a single gzip compressed tar archive (.tar.gz suffix). The
        /// S3 path is required for SageMaker built-in algorithms, but not if you use your own
        /// algorithms. For more information on built-in algorithms, see Common
        /// Parameters. 
        /// 
        ///   
        /// 
        /// The model artifacts must be in an S3 bucket that is in the same region as the model
        /// or endpoint you are creating.
        /// 
        ///   
        /// 
        /// If you provide a value for this parameter, SageMaker uses Amazon Web Services Security
        /// Token Service to download model artifacts from the S3 path you provide. Amazon Web
        /// Services STS is activated in your Amazon Web Services account by default. If you previously
        /// deactivated Amazon Web Services STS for a region, you need to reactivate Amazon Web
        /// Services STS for that region. For more information, see Activating
        /// and Deactivating Amazon Web Services STS in an Amazon Web Services Region in the
        /// Amazon Web Services Identity and Access Management User Guide.
        /// 
        ///   
        /// 
        /// If you use a built-in algorithm to create a model, SageMaker requires that you provide
        /// a S3 path to the model artifacts in ModelDataUrl.
        /// 
        ///  
        /// 
        [AWSProperty(Max=1024)]
        public string ModelDataUrl
        {
            get { return this._modelDataUrl; }
            set { this._modelDataUrl = value; }
        }
        // Check to see if ModelDataUrl property is set
        internal bool IsSetModelDataUrl()
        {
            return this._modelDataUrl != null;
        }
        /// 
        /// Gets and sets the property ModelPackageName. 
        /// 
        /// The name or Amazon Resource Name (ARN) of the model package to use to create the model.
        /// 
        /// 
        [AWSProperty(Min=1, Max=176)]
        public string ModelPackageName
        {
            get { return this._modelPackageName; }
            set { this._modelPackageName = value; }
        }
        // Check to see if ModelPackageName property is set
        internal bool IsSetModelPackageName()
        {
            return this._modelPackageName != null;
        }
        /// 
        /// Gets and sets the property MultiModelConfig. 
        /// 
        /// Specifies additional configuration for multi-model endpoints.
        /// 
        /// 
        public MultiModelConfig MultiModelConfig
        {
            get { return this._multiModelConfig; }
            set { this._multiModelConfig = value; }
        }
        // Check to see if MultiModelConfig property is set
        internal bool IsSetMultiModelConfig()
        {
            return this._multiModelConfig != null;
        }
    }
}