Construyendo AIOPS con el desarrollador de Amazon Q CLI y MCP Server

Los equipos de TI enfrentan desafíos crecientes a medida que gestionan infraestructura y aplicaciones cada vez más complejas, a menudo pasan innumerables horas identificando manualmente problemas operativos, problemas de solución de problemas y realizando tareas de mantenimiento repetitivas. Esta carga operativa desvía los valiosos recursos técnicos de la innovación y las iniciativas estratégicas. La inteligencia artificial para las operaciones de TI (AIOPS) presenta una solución transformadora, utilizando AI para automatizar los flujos de trabajo operativos, detectar anomalías y resolver incidentes con una intervención humana mínima. Las organizaciones pueden optimizar su eficiencia operativa mientras mantienen la seguridad a medida que administran su infraestructura y aplicaciones.

Puedes usar Amazon Q Developer CLI y Protocolo de contexto modelo (MCP) Servidores para construir potentes soluciones de AIOP que puedan reducir el esfuerzo manual a través de las interacciones del lenguaje natural. Desarrollador de Amazon Q Puede ayudar a los desarrolladores y profesionales de TI con muchas de sus tareas: desde la codificación, las pruebas y la implementación, hasta la resolución de problemas, realizar escaneo y correcciones de seguridad, modernizar aplicaciones, optimizar los recursos de AWS y crear tuberías de ingeniería de datos. El MCP extiende estas capacidades al permitir que Amazon Q se conecte con herramientas y servicios personalizados a través de una interfaz estandarizada, lo que permite automatizaciones operativas más sofisticadas.

En esta publicación, discutimos cómo implementar una solución AIOP sin código de código bajo que ayude a las organizaciones a monitorear, identificar y solucionar los eventos operativos mientras mantiene su postura de seguridad. Mostramos cómo estas tecnologías funcionan juntas para automatizar tareas repetitivas, optimizar la respuesta de incidentes y mejorar la eficiencia operativa en toda su organización.

Esta es la tercera publicación de una serie sobre AIOPS usando Servicios generativos de IA en AWS. Consulte las siguientes dos publicaciones para construir AIOPS utilizando Roca madre de Amazon y Amazon Q Business:

Descripción general de la solución

Los servidores MCP actúan como un conector universal para los modelos AI, lo que les permite interactuar con sistemas externos, obtener datos en vivo e integrarse con varias herramientas sin problemas. Esto ayuda a Amazon Q a proporcionar una asistencia más contextualmente relevante al acceder a la información que necesita en tiempo real. El siguiente diagrama de arquitectura ilustra cómo puede usar un solo archivo de configuración, mcp.jsonpara configurar los servidores MCP en Amazon Q Developer CLI para conectarse a sistemas externos.

El flujo de trabajo consta de los siguientes pasos:

  1. El usuario configura un cliente MCP en Amazon Q Developer CLI utilizando el mcp.json archivo.
  2. El usuario inicia sesión en Amazon Q Developer CLI y pregunta consultas operativas en lenguaje natural.
  3. Dependiendo de su consulta, Amazon Q decide qué servidores MCP configuró o las herramientas existentes para invocar para realizar la tarea.
  4. El servidor MCP interactúa con el sistema externo respectivo para obtener los datos en vivo que Amazon Q utiliza para realizar la tarea requerida.

En esta publicación, mostramos cómo usar Amazon Q Developer CLI para abordar los siguientes problemas operativos:

Requisitos previos

Complete los siguientes requisitos previos antes de comenzar a configurar la demostración:

Configurar MCP en Amazon Q Developer CLI

Configuración de MCP En Amazon Q Developer CLI se administra a través de archivos JSON. Configurarás el Servidor MCP de la base de conocimiento de Amazon Bedrock. Al momento de escribir, solo el transporte Stdio es compatible con el desarrollador de Amazon Q CLI.

Admite el desarrollador de Amazon Q CLI Dos niveles de configuración de MCP:

  • Configuración global – usa ~/.aws/amazonq/mcp.json y se aplica a todos los espacios de trabajo
  • Configuración del espacio de trabajo – usa .amazonq/mcp.json y es específico del espacio de trabajo actual

