View a markdown version of this page

Introducción al AWS DevOps Agente que usa Terraform - AWS DevOps Agente

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.

Introducción al AWS DevOps Agente que usa Terraform

Descripción general de

Esta guía muestra cómo usar Terraform para crear e implementar los recursos del AWS DevOps agente. La configuración de Terraform automatiza la creación de un espacio de agentes, funciones de IAM, una aplicación de operador y asociaciones de cuentas. AWS

El enfoque de Terraform automatiza los pasos manuales descritos en la guía de incorporación de la CLI al definir todos los recursos necesarios como infraestructura y código.

AWS DevOps El agente está disponible en las 6 AWS regiones siguientes: EE.UU. Este (Norte de Virginia), EE.UU. Oeste (Oregón), Asia Pacífico (Sídney), Asia Pacífico (Tokio), Europa (Fráncfort) y Europa (Irlanda). Para obtener más información sobre las regiones compatibles, consulteRegiones admitidas.

Requisitos previos

Antes de empezar, asegúrese de que tiene lo siguiente:

  • Terraform >= 1.0 instalado

  • AWS CLI instalada y configurada con las credenciales apropiadas

  • Una AWS cuenta para la cuenta de supervisión (principal)

  • (Opcional) Una segunda AWS cuenta si quieres configurar la supervisión multicuenta

  • (Para la parte 4), versión 1.98.0 o posterior del awscc proveedor. Los awscc_devopsagent_trigger recursos awscc_devopsagent_asset y los recursos se agregaron en esa versión. Para comprobar la versión de su configuración, ejecuteterraform providers.

Qué cubre esta guía

Esta guía se divide en cuatro partes:

  • Parte 1: Implemente un espacio de agentes con una aplicación de operador y una AWS asociación en su cuenta de monitoreo. Tras completar esta parte, el agente puede supervisar los problemas de esa cuenta.

  • Parte 2 (opcional): añadir una AWS asociación de origen para una cuenta de servicio e implementar un rol de IAM multicuenta y un echo Lambda en esa cuenta. Esto permite que el espacio de agentes supervise los recursos de todas las cuentas.

  • Parte 3 (opcional): registre servicios de terceros (Dynatrace ServiceNow, Splunk, New Relic PagerDuty) y asócielos al espacio de agentes. GitLab

  • Parte 4 (opcional): añada una habilidad, un agente personalizado y un activador programado al espacio de agentes, de modo que el agente tenga conocimientos personalizados y el activador programado ejecute ese agente personalizado automáticamente.

Recursos creados

Parte 1: Supervisar la cuenta

  • Función de IAM (DevOpsAgentRole-AgentSpace-*): la asume el servicio de DevOps agentes para supervisar la cuenta. Incluye la política AIDevOpsAgentAccessPolicy gestionada y una política integrada que permite la creación de la función vinculada al servicio Resource Explorer. Se crea solo cuando no existing_agentspace_role_arn está configurado.

  • Función de IAM (DevOpsAgentRole-WebappAdmin-*): función de operador de la aplicación con la política AIDevOpsOperatorAppAccessPolicy gestionada para las operaciones de los agentes. Se crea solo cuando no existing_operator_role_arn está configurado.

  • Espacio de agentes (nombre configurable): el espacio de agente central, creado con el awscc_devopsagent_agent_space recurso. Incluye la configuración de la aplicación de operador.

  • Asociación (AWS monitor): vincula la cuenta de monitoreo al espacio de agentes que utiliza el awscc_devopsagent_association recurso.

  • Asociación (AWS fuente): (opcional) vincula la cuenta de servicio al espacio de agentes para la supervisión entre cuentas.

Parte 2: Cuenta de servicio (opcional)

  • Función de IAM (DevOpsAgentRole-SecondaryAccount-TF): Cross-account función con un nombre fijo. El espacio de agentes de la cuenta de monitoreo confía en nosotros. Incluye la política AIDevOpsAgentAccessPolicy gestionada y una política integrada que permite la creación de la función vinculada al servicio Resource Explorer.

  • Función Lambda (echo-service-tf): un servicio de ejemplo sencillo que repite los eventos de entrada.

