/*
* 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 ecs-2014-11-13.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.ECS.Model
{
///
/// Port mappings allow containers to access ports on the host container instance to send
/// or receive traffic. Port mappings are specified as part of the container definition.
///
///
///
/// If you use containers in a task with the awsvpc
or host
/// network mode, specify the exposed ports using containerPort
. The hostPort
/// can be left blank or it must be the same value as the containerPort
.
///
///
///
/// Most fields of this parameter (containerPort
, hostPort
,
/// protocol
) maps to PortBindings
in the Create
/// a container section of the Docker
/// Remote API and the --publish
option to
/// docker run
. If the network mode of a task definition is set to host
,
/// host ports must either be undefined or match the container port in the port mapping.
///
///
///
/// You can't expose the same container port for multiple protocols. If you attempt this,
/// an error is returned.
///
///
///
/// After a task reaches the RUNNING
status, manual and automatic host and
/// container port assignments are visible in the networkBindings
section
/// of DescribeTasks API responses.
///
///
public partial class PortMapping
{
private ApplicationProtocol _appProtocol;
private int? _containerPort;
private string _containerPortRange;
private int? _hostPort;
private string _name;
private TransportProtocol _protocol;
///
/// Gets and sets the property AppProtocol.
///
/// The application protocol that's used for the port mapping. This parameter only applies
/// to Service Connect. We recommend that you set this parameter to be consistent with
/// the protocol that your application uses. If you set this parameter, Amazon ECS adds
/// protocol-specific connection handling to the Service Connect proxy. If you set this
/// parameter, Amazon ECS adds protocol-specific telemetry in the Amazon ECS console and
/// CloudWatch.
///
///
///
/// If you don't set a value for this parameter, then TCP is used. However, Amazon ECS
/// doesn't add protocol-specific telemetry for TCP.
///
///
///
/// Tasks that run in a namespace can use short names to connect to services in the namespace.
/// Tasks can connect to services across all of the clusters in the namespace. Tasks connect
/// through a managed proxy container that collects logs and metrics for increased visibility.
/// Only the tasks that Amazon ECS services create are supported with Service Connect.
/// For more information, see Service
/// Connect in the Amazon Elastic Container Service Developer Guide.
///
///
public ApplicationProtocol AppProtocol
{
get { return this._appProtocol; }
set { this._appProtocol = value; }
}
// Check to see if AppProtocol property is set
internal bool IsSetAppProtocol()
{
return this._appProtocol != null;
}
///
/// Gets and sets the property ContainerPort.
///
/// The port number on the container that's bound to the user-specified or automatically
/// assigned host port.
///
///
///
/// If you use containers in a task with the awsvpc
or host
/// network mode, specify the exposed ports using containerPort
.
///
///
///
/// If you use containers in a task with the bridge
network mode and you
/// specify a container port and not a host port, your container automatically receives
/// a host port in the ephemeral port range. For more information, see hostPort
.
/// Port mappings that are automatically assigned in this way do not count toward the
/// 100 reserved ports limit of a container instance.
///
///
public int ContainerPort
{
get { return this._containerPort.GetValueOrDefault(); }
set { this._containerPort = value; }
}
// Check to see if ContainerPort property is set
internal bool IsSetContainerPort()
{
return this._containerPort.HasValue;
}
///
/// Gets and sets the property ContainerPortRange.
///
/// The port number range on the container that's bound to the dynamically mapped host
/// port range.
///
///
///
/// The following rules apply when you specify a containerPortRange
:
///
/// -
///
/// You must use either the
bridge
network mode or the awsvpc
/// network mode.
///
/// -
///
/// This parameter is available for both the EC2 and Fargate launch types.
///
///
-
///
/// This parameter is available for both the Linux and Windows operating systems.
///
///
-
///
/// The container instance must have at least version 1.67.0 of the container agent and
/// at least version 1.67.0-1 of the
ecs-init
package
///
/// -
///
/// You can specify a maximum of 100 port ranges per container.
///
///
-
///
/// You do not specify a
hostPortRange
. The value of the hostPortRange
/// is set as follows:
///
/// -
///
/// For containers in a task with the
awsvpc
network mode, the hostPort
/// is set to the same value as the containerPort
. This is a static mapping
/// strategy.
///
/// -
///
/// For containers in a task with the
bridge
network mode, the Amazon ECS
/// agent finds open host ports from the default ephemeral range and passes it to docker
/// to bind them to the container ports.
///
///
-
///
/// The
containerPortRange
valid values are between 1 and 65535.
///
/// -
///
/// A port can only be included in one port mapping per container.
///
///
-
///
/// You cannot specify overlapping port ranges.
///
///
-
///
/// The first port in the range must be less than last port in the range.
///
///
-
///
/// Docker recommends that you turn off the docker-proxy in the Docker daemon config file
/// when you have a large number of ports.
///
///
///
/// For more information, see Issue
/// #11185 on the Github website.
///
///
///
/// For information about how to turn off the docker-proxy in the Docker daemon config
/// file, see Docker
/// daemon in the Amazon ECS Developer Guide.
///
///
///
/// You can call
/// DescribeTasks
to view the hostPortRange
which are the
/// host ports that are bound to the container ports.
///
///
public string ContainerPortRange
{
get { return this._containerPortRange; }
set { this._containerPortRange = value; }
}
// Check to see if ContainerPortRange property is set
internal bool IsSetContainerPortRange()
{
return this._containerPortRange != null;
}
///
/// Gets and sets the property HostPort.
///
/// The port number on the container instance to reserve for your container.
///
///
///
/// If you specify a containerPortRange
, leave this field empty and the value
/// of the hostPort
is set as follows:
///
/// -
///
/// For containers in a task with the
awsvpc
network mode, the hostPort
/// is set to the same value as the containerPort
. This is a static mapping
/// strategy.
///
/// -
///
/// For containers in a task with the
bridge
network mode, the Amazon ECS
/// agent finds open ports on the host and automatically binds them to the container ports.
/// This is a dynamic mapping strategy.
///
///
///
/// If you use containers in a task with the awsvpc
or host
/// network mode, the hostPort
can either be left blank or set to the same
/// value as the containerPort
.
///
///
///
/// If you use containers in a task with the bridge
network mode, you can
/// specify a non-reserved host port for your container port mapping, or you can omit
/// the hostPort
(or set it to 0
) while specifying a containerPort
/// and your container automatically receives a port in the ephemeral port range for your
/// container instance operating system and Docker version.
///
///
///
/// The default ephemeral port range for Docker version 1.6.0 and later is listed on the
/// instance under /proc/sys/net/ipv4/ip_local_port_range
. If this kernel
/// parameter is unavailable, the default ephemeral port range from 49153 through 65535
/// is used. Do not attempt to specify a host port in the ephemeral port range as these
/// are reserved for automatic assignment. In general, ports below 32768 are outside of
/// the ephemeral port range.
///
///
///
/// The default reserved ports are 22 for SSH, the Docker ports 2375 and 2376, and the
/// Amazon ECS container agent ports 51678-51680. Any host port that was previously specified
/// in a running task is also reserved while the task is running. That is, after a task
/// stops, the host port is released. The current reserved ports are displayed in the
/// remainingResources
of DescribeContainerInstances
/// output. A container instance can have up to 100 reserved ports at a time. This number
/// includes the default reserved ports. Automatically assigned ports aren't included
/// in the 100 reserved ports quota.
///
///
public int HostPort
{
get { return this._hostPort.GetValueOrDefault(); }
set { this._hostPort = value; }
}
// Check to see if HostPort property is set
internal bool IsSetHostPort()
{
return this._hostPort.HasValue;
}
///
/// Gets and sets the property Name.
///
/// The name that's used for the port mapping. This parameter only applies to Service
/// Connect. This parameter is the name that you use in the serviceConnectConfiguration
/// of a service. The name can include up to 64 characters. The characters can include
/// lowercase letters, numbers, underscores (_), and hyphens (-). The name can't start
/// with a hyphen.
///
///
///
/// For more information, see Service
/// Connect in the Amazon Elastic Container Service Developer Guide.
///
///
public string Name
{
get { return this._name; }
set { this._name = value; }
}
// Check to see if Name property is set
internal bool IsSetName()
{
return this._name != null;
}
///
/// Gets and sets the property Protocol.
///
/// The protocol used for the port mapping. Valid values are tcp
and udp
.
/// The default is tcp
.
///
///
public TransportProtocol Protocol
{
get { return this._protocol; }
set { this._protocol = value; }
}
// Check to see if Protocol property is set
internal bool IsSetProtocol()
{
return this._protocol != null;
}
}
}