Para esta publicación, utilizamos la configuración del espacio de trabajo, pero tiene la opción de usar cualquiera de ellos.

  1. Cree una nueva carpeta de espacio de trabajo, y dentro de esa carpeta, cree el archivo .amazonq/mcp.json Con el siguiente contenido:
{
  "mcpServers": {
    "awslabs.bedrock-kb-retrieval-mcp-server": {
      "command": "uvx",
      "args": ["awslabs.bedrock-kb-retrieval-mcp-server@latest"],
      "env": {
        "AWS_PROFILE": "your-profile-name ",
        "AWS_REGION": "your-region",
        "FASTMCP_LOG_LEVEL": "ERROR",
        "KB_INCLUSION_TAG_KEY": "name=aiops-knowledge-base",
        "BEDROCK_KB_RERANKING_ENABLED": "false"
      },
      "disabled": false,
      "autoApprove": []
    }  
  }
}

Ver el Repositorio de GitHub de los servidores AWS MCP Para una lista actualizada de servidores MCP disponibles.

  1. Abra un terminal, navegue a la carpeta del espacio de trabajo que creó, y ejecute el siguiente comando para iniciar sesión en Amazon Q Developer CLI:
  1. Siga las instrucciones de iniciar sesión en Amazon Q desarrollador en la línea de comando.
  2. Iniciar la sesión de chat ejecutando q y luego corre /tools Para validar que se configura el servidor MCP de la base de conocimiento de Amazon Bedrock.

Los permisos de herramientas tienen dos estados posibles:

  • De confianza – Amazon Q puede usar la herramienta sin pedir confirmación cada vez
  • Por solicitud – Amazon Q debe solicitar su confirmación cada vez antes de usar la herramienta

Por defecto, esta herramienta no será confiable.

Amazon Q Developer CLI

5. Corre /tools trust awslabsbedrock_kb_retrieval_mcp_server___QueryKnowledgeBases para confiar en el servidor MCP.

6. Ejecute el /tools comandar nuevamente para validarlo.

Amazon Q Developer CLI

Implementar recursos de AWS

Implementar lo siguiente AWS CloudFormation Plantilla para implementar los recursos de AWS que usará para probar AIOPS. Puede implementar esta plantilla en el us-east-1 o us-west-2 Región de AWS. Puede implementarlo en otras regiones actualizando los ID de AMI aplicables en la plantilla. Esta plantilla implementará dos instancias EC2 y tres cubos S3.

Esta plantilla de CloudFormation es solo para fines de demostración y no destinado al uso de la producción.

AWSTemplateFormatVersion: '2010-09-09'
Description: >-
  This template creates the necessary AWS resources which will be used to test AIOps using 
  Amazon Q Developer CLI with MCP server integration.
Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups:
      - Label:
          default: Network
        Parameters:
          - SecurityGroupIngressCidrIp
      - Label:
          default: General
        Parameters:
          - Prefix
    ParameterLabels:
      SecurityGroupIngressCidrIp:
        default: Security group ingress CIDR IP
Parameters:
  Prefix:
    Type: String
    Description: Unique name prefix for resources that are created by the stack.
    ConstraintDescription: >-
      must not start with a dash, and must only contain lowercase a-z, digits,
      and a dash.
    AllowedPattern: ^[a-z0-9][a-z0-9-]+$
    MinLength: 1
    MaxLength: 30
    Default: aiops-qdevcli
  SecurityGroupIngressCidrIp:
    Type: String
    Description: >-
      IPv4 address in CIDR format for allowed incoming traffic to the EC2 instance. Defaults to allowing all IPs.
    ConstraintDescription: >-
      must be in the form x.x.x.x/s, where x is 0-255, and s is 0-32.
    AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/([0-9]|[1-2][0-9]|3[0-2]))$
    Default: 0.0.0.0/0
