Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Amazon EventBridge et AWS X-Ray
AWS X-Ray s'intègre EventBridge à Amazon pour suivre les événements transmis EventBridge. Si un service instrumenté avec le X-Ray SDK envoie des événements à EventBridge, le contexte de trace est propagé aux cibles d'événements en aval dans l'en-tête de suivi. Le X-Ray saisit SDK automatiquement l'en-tête de traçage et l'applique à toute instrumentation ultérieure. Cette continuité permet aux utilisateurs de suivre, d'analyser et de déboguer l'ensemble des services en aval et fournit une vue plus complète de leur système.
Pour plus d'informations, voir EventBridge X-Ray Integration dans le guide de EventBridge l'utilisateur.
Affichage de la source et des cibles sur la carte du service X-Ray
La carte de suivi X-Ray affiche un nœud d' EventBridge événement qui connecte les services source et cible, comme dans l'exemple suivant :
Propagation du contexte de suivi vers les cibles des événements
Le X-Ray SDK permet à la source d' EventBridge événements de propager le contexte de trace aux cibles d'événements en aval. Les exemples spécifiques au langage suivants illustrent l'appel EventBridge à partir d'une fonction Lambda sur laquelle le suivi actif est activé :
- Java
-
Ajoutez les dépendances nécessaires pour X-Ray :
package example;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.events.SQSEvent;
import com.amazonaws.xray.AWSXRay;
import com.amazonaws.services.eventbridge.AmazonEventBridge;
import com.amazonaws.services.eventbridge.AmazonEventBridgeClientBuilder;
import com.amazonaws.services.eventbridge.model.PutEventsRequest;
import com.amazonaws.services.eventbridge.model.PutEventsRequestEntry;
import com.amazonaws.services.eventbridge.model.PutEventsResult;
import com.amazonaws.services.eventbridge.model.PutEventsResultEntry;
import com.amazonaws.xray.handlers.TracingHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.StringBuilder;
import java.util.Map;
import java.util.List;
import java.util.Date;
import java.util.Collections;
/*
Add the necessary dependencies for XRay:
https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-xray
https://mvnrepository.com/artifact/com.amazonaws/aws-xray-recorder-sdk-aws-sdk
*/
public class Handler implements RequestHandler<SQSEvent, String>{
private static final Logger logger = LoggerFactory.getLogger(Handler.class);
/*
build EventBridge client
*/
private static final AmazonEventBridge eventsClient = AmazonEventBridgeClientBuilder
.standard()
// instrument the EventBridge client with the XRay Tracing Handler.
// the AWSXRay globalRecorder will retrieve the tracing-context
// from the lambda function and inject it into the HTTP header.
// be sure to enable 'active tracing' on the lambda function.
.withRequestHandlers(new TracingHandler(AWSXRay.getGlobalRecorder()))
.build();
@Override
public String handleRequest(SQSEvent event, Context context)
{
PutEventsRequestEntry putEventsRequestEntry0 = new PutEventsRequestEntry();
putEventsRequestEntry0.setTime(new Date());
putEventsRequestEntry0.setSource("my-lambda-function");
putEventsRequestEntry0.setDetailType("my-lambda-event");
putEventsRequestEntry0.setDetail("{\"lambda-source\":\"sqs\"}");
PutEventsRequest putEventsRequest = new PutEventsRequest();
putEventsRequest.setEntries(Collections.singletonList(putEventsRequestEntry0));
// send the event(s) to EventBridge
PutEventsResult putEventsResult = eventsClient.putEvents(putEventsRequest);
try {
logger.info("Put Events Result: {}", putEventsResult);
} catch(Exception e) {
e.getStackTrace();
}
return "success";
}
}
- Python
-
Ajoutez la dépendance suivante à votre fichier requirements.txt :
aws-xray-sdk==2.4.3
import boto3
from aws_xray_sdk.core import xray_recorder
from aws_xray_sdk.core import patch_all
# apply the XRay handler to all clients.
patch_all()
client = boto3.client('events')
def lambda_handler(event, context):
response = client.put_events(
Entries=[
{
'Source': 'foo',
'DetailType': 'foo',
'Detail': '{\"foo\": \"foo\"}'
},
]
)
return response
- Go
-
package main
import (
"context"
"github.com/aws/aws-lambda-go/lambda"
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-xray-sdk-go/xray"
"github.com/aws/aws-sdk-go/service/eventbridge"
"fmt"
)
var client = eventbridge.New(session.New())
func main() {
//Wrap the eventbridge client in the AWS XRay tracer
xray.AWS(client.Client)
lambda.Start(handleRequest)
}
func handleRequest(ctx context.Context, event events.SQSEvent) (string, error) {
_, err := callEventBridge(ctx)
if err != nil {
return "ERROR", err
}
return "success", nil
}
func callEventBridge(ctx context.Context) (string, error) {
entries := make([]*eventbridge.PutEventsRequestEntry, 1)
detail := "{ \"foo\": \"foo\"}"
detailType := "foo"
source := "foo"
entries[0] = &eventbridge.PutEventsRequestEntry{
Detail: &detail,
DetailType: &detailType,
Source: &source,
}
input := &eventbridge.PutEventsInput{
Entries: entries,
}
// Example sending a request using the PutEventsRequest method.
resp, err := client.PutEventsWithContext(ctx, input)
success := "yes"
if err == nil { // resp is now filled
success = "no"
fmt.Println(resp)
}
return success, err
}
- Node.js
-
const AWSXRay = require('aws-xray-sdk')
//Wrap the aws-sdk client in the AWS XRay tracer
const AWS = AWSXRay.captureAWS(require('aws-sdk'))
const eventBridge = new AWS.EventBridge()
exports.handler = async (event) => {
let myDetail = { "name": "Alice" }
const myEvent = {
Entries: [{
Detail: JSON.stringify({ myDetail }),
DetailType: 'myDetailType',
Source: 'myApplication',
Time: new Date
}]
}
// Send to EventBridge
const result = await eventBridge.putEvents(myEvent).promise()
// Log the result
console.log('Result: ', JSON.stringify(result, null, 2))
}
- C#
-
Ajoutez les packages X-Ray suivants à vos dépendances C# :
<PackageReference Include="AWSXRayRecorder.Core" Version="2.6.2" />
<PackageReference Include="AWSXRayRecorder.Handlers.AwsSdk" Version="2.7.2" />
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Amazon;
using Amazon.Util;
using Amazon.Lambda;
using Amazon.Lambda.Model;
using Amazon.Lambda.Core;
using Amazon.EventBridge;
using Amazon.EventBridge.Model;
using Amazon.Lambda.SQSEvents;
using Amazon.XRay.Recorder.Core;
using Amazon.XRay.Recorder.Handlers.AwsSdk;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]
namespace blankCsharp
{
public class Function
{
private static AmazonEventBridgeClient eventClient;
static Function() {
initialize();
}
static async void initialize() {
//Wrap the AWS SDK clients in the AWS XRay tracer
AWSSDKHandler.RegisterXRayForAllServices();
eventClient = new AmazonEventBridgeClient();
}
public async Task<PutEventsResponse> FunctionHandler(SQSEvent invocationEvent, ILambdaContext context)
{
PutEventsResponse response;
try
{
response = await callEventBridge();
}
catch (AmazonLambdaException ex)
{
throw ex;
}
return response;
}
public static async Task<PutEventsResponse> callEventBridge()
{
var request = new PutEventsRequest();
var entry = new PutEventsRequestEntry();
entry.DetailType = "foo";
entry.Source = "foo";
entry.Detail = "{\"instance_id\":\"A\"}";
List<PutEventsRequestEntry> entries = new List<PutEventsRequestEntry>();
entries.Add(entry);
request.Entries = entries;
var response = await eventClient.PutEventsAsync(request);
return response;
}
}
}