Instalar un agente de NetScaler en Amazon Web Services (AWS)

Last published : Oct 02, 2026
El agente de NetScaler funciona como intermediario entre NetScaler Console y las instancias detectadas en el centro de datos o en la nube.

Requisitos previos

Para iniciar una AMI de agente de NetScaler dentro de una nube privada virtual (VPC) de Amazon Web Services (AWS) mediante la GUI de Amazon, necesita:
  • Una cuenta de AWS
  • Una nube privada virtual (VPC) de AWS
  • Una cuenta de IAM
  • Una URL de servicio y un código de activación para que el agente se conecte al servicio NetScaler Console. En la GUI del servicio NetScaler Console, vaya a Infraestructura > Instancias > Agentes y haga clic en Generar código de activación para generar su URL de servicio y su código de activación.
Nota
  • Antes de aprovisionar una máquina virtual de agente de NetScaler, Citrix recomienda crear un grupo de seguridad, una red privada virtual, un par de claves, una subred y otras entidades. De este modo, la información de red estará disponible durante el aprovisionamiento.
  • Para que un agente de NetScaler se comunique con NetScaler Console y las instancias de NetScaler, asegúrese de que los puertos recomendados estén abiertos. Para obtener detalles completos sobre los requisitos de puerto para un agente de NetScaler, consulte Puertos.
Para instalar el agente de NetScaler en AWS:
  1. Inicie sesión en el AWS marketplace con sus credenciales de AWS.
  2. En el campo de búsqueda, escriba NetScaler agent para buscar la AMI del agente de NetScaler y haga clic en Ir.
  3. En la página de resultados de búsqueda, haga clic en la AMI del agente externo de NetScaler Console de la lista disponible.
  4. En la página NetScaler Console External Agent AMI, haga clic en Continue to Subscribe.
    Agente externo de NetScaler Console
  5. Una vez que la suscripción se haya realizado correctamente, haga clic en Continue to Configuration.
    Continuar configuración
  6. En la página Configure this software:
    1. Seleccione la AMI de la lista Fulfillment option.
    2. Seleccione la versión más reciente del agente de NetScaler de la lista Software Version.
    3. Seleccione su región de la lista Region.
    4. Haga clic en Continue to Launch
      Continuar para iniciar
  7. En la página Launch this software, tiene dos opciones para registrar el agente de NetScaler:
    1. Lanzar desde el sitio web
    2. Lanzar con EC2
      Iniciar con EC2

Iniciar desde un sitio web

Para iniciar desde un sitio web, seleccione:
  1. Un tipo de instancia EC2 de la lista Tipo de instancia EC2
  2. Una VPC de la lista Configuración de VPC. Haga clic en Crear una VPC en EC2 para crear una VPC para su software.
  3. Una subred de la lista Configuración de subred. Haga clic en Crear una subred en EC2 para crear una subred después de seleccionar la VPC.
  4. Un grupo de seguridad para el firewall de la lista Configuración del grupo de seguridad. Haga clic en Crear nuevo basado en la configuración del vendedor para crear un grupo de seguridad.
  5. Un par de claves para garantizar la seguridad de acceso de la lista Configuración de par de claves. Haga clic en Crear un par de claves en EC2 para crear un par de claves para su software.
  6. Haga clic en Iniciar
    Iniciar un sitio web
  7. El inicio desde un sitio web se ha realizado correctamente.
    El inicio desde un sitio web se ha realizado correctamente
    Nota
    El proceso de implementación puede tardar aproximadamente entre 10 y 15 minutos. Una vez completada la implementación, puede ver su máquina virtual del agente NetScaler en su cuenta de AWS.
  8. Una vez implementado el agente, asigne un nombre a su agente NetScaler.
  9. Una vez que el agente esté en funcionamiento, asigne una dirección IP elástica a su agente NetScaler.
    Nota
    La dirección IP elástica permite al agente de NetScaler comunicarse con NetScaler Console. Sin embargo, una dirección IP elástica podría no ser necesaria si ha configurado NAT Gateway para enrutar el tráfico a Internet.
  10. Con un cliente SSH, inicie sesión en su agente de NetScaler.
    Nota
    Puede iniciar sesión en el agente de NetScaler de una de las siguientes maneras:
    • Utilice nsrecover como nombre de usuario y el ID de instancia de AWS como contraseña.
    • Utilice nsroot como nombre de usuario y un par de claves válido como contraseña.
  11. Introduzca el siguiente comando para invocar la pantalla de implementación: deployment\_type.py
  12. Introduzca la URL del servicio y el código de activación que copió y guardó de la página Configurar agentes en NetScaler Console, tal como se indica en Introducción. El agente utiliza la URL del servicio para localizar el servicio y el código de activación para registrarse en el servicio.
    Implementación de NetScaler Console
Una vez que el registro del agente se haya realizado correctamente, el agente se reinicia para completar el proceso de instalación.
Después de que el agente se haya reiniciado, acceda a NetScaler Console y, en la página Configurar agente, en Agentes detectados, verificar el estado del agente.

