기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
AWS Lambda에서 Ruby 코드 계측
Lambda는 AWS X-Ray와 통합되어 Lambda 애플리케이션을 추적, 디버깅 및 최적화할 수 있습니다. 프런트엔드 API에서 백엔드의 스토리지 및 데이터베이스에 이르기까지 애플리케이션의 리소스를 탐색할 때 X-Ray를 사용하여 요청을 추적할 수 있습니다. 빌드 구성에 X-Ray SDK 라이브러리를 추가하기만 하면 함수가 AWS 서비스에 대해 수행하는 모든 호출에 대한 오류 및 지연 시간을 기록할 수 있습니다.
활성 추적을 구성하면 애플리케이션을 통해 특정 요청을 관찰할 수 있습니다. X-Ray 서비스 그래프는 애플리케이션 및 모든 구성 요소에 대한 정보를 보여줍니다. 오류 프로세서 샘플 애플리케이션의 다음 예제는 두 개의 함수가 있는 애플리케이션을 보여줍니다. 기본 함수는 이벤트를 처리하고 때로는 오류를 반환합니다. 맨 위에 있는 두 번째 함수는 첫 번째 로그 그룹에 나타나는 오류를 처리하고 AWS SDK를 사용하여 X-Ray, Amazon Simple Storage Service (Amazon S3), Amazon Logs를 호출합니다. CloudWatch
콘솔을 사용하여 Lambda 함수에 대한 활성 추적을 전환하려면 다음 단계를 따르십시오.
활성 추적 켜기
Lambda 콘솔의 함수 페이지
를 엽니다. -
함수를 선택합니다.
구성(Configuration)을 선택한 다음 모니터링 및 운영 도구(Monitoring and operations tools)를 선택합니다.
편집을 선택합니다.
-
X-Ray에서 활성 추적을 켭니다.
-
저장을 선택합니다.
요금
X-Ray 추적을 AWS 프리 티어의 일부로서 특정 한도까지 매월 무료로 사용할 수 있습니다. 해당 한도를 초과하면 추적 저장 및 검색에 대한 X-Ray 요금이 부과됩니다. 자세한 내용은 AWS X-Ray 요금
함수에 추적 데이터를 X-Ray로 업로드할 권한이 있어야 합니다. Lambda 콘솔에서 추적을 활성화하면 Lambda가 필요한 권한을 함수의 실행 역할에 추가합니다. 그렇지 않으면 AWSXRayDaemonWriteAccess
X-Ray는 애플리케이션에 대한 모든 요청을 추적하지 않습니다. X-Ray는 모든 요청의 대표 샘플을 여전히 제공하면서 추적이 효율적으로 수행되도록 샘플링 알고리즘을 적용합니다. 샘플링 요율은 초당 요청이 1개이며 추가 요청의 5퍼센트입니다.
참고
함수에 대해 X-Ray 샘플링 요율을 구성할 수 없습니다.
활성 추적을 사용할 때 각 추적에 대해 Lambda는 2개의 세그먼트를 기록하고, 이에 따라 서비스 그래프에 2개의 노드가 생성됩니다. 다음 이미지는 오류 프로세서 샘플 애플리케이션에서 기본 함수에 대한 이 두 노드를 강조 표시합니다.
왼쪽의 첫 번째 노드는 호출 요청을 수신하는 Lambda 서비스를 나타냅니다. 두 번째 노드는 특정 Lambda 함수를 나타냅니다. 다음 예에서는 이러한 2개의 세그먼트가 있는 추적을 보여줍니다. 둘 다 이름이 my-function 이지만 하나는 오리진이 AWS::Lambda
이고 다른 하나는 오리진이 AWS::Lambda::Function
입니다.
이 예에서는 3개의 하위 세그먼트를 표시하도록 함수 세그먼트를 확장합니다.
-
초기화 – 함수를 로드하고 초기화 코드를 실행하는 데 소요된 시간을 나타냅니다. 이 하위 세그먼트는 함수의 각 인스턴스에서 처리하는 첫 번째 이벤트에 대해서만 표시됩니다.
-
호출— 핸들러 코드를 실행하는 데 소요된 시간을 나타냅니다.
-
오버헤드 – Lambda 런타임이 다음 이벤트를 처리하기 위해 준비하는 데 소비하는 시간을 나타냅니다.
핸들러 코드를 계측하여 메타데이터를 기록하고 다운스트림 호출을 추적할 수 있습니다. 핸들러가 다른 리소스 및 서비스에 대해 수행하는 호출과 관련된 세부 정보를 기록하려면 X-Ray SDK for Ruby를 사용합니다. SDK를 가져오려면 애플리케이션의 종속성에 aws-xray-sdk
패키지를 추가합니다.
예 blank-ruby/function/Gemfile
# Gemfile source 'https://rubygems.org'
gem 'aws-xray-sdk', '0.11.4'
gem 'aws-sdk-lambda', '1.39.0' gem 'test-unit', '3.3.5'
AWS SDK 클라이언트를 계측하려면 초기화 코드에 클라이언트를 생성한 후 aws-xray-sdk/lambda
모듈이 필요합니다.
예 blank-ruby/function/lambda_function.rb – AWS SDK 클라이언트 추적
# lambda_function.rb require 'logger' require 'json' require 'aws-sdk-lambda' $client = Aws::Lambda::Client.new() $client.get_account_settings()
require 'aws-xray-sdk/lambda'
def lambda_handler(event:, context:) logger = Logger.new($stdout) ...
활성 추적을 사용할 때 각 추적에 대해 Lambda는 2개의 세그먼트를 기록하고, 이에 따라 서비스 그래프에 2개의 노드가 생성됩니다. 다음 이미지는 오류 프로세서 샘플 애플리케이션에서 기본 함수에 대한 이 두 노드를 강조 표시합니다.
왼쪽의 첫 번째 노드는 호출 요청을 수신하는 Lambda 서비스를 나타냅니다. 두 번째 노드는 특정 Lambda 함수를 나타냅니다. 다음 예에서는 이러한 2개의 세그먼트가 있는 추적을 보여줍니다. 둘 다 이름이 my-function 이지만 하나는 오리진이 AWS::Lambda
이고 다른 하나는 오리진이 AWS::Lambda::Function
입니다.
이 예에서는 3개의 하위 세그먼트를 표시하도록 함수 세그먼트를 확장합니다.
-
초기화 – 함수를 로드하고 초기화 코드를 실행하는 데 소요된 시간을 나타냅니다. 이 하위 세그먼트는 함수의 각 인스턴스에서 처리하는 첫 번째 이벤트에 대해서만 표시됩니다.
-
호출— 핸들러 코드를 실행하는 데 소요된 시간을 나타냅니다.
-
오버헤드 – Lambda 런타임이 다음 이벤트를 처리하기 위해 준비하는 데 소비하는 시간을 나타냅니다.
HTTP 클라이언트를 계측하고, SQL 쿼리를 기록하고, 주석 및 메타데이터가 있는 사용자 지정 하위 세그먼트를 생성할 수도 있습니다. 자세한 내용은 AWS X-Ray 개발자 안내서의 X-Ray SDK for Ruby를 참조하세요.
Lambda API로 활성 추적 사용
AWS CLI 또는 AWS SDK를 사용하여 추적 구성을 관리하려면 다음 API 작업을 사용합니다.
다음 예제 AWS CLI 명령은 my-function이라는 함수에 대한 활성 추적을 사용 설정합니다.
aws lambda update-function-configuration --function-name my-function \ --tracing-config Mode=Active
추적 모드는 함수 버전을 게시할 때 버전별 구성의 일부입니다. 게시된 버전에 대한 추적 모드는 변경할 수 없습니다.
AWS CloudFormation으로 활성 추적 활성화
AWS CloudFormation 템플릿에서 AWS::Lambda::Function
리소스에 대한 추적을 활성화하려면 TracingConfig
속성을 사용합니다.
예 function-inline.yml – 추적 구성
Resources: function: Type: AWS::Lambda::Function Properties:
TracingConfig: Mode: Active
...
AWS Serverless Application Model(AWS SAM) AWS::Serverless::Function
리소스의 경우 Tracing
속성을 사용합니다.
예 template.yml – 추적 구성
Resources: function: Type: AWS::Serverless::Function Properties:
Tracing: Active
...
계층에 런타임 종속성 저장
X-Ray SDK를 사용하여 AWS SDK 클라이언트를 계측하는 경우 함수 코드와 배포 패키지가 상당히 커질 수 있습니다. 함수 코드를 업데이트할 때마다 런타임 종속성을 업로드하지 않으려면 X-Ray SDK를 Lambda 계층에 패키징합니다.
다음 예제에서는 X-Ray SDK for Ruby를 저장하는 AWS::Serverless::LayerVersion
리소스를 보여줍니다.
예 template.yml – 종속성 계층
Resources: function: Type: AWS::Serverless::Function Properties: CodeUri: function/. Tracing: Active
Layers: - !Ref libs
...libs: Type: AWS::Serverless::LayerVersion Properties: LayerName: blank-ruby-lib Description: Dependencies for the blank-ruby sample app. ContentUri: lib/. CompatibleRuntimes: - ruby2.5
이 구성을 사용하면 런타임 종속성을 변경하는 경우 라이브러리 계층만 업데이트하면 됩니다. 함수 배포 패키지에는 코드만 포함되어 있으므로 이는 업로드 시간을 줄일 수 있습니다.
종속성 계층을 만들려면 배포 전에 계층 아카이브를 생성하기 위해 빌드를 변경해야 합니다. 사용 가능한 예제는 blank-ruby