

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Descubra los contenedores de una flota de contenedores
<a name="containers-discovery"></a>

En una flota de Amazon GameLift Servers contenedores, cada instancia puede ejecutar varios contenedores. Por ejemplo, puedes ejecutar varias réplicas del grupo de contenedores de tu servidor de juegos. También puedes ejecutar un grupo de contenedores por instancia que proporcione servicios compartidos para toda la instancia.

El servidor de detección de contenedores permite que los procesos del servidor de juegos descubran los demás contenedores que se ejecutan en la misma instancia. De este modo, los contenedores pueden comunicarse entre sí a través de las definiciones de grupos de contenedores a través de la red local de la instancia.

El servidor de detección es un servicio HTTP ligero. Amazon GameLift Serverslo ejecuta localmente en todas las instancias de la flota de contenedores. El servicio proporciona la siguiente información de red para cada contenedor que se ejecute en esa instancia:
+ El nombre del contenedor que defina en la definición del grupo de contenedores.
+ El identificador único del contenedor.
+ La dirección IP local del contenedor en la instancia.
+ El tipo de grupo de contenedores, ya sea `GAME_SERVER` (una réplica del grupo de contenedores del servidor de juegos) o `PER_INSTANCE` (el grupo de contenedores por instancia).

**nota**  
El servidor de detección de contenedores solo está disponible en las flotas de contenedores gestionadas.

## Recupere la información de la red de contenedores
<a name="containers-discovery-retrieve"></a>

Puedes recuperar la información de la red de contenedores de dos maneras: desde un proceso de servidor de juegos con el SDK Amazon GameLift Servers del servidor o desde cualquier contenedor llamando directamente al servidor de detección a través de HTTP.

### Recupera la información del contenedor mediante el SDK del servidor
<a name="containers-discovery-retrieve-sdk"></a>

Si el proceso de tu servidor de juegos usa el SDK Amazon GameLift Servers del servidor, ejecuta la `ListContainersNetworkInfo()` acción para recuperar la información de la red del contenedor. El SDK del servidor localiza el servidor de detección y realiza la solicitud por ti. La acción devuelve la información de red de todos los contenedores que se ejecutan en la misma instancia. En cualquier otro tipo de proceso, la acción devuelve un error de tipo de proceso no admitido.

`ListContainersNetworkInfo()`está disponible en la versión 5.5 o posterior del SDK del servidor para los siguientes idiomas:
+ [ListContainersNetworkInfo()](integration-server-sdk-go-actions.md#integration-server-sdk-go-listcontainersnetworkinfo)(Ir)
+ [ListContainersNetworkInfo()](integration-server-sdk5-cpp-actions.md#integration-server-sdk5-cpp-listcontainersnetworkinfo)(C\+\+)
+ [ListContainersNetworkInfo()](integration-server-sdk5-csharp-actions.md#integration-server-sdk5-csharp-listcontainersnetworkinfo)(C\#)

La acción también está disponible en los Amazon GameLift Servers complementos de Unreal Engine y Unity.

### Recupere la información del contenedor llamando directamente al servidor de detección
<a name="containers-discovery-retrieve-direct"></a>

Algunos contenedores no utilizan el SDK del servidor, como los contenedores por instancia. Estos contenedores llaman al servidor de detección directamente a través de HTTP. Amazon GameLift Serverspreestablece la variable de `GAMELIFT_CONTAINER_DISCOVERY_SERVER_ENDPOINT_V1` entorno en estos contenedores. Esta variable contiene la dirección del servidor de detección, incluida la ruta de la versión de la API, y se establece tanto en la definición del servidor del juego como en la del grupo de contenedores por instancia.

Para recuperar la información de la red del contenedor, envía una `GET` solicitud HTTP a este punto final. El siguiente ejemplo utiliza `curl`:

```
curl "$GAMELIFT_CONTAINER_DISCOVERY_SERVER_ENDPOINT_V1"
```

El servidor de detección devuelve una matriz JSON con una entrada para cada contenedor que se ejecute en la instancia:

```
[
  {
    "containerName": "game-server",
    "ipAddress": "172.17.0.3",
    "containerId": "b896159563df43736e5e93ad0547a24fa572648d55b70c70747642afca398b18",
    "containerGroupType": "GAME_SERVER"
  },
  {
    "containerName": "per-instance",
    "ipAddress": "172.17.0.4",
    "containerId": "3c239ae037aec28bb42212ffa2b9e02524c0c4c361db9bc31dd4c5aecc0b7943",
    "containerGroupType": "PER_INSTANCE"
  }
]
```

## Límites de velocidad de solicitud
<a name="containers-discovery-throttling"></a>

El servidor de detección limita cada contenedor de la instancia a 10 solicitudes por segundo. Limita las solicitudes que superan este límite y devuelve un error. Para mantenerse dentro de este límite, consulte al servidor de detección una vez al inicio. Como alternativa, consúltelo solo cuando necesite actualizar la vista de la instancia. Almacene en caché los resultados en su contenedor y reutilice los valores almacenados en caché en lugar de consultar el servidor de detección de forma recurrente.

Actualice periódicamente la memoria caché para mantenerla actualizada. La dirección IP local de un contenedor puede cambiar si el contenedor se bloquea o se cierra (por ejemplo, cuando finaliza la sesión de juego).

## Ejemplo: recopilar métricas de los contenedores de servidores de juegos
<a name="containers-discovery-example"></a>

Un uso común del servidor de detección es enviar telemetría entre contenedores de la misma instancia sin salir de la red local de la instancia. Pensemos en una flota que ejecute varios contenedores de servidores de juegos (`GAME_SERVER`) y un solo contenedor por instancia (). `PER_INSTANCE` El contenedor por instancia ejecuta un recopilador de métricas que comparten todos los servidores de juegos de la instancia.

Puedes implementar la recopilación de métricas con un modelo push o un modelo pull:
+ **Empuje (emisión de métricas)**: al inicio, cada contenedor del servidor del juego llama`ListContainersNetworkInfo()`. El contenedor busca la entrada con el tipo de grupo de `PER_INSTANCE` contenedores. A continuación, lee la dirección IP local de esa entrada. El servidor del juego envía sus métricas directamente al recopilador de cada instancia a través de la red local de la instancia.
+ **Obtención (extracción de métricas)**: el enfoque inverso también funciona. El contenedor por instancia no usa el SDK del servidor, por lo que llama directamente al punto final del servidor de detección. Busca las direcciones IP de todos los `GAME_SERVER` contenedores de la instancia. Luego, extrae un punto final de métricas que cada contenedor de servidor de juegos expone en la red local.

En ambos casos, la comunicación permanece en la red local de la instancia. Cada contenedor consulta el servidor de detección solo de forma ocasional y no de forma recurrente.

## Temas relacionados
<a name="containers-discovery-related"></a>
+ [Adición de Amazon GameLift Servers al servidor de juegos con el SDK del servidor](gamelift-sdk-server-api.md)
+ [Creación de una definición de grupo de contenedores para una flota de contenedores de Amazon GameLift Servers](containers-create-groups.md)
+ [Personalización de una flota de contenedores de Amazon GameLift Servers](containers-design-fleet.md)
+ [Cómo funcionan los contenedores en Amazon GameLift Servers](containers-howitworks.md)