Iniciar con EC2

Para iniciar con EC2, seleccione Iniciar a través de EC2 en la lista Elegir acción y, a continuación, haga clic en Iniciar.
  1. En la página Elegir un tipo de instancia, seleccione la instancia y haga clic en Siguiente: Configurar detalles de la instancia.
    Configurar detalles de la instancia
  2. En la página Configurar detalles de instancia, especifique los parámetros requeridos.
    En la sección Detalles avanzados, puede habilitar un agente de cero contacto especificando los detalles de autenticación o un script en el campo Datos de usuario.
    • Detalles de autenticación: especifique la URL del servicio y el código de activación que copió de la página Configurar agentes en NetScaler Console, tal como se indica en Introducción. Introduzca los detalles en el siguiente formato.
      registeragent -serviceurl <apigatewayurl> -activationcode <activationcodevalue>
      El agente utiliza esta información para registrarse automáticamente en NetScaler Console durante el arranque.
    • Script: especifique un script de registro automático del agente como datos de usuario. El siguiente es un script de ejemplo:
      #!/var/python/bin/python2.7
      import os
      import requests
      import json
      import time
      import re
      import logging
      import logging.handlers
      import boto3

      '''
      Overview of the Script:
      The script helps to register a NetScaler agent with NetScaler Console. Pass it in userdata to make NetScaler agent in AWS to autoregister on bootup. The workflow is as follows
      1)  Fetch the NetScaler Console API credentials (ID and secret) from AWS secret store (NOTE: you have to assign IAM role to the NetScaler agent that will give permission to fetch secrets from AWS secret store)
      2)  Login to NetScaler Console with credentials fetched in step 1
      3)  Call NetScaler Console to fetch credentials (serviceURL and token) for agent registration
      4)  Calls registration by using the credentials fetched in step 3
      '''

      '''
      These are the placeholders which you need to replace according to your setup configurations
      aws_secret_id: Id of the AWS secret where you have stored NetScaler Console Credentials
      The secrets value should be in the following json format
      { "adm_user_id_key": "YOUR_ID", " adm_user_secret_key": "YOUR_SECRET"}
      '''

      aws_secret_id = "<AWS_secret_id>"
      adm_ip_or_hostname = "<YOUR_ADM_POP>.adm.cloud.com"

      '''
      Set up a specific logger with your desired output level and log file name
      '''
      log_file_name_local = os.path.basename(__file__)
      LOG_FILENAME = '/var/log/' + 'bootstrap' + '.log'
      LOG_MAX_BYTE = 50*1024*1024
      LOG_BACKUP_COUNT = 20

      logger = logging.getLogger(__name__)
      logger.setLevel(logging.DEBUG)
      logger_handler = logging.handlers.RotatingFileHandler(LOG_FILENAME, maxBytes=LOG_MAX_BYTE, backupCount=LOG_BACKUP_COUNT)
      logger_fortmater = logging.Formatter(fmt='%(asctime)-2s:%(funcName)30s:%(lineno)4d: [%(levelname)s] %(message)s', datefmt="%Y-%m-%d %H:%M:%S")
      logger_handler.setFormatter(logger_fortmater)
      logger.addHandler(logger_handler)

      class APIHandlerException(Exception):
          def __init__(self, error_code, message):
              self.error_code = error_code
              self.message = message

          def __str__(self):
              return self.message + ". Error code '" + str(self.error_code) + "'"

      def parse_response(response, url, print_response=True):
          if not response.ok:
              if "reboot" in url:
                  logger.debug('No response for url: reboot')
                  resp = {"errorcode": "500", "message": "Error while reading response."}
                  return resp

              if print_response:
                  logger.debug('Response text for %s is %s' % (url, response.text))

              response = json.loads(response.text)
              logger.debug("ErrorCode - " + str(response['errorcode']) + ". Message -" + str(response['message']))
              raise APIHandlerException(response['errorcode'], str(response['message']))
          elif response.text:
              if print_response:
                  logger.debug('Response text for %s is %s' % (url, response.text))

              result = json.loads(response.text)
              if 'errorcode' in result and result['errorcode'] > 0:
                  raise APIHandlerException(result['errorcode'], str(result['message']))
              return result

      def _request(method, url, data=None, headers=None, retry=3, print_response=True):
          try:
              response = requests.request(method, url, data=data, headers=headers)
              result = parse_response(response, url, print_response=print_response)
              return result
          except [requests.exceptions.ConnectionError, requests.exceptions.ConnectTimeout]:
              if retry > 0:
                  return _request(method, url, data, headers, retry-1, print_response=print_response)
              else:
                  raise APIHandlerException(503, 'ConnectionError')
          except requests.exceptions.RequestException as e:
              logger.debug(str(e))
              raise APIHandlerException(500, str(e))
          except APIHandlerException as e:
              logger.debug("URL: %s, Error: %s, Message: %s" % (url, e.error_code, e.message))
              raise e
          except Exception as e:
              raise APIHandlerException(500, str(e))

      try:
          '''Get the AWS Region'''
          client = boto3.client('s3')
          my_region = client.meta.region_name
          logger.debug("The rgion is %s" % (my_region))

          '''Creating a Boto cleint session'''
          session = boto3.session.Session()
          client = session.client(
              service_name='secretsmanager',
              region_name=my_region
          )

          '''Getting the values stored in the secret with id: <aws_secret_id>'''
          get_id_value_response = client.get_secret_value(
              SecretId = aws_secret_id
          )
          adm_user_id = json.loads(get_id_value_response["SecretString"])["adm_user_id_key"]
          adm_user_secret = json.loads(get_id_value_response["SecretString"])["adm_user_secret_key"]

      except Exception as e:
          logger.debug("Fetching of NetScaler Console credentials from AWS secret failed with error: %s" % (str(e)))
          raise e

      '''
      Initializing common NetScaler Console API handlers
      '''
      mas_common_headers = {
          'Content-Type': "application/json",
          'Accept-type': "application/json",
          'Connection': "keep-alive",
          'isCloud': "true"
      }

      '''
      API to login to the NetScaler Console and fetch the Session ID and Tenant ID
      '''
      url = "https://" + str(adm_ip_or_hostname) + "/nitro/v1/config/login"
      payload = 'object={"login":{"ID":"' + adm_user_id + '","Secret":"' + adm_user_secret + '"}}'
      try:
          response = _request("POST", url, data=payload, headers=mas_common_headers)
          sessionid = response["login"][0]["sessionid"]
          tenant_id = response["login"][0]["tenant_name"]
      except Exception as e:
          logger.debug("Login call to the NetScaler Console failed with error: %s" % (str(e)))
          raise e

      '''
      API to fetch the service URL and Token to be used for registering the agent with the NetScaler Console
      '''
      mas_common_headers['Cookie'] = 'SESSID=' + str(sessionid)
      url = "https://" + str(adm_ip_or_hostname) + "/nitro/v1/config/trust_preauthtoken/" + tenant_id +"?customer="+ tenant_id
      logger.debug("Fetching Service URL and Token.")
      try:
          response = _request("GET", url, data=None, headers=mas_common_headers)
          service_name  = response["trust_preauthtoken"][0]["service_name"]
          token = response["trust_preauthtoken"][0]["token"]
          api_gateway_url = response["trust_preauthtoken"][0]["api_gateway_url"]
      except Exception as e:
          logger.debug("Fetching of the Service URL Passed with error. %s" % (str(e)))
          raise e

      '''
      Running the register agent command using the values we retrieved earlier
      '''
      try:
          registeragent_command = "registeragent -serviceurl "+api_gateway_url+" -activationcode "+service_name+"\;"+token
          file_run_command = "/var/python/bin/python2.7 /mps/register_agent_cloud.py "+registeragent_command
          logger.debug("Executing registeragent command: %s" % (file_run_command))
          os.system(file_run_command)
      except Exception as e:
          logger.debug("Agent Registeration failed with error: %s" % (str(e)))
              raise e
      Este script obtiene los detalles de autenticación del administrador de secretos de AWS y ejecuta el script deployment.py para registrar el agente en NetScaler Console.
    Configurar detalles de instancia
    Nota
    Aunque puede asignar automáticamente una dirección IP pública, también puede asignar una dirección IP elástica. La asignación de una dirección IP elástica es necesaria cuando no se configura NAT Gateway.
    Si la dirección IP elástica no se establece en este paso, aún puede hacerlo en la consola de EC2. Puede crear una nueva dirección IP elástica y asociarla con el agente de NetScaler mediante el ID de instancia o el ID de ENI.
    Haga clic en Agregar almacenamiento.
  3. En la página Agregar almacenamiento, configure los ajustes del dispositivo de almacenamiento para la instancia y haga clic en Siguiente: Agregar etiquetas.
    Agregar etiquetas
  4. En la página Agregar etiquetas, defina la etiqueta para la instancia y haga clic en Siguiente: Configurar grupo de seguridad.
    Configurar grupo de seguridad
  5. En la página Configurar grupo de seguridad, añada reglas para permitir tráfico específico a su instancia y haga clic en Revisar y lanzar.
    Revisar y lanzar
  6. En la página Revisar lanzamiento de instancia, revise la configuración de la instancia y haga clic en Lanzar.
  7. En el cuadro de diálogo Seleccionar un par de claves existente o crear un nuevo par de claves, cree un par de claves. También puede seleccionar entre los pares de claves existentes.
    Acepte el reconocimiento y haga clic en Lanzar instancias.
    Lanzar instancias
El proceso de implementación puede tardar aproximadamente entre 10 y 15 minutos. Una vez que la implementación se haya completado correctamente, podrá ver su máquina virtual del agente de NetScaler en su cuenta de AWS.