

# Observabilidad de aplicaciones para la acción de AWS
<a name="Service-Application-Observability-for-AWS-GitHub-Action"></a>

La observabilidad de aplicaciones para la GitHub Action de AWS proporciona un flujo de trabajo integral de investigación de la observabilidad de aplicaciones que conecta el código fuente y los datos de telemetría de producción en vivo con el agente de IA. Aprovecha los MCP de CloudWatch y genera peticiones personalizadas para proporcionar el contexto que los agentes de IA necesitan para solucionar problemas y aplicar correcciones de código.

La acción configura el [servidor MCP de CloudWatch Application Signals](https://awslabs.github.io/mcp/servers/cloudwatch-applicationsignals-mcp-server) y el [servidor MCP de CloudWatch](https://awslabs.github.io/mcp/servers/cloudwatch-applicationsignals-mcp-server), lo que les permite acceder a los datos de telemetría en vivo como contexto de solución de problemas. Para investigar el rendimiento de las aplicaciones, puede utilizar el modelo de IA que prefiera, ya sea mediante su propia clave de API, un modelo de terceros o Amazon Bedrock.

Para comenzar, mencione `@awsapm` en los problemas de GitHub para activar el agente de IA. El agente solucionará los problemas de producción, implementará correcciones y mejorará la cobertura de observabilidad en función de los datos de la aplicación en vivo.

Esta acción en sí no supone ningún costo directo. Sin embargo, el uso de esta acción puede generar cargos por los servicios de AWS y el uso del modelo de IA. Consulte la [documentación sobre consideraciones de costos](https://github.com/marketplace/actions/application-observability-for-aws#-cost-considerations) para obtener información detallada sobre los posibles costos.

## Introducción
<a name="Service-Application-Observability-for-AWS-GitHub-Action-getting-started"></a>

Esta acción configura los agentes de IA dentro del flujo de trabajo de GitHub mediante la generación de configuraciones de MCP específicas de AWS y peticiones de observabilidad personalizadas. Solo necesita proporcionar el rol de IAM que se asumirá y un [ID de modelo de Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html) que desee usar o un token de API de la suscripción del LLM actual. En el siguiente ejemplo, se muestra una plantilla de flujo de trabajo que integra esta acción con la acción basada en [claude-code-base-action de Anthropic](https://github.com/anthropics/claude-code-base-action) para llevar a cabo investigaciones automatizadas.

### Requisitos previos
<a name="Service-Application-Observability-for-AWS-GitHub-Action-prerequisites"></a>

Antes de comenzar, asegúrese de que dispone de lo siguiente:
+ **Permisos del repositorio de GitHub**: acceso de escritura o superior al repositorio (necesario para activar la acción)
+ **Rol de AWS IAM**: rol de IAM configurado con OpenID Connect (OIDC) para GitHub Actions con permisos para lo siguiente:
  + Acceso a CloudWatch Application Signals y CloudWatch
  + Acceso al modelo de Amazon Bedrock (si se utilizan modelos de Bedrock)
+ **Token de GitHub**: el flujo de trabajo usa automáticamente GITHUB\$1TOKEN con los permisos necesarios

### Pasos de configuración
<a name="Service-Application-Observability-for-AWS-GitHub-Action-setup-steps"></a>

#### Paso 1: configuración de las credenciales de AWS
<a name="Service-Application-Observability-for-AWS-GitHub-Action-step1"></a>

Esta acción se basa en la acción [aws-actions/configure-aws-credentials](https://github.com/aws-actions/configure-aws-credentials) para configurar la autenticación de AWS en el entorno de GitHub Actions. Recomendamos usar OpenID Connect (OIDC) para autenticarse con AWS. OIDC permite que los flujos de trabajo de GitHub Actions accedan a los recursos de AWS mediante credenciales de AWS de corta duración, por lo que no tiene que almacenar credenciales a largo plazo en el repositorio.

1. **Creación de un proveedor de identidades de IAM**

   Primero, cree un proveedor de identidades de IAM que confíe en el punto de conexión de OIDC de GitHub en la Consola de administración de AWS:

   1. Apertura de la consola de IAM

   1. Elija **Proveedores de identidades** en **Administración de acceso**.

   1. Haga clic en **Agregar proveedor** para agregar el proveedor de identidades de GitHub si aún no se ha creado.

   1. Seleccione el tipo de proveedor de identidades de **OpenID Connect**.

   1. Ingrese `https://token.actions.githubusercontent.com` en el cuadro de entrada **URL de proveedor**.

   1. Ingrese `sts.amazonaws.com` en el cuadro de entrada **Audiencia**.

   1. Haga clic en **Agregar proveedor**.

1. **Crear una política de IAM**

   Cree una política de IAM con los permisos necesarios para esta acción. Consulte la sección [Permisos necesarios](#Service-Application-Observability-for-AWS-GitHub-Action-required-permissions) a continuación para obtener más información.

1. **Creación de un rol de IAM**

   Cree un rol de IAM (por ejemplo, `AWS_IAM_ROLE_ARN`) en la Consola de administración de AWS con la siguiente plantilla de política de confianza. Esto permite que los repositorios de GitHub autorizados asuman el rol:

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Federated": "arn:aws:iam::<AWS_ACCOUNT_ID>:oidc-provider/token.actions.githubusercontent.com"
         },
         "Action": "sts:AssumeRoleWithWebIdentity",
         "Condition": {
           "StringEquals": {
             "token.actions.githubusercontent.com:aud": "sts.amazonaws.com"
           },
           "StringLike": {
             "token.actions.githubusercontent.com:sub": "repo:<GITHUB_ORG>/<GITHUB_REPOSITORY>:ref:refs/heads/<GITHUB_BRANCH>"
           }
         }
       }
     ]
   }
   ```

   Reemplace los marcadores de posición siguientes en la plantilla:
   + `<AWS_ACCOUNT_ID>`: ID de cuenta de AWS
   + `<GITHUB_ORG>`: nombre de la organización de GitHub
   + `<GITHUB_REPOSITORY>`: nombre del repositorio
   + `<GITHUB_BRANCH>`: nombre de la ramificación (por ejemplo, principal)

1. **Adjunción de la política de IAM**

   En la pestaña Permisos del rol, adjunte la política de IAM que creó en el paso 2.

Para obtener más información sobre cómo configurar OIDC con AWS, consulte la [Guía de inicio rápido de OIDC de configure-aws-credentials](https://github.com/aws-actions/configure-aws-credentials/tree/main?tab=readme-ov-file#quick-start-oidc-recommended).

#### Paso 2: configuración de secretos y adición del flujo de trabajo
<a name="Service-Application-Observability-for-AWS-GitHub-Action-step2"></a>

1. **Configuración de secretos del repositorio**

   Vaya al repositorio → Configuración → Secretos y variables → Acciones.
   + Cree un nuevo secreto de repositorio denominado `AWS_IAM_ROLE_ARN` y establezca su valor en el ARN del rol de IAM que creó en el paso 1.
   + (Opcional) Cree una variable de repositorio denominada `AWS_REGION` para especificar la región de AWS (el valor predeterminado es `us-east-1` si no se estableció).

1. **Adición del archivo de flujo de trabajo**

   A continuación se muestra un ejemplo de flujo de trabajo que demuestra el uso de esta acción con los modelos de Amazon Bedrock. Cree un flujo de trabajo de investigación de observabilidad de aplicaciones a partir de esta plantilla en el directorio de repositorios de GitHub `.github/workflows`.

   ```
   name: Application observability for AWS
   
   on:
     issue_comment:
       types: [created, edited]
     issues:
       types: [opened, assigned, edited]
   
   jobs:
     awsapm-investigation:
       if: |
         (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@awsapm')) ||
         (github.event_name == 'issues' && (contains(github.event.issue.body, '@awsapm') || contains(github.event.issue.title, '@awsapm')))
       runs-on: ubuntu-latest
   
       permissions:
         contents: write        # To create branches for PRs
         pull-requests: write   # To post comments on PRs
         issues: write          # To post comments on issues
         id-token: write        # Required for AWS OIDC authentication
   
       steps:
         - name: Checkout repository
           uses: actions/checkout@v4
   
         - name: Configure AWS credentials
           uses: aws-actions/configure-aws-credentials@v4
           with:
             role-to-assume: ${{ secrets.AWS_IAM_ROLE_ARN }}
             aws-region: ${{ vars.AWS_REGION || 'us-east-1' }}
   
         # Step 1: Prepare AWS MCP configuration and investigation prompt
         - name: Prepare Investigation Context
           id: prepare
           uses: aws-actions/application-observability-for-aws@v1
           with:
             bot_name: "@awsapm"
             cli_tool: "claude_code"
   
         # Step 2: Execute investigation with Claude Code
         - name: Run Claude Investigation
           id: claude
           uses: anthropics/claude-code-base-action@beta
           with:
             use_bedrock: "true"
             # Set to any Bedrock Model ID
             model: "us.anthropic.claude-sonnet-4-5-20250929-v1:0"
             prompt_file: ${{ steps.prepare.outputs.prompt_file }}
             mcp_config: ${{ steps.prepare.outputs.mcp_config_file }}
             allowed_tools: ${{ steps.prepare.outputs.allowed_tools }}
   
         # Step 3: Post results back to GitHub issue/PR (reuse the same action)
         - name: Post Investigation Results
           if: always()
           uses: aws-actions/application-observability-for-aws@v1
           with:
             cli_tool: "claude_code"
             comment_id: ${{ steps.prepare.outputs.awsapm_comment_id }}
             output_file: ${{ steps.claude.outputs.execution_file }}
             output_status: ${{ steps.claude.outputs.conclusion }}
   ```

   **Nota sobre la configuración:**
   + Este flujo de trabajo se activa automáticamente cuando `@awsapm` se menciona en un problema o comentario.
   + El flujo de trabajo utiliza el secreto `AWS_IAM_ROLE_ARN` configurado en el paso anterior.
   + Actualice el parámetro del modelo en el paso 2 para especificar el ID de modelo preferido de Amazon Bedrock.
   + Puede personalizar el nombre del bot (por ejemplo, `@awsapm-prod`, `@awsapm-staging`) en el parámetro bot\$1name para que sea compatible con diferentes entornos.

#### Paso 3: inicio del uso de la acción
<a name="Service-Application-Observability-for-AWS-GitHub-Action-step3"></a>

Una vez que el flujo de trabajo esté configurado, mencione `@awsapm` en cualquier problema de GitHub para activar una investigación basada en IA. La acción analizará la solicitud, accederá a los datos de telemetría en vivo y proporcionará recomendaciones o implementará correcciones automáticamente.

**Ejemplos de casos de uso:**

1. Investigue los problemas de rendimiento, publique y corrija:

   `@awsapm, can you help me investigate availability issues in my appointment service?`  
![\[alt text not found\]](http://docs.aws.amazon.com/es_es/AmazonCloudWatch/latest/monitoring/images/github-availability-issue-investigate.png)

   `@awsapm, can you post a fix?`  
![\[alt text not found\]](http://docs.aws.amazon.com/es_es/AmazonCloudWatch/latest/monitoring/images/github-availability-issue-pr-fix.png)

1. Active la instrumentación:

   `@awsapm, please enable Application Signals for lambda-audit-service and create a PR with the required changes.`

1. Consulte datos de telemetría:

   `@awsapm, how many GenAI tokens have been consumed by my services in the past 24 hours?`

**Qué ocurre a continuación:**

1. El flujo de trabajo detecta la mención `@awsapm` y activa la investigación.

1. El agente de IA accede a los datos de telemetría de AWS en vivo a través de los servidores MCP configurados.

1. El agente analiza el problema y puede:
   + Publicar los resultados y las recomendaciones directamente en el problema.
   + Crear una solicitud de extracción con cambios en el código (para la instrumentación o correcciones).

1. Para revisar los resultados y continuar la conversación, vuelva a mencionar @awsapm con preguntas de seguimiento.

## Seguridad
<a name="Service-Application-Observability-for-AWS-GitHub-Action-security"></a>

Esta acción prioriza la seguridad con controles de acceso estrictos, una autenticación de AWS basada en OIDC y protecciones integradas contra ataques de inyección de peticiones. Solo los usuarios con acceso de escritura o superior pueden activar la acción, y todas las operaciones se limitan al repositorio específico.

Para obtener información de seguridad detallada, que incluye:
+ Requisitos de control de acceso y permisos
+ Permisos de AWS IAM y configuración de OIDC
+ Riesgos y mitigaciones de la inyección de peticiones
+ Prácticas recomendadas de seguridad

Consulte la [documentación sobre seguridad](https://github.com/aws-actions/application-observability-for-aws/blob/main/docs/security.md).

## Configuración
<a name="Service-Application-Observability-for-AWS-GitHub-Action-configuration"></a>

### Permisos necesarios
<a name="Service-Application-Observability-for-AWS-GitHub-Action-required-permissions"></a>

El rol de IAM que asume GitHub Actions debe tener los siguientes permisos.

**Nota**: `bedrock:InvokeModel` y `bedrock:InvokeModelWithResponseStream` solo son obligatorios si utiliza modelos Amazon Bedrock.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "application-signals:ListServices",
                "application-signals:GetService",
                "application-signals:ListServiceOperations",
                "application-signals:ListServiceLevelObjectives",
                "application-signals:GetServiceLevelObjective",
                "application-signals:ListAuditFindings",
                "cloudwatch:DescribeAlarms",
                "cloudwatch:DescribeAlarmHistory",
                "cloudwatch:ListMetrics",
                "cloudwatch:GetMetricData",
                "cloudwatch:GetMetricStatistics",
                "logs:DescribeLogGroups",
                "logs:DescribeQueryDefinitions",
                "logs:ListLogAnomalyDetectors",
                "logs:ListAnomalies",
                "logs:StartQuery",
                "logs:StopQuery",
                "logs:GetQueryResults",
                "logs:FilterLogEvents",
                "xray:GetTraceSummaries",
                "xray:GetTraceSegmentDestination",
                "xray:BatchGetTraces",
                "xray:ListRetrievedTraces",
                "xray:StartTraceRetrieval",
                "servicequotas:GetServiceQuota",
                "synthetics:GetCanary",
                "synthetics:GetCanaryRuns",
                "s3:GetObject",
                "s3:ListBucket",
                "iam:GetRole",
                "iam:ListAttachedRolePolicies",
                "iam:GetPolicy",
                "iam:GetPolicyVersion",
                "bedrock:InvokeModel",
                "bedrock:InvokeModelWithResponseStream"
            ],
            "Resource": "*"
        }
    ]
}
```

## Documentación
<a name="Service-Application-Observability-for-AWS-GitHub-Action-documentation"></a>

Para obtener más información, consulte:
+ [Documentación de CloudWatch Application Signals](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Application-Monitoring-Intro.html): más información sobre las características y capacidades de CloudWatch Application Signals
+ [Documentación de Observabilidad de aplicaciones para la acción de AWS](https://github.com/marketplace/actions/application-observability-for-aws): guías y tutoriales detallados