Resources:
  # AIOps Amazon S3 bucket1
  AIOpsQDeveloperCliS3Bucket1:
    Type: AWS::S3::Bucket
    Properties:
      AccessControl: Private
      BucketName:
        Fn::Sub: ${Prefix}-bucket1-${AWS::AccountId}
      PublicAccessBlockConfiguration:
        BlockPublicAcls: true
        BlockPublicPolicy: true
        IgnorePublicAcls: true
        RestrictPublicBuckets: true
  # AIOps Amazon S3 bucket2
  AIOpsQDeveloperCliS3Bucket2:
    Type: AWS::S3::Bucket
    Properties:
      AccessControl: Private
      BucketName:
        Fn::Sub: ${Prefix}-bucket2-${AWS::AccountId}
      PublicAccessBlockConfiguration:
        BlockPublicAcls: true
        BlockPublicPolicy: true
        IgnorePublicAcls: true
        RestrictPublicBuckets: true
  # AIOps Amazon S3 bucket3
  AIOpsQDeveloperCliS3Bucket3:
    Type: AWS::S3::Bucket
    Properties:
      AccessControl: Private
      BucketName:
        Fn::Sub: ${Prefix}-bucket3-${AWS::AccountId}
      PublicAccessBlockConfiguration:
        BlockPublicAcls: true
        BlockPublicPolicy: true
        IgnorePublicAcls: true
        RestrictPublicBuckets: true
  # AIOps Knowledgebase S3 bucket
  AIOpsQDeveloperKBS3Bucket:
    Type: AWS::S3::Bucket
    Properties:
      AccessControl: Private
      BucketName:
        Fn::Sub: ${Prefix}-kb-${AWS::AccountId}
      PublicAccessBlockConfiguration:
        BlockPublicAcls: true
        BlockPublicPolicy: true
        IgnorePublicAcls: true
        RestrictPublicBuckets: true
  # AIOps VPC resources
  AIOpsQDeveloperCliVPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      Tags:
        - Key: Name
          Value: AIOpsQDeveloperCliVPC
  AIOpsQDeveloperCliSubnet1:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: 10.0.1.0/24
      VpcId:
        Ref: AIOpsQDeveloperCliVPC
      AvailabilityZone: !Select 
        - 0
        - !GetAZs 
          Ref: 'AWS::Region'
      Tags:
        - Key: Name
          Value: AIOpsQDeveloperCliSubnet1
  AIOpsQDeveloperCliSubnet2:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: 10.0.3.0/24
      VpcId:
        Ref: AIOpsQDeveloperCliVPC
      AvailabilityZone: !Select 
        - 1
        - !GetAZs 
          Ref: 'AWS::Region'
      Tags:
        - Key: Name
          Value: AIOpsQDeveloperCliSubnet2
  AIOpsQDeveloperIGW:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
        - Key: Name
          Value: AIOpsQDeveloperIGW
  AIOpsQDeveloperCliVPCGatewayAttachment:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      InternetGatewayId:
        Ref: AIOpsQDeveloperIGW
      VpcId:
        Ref: AIOpsQDeveloperCliVPC
  AIOpsQDeveloperCliRT:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId:
        Ref: AIOpsQDeveloperCliVPC
      Tags:
        - Key: Name
          Value: AIOpsQDeveloperCliRT
  AIOpsRoute:
    Type: AWS::EC2::Route
    DependsOn:
      - AIOpsQDeveloperCliVPCGatewayAttachment
    Properties:
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId:
        Ref: AIOpsQDeveloperIGW
      RouteTableId:
        Ref: AIOpsQDeveloperCliRT
  AIOpsQDeveloperCliSubnetRouteTableAssociation1:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId:
        Ref: AIOpsQDeveloperCliRT
      SubnetId:
        Ref: AIOpsQDeveloperCliSubnet1
  AIOpsQDeveloperCliSubnetRouteTableAssociation2:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId:
        Ref: AIOpsQDeveloperCliRT
      SubnetId:
        Ref: AIOpsQDeveloperCliSubnet2
  AIOpsQDeveloperCliSG1:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: >-
        Allows incoming traffic on port 5080 and denies all outgoing traffic.
      SecurityGroupEgress:
        - Description: Denies all outgoing traffic.
          IpProtocol: -1
          CidrIp: 0.0.0.0/32
      SecurityGroupIngress:
        - Description: Allows incoming TCP traffic on port 22.
          IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp:
            Ref: SecurityGroupIngressCidrIp        
      VpcId:
        Ref: AIOpsQDeveloperCliVPC
      Tags:
        - Key: Name
          Value: AIOpsQDeveloperCliSG1
  AIOpsQDeveloperCliSG2:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: >-
        Allows incoming traffic on port 5080 and denies all outgoing traffic.
      SecurityGroupEgress:
        - Description: Denies all outgoing traffic.
          IpProtocol: -1
          CidrIp: 0.0.0.0/32
      SecurityGroupIngress:
        - Description: Allows incoming TCP traffic on port 5080.
          IpProtocol: tcp
          FromPort: 5080
          ToPort: 5080
          CidrIp:
            Ref: SecurityGroupIngressCidrIp
        - Description: Allows incoming TCP traffic on port 22.
          IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp:
            Ref: SecurityGroupIngressCidrIp        
      VpcId:
        Ref: AIOpsQDeveloperCliVPC
      Tags:
        - Key: Name
          Value: AIOpsQDeveloperCliSG2
  EC2KeyPair:
    Type: AWS::EC2::KeyPair
    Properties:
      KeyName: 
        Fn::Sub: ${Prefix}-keypair-${AWS::AccountId}
  # EC2 instance to demo high CPU Utilization AIOps  
  EC2InstanceHighCPUUtilDemo:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t2.micro
      KeyName: !Ref EC2KeyPair      
      ImageId: !FindInMap [RegionMap, !Ref 'AWS::Region', AL2023]
      NetworkInterfaces:
        - AssociatePublicIpAddress: true
          DeviceIndex: 0
          SubnetId: !Ref AIOpsQDeveloperCliSubnet1
          GroupSet: 
            - !Ref AIOpsQDeveloperCliSG1
      Tags:
        - Key: Name
          Value:
            Fn::Sub: ${Prefix}-high-cpu-util
  # EC2 instance to demo unwanted open port detection AIOps  
  EC2InstanceOpenPortDemo:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t2.micro
      KeyName: !Ref EC2KeyPair      
      ImageId: !FindInMap [RegionMap, !Ref 'AWS::Region', AL2023]
      NetworkInterfaces:
        - AssociatePublicIpAddress: true
          DeviceIndex: 0
          SubnetId: !Ref AIOpsQDeveloperCliSubnet1
          GroupSet: 
            - !Ref AIOpsQDeveloperCliSG2
      Tags:
        - Key: Name
          Value:
            Fn::Sub: ${Prefix}-open-port-demo
  CPUUtilizationAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmName: 
        Fn::Sub: ${Prefix}-EC2-Instance-CPU-Utilization
      AlarmDescription: Alarm when server CPU exceeds 70%
      ComparisonOperator: GreaterThanThreshold
      EvaluationPeriods: 1
      MetricName: CPUUtilization
      Namespace: AWS/EC2
      Period: 60
      Statistic: Average
      Threshold: 70.0
      ActionsEnabled: false
      Dimensions:
        - Name: InstanceId
          Value: !Ref EC2InstanceHighCPUUtilDemo
      Unit: Percent
