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 a la aplicación de ejemplo Scorekeep
nota
X-Ray SDK/Daemon Aviso de mantenimiento: el 25 de febrero de 2026, AWS X-Ray SDKs/Daemon entrará en modo de mantenimiento, donde las versiones de X-Ray SDK y Daemon AWS se limitarán únicamente a solucionar problemas de seguridad. Para obtener más información sobre la cronología del soporte, consulte Cronología de X-Ray SDK y Daemon Support. Recomendamos migrar a. OpenTelemetry Para obtener más información sobre la migración a OpenTelemetry, consulte Migración de una X-Ray instrumentación a otra. OpenTelemetry
Este tutorial utiliza la xray-gettingstarted rama de la aplicación de ejemplo Scorekeep, que se utiliza CloudFormation para crear y configurar los recursos que ejecutan la aplicación y el daemon de muestra en Amazon ECS. X-Ray La aplicación utiliza el marco Spring para implementar una API web JSON y conservar los datos en AWS SDK para Java Amazon DynamoDB. Un filtro de servlets en la aplicación sirve de instrumento para todas las solicitudes entrantes que atiende la aplicación, y un controlador de solicitudes en el cliente del AWS SDK gestiona las llamadas posteriores a DynamoDB.
Puede seguir este tutorial utilizando el o el. Consola de administración de AWS AWS CLI
Secciones
Requisitos previos
Este tutorial se utiliza CloudFormation para crear y configurar los recursos que ejecutan la aplicación y el X-Ray daemon de ejemplo. Se tienen que cumplir los siguientes requisitos previos para instalar y ejecutar el tutorial:
-
Si utiliza un usuario de IAM con permisos limitados, añada las siguientes políticas de usuario en la consola de IAM
: -
AWSCloudFormationFullAccess— para acceder y usar CloudFormation -
AmazonS3FullAccess— subir un archivo de plantilla a CloudFormation través del Consola de administración de AWS -
IAMFullAccess: para crear los roles de instancia de Amazon ECS y Amazon EC2 -
AmazonEC2FullAccess: para crear los recursos de Amazon EC2 -
AmazonDynamoDBFullAccess: para crear las tablas de DynamoDB -
AmazonECS_FullAccess: para crear recursos de Amazon ECS -
AmazonSNSFullAccess: para crear el tema de Amazon SNS -
AWSXrayReadOnlyAccess— para obtener permiso para ver el mapa de rastreo y los rastros en la X-Ray consola
-
-
Para seguir el tutorial utilizando el AWS CLI, instale la versión 2.7.9 o posterior de la CLI y configure la CLI con el usuario del paso anterior. Asegúrese de que la región esté configurada al configurarla AWS CLI con el usuario. Si no se configura una región, hay que anexar
--regiona todos los comandos de la CLI.AWS-REGION -
Asegúrese de que Git
esté instalado para clonar el repositorio de aplicaciones de muestra. -
Utilice el siguiente código de ejemplo para clonar la ramificación
xray-gettingstarteddel repositorio de Scorekeep:git clone https://github.com/aws-samples/eb-java-scorekeep.git xray-scorekeep -b xray-gettingstarted
Instale la aplicación Scorekeep usando CloudFormation
Generación de datos de rastreo
La aplicación de ejemplo incluye una aplicación web front-end. Utilice la aplicación web para generar tráfico a la API y enviar los datos de rastreo a X-Ray. En primer lugar, recupere la URL de la aplicación web mediante la Consola de administración de AWS o la AWS CLI:
Uso de la aplicación web para generar datos de rastro
-
Elija Create (Crear) para crear un usuario y una sesión.
-
Escriba un nombre de juego, establezca las Reglas en Tres en raya y elija después Crear para crear un juego.
-
Seleccione Play (Jugar) para comenzar el juego.
-
Elija una ficha para hacer un movimiento y cambiar el estado del juego.
Cada uno de estos pasos genera solicitudes HTTP a la API y llamadas posteriores a DynamoDB para leer y escribir el usuario, la sesión, el juego, la movida y los datos de estado.
Vea el mapa de rastreo en Consola de administración de AWS
Puede ver el mapa de rastreo y los rastros generados por la aplicación de ejemplo en las CloudWatch consolas X-Ray y.
La causa indica que la dirección de correo electrónico proporcionada en una llamada a createSubscription realizada en la clase WebConfig no era válida. Lo arreglaremos en la siguiente sección.
Configuración de notificaciones de Amazon SNS
Scorekeep utiliza Amazon SNS para enviar notificaciones cuando los usuarios completan un juego. Cuando la aplicación se inicia, intenta crear una suscripción para una dirección de correo electrónico definida en un parámetro de CloudFormation pila. Esa llamada está fallando actualmente. Configure un correo electrónico de notificación para habilitar las notificaciones y resolver los errores destacados en el mapa de rastros.
Cuando se completa la actualización, Scorekeep se reinicia y crea una suscripción al tema de SNS. Compruebe su correo electrónico y confirme la suscripción para ver las actualizaciones cuando complete un juego. Abra el mapa de rastros para comprobar que las llamadas a SNS ya no están fallando.
Explorar la aplicación de ejemplo
La aplicación de ejemplo es una API web HTTP en Java que está configurada para usar el X-Ray SDK para Java. Al implementar la aplicación con la CloudFormation plantilla, crea las tablas de DynamoDB, el clúster de Amazon ECS y otros servicios necesarios para ejecutar Scorekeep en ECS. Se crea un archivo de definición de tareas para ECS mediante. CloudFormation Este archivo define las imágenes del contenedor utilizadas por tarea en un clúster de ECS. Estas imágenes se obtienen del ECR X-Ray público oficial. La imagen del contenedor de la API de Scorekeep tiene la API compilada con Gradle. La imagen de contenedor del contenedor frontend de Scorekeep atiende al frontend mediante el servidor proxy nginx. Este servidor dirige las solicitudes a las rutas que empiezan por /api a la API.
Para instrumentar las solicitudes de HTTP entrantes, la aplicación añade el TracingFilter que proporciona el SDK.
ejemplo src/main/java/scorekeep/WebConfig.java - filtro de servlets
import javax.servlet.Filter;
import com.amazonaws.xray.javax.servlet.AWSXRayServletFilter;
...
@Configuration
public class WebConfig {
@Bean
public Filter TracingFilter() {
return new AWSXRayServletFilter("Scorekeep");
}
...Este filtro envía datos de rastreo sobre todas las solicitudes entrantes que la aplicación atiende, incluidos el URL, el método, el estado de la respuesta, la hora de inicio y la hora de finalización de la solicitud.
La aplicación también realiza llamadas posteriores a DynamoDB mediante el AWS SDK para Java. Para instrumentar estas llamadas, la aplicación simplemente toma los AWS SDK-related submódulos como dependencias y el SDK para Java instrumenta automáticamente a todos los clientes del X-Ray SDK. AWS
La aplicación utiliza Docker para compilar el código de fuente de la instancia con Gradle Docker Image y el archivo Scorekeep API Dockerfile para ejecutar el archivo ejecutable JAR que Gradle genera en su ENTRYPOINT.
ejemplo Uso de Docker para compilar a través de Gradle Docker Image
docker run --rm -v /PATH/TO/SCOREKEEP_REPO/home/gradle/project -w /home/gradle/project gradle:4.3 gradle buildejemplo ENTRYPOINT de Dockerfile
ENTRYPOINT [ "sh", "-c", "java -Dserver.port=5000 -jar scorekeep-api-1.0.0.jar" ]El archivo build.gradle descarga todos los submódulos del SDK de Maven durante la compilación declarándolos como dependencias.
ejemplo build.gradle: dependencias
...
dependencies {
compile("org.springframework.boot:spring-boot-starter-web")
testCompile('org.springframework.boot:spring-boot-starter-test')
compile('com.amazonaws:aws-java-sdk-dynamodb')
compile("com.amazonaws:aws-xray-recorder-sdk-core")
compile("com.amazonaws:aws-xray-recorder-sdk-aws-sdk")
compile("com.amazonaws:aws-xray-recorder-sdk-aws-sdk-instrumentor")
...
}
dependencyManagement {
imports {
mavenBom("com.amazonaws:aws-java-sdk-bom:1.11.67")
mavenBom("com.amazonaws:aws-xray-recorder-sdk-bom:2.11.0")
}
}Los submódulos core, AWS SDK y AWS SDK Instrumentor son todo lo que se necesita para instrumentar automáticamente cualquier llamada posterior que se realice con el SDK. AWS
Para transmitir los datos de los segmentos sin procesar a la X-Ray API, es necesario que el X-Ray daemon escuche el tráfico en el puerto UDP 2000. Para ello, la aplicación hace que el X-Ray demonio se ejecute en un contenedor que se implementa junto con la aplicación Scorekeep en ECS como contenedor secundario. Consulta el tema sobre los X-Ray demonios para obtener más información.
ejemplo X-Ray Definición de contenedor de demonios en una definición de tarea de ECS
...
Resources:
ScorekeepTaskDefinition:
Type: AWS::ECS::TaskDefinition
Properties:
ContainerDefinitions:
...
- Cpu: '256'
Essential: true
Image: amazon/aws-xray-daemon
MemoryReservation: '128'
Name: xray-daemon
PortMappings:
- ContainerPort: '2000'
HostPort: '2000'
Protocol: udp
...El X-Ray SDK para Java proporciona una clase denominada AWSXRay que proporciona la grabadora global, TracingHandler que puede utilizar para instrumentar el código. Puede configurar la grabadora global para que personalice el AWSXRayServletFilter que crea los segmentos para las llamadas HTTP entrantes. La muestra incluye un bloque estático en la clase WebConfig que configura la grabadora global con complementos y reglas de muestreo.
ejemplo src/main/java/scorekeep/WebConfig.java - grabadora
import com.amazonaws.xray.AWSXRay;
import com.amazonaws.xray.AWSXRayRecorderBuilder;
import com.amazonaws.xray.javax.servlet.AWSXRayServletFilter;
import com.amazonaws.xray.plugins.ECSPlugin;
import com.amazonaws.xray.plugins.EC2Plugin;
import com.amazonaws.xray.strategy.sampling.LocalizedSamplingStrategy;
...
@Configuration
public class WebConfig {
...
static {
AWSXRayRecorderBuilder builder = AWSXRayRecorderBuilder.standard().withPlugin(new ECSPlugin()).withPlugin(new EC2Plugin());
URL ruleFile = WebConfig.class.getResource("/sampling-rules.json");
builder.withSamplingStrategy(new LocalizedSamplingStrategy(ruleFile));
AWSXRay.setGlobalRecorder(builder.build());
...
}
}En este ejemplo se utiliza el compilador para cargar las reglas de muestreo desde un archivo denominado sampling-rules.json. Las reglas de muestreo determinan la velocidad a la que el SDK registra los segmentos de las solicitudes entrantes.
ejemplo src/main/java/resources/sampling-rules.json
{
"version": 1,
"rules": [
{
"description": "Resource creation.",
"service_name": "*",
"http_method": "POST",
"url_path": "/api/*",
"fixed_target": 1,
"rate": 1.0
},
{
"description": "Session polling.",
"service_name": "*",
"http_method": "GET",
"url_path": "/api/session/*",
"fixed_target": 0,
"rate": 0.05
},
{
"description": "Game polling.",
"service_name": "*",
"http_method": "GET",
"url_path": "/api/game/*/*",
"fixed_target": 0,
"rate": 0.05
},
{
"description": "State polling.",
"service_name": "*",
"http_method": "GET",
"url_path": "/api/state/*/*/*",
"fixed_target": 0,
"rate": 0.05
}
],
"default": {
"fixed_target": 1,
"rate": 0.1
}
}El archivo de reglas de muestreo define cuatro reglas de muestreo personalizadas y la regla predeterminada. Para cada solicitud de entrada, el SDK evalúa las reglas personalizadas en el orden en que están definidas. El SDK aplica la primera regla que coincide con el método, la ruta y el nombre de servicio de la solicitud. Para Scorekeep, la primera regla captura todas las solicitudes POST (llamadas de creación de recursos) aplicando un objetivo fijo de una solicitud por segundo y una tasa del 1,0, es decir, el 100 % de las solicitudes después de cumplir el objetivo fijo.
Las otras tres reglas personalizadas aplican una tasa del 5 % sin objetivo fijo a las lecturas de sesiones, juegos y estado (solicitudes GET). De este modo se reduce al mínimo el número de rastros de las llamadas periódicas que el front-end realiza automáticamente cada pocos segundos para asegurarse de que el contenido está actualizado. Para el resto de solicitudes, el archivo define una velocidad predeterminada de una solicitud por segundo y una tasa del 10 %.
La aplicación de ejemplo también muestra cómo usar funciones avanzadas, como la instrumentación manual de clientes SDK, la creación de subsegmentos adicionales y llamadas HTTP salientes. Para obtener más información, consulte AWS X-Ray aplicación de muestra.
Opcional: política de privilegios mínimos
Los contenedores ECS de Scorekeep acceden a los recursos mediante políticas de acceso total, como AmazonSNSFullAccess y AmazonDynamoDBFullAccess. El uso de políticas de acceso total no es la mejor práctica para las aplicaciones de producción. En el siguiente ejemplo se actualiza la política de IAM de DynamoDB para mejorar la seguridad de la aplicación. Para obtener más información sobre las prácticas recomendadas de seguridad en las políticas de IAM, consulte Administración de identidades y accesos para. AWS X-Ray
ejemplo Definición de la plantilla cf-resources.yaml ECSTaskRole
ECSTaskRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
-
Effect: "Allow"
Principal:
Service:
- "ecs-tasks.amazonaws.com"
Action:
- "sts:AssumeRole"
ManagedPolicyArns:
- "arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess"
- "arn:aws:iam::aws:policy/AmazonSNSFullAccess"
- "arn:aws:iam::aws:policy/AWSXrayFullAccess"
RoleName: "scorekeepRole"Para actualizar las políticas, primero identifique los ARN de sus recursos de DynamoDB. A continuación, utilice los ARN en una política de IAM personalizada. Por último, aplique esa política al perfil de instancia.
Para identificar el ARN de su recurso de DynamoDB:
-
Abra la consola de DynamoDB
. -
En la barra de navegación izquierda, elija Tablas.
-
Elija cualquiera de las opciones
scorekeep-*para mostrar la página de detalles de la tabla. -
En la pestaña Descripción general, seleccione Información adicional para expandir la sección y ver el nombre de recurso de Amazon (ARN). Copie este valor.
-
Inserte el ARN en la siguiente política de IAM y sustituya los valores
AWS_REGIONyAWS_ACCOUNT_IDpor su región e ID de cuenta específicos. Esta nueva política solo permite las acciones especificadas, en lugar de la políticaAmazonDynamoDBFullAccess, que permite cualquier acción.ejemplo
Las tablas que crea la aplicación siguen una convención de nomenclatura coherente. Puede usar el formato
scorekeep-*para indicar todas las tablas de Scorekeep.
Cambio de la política de IAM
-
Abra el rol de tarea de Scorekeep (ScorekeepRole)
desde la consola de IAM. -
Elija la casilla de verificación situada junto a la política
AmazonDynamoDBFullAccessy, a continuación, elija Eliminar para eliminar esta política. -
Seleccione Añadir permisos, a continuación, Adjuntar políticas y, por último, Crear política.
-
Elija la pestaña JSON y pegue la política que acaba de crear.
-
Elija Siguiente: Etiquetas en la parte inferior de la página.
-
Elija Siguiente: Revisar en la parte inferior de la página.
-
En Nombre, escriba un nombre para la política.
-
Elija Crear política en la parte inferior de la página.
-
Adjunte la política que acaba de crear al rol
scorekeepRole. Puede que la política adjunta tarde unos minutos en aplicarse.
Si ha adjuntado la nueva política al scorekeepRole rol, debe desconectarla antes de eliminar la CloudFormation pila, ya que esta política adjunta impedirá que se elimine la pila. La política se puede separar automáticamente eliminándola.
Eliminación de su política de IAM personalizada
-
Abra la consola de IAM
. -
Elija Políticas en la barra de navegación izquierda.
-
Busque el nombre de la política personalizada que creó anteriormente en esta sección y elija el botón de opción situado junto al nombre de la política para resaltarlo.
-
Abra la lista desplegable Acciones y, a continuación, elija Eliminar.
-
Escriba el nombre de la política personalizada y, a continuación, elija Eliminar para confirmar la eliminación. Esto separará automáticamente la política del rol
scorekeepRole.
Limpieza
Siga estos pasos para eliminar los recursos de la aplicación Scorekeep:
nota
Si creó y adjuntó políticas personalizadas mediante la sección anterior de este tutorial, debe eliminar la política de la pila scorekeepRole antes de eliminar la CloudFormation pila.
Siguientes pasos
Obtenga más información X-Ray en el siguiente capítulo,AWS X-Ray conceptos.
Para crear tu propia aplicación, obtén más información sobre el X-Ray SDK para Java o uno de los otros X-Ray SDK:
-
X-Ray SDK para Java — AWS X-Ray SDK for Java
-
X-Ray SDK para — Node.js AWS SDK de X-Ray para Node.js
-
X-Ray SDK para.NET — AWS X-Ray SDK para.NET
Para ejecutar el X-Ray daemon localmente o de forma local AWS, consulte. AWS X-Ray demonio
Para contribuir a la aplicación de ejemplo GitHub, consulte https://github.com/awslabs/eb-java-scorekeep/tree/xray-gettingstarted