Amazon Web Services 한국 블로그

AWS X-Ray, AWS Lambda 지원 공식 출시

AWS X-Ray에 대한 AWS Lambda 지원 기능을 출시했습니다. 지난 샌프란시스코 서밋에서 정식 출시한 AWS X-Ray는 분산 응용 프로그램의 실행 및 성능 동작을 분석하는 AWS 서비스입니다. 전통적인 디버깅 방식은 여러 서비스가 실행되는 독립 구성 요소가 있는 마이크로 서비스 기반 응용 프로그램에서는 잘 작동하지 않습니다. X-Ray를 사용하면 응용 프로그램의 대기 시간을 줄임으로써 오류, 속도 저하 및 시간 초과를 신속하게 진단 할 수 있습니다. 간단한 람다 기반 응용 프로그램을 작성하고 분석함으로써 우리의 응용 프로그램에서 X-Ray를 잠깐 사용하는 방법을 보여 드리겠습니다.

바로 시작하기를 원할 경우, 람다 함수 페이지로 이동하여 추적 기능을 활성화하여 기존 람다 함수에 대해서도 X-Ray 추적 기능을 쉽게 켤 수 있습니다.

또는 AWS 명령 행 인터페이스 (CLI)에서 함수의 tracing-config 를 업데이트하여 시작 가능합니다. (--function-name도 전달해야 함)

$ aws lambda update-function-configuration --tracing-config '{"Mode": "Active"}'

추적 모드가 활성화되면 Lambda는 함수에 대해 즉시 추적을 시작합니다. 그렇지 않으면, 업스트림 서비스에서 명시 적으로 지시 한 경우에만 함수가 추적됩니다. 추적 기능을 사용하면  응용 프로그램 리소스와 그 사이의 연결 을 시각적으로 나타냅니다. 주목해야 할 것은 X-Ray 데몬이 람다 함수의 리소스 중 일부를 사용한다는 것입니다. 메모리 제한에 가까워지면, Lambda는 메모리 부족 오류가 발생하지 않도록 X-Ray 데몬을 중단 시킬 수 있습니다.

몇 가지 다른 서비스를 사용하는 빠른 애플리케이션을 구축하여 신규 연동 테스트를 해 보겠습니다.

스마트폰에서 찍은 셀카가 많아서 이를 분석해 보려고 합니다. Amazon Simple Storage Service (S3) 버킷에 업로드 된 새로운 이미지에 응답하는 Java 8 런타임을 사용하여 간단한 Lambda 함수를 작성합니다. 이 샘플 앱은 사진에 Amazon Rekognition 을 사용하여, 이미지 내 객체를 인식하고 검색된 레이블을 Amazon DynamoDB에 저장합니다.

service map

먼저 몇 가지 X-Ray 서비스에서 사용하는 용어를 살펴보겠습니다.

X-Ray가 서비스 그래프를 생성하여 추적 결과를 구성한다고 쉽게 이해할 수 있습니다. 서비스 그래프는 우리가 위에서 볼 수 있는 멋진 시각적 표현을 만듭니다 (여러 가지 색상이 다양한 요청 응답을 나타냅니다). 응용 프로그램을 실행하는 컴퓨팅 리소스는 segment의 형태로 수행 중인 작업에 대한 데이터를 보냅니다. 하위 데이터를 작성하여 해당 데이터에 대한 주석을 추가하고, 세분화 된 타이밍을 추가 할 수 있습니다. 응용 프로그램을 통한 요청 경로는 traces로 추적합니다. traces는 단일 요청으로 생성 된 모든 segment를 수집합니다. 즉, S3에서 들어오는 Lambda 이벤트를 DynamoDB로 쉽게 추적 할 수 있으며 오류 및 대기 시간이 어느 부분에 있는지 파악할 수 있습니다.

이제 selfies-bucket이라는 S3 버킷, selfies-table이라는 DynamoDB 테이블, 그리고 Lambda 함수를 생성합니다. ObjectCreated의 S3 버킷에 대한 Lambda 함수에 트리거를 추가합니다. 람다 함수 소스 코드는 매우 간단합니다. 코드를 변경하지 않으면 JAR에 aws-xray-sdk 및 aws-xray-sdk-recorder-aws-sdk-instrumentor 패키지를 포함시켜 Java 기능에서 X-Ray를 사용할 수 있습니다.

자 이제 사진 업로드를 해서 X-Ray 추적 상황을 살펴봅니다.

우리는 이러한 개별 추적 데이터 중 하나를 클릭하여 호출에 대한 자세한 정보를 얻을 수 있습니다.

AWS::Lambda 세그먼트에서 함수의 대기 시간, 실행 대기 시간, 실행 시도 횟수를 볼 수 있습니다.

AWS::Lambda::Function 세그먼트에는 몇 가지 가능한 하위 세그먼트가 있습니다.

  • The inititlization subsegment includes all of the time spent before your function handler starts executing
  • The outbound service calls
  • Any of your custom subsegments (these are really easy to add)

DynamoDB에 약간의 문제가 있는 것처럼 보입니다. 오류 아이콘을 클릭하면, 전체 예외 스택 트레이스를 얻을 수 있습니다. 테이블 용량이 부족하기 때문에 DynamoDB를 조정해야 합니다. 단 몇 번의 클릭 또는 빠른 API 호출로 더 많은 정보를 얻을 수 있습니다.

X-Ray SDK를 사용하면 X-Ray로 데이터를 쉽게 내보낼 수 있습니다. 파이썬의 경우, 이 라이브러리를 fleece라는 rackspace에서 가져올 수 있습니다. 더 자세한 사항은 기술 문서를 참고하시기 바랍니다.

– Randall;