Parte 4: Activos y activadores (opcional)

Esta configuración crea los siguientes recursos:

  • Habilidad (rds-performance-investigation): habilidad que el agente carga cuando es relevante y se crea con el awscc_devopsagent_asset recurso con un asset_type deskill.

  • Agente personalizado (rds-firefighter): asigna al agente a un flujo de trabajo específico con las habilidades asociadas, creado con el awscc_devopsagent_asset recurso con un asset_type decustom_agent.

  • Trigger (TIME_BASED): ejecuta el agente personalizado según un cronograma, creado con el awscc_devopsagent_trigger recurso.

Configuración

Paso 1: clona el repositorio de muestras

git clone https://github.com/aws-samples/sample-aws-devops-agent-terraform.git cd sample-aws-devops-agent-terraform

Paso 2: Configurar las variables

Copie el archivo de variables de ejemplo y personalícelo para su entorno:

cp terraform.tfvars.example terraform.tfvars

terraform.tfvarsEdítelo con el nombre y la descripción de su espacio de agente:

agent_space_name = "MyCompanyAgentSpace" agent_space_description = "DevOps Agent Space for monitoring production workloads"

Parte 1: Despliegue el espacio de agentes

En esta sección, crea el espacio de agentes, las funciones de IAM, la aplicación de operador y una AWS asociación en su cuenta de monitoreo.

Utilice el script de implementación proporcionado para una configuración simplificada:

./deploy.sh

Este script automáticamente:

  • Comprueba los requisitos previos (Terraform, AWS CLI, credenciales)

  • Crea a terraform.tfvars partir de un ejemplo si es necesario

  • Inicializa, valida, planifica y aplica Terraform

Como alternativa, si prefieres el control manual:

terraform init terraform plan terraform apply

Escriba yes cuando se le pida que confirme la implementación.

Paso 2: Registre las salidas

Una vez completada la implementación, Terraform imprime las salidas. Registre estos valores para usarlos más adelante:

Outputs: agent_space_id = "abc123" agent_space_arn = "arn:aws:aidevops:<REGION>:<MONITORING_ACCOUNT_ID>:agentspace/abc123" agent_space_name = "MyCompanyAgentSpace" devops_agentspace_role_arn = "arn:aws:iam::<MONITORING_ACCOUNT_ID>:role/DevOpsAgentRole-AgentSpace-a1b2c3d4" devops_operator_role_arn = "arn:aws:iam::<MONITORING_ACCOUNT_ID>:role/DevOpsAgentRole-WebappAdmin-a1b2c3d4" primary_account_id = "<MONITORING_ACCOUNT_ID>" primary_account_association_id = "assoc-xyz"

Si planea completar la parte 2, guarde el agent_space_arn valor. Lo necesitará para configurar los recursos de la cuenta de servicio.

Paso 3: Verifique la implementación

Ejecute el script de verificación posterior a la implementación:

./post-deploy.sh

O utilice la AWS CLI para comprobar que el espacio de agente se creó correctamente:

aws devops-agent get-agent-space \ --agent-space-id <AGENT_SPACE_ID> \ --region <REGION>

En este punto, su espacio de agente está desplegado con la aplicación del operador habilitada y su cuenta de monitoreo asociada. El agente puede supervisar los problemas de esta cuenta.

Parte 2 (opcional): añadir la supervisión multicuenta

En esta sección, ampliará la configuración para que el espacio de agentes pueda supervisar los recursos de una segunda AWS cuenta (la cuenta de servicio). Esto implica dos acciones:

  1. Agregar una AWS asociación de origen que apunte a la cuenta de servicio.

  2. Implementar una función de IAM multicuenta y una función echo Lambda en la cuenta de servicio.

importante

Debe completar la parte 1 antes de continuar. Los recursos de la cuenta de servicio requieren el resultado agent_space_arn de la implementación de la primera parte.

Paso 1: Configurar el ID de la cuenta de servicio