Mappings:
  RegionMap:
    us-east-1:
      AL2023: ami-085ad6ae776d8f09c
    us-west-2:
      AL2023: ami-0005ee01bca55ab66
Outputs:
  AIOpsQDeveloperCliS3Bucket1:
    Description: S3 bucket created for testing AIOps
    Value:
      Ref: AIOpsQDeveloperCliS3Bucket1
  AIOpsQDeveloperCliS3Bucket2:
    Description: S3 bucket created for testing AIOps
    Value:
      Ref: AIOpsQDeveloperCliS3Bucket2
  AIOpsQDeveloperCliS3Bucket3:
    Description: S3 bucket created for testing AIOps
    Value:
      Ref: AIOpsQDeveloperCliS3Bucket3
  AIOpsQDeveloperKBS3Bucket:
    Description: S3 bucket created for testing AIOps
    Value:
      Ref: AIOpsQDeveloperKBS3Bucket
  EC2InstanceHighCPUUtilDemo:
    Description: EC2 instance for testing AIOps
    Value:
      Ref: EC2InstanceHighCPUUtilDemo
  EC2InstanceOpenPortDemo:
    Description: EC2 instance for testing AIOps
    Value:
      Ref: EC2InstanceOpenPortDemo

Valida que la plantilla implementó dos instancias de EC2, que están en Correr estado.

Consola EC2

Además, valida que la plantilla creó tres cubos S3 con los nombres aiops-qdevcli-bucketX- y un cubo con el nombre aiops-qdevcli- en su región seleccionada.

Consola S3

Crea una base de conocimiento de Amazon Bedrock

Cargar el Muestra de runbook de utilización de CPU alta hacia aiops-qdevcli- Bucket. Crear una base de conocimiento que apunte al cuboy tenga en cuenta la ID de base de conocimiento para usar en el primer caso de uso.

Caso de uso 1: Identificar y remediar la utilización alta de la CPU en una instancia de EC2

En este caso de uso, introduce el estrés de la CPU en una de las instancias de EC2 y luego usa Amazon Q Developer CLI para identificarla y remediarla.

  1. En la consola de Amazon EC2, inicie sesión en el aiops-qdevcli-high-cpu-util instancia usando EC2 Instance Connect.
  2. Ejecute el siguiente comando para instalar stress-ng:
sudo dnf install stress-ng

  1. Ejecute el siguiente comando para estresar la instancia de EC2 durante 1 hora:
stress-ng --cpu 1 --timeout 3600s

Debe esperar aproximadamente 10 minutos para el Amazon CloudWatch alarma para activarse.

  1. Regrese a la consola de Amazon EC2 y verifique que el aiops-qdevcli-high-cpu-util La instancia está actualmente en Alarma estado.
  2. Desde el Amazon Q Developer CLI, use una consulta de lenguaje natural para verificar los problemas de operación en su cuenta. Use la ID de base de conocimiento que guardó en la sección anterior.

