Mejore el rendimiento operativo al habilitar Amazon DevOps Guru en varias regiones, cuentas y unidades organizativas de AWS con la AWS CDK - Recomendaciones de AWS

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.

Mejore el rendimiento operativo al habilitar Amazon DevOps Guru en varias regiones, cuentas y unidades organizativas de AWS con la AWS CDK

Creado por el Dr. Rahul Sharad Gaikwad (AWS)

Repositorio de código: código de muestra de Amazon DevOps Guru

Entorno: PoC o piloto

Tecnologías: administración y gobierno CloudNative; operaciones DevOps; seguridad, identidad y cumplimiento; sin servidor

Servicios de AWS: Amazon API Gateway; AWS CDK; Amazon DevOps Guru; Amazon DynamoDB; AWS Organizations

Resumen

Este patrón muestra los pasos para habilitar el servicio Amazon DevOps Guru en varias regiones, cuentas y unidades organizativas (OU) de Amazon Web Services (AWS) mediante el kit de desarrollo en la nube de AWS (AWS CDK) en TypeScript. Puede usar las pilas de CDK de AWS para implementar AWS CloudFormation StackSets desde la cuenta de administrador (principal) de AWS para habilitar Amazon DevOps Guru en varias cuentas, en lugar de iniciar sesión en cada cuenta y habilitar DevOps Guru individualmente para cada una de ellas.

Amazon DevOps Guru ofrece funciones de operaciones de inteligencia artificial (AIOps) para ayudarlo a mejorar la disponibilidad de sus aplicaciones y resolver los problemas operativos con mayor rapidez. DevOps Guru reduce el esfuerzo manual al aplicar recomendaciones basadas en el aprendizaje automático (ML), sin necesidad de conocimientos de aprendizaje automático. DevOps Guru analiza sus recursos y datos operativos. Si detecta alguna anomalía, proporciona métricas, eventos y recomendaciones para ayudarle a solucionar el problema.

Este patrón describe tres opciones de implementación para habilitar Amazon DevOps Guru:

  • Para todos, apile recursos en varias cuentas y regiones

  • Para todos los recursos de pila en las OU

  • Para recursos de pila específicos en varias cuentas y regiones

Requisitos previos y limitaciones

Requisitos previos

Versiones de producto

  • Kit de herramientas de AWS CDK, versión 1.107.0 o posterior

  • npm versión 7.9.0 o posterior

  • Node.js: versión 15.3.0 o posterior

Arquitectura

Tecnologías

La arquitectura de este patrón incluye los siguientes servicios:

Pilas de CDK de AWS

El patrón utiliza las siguientes pilas de CDK de AWS: 

  • CdkStackSetAdminRole: crea un rol de administrador de AWS Identity and Access Management (IAM) para establecer una relación de confianza entre las cuentas de administrador y de destino.

  • CdkStackSetExecRole: crea un rol de IAM para confiar en la cuenta de administrador.

  • CdkDevopsGuruStackMultiAccReg— Permite que DevOps Guru funcione en varias regiones y cuentas de AWS para todas las pilas, y configura las notificaciones del Amazon Simple Notification Service (Amazon SNS).

  • CdkDevopsGuruStackMultiAccRegSpecStacks— Permite que DevOps Guru funcione en varias regiones y cuentas de AWS para pilas específicas, y configura las notificaciones de Amazon SNS.

  • CdkDevopsguruStackOrgUnit— Habilita DevOps Guru en todas las unidades organizativas y configura las notificaciones de Amazon SNS. 

  • CdkInfrastructureStack: implementa ejemplos de componentes de aplicaciones sin servidor, como API Gateway, Lambda y DynamoDB, en la cuenta de administrador para demostrar la inyección de errores y la generación de información.

Arquitectura de aplicación de muestra

El siguiente diagrama ilustra la arquitectura de un ejemplo de aplicación sin servidor que se ha implementado en varias cuentas y regiones. El patrón utiliza la cuenta de administrador para implementar todas las pilas de CDK de AWS. También utiliza la cuenta de administrador como una de las cuentas de destino para configurar DevOps Guru.

  1. Cuando DevOps Guru está activado, primero toma como base el comportamiento de cada recurso y, a continuación, ingiere los datos operativos de CloudWatch las métricas vendidas.

  2. Si detecta una anomalía, la correlaciona con los eventos de origen y genera información. CloudTrail

  3. La información proporciona una secuencia correlacionada de eventos junto con recomendaciones prescritas para que el operador pueda identificar el recurso responsable.

  4. Amazon SNS envía mensajes de notificación al operador.