Enterraform.tfvars, configura el ID de tu cuenta de servicio:

service_account_id = "<YOUR_SERVICE_ACCOUNT_ID>"

Paso 2: Configura el ARN del espacio de agente

Copie el agent_space_arn valor del resultado de la primera parte (paso 2) y configúrelo enterraform.tfvars:

agent_space_arn = "arn:aws:aidevops:<REGION>:<MONITORING_ACCOUNT_ID>:agentspace/<SPACE_ID>"

Los recursos de la cuenta de servicio utilizan este valor para definir el alcance de la política de confianza en el rol de la cuenta secundaria. Estos recursos solo se crean cuando se establece este valor.

Paso 3: Configurar el proveedor `aws.service`

Enmain.tf, configure el alias del aws.service proveedor con las credenciales de la cuenta de servicio. Puede usar un perfil con nombre o asumir un rol:

Uso de un perfil:

provider "aws" { alias = "service" region = var.aws_region profile = "your-service-account-profile" }

O usando la función de asumir el rol:

provider "aws" { alias = "service" region = var.aws_region assume_role { role_arn = "arn:aws:iam::<SERVICE_ACCOUNT_ID>:role/OrganizationAccountAccessRole" } }

Paso 4: Despliegue

Aplique la configuración actualizada:

terraform apply

Esto crea los siguientes recursos en la cuenta de servicio:

  • Un rol de IAM (DevOpsAgentRole-SecondaryAccount-TF) que confía en el espacio de agente de la cuenta de monitoreo

  • Una función echo Lambda (echo-service-tf) como servicio de ejemplo

También crea una AWS asociación de origen en la cuenta de monitoreo que vincula la cuenta de servicio.

Paso 5: Verificar la implementación

Pruebe el servicio echo para confirmar que la función Lambda se implementó correctamente:

aws lambda invoke \ --function-name echo-service-tf \ --payload '{"test": "hello world"}' \ --profile <your-service-account-profile> \ --region <REGION> \ response.json cat response.json

Parte 3 (opcional): registre las integraciones de terceros

En esta sección, registras los servicios externos (Dynatrace, Splunk ServiceNow, New Relic GitLab, PagerDuty) en el espacio de agentes. Estas integraciones permiten al AWS DevOps Agente acceder a la telemetría, a los datos de incidentes y a la información de control de fuentes durante las investigaciones.

A diferencia del ejemplo del AWS CDK, que requiere una IntegrationsStack fase separada y un cableado manual del identificador del espacio de agentes, estos recursos hacen referencia directa al espacio de agentes y se pueden implementar de la misma terraform apply manera que en la parte 1.

Integraciones compatibles

Servicio Tipo de servicio Autenticación
Dynatrace dynatrace Credenciales del cliente OAuth
ServiceNow servicenow Credenciales del cliente OAuth
Splunk mcpserversplunk Token de portador
New Relic mcpservernewrelic Clave de API
GitLab gitlab Token de acceso
PagerDuty pagerduty Credenciales del cliente OAuth
nota

Datadog no está incluido en la configuración de Terraform. La conexión a Datadog requiere la autorización OAuth interactiva del usuario (inicio de sesión y consentimiento del navegador), tal como se describe en la sección, que Terraform no puede automatizar. Conectando DataDog Registra Datadog manualmente a través de la página de proveedores de capacidades de la consola.

Paso 1: configurar las credenciales de integración

Agregue un integrations bloque aterraform.tfvars, rellenando solo los servicios que desee. El siguiente ejemplo muestra una integración de Dynatrace:

integrations = { dynatrace = { account_urn = "<DYNATRACE_ACCOUNT_URN>" client_id = "<DYNATRACE_CLIENT_ID>" client_name = "<DYNATRACE_CLIENT_NAME>" client_secret = "<DYNATRACE_CLIENT_SECRET>" env_id = "<DYNATRACE_ENVIRONMENT_ID>" resources = ["<DYNATRACE_RESOURCE_1>"] } }

Para ver la forma completa de cada integración, consulte el terraform.tfvars.example repositorio de ejemplos.