Amazon Q Developer CLI Autocorrecta los errores que encontró al ejecutar los comandos.

Mire el siguiente video para obtener más detalles.

Debido a la naturaleza inherente no determinista del FMS, las respuestas que recibe del desarrollador de Amazon Q CLI podría no ser exactamente las mismas que las que se muestran en la demostración.

Caso de uso 2: Identifique y elimine el acceso público desde un cubo S3

En este caso de uso, simulará un problema de seguridad accidental al desbloquear el acceso público para uno de los cubos y luego usará Amazon Q Developer CLI para identificar y remediar el problema.

  1. En la consola de Amazon S3, abra uno de los aiops-qdevcli-xxxx cubos, y en el Permisos pestaña, elija Editar y cambiar Bloquear todo el acceso público a Apagado.

S3 Acceso público

  1. Regrese al desarrollador de Amazon Q CLI y haga preguntas en lenguaje natural para identificar y remediar el problema operativo.

Mire el siguiente video para obtener más detalles.

Caso de uso 3: Identifique y bloquee un puerto abierto no deseado específico para una conexión entrante a una instancia de EC2

En este caso de uso, utilizará Amazon Q Developer CLI para identificar la instancia de EC2 que tiene un puerto específico abierto y luego cerrar el puerto.

  1. En la consola de Amazon EC2, tenga en cuenta que el aiops-qdevcli-open-port-demo La instancia tiene el puerto 5080 abierto para todas las conexiones TCP entrantes. Este es un riesgo de seguridad no deseado que desea identificar y remediar.

Consola EC2

  1. Regrese a Amazon Q Developer CLI y use consultas de lenguaje natural para identificar la instancia de EC2 con el puerto 5080 abierto y solucione el problema.

Mire el siguiente video para más detalles.

Limpiar

El desmantelamiento de AWS aprovisionados adecuadamente es una mejor práctica importante para optimizar los costos y mejorar la postura de seguridad después de concluir pruebas de concepto y manifestaciones. Complete los siguientes pasos para eliminar los recursos creados en su cuenta de AWS:

  1. En la consola de roca de roca amazónica, Eliminar la base de conocimiento de la roca madre de Amazon.
  2. En la consola de Amazon S3, vacío el aiops-qdevcli-kb-xxx balde.
  3. En la consola de AWS CloudFormation, Eliminar la pila de CloudFormation.

Como alternativa, intente los pasos anteriores utilizando consultas de lenguaje natural en Amazon Q Developer CLI.

  1. Finalmente, elimine el .amazonq/mcp.json Archivo desde la carpeta de su espacio de trabajo para eliminar la configuración de MCP para Amazon Q Developer CLI.

Conclusión

En esta publicación, mostramos cómo el desarrollador de Amazon Q CLI interpreta las consultas de lenguaje natural, las convierte automáticamente en comandos apropiados e identifica las herramientas necesarias para la ejecución. Las capacidades inteligentes de manejo de errores de la solución analizan los registros y realizan auto-correcciones, minimizando la intervención manual. Al implementar Amazon Q Developer CLI, puede mejorar la eficiencia operativa de su equipo, reducir los errores humanos y administrar entornos complejos de manera más efectiva a través de una interfaz de conversación. Le animamos a explorar casos de uso adicionales y compartir sus comentarios con nosotros. Para obtener más información sobre los servidores de Amazon Q Developer CLI y AWS MCP, consulte los siguientes recursos:


Sobre los autores

Biswanath Mukherjee es un arquitecto de soluciones senior en Amazon Web Services. Trabaja con grandes clientes estratégicos de AWS al proporcionarles orientación técnica para migrar y modernizar sus aplicaciones en AWS Cloud. Con su amplia experiencia en arquitectura y migración en la nube, se asocia con clientes para desarrollar soluciones innovadoras que aprovechen la escalabilidad, la confiabilidad y la agilidad de AWS para satisfacer sus necesidades comerciales. Su experiencia abarca diversas industrias y casos de uso, lo que permite a los clientes desbloquear todo el potencial de la nube de AWS.

Upendra V es un arquitecto senior de soluciones en Amazon Web Services, especializada en IA generativa y soluciones en la nube. Ayuda a los clientes empresariales a diseñar e implementar cargas de trabajo generativas de IA generativas listas para la producción, implementar modelos de idiomas grandes (LLM) y sistemas de IA agente, y optimizar las implementaciones de la nube. Con experiencia en adopción en la nube y aprendizaje automático, permite a las organizaciones construir y escalar aplicaciones impulsadas por IA de manera eficiente.