Un ejemplo de aplicación sin servidor que se ha implementado en varias cuentas y regiones.

Automatizar y escalar

El GitHub repositorio que se proporciona con este patrón utiliza la CDK de AWS como herramienta de infraestructura como código (IaC) para crear la configuración de esta arquitectura. AWS CDK le ayuda a organizar los recursos y a habilitar DevOps Guru en varias cuentas, regiones y unidades organizativas de AWS.

Herramientas

Servicios de AWS

  • AWS CDK: el Kit de desarrollo en la nube de AWS (AWS CDK) le ayuda a definir su infraestructura de nube como código en uno de los cinco lenguajes de programación compatibles: JavaScript Python TypeScript, Java y C#.

  • AWS CLI: Interfaz de la línea de comandos de AWS (AWS CLI) es una herramienta unificada que proporciona una interfaz de la línea de comandos coherente para interactuar con los servicios y recursos de AWS.

Código

El código fuente de este patrón está disponible en el GitHub repositorio Amazon DevOps Guru CDK Samples. El código CDK de AWS está escrito TypeScript. Para clonar y utilizar el repositorio, siga las instrucciones de la siguiente sección.

Importante: algunas de las historias de este patrón incluyen ejemplos de comandos de AWS CDK y AWS CLI formateados para Unix, Linux y macOS. Para Windows, sustituya la barra diagonal invertida (\) utilizada como carácter de continuación de Unix al final de cada línea por el signo de intercalación (^).

Epics

TareaDescripciónHabilidades requeridas

Configure los perfiles con nombre de AWS.

Configure sus perfiles con nombre de AWS de la siguiente manera para implementar pilas en un entorno de varias cuentas.

Para la cuenta de administrador:

$aws configure --profile administrator AWS Access Key ID [****]: <your-administrator-access-key-ID> AWS Secret Access Key [****]: <your-administrator-secret-access-key> Default region name [None]: <your-administrator-region> Default output format [None]: json

Para la cuenta de destino:

$aws configure --profile target AWS Access Key ID [****: <your-target-access-key-ID> AWS Secret Access Key [****]: <your-target-secret-access-key> Default region name [None]: <your-target-region> Default output format [None]: json

Para obtener más información, consulte Uso de perfiles con nombre en la documentación de la CLI de AWS.

DevOps ingeniero

Compruebe las configuraciones de los perfiles de AWS.

(Opcional) Puede verificar las configuraciones de su perfil de AWS en los archivos credentials y config siguiendo las instrucciones en Cómo establecer y ver los ajustes de configuración en la la documentación de la CLI de AWS.

DevOps ingeniero

Verifique la versión de AWS CDK.

Compruebe la versión del kit de herramientas de AWS CDK mediante el siguiente comando:

$cdk --version

Este patrón requiere la versión 1.107.0 o posterior. Si tiene una versión anterior de AWS CDK siga las instrucciones de la documentación de AWS CDK para actualizarla.

DevOps ingeniero

Clonar el código del proyecto.

Clona el GitHub repositorio de este patrón mediante el comando:

$git clone https://github.com/aws-samples/amazon-devopsguru-cdk-samples.git
DevOps ingeniero

Instale las dependencias de los paquetes y compile los TypeScript archivos.

Instale las dependencias del paquete y compile los TypeScript archivos ejecutando los siguientes comandos:

$cd amazon-devopsguru-cdk-samples $npm install $npm fund

Estos comandos instalan todos los paquetes del repositorio de muestra.

Importante: Si se muestra algún error acerca de paquetes que faltan, utilice uno de los siguientes comandos:

$npm ci

—o—

$npm install -g @aws-cdk/<package-name>

Puede encontrar la lista de nombres y versiones de los paquetes en la sección Dependencies del archivo /amazon-devopsguru-cdk-samples/package.json. Para obtener más información, consulte npm ci y npm install en la documentación de npm.

DevOps ingeniero
TareaDescripciónHabilidades requeridas

Configure una dirección de correo electrónico para las notificaciones de Amazon SNS.

Siga estos pasos para proporcionar una dirección de correo electrónico para las notificaciones de Amazon SNS:

  1. Edite los archivos /amazon-devopsguru-cdk-samples/lib/cdk-devopsguru-multi-acc-reg-stack.ts y /amazon-devopsguru-cdk-samples/lib/cdk-devopsguru-org-uni-stack.ts.

  2. En la DevOpsGuruTopic, sección Subscription, actualice el parámetro Endpoint con su dirección de correo electrónico.

  3. Guardar y cerrar los archivos.

DevOps ingeniero

Construya el código del proyecto.

Cree el código del proyecto y sintetice las pilas ejecutando el comando:

npm run build && cdk synth

Debería ver una salida similar a esta: 

$npm run build && cdk synth > cdk-devopsguru@0.1.0 build > tsc Successfully synthesized to ~/amazon-devopsguru-cdk-samples/cdk.out Supply a stack id (CdkDevopsGuruStackMultiAccReg,CdkDevopsGuruStackMultiAccRegSpecStacks, CdkDevopsguruStackOrgUnit, CdkInfrastructureStack, CdkStackSetAdminRole, CdkStackSetExecRole) to display its template.

Para obtener más información y conocer los pasos, consulte Su primera aplicación de AWS CDK en la documentación de AWS CDK.

DevOps ingeniero

Enumere las pilas de CDK de AWS.

Ejecute el siguiente comando para enumerar todas las pilas de AWS CDK:

$cdk list

El comando muestra la lista siguiente:

CdkDevopsGuruStackMultiAccReg CdkDevopsGuruStackMultiAccRegSpecStacks CdkDevopsguruStackOrgUnit CdkInfrastructureStack CdkStackSetAdminRole CdkStackSetExecRole
DevOps ingeniero
TareaDescripciónHabilidades requeridas

Implemente las pilas de CDK de AWS para crear roles de IAM.

Este patrón utiliza AWS CloudFormation StackSets para realizar operaciones de apilamiento en varias cuentas. Si va a crear su primer conjunto de pilas, debe crear las siguientes funciones de IAM para configurar los permisos necesarios en sus cuentas de AWS:

  • AWSCloudFormationStackSetAdministrationRole

  • AWSCloudFormationStackSetExecutionRole

Nota: Los roles deben tener estos nombres exactos.

  1. Cree el rol AWSCloudFormationStackSetAdministrationRole de IAM en la cuenta de administrador (principal) ejecutando el siguiente comando CLI:

    $cdk deploy CdkStackSetAdminRole --profile administrator
  2. Cree el rol AWSCloudFormationStackSetExecutionRole de IAM en todas las cuentas de destino en las que desee ejecutar las instancias de la pila. Para crear este rol, ejecute estos comandos de CLI:

    $cdk deploy CdkStackSetExecRole \ --parameters AdministratorAccountId=<administrator-account-ID> \ --profile administrator   $cdk deploy CdkStackSetExecRole \ --parameters AdministratorAccountId=<administrator-account-ID> \ --profile target

Para obtener más información, consulte Otorgar permisos autogestionados en la CloudFormation documentación de AWS.

DevOps ingeniero

Implemente la pila de CDK de AWS para habilitar DevOps Guru en varias cuentas.

La pila CdkDevopsGuruStackMultiAccReg de CDK de AWS crea conjuntos de pilas para implementar instancias de pila en varias cuentas y regiones. Para implementar la pila, ejecute el siguiente comando de la CLI con los parámetros especificados:

$cdk deploy CdkDevopsGuruStackMultiAccReg \ --profile administrator \ --parameters AdministratorAccountId=<administrator-account-ID> \ --parameters TargetAccountId=<target-account-ID> \ --parameters RegionIds="<region-1>,<region-2>"

Actualmente, Amazon DevOps Guru está disponible en las regiones de AWS que figuran en las preguntas frecuentes de DevOps Guru.

DevOps ingeniero
TareaDescripciónHabilidades requeridas

Extraiga los ID de OU.

En la consola de AWS Organizations, identifique los ID de las unidades organizativas en las que quiere habilitar DevOps Guru.

DevOps ingeniero

Habilite los permisos administrados por servicios para las OU.

Si utiliza AWS Organizations para la administración de cuentas, debe conceder permisos gestionados por el servicio para activar DevOps Guru. En lugar de crear las funciones de IAM manualmente, utilice funciones de acceso confiable y vinculadas a servicios (SLR) basadas en la organización.

DevOps ingeniero

Implemente la pila de CDK de AWS para habilitar DevOps Guru en todas las unidades organizativas.

La CdkDevopsguruStackOrgUnit pila de CDK de AWS permite el servicio DevOps Guru en todas las unidades organizativas. Para implementar la pila, ejecute el siguiente comando con los parámetros especificados:

$cdk deploy CdkDevopsguruStackOrgUnit \ --profile administrator \ --parameters RegionIds="<region-1>,<region-2>" \ --parameters OrganizationalUnitIds="<OU-1>,<OU-2>"
DevOps ingeniero
TareaDescripciónHabilidades requeridas

Implemente las pilas de CDK de AWS para crear roles de IAM.

Si aún no ha creado las funciones de IAM requeridas que se muestran en la primera opción, hágalo primero:

  1. Cree el rol AWSCloudFormationStackSetAdministrationRole de IAM en la cuenta de administrador (principal) ejecutando el siguiente comando CLI:

    $cdk deploy CdkStackSetAdminRole --profile administrator
  2. Cree el rol AWSCloudFormationStackSetExecutionRole de IAM en todas las cuentas de destino en las que desee ejecutar las instancias de la pila. Para crear este rol, ejecute los comandos CLI:

    $cdk deploy CdkStackSetExecRole \ --parameters AdministratorAccountId=<administrator-account-ID> \ --profile administrator $cdk deploy CdkStackSetExecRole \ --parameters AdministratorAccountId=<administrator-account-ID> \ --profile target

Para obtener más información, consulte Otorgar permisos autogestionados en la CloudFormation documentación de AWS.

DevOps ingeniero

Eliminar las pilas existentes.

Si ya utilizaste la primera opción para habilitar DevOps Guru para todos los recursos de la pila, puedes eliminar la pila anterior mediante el siguiente comando:

$cdk destroy CdkDevopsGuruStackMultiAccReg --profile administrator

O bien, puede cambiar el parámetro  RegionIds al volver a implementar la pila para evitar el error Las pilas ya existen.

DevOps ingeniero

Actualizar la pila de CDK de AWS con una lista de pilas.

  1. Edite el archivo /amazon-devopsguru-cdk-samples/lib/cdk-devopsguru-multi-acc-reg-spec-stack.ts.

  2. EnResources,CloudFormation,StackNames, enumera las pilas para las que quieres activar DevOps Guru. A modo de demostración, el parámetro especifique la pila CdkInfrastructureStack, pero puede editar esta entrada en función de sus necesidades.

  3. Guarde y cierre el archivo.

  4. Para sintetizar y actualizar la plantilla de pila, ejecute:

     $cdk synth
Ingeniero de datos

Implemente la pila de CDK de AWS para habilitar a DevOps Guru para disponer de recursos de pila específicos en varias cuentas.

La CdkDevopsGuruStackMultiAccRegSpecStacks pila de CDK de AWS permite a DevOps Guru disponer de recursos de pila específicos en varias cuentas. Para implementar la pila, ejecute el siguiente comando:

$cdk deploy CdkDevopsGuruStackMultiAccRegSpecStacks \ --profile administrator \ --parameters AdministratorAccountId=<administrator-account-ID> \ --parameters TargetAccountId=<target-account-ID> \ --parameters RegionIds="<region-1>,<region-2>"

Nota: Si ya implementó esta pila para la opción 1, cambie el parámetro RegionIds(asegúrese de elegir entre las regiones disponibles) para evitar el error de que las pilas ya existen.

DevOps ingeniero
TareaDescripciónHabilidades requeridas

Implemente el ejemplo del paquete de infraestructura sin servidor.

La CdkInfrastructureStack pila de CDK de AWS implementa componentes sin servidor, como API Gateway, Lambda y una tabla de DynamoDB para mostrar las ideas de Guru. DevOps Para implementar la pila, ejecute el siguiente comando: 

$cdk deploy CdkInfrastructureStack --profile administrator
DevOps ingeniero

Introducir registros de ejemplo en DynamoDB.

Ejecute el siguiente comando para rellenar la tabla de DynamoDB con registros de ejemplo. Proporcione la ruta correcta para el script populate-shops-dynamodb-table.json.

$aws dynamodb batch-write-item \ --request-items file://scripts/populate-shops-dynamodb-table.json \ --profile administrator

El comando muestra el resultado siguiente:

{ "UnprocessedItems": {} }
DevOps ingeniero

Compruebe los registros introducidos en DynamoDB.

Para comprobar que la tabla de DynamoDB incluye los registros de muestra del archivo populate-shops-dynamodb-table.json, acceda a a URL de la API ListRestApiEndpointMonitorOperator, que se publica como salida de la pila de CDK de AWS. También puede encontrar esta URL en la pestaña Salidas de la CloudFormation consola de AWS de la CdkInfrastructureStack pila. La salida de AWS CDK sería similar a la siguiente:

CdkInfrastructureStack.CreateRestApiMonitorOperatorEndpointD1D00045 = https://oure17c5vob.execute-api.<your-region>.amazonaws.com/prod/ CdkInfrastructureStack.ListRestApiMonitorOperatorEndpointABBDB8D8 = https://cdff8icfrn4.execute-api.<your-region>.amazonaws.com/prod/
DevOps ingeniero

Espere a que los recursos completen la línea de base.

Esta pila sin servidor tiene algunos recursos. Le recomendamos que espere 2 horas antes de realizar los siguientes pasos. Si implementó esta pila en un entorno de producción, es posible que se tarden hasta 24 horas en completar la línea base, según la cantidad de recursos que haya seleccionado para monitorear en DevOps Guru.

DevOps ingeniero
TareaDescripciónHabilidades requeridas

Actualizar la pila de infraestructuras CDK de AWS.

Para probar DevOps Guru Insights, puede realizar algunos cambios de configuración para reproducir un problema operativo típico.

  1. Edite el archivo /amazon-devopsguru-cdk-samples/lib/infrastructure-stack.ts.

  2. En la sección DDB Table, cambie la capacidad de lectura de la tabla de DynamoDB de 5 a 1.

  3. Guarde y cierre el archivo.

  4. Ejecute los siguientes comandos para sintetizar e implementar la pila de infraestructura CDK de AWS actualizada:

    $cdk synth $cdk deploy CdkInfrastructureStack --profile administrator
DevOps ingeniero

Introduzca solicitudes HTTP en la API.

Inyecta tráfico de entrada en forma de solicitudes HTTP en la API ListRestApiMonitorOperatorEndpointxxxx:

  1. Ejecute el script de Python /amazon-devopsguru-cdk-samples/scripts/sendAPIRequest.py.

  2. Actualiza la variable url con el enlace de la API para ListRestApiMonitorOperatorEndpointxxxx. Puede encontrar esta URL en la salida del comando de implementación de AWS CDK o en la consola de AWS Cloudformation, en la pestaña Salidas de la pila.

  3. Guarde y cierre el archivo.

  4. Ejecute el script de Python mediante el comando siguiente:

    $python sendAPIRequest.py
  5. Asegúrese de obtener un código de estado 200.

  6. Puede que necesite ejecutar el script a través de varios terminales (preferiblemente cuatro) para inyectar tráfico a una velocidad alta.

  7. Una vez que el script se ejecute aproximadamente 10 minutos seguidos, podrá ver una visión operativa en la consola DevOps Guru.

DevOps ingeniero

Revise las ideas de DevOps Guru.

En condiciones estándar, el panel de control de DevOps Guru muestra cero en el contador de información continua. Si detecta una anomalía, emite una alerta en forma de información. En el panel de navegación, selecciona Insights para ver los detalles de la anomalía, incluidos un resumen, métricas agregadas, eventos relevantes y recomendaciones. Para obtener más información sobre la revisión de información, consulte la entrada del blog Cómo obtener información operativa con AIOps mediante Amazon DevOps Guru.

DevOps ingeniero
TareaDescripciónHabilidades requeridas

Limpie y elimine recursos.

Después de seguir este patrón, debe eliminar los recursos que ha creado para evitar incurrir en cargos adicionales. Ejecute estos comandos:

$cdk destroy CdkDevopsGuruStackMultiAccReg --profile administrator $cdk destroy CdkDevopsguruStackOrgUnit --profile administrator $cdk destroy CdkDevopsGuruStackMultiAccRegSpecStacks --profile administrator $cdk destroy CdkInfrastructureStack --profile administrator $cdk destroy CdkStackSetAdminRole --profile administrator $cdk destroy CdkStackSetExecRole --profile administrator $cdk destroy CdkStackSetExecRole --profile target
DevOps ingeniero

Recursos relacionados