ServiceNow requisito: defina siempre de instance_id forma explícita el nombre corto de la instancia (por ejemplo"ven04972", no el nombre completoinstance_url). Si instance_id se omite, se recurre a la asociacióninstance_url, que la API del DevOps agente rechaza con un400 GeneralServiceException: instanceId '<url>' does not match the registered ServiceNow instance.

Seguridad: la integrations variable está marcadasensitive, por lo que sus valores se eliminan del resultado del plan y la aplicación. No asigne credenciales reales aterraform.tfvars. Para la producción, obtenga AWS secretos de Secrets Manager o AWS Systems Manager Parameter Store (por ejemplo, utilizando data fuentes) en lugar de texto sin formato.

Paso 2: Despliegue

Aplique la configuración:

terraform apply

Esto crea un registro y una asociación de servicios para cada integración habilitada.

Paso 3: Revise los resultados

Una vez finalizada la implementación, los resultados de la integración asignan cada servicio habilitado a sus ID registrados:

integration_service_ids = { "dynatrace" = "service-abc123" } integration_association_ids = { "dynatrace" = "assoc-xyz789" }

Para obtener más información sobre la configuración de las credenciales para cada servicio, consulta:

Parte 4 (opcional): añada una habilidad, un agente personalizado y un activador programado

En esta sección, agrega tres recursos al espacio de agente que creó en la parte 1. Añada una habilidad que el agente cargue cuando sea relevante y un agente personalizado que asigne al agente un flujo de trabajo específico. También añades un activador programado que ejecuta el agente personalizado de forma automática. Estos recursos utilizan los awscc_devopsagent_trigger recursos awscc_devopsagent_asset y.

Estos recursos pueden generar cargos adicionales en tu AWS cuenta. Para eliminarlos cuando hayas terminado, sigue la sección Limpieza que aparece al final de esta guía.

En este ejemplo se utilizan los tipos de custom_agent activos skill y. El mismo awscc_devopsagent_asset recurso crea todos los tipos de activosmemory_store, comoagents_md, y. attachment Para usar un tipo diferente, cambie el asset_type argumento y proporcione los metadatos que requiere ese tipo. Para obtener la lista completa de los tipos de activos, sus metadatos necesarios y la referencia a la propiedad, consulteAdministración de activos.

importante

Debe completar la primera parte antes de continuar. Estos recursos requieren el ID de espacio de agente de la implementación de la primera parte.

Paso 1: Agregar la configuración

Cree un archivo denominado assets.tf con el siguiente contenido. La acción de un activador basada en el tiempo hace referencia al agente personalizado por el ID de activo, en el formulariocustom:<assetId>. La configuración lo transfiere automáticamente desde el asset_id atributo del agente personalizado. La skills lista de agentes personalizados también toma los ID de los activos en lugar de los nombres, por lo que hace referencia al asset_id atributo de la habilidad. Esto también le da a Terraform una dependencia implícita, por lo que la habilidad se crea antes que el agente que la adjunta.

Tenga en cuenta que los action argumentos metadata y son documentos JSON que se pasan como cadenas, por lo que este ejemplo usa. jsonencode

