블로그 릴레이 - AWS Lambda에 X-Ray 도입해 보기
안녕하세요 생산지원 그룹 리테일 어플리케이션부의 김승연입니다.
본 블로그는 당사의 한국어 블로그 릴레이의 32번째 블로그입니다.
이번 블로그 주제는 「AWS Lambda에 X-Ray 도입해 보기」 입니다.
할것
이번에는 외부 API의 상태를 X-Ray 에서 확인해 보도록 하겠습니다.
X-Ray 도입을 위해서 아래 라이브러리를 사용할 예정입니다.
아래 라이러리를 이용하면 별도의 설정 없이 심플하게 X-Ray를 도입하실 수 있습니다.
코드작성
베이스로 할 코드는 아래 블로그의 코드를 이용할 예정입니다.
STEP1: 라이브러리 설치
npm install @aws-lambda-powertools/tracer @middy/core -w server
STEP2: iac 코드 수정
...
// Lambda
const restApiFunc = new cdk.aws_lambda_nodejs.NodejsFunction(
this,
'RestApiFunc',
{
architecture: cdk.aws_lambda.Architecture.ARM_64,
runtime: cdk.aws_lambda.Runtime.NODEJS_20_X,
tracing: cdk.aws_lambda.Tracing.ACTIVE, // 옵션을 추가
bundling: {
bundleAwsSDK: true, // 번들에 AWS SDK 포함
},
entry: '../server/src/index.ts',
},
);
// APIGateway REST API
const restApi = new cdk.aws_apigateway.LambdaRestApi(this, 'RestApi', {
handler: restApiFunc,
defaultCorsPreflightOptions: {
allowOrigins: cdk.aws_apigateway.Cors.ALL_ORIGINS,
allowMethods: cdk.aws_apigateway.Cors.ALL_METHODS,
allowHeaders: cdk.aws_apigateway.Cors.DEFAULT_HEADERS,
maxAge: cdk.Duration.minutes(5),
},
deployOptions: {
stageName: 'v1',
tracingEnabled: true, // True로 설정해줍니다.
},
});
...
STEP3: server 코드 수정
...
const tracer = new Tracer({
serviceName: 'demo',
captureHTTPsRequests: true,
});
const app = express();
app.use(cors());
app.use(express.json());
app.get('/', async (_req: Request, res: Response): Promise<void> => {
try {
const response = await fetch(
'https://example.com/..., // 외부 API를 설정
);
if (response.ok === false) {
throw new Error('Error');
}
const result = await response.json();
res.status(200).send(result);
} catch {
res.status(502).send('failed');
}
});
export const handler = middy(serverlessExpress({ app: app })).use(
captureLambdaHandler(tracer),
);
확인
코드를 작성하셨다면 이제 디플로이후 직접 AWS Console(CloudWatch → 기록 맵)에서 확인하실 수 있습니다.
현재는 일부로 외부 API에서 401에러를 낸 후 확인한 결과가 됩니다.
보충
이외에도 CloudWatch Log를 사용 시 아래 라이브러리를 사용하시면 로그를 통해 더 세분화된 상태를 확인하실 수 있습니다.
참고자료
문의 사항은 클래스메소드 코리아로!
클래스메소드 코리아에서는 다양한 세미나 및 이벤트를 진행하고 있습니다.
진행중인 이벤트는 아래 페이지를 참고해주세요.
AWS에 대한 상담 및 클래스 메소드 멤버스에 관한 문의사항은 아래 메일로 연락주시면 감사드립니다!
Info@classmethod.kr