variable "agent_space_id" { type = string description = "The agent space ID from the Part 1 output" } # A skill the agent loads when relevant resource "awscc_devopsagent_asset" "example_skill" { agent_space_id = var.agent_space_id asset_type = "skill" metadata = jsonencode({ name = "rds-performance-investigation" description = "Investigation procedures for RDS performance issues." agent_types = ["GENERIC"] }) files = [{ path = "SKILL.md" content_text = <<-EOT # RDS Performance Investigation Use this skill when investigating database latency, connection errors, or query timeouts. EOT }] } # A custom agent with attached skills that a trigger can invoke resource "awscc_devopsagent_asset" "example_custom_agent" { agent_space_id = var.agent_space_id asset_type = "custom_agent" metadata = jsonencode({ name = "rds-firefighter" skills = [awscc_devopsagent_asset.example_skill.asset_id] }) files = [{ path = "AGENT.md" content_text = <<-EOT # RDS Firefighter Custom agent for RDS incidents. EOT }] } # A time-based trigger that runs the custom agent on a schedule resource "awscc_devopsagent_trigger" "daily" { agent_space_id = var.agent_space_id type = "TIME_BASED" condition = { schedule = { expression = "rate(1 day)" } } action = jsonencode({ actionType = "create:task" task = { agent = "custom:${awscc_devopsagent_asset.example_custom_agent.asset_id}" } }) status = "Active" } output "skill_asset_id" { description = "The skill asset ID" value = awscc_devopsagent_asset.example_skill.asset_id } output "custom_agent_asset_id" { description = "The custom agent asset ID" value = awscc_devopsagent_asset.example_custom_agent.asset_id } output "trigger_id" { description = "The trigger ID" value = awscc_devopsagent_trigger.daily.trigger_id }

Si lo añades al repositorio de muestras, puedes hacer referencia directamente al recurso del espacio de agentes en lugar de declarar la agent_space_id variable.

Paso 2: Despliegue

Defina el ID del espacio de terraform.tfvars agente utilizando el agent_space_id valor del resultado de la primera parte:

agent_space_id = "<AGENT_SPACE_ID>"

Aplique la configuración:

terraform apply

Los asset_type argumentos agent_space_id y de un activo son de solo creación, al igual que los action argumentos agent_space_id typecondition, y de un activador. Al cambiar cualquiera de ellos, se reemplaza el recurso. Puedes actualizar el desencadenador status (ActiveoInactive) en su lugar; configurarlo Inactive para pausar el desencadenador sin eliminarlo.

Paso 3: Verificar la implementación

Para confirmar que se crearon los activos y el activador, ejecute los siguientes comandos de la AWS CLI:

aws devops-agent list-assets \ --agent-space-id <AGENT_SPACE_ID> \ --region <REGION> aws devops-agent list-triggers \ --agent-space-id <AGENT_SPACE_ID> \ --region <REGION>

Uso de las funciones de IAM existentes (opcional)

De forma predeterminada, la configuración de Terraform crea nuevas funciones de IAM para el espacio de agentes y la aplicación de operador. Si ya tiene funciones de IAM con las políticas necesarias, puede omitir la creación de funciones y, en su lugar, proporcionar los ARN de las funciones existentes.

Requisitos

Los roles existentes deben cumplir los siguientes requisitos:

Función de espacio de agente

  • La política de confianza aidevops.amazonaws.com permite asumir el rol de sts:AssumeRole

  • ¿Tiene adjunta la política AIDevOpsAgentAccessPolicy gestionada

  • (Opcional) Tiene una política integrada que permite la creación de la función vinculada al servicio Resource Explorer

Función de aplicación de operador

  • La política de confianza aidevops.amazonaws.com permite asumir el rol con sts:AssumeRole y sts:TagSession

  • ¿Tiene adjunta la política AIDevOpsOperatorAppAccessPolicy gestionada

Configuración

Enterraform.tfvars, defina uno o ambos ARN de rol:

existing_agentspace_role_arn = "arn:aws:iam::ACCOUNT_ID:role/YourAgentSpaceRole" existing_operator_role_arn = "arn:aws:iam::ACCOUNT_ID:role/YourOperatorRole"

Cuando se establecen estos valores, se iam.tf omiten los recursos de rol correspondientes. Este enfoque es totalmente compatible con versiones anteriores: las configuraciones existentes con valores vacíos (los valores predeterminados) conservan el comportamiento actual de creación de roles.

Resolución de problemas

Retrasos en la propagación de IAM

  • La configuración incluye un intervalo de 30 segundos time_sleep entre la creación del rol de IAM y la creación del espacio de agente. El servicio de DevOps agente valida la política de confianza del rol de operador durante la creación de Agent Space, y esto puede fallar si IAM no se ha propagado por completo. Si sigues viendo errores en la política de confianza, espera un minuto y terraform apply vuelve a ejecutarla. Las funciones de IAM ya existirán y la solicitud se reanudará donde la dejó.

ServiceNow instanceId does not matcherror

  • Establezca instance_id explícitamente en el bloque de service_now integración el nombre corto de la instancia (por ejemplo,"ven04972"), no el completoinstance_url. Consulta la nota de la parte 3 más arriba.

Asociación Dynatrace status: invalid

  • Si se terraform apply realiza correctamente, pero la asociación resultante se notifica status = "invalid" (visible mediante aws devops-agent get-association o desde la consola), esto indica que Dynatrace rechazó las credenciales del cliente de OAuth. Double-check client_idclient_secret, y account_urn contra la cuenta de Dynatrace, y no contra un problema de configuración de Terraform.

Errores de permisos

  • Compruebe que sus AWS credenciales tengan los permisos de IAM necesarios para crear funciones y políticas.

  • Comprueba que las condiciones de la política de confianza coincidan con el identificador de tu cuenta.

Cross-account la implementación falla

  • El aws.service proveedor debe estar configurado con las credenciales de la cuenta de servicio. Utilice un perfil con nombre o un bloque de asunción de roles.

  • Verifique que el agent_space_arn valor coincida con el ARN de la salida de la primera parte.

No se encontró el tipo de recurso de Terraform

  • Compruebe que tiene la versión del awscc proveedor ~> 1.0 o una posterior. Los awscc_devopsagent_association recursos awscc_devopsagent_agent_space y los recursos requieren el proveedor de AWS Cloud Control.

  • Los awscc_devopsagent_trigger recursos awscc_devopsagent_asset y los recursos utilizados en la parte 4 requieren la versión 1.98.0 o posterior del awscc proveedor. Ejecute terraform providers para comprobar su versión y ejecútelo terraform init -upgrade después de aumentar la restricción de versión.

Limpieza

Si has completado la parte 4, elimina la habilidad, el agente personalizado y actívala primero. A diferencia de la guía del AWS CDK, que coloca estos recursos en una pila separada, assets.tf forma parte de la misma configuración de Terraform, por lo que una simple guía terraform destroy elimina el espacio de agente junto con ellos. Elimine assets.tf y aplique el cambio para eliminar solo los recursos de la Parte 4:

rm assets.tf terraform apply

Para conservar el archivo, diríjase a los tres recursos en su lugar:

terraform destroy \ -target=awscc_devopsagent_trigger.daily \ -target=awscc_devopsagent_asset.example_custom_agent \ -target=awscc_devopsagent_asset.example_skill

Al eliminar solo estos recursos, el espacio del agente permanece intacto. Hágalo si ha utilizado la parte 4 en un espacio de agente que comparte con otras personas o que no creó en la parte 1.

Para eliminar todo lo demás, destrúyalo en orden inverso si desplegó la parte 2:

./cleanup.sh

O manualmente:

terraform destroy

Advertencia: Esto elimina permanentemente tu espacio de agente y todos los datos asociados. Asegúrese de haber realizado una copia de seguridad de toda la información importante antes de continuar.

Consideraciones de seguridad

  • La configuración de Terraform crea funciones de IAM con políticas de confianza que solo permiten que el principal del aidevops.amazonaws.com servicio las asuma.

  • Las políticas de confianza incluyen condiciones que restringen el acceso a su AWS cuenta y espacio de agente específicos (ARN).

  • Todas las políticas siguen el principio de privilegio mínimo. Revisa y personaliza las políticas de IAM en función de los requisitos de seguridad de tu organización.

  • El rol multicuenta (DevOpsAgentRole-SecondaryAccount-TF) usa un nombre fijo y se limita a un ARN de espacio de agentes específico.

Siguientes pasos

Una vez que haya desplegado su AWS DevOps agente con Terraform:

  1. Obtenga más información sobre la gama completa de capacidades del DevOps agente en la guía del usuario del AWS DevOps agente.

  2. Considere la posibilidad de integrar la implementación de Terraform en sus CI/CD procesos para una administración automatizada de la infraestructura.

Recursos adicionales