Lambda에서 애플리케이션 활성화
Lambda 함수에 대해 Application Signals를 활성화할 수 있습니다. Application Signals에서는 Lambda 계층을 통해 제공되는 향상된 AWS Distro for OpenTelemetry(ADOT) 라이브러리를 사용하여 Lambda 함수를 자동으로 계측합니다. 이 OpenTelemetry용 AWS Lambda 계층에서는 Application Signals의 자동 계측에 필요한 라이브러리를 패키징하고 배포합니다.
Application Signals를 지원하는 것 외에도, 이 Lambda 계층은 Lambda OpenTelemetry 지원의 구성 요소이기도 하며 추적 기능을 제공합니다.
또한 트랜잭션 검색을 사용하여 Lambda 관찰성을 개선할 수 있습니다. 이렇게 하면 샘플링 없이 Lambda 함수 간접 호출에 대한 트레이스 스팬을 캡처할 수 있습니다. 이 기능을 사용하면 트레이스 컨텍스트 전파에서 sampled
플래그의 영향을 받지 않고 함수에 대한 스팬을 수집할 수 있습니다. 그리고 이 방법을 사용하면 다운스트림 종속 서비스에 추가적인 영향이 없습니다. Lambda에서 트랜잭션 검색을 활성화하면 함수 성능을 완벽하게 파악할 수 있으며, 드물게 발생하는 문제를 해결할 수 있습니다. 시작하려면 트랜잭션 검색를 참조하십시오
주제
시작
Lambda 함수에 대해 Application Signals를 활성화하는 3가지 방법이 있습니다.
Lambda 함수에 대해 Application Signals를 활성화한 후, 해당 함수의 원격 측정이 Application Signals 콘솔에 표시되려면 몇 분 정도 걸립니다.
-
CloudWatch Application Signals 콘솔 사용
-
Lambda 콘솔 사용
-
Lambda 함수 런타임에 OpenTelemetry용 AWS Lambda 계층을 수동으로 추가합니다.
이러한 각 메서드에서는 함수에 OpenTelemetry용 AWS Lambda 계층이 추가됩니다.
CloudWatch Application Signals 콘솔 사용
다음 단계에 따라 Application Signals 콘솔을 사용하여 Lambda 함수에 대해 Application Signals를 활성화합니다.
https://console.aws.amazon.com/cloudwatch/
에서 CloudWatch 콘솔을 엽니다. -
탐색 창에서 Application Signals, 서비스를 선택합니다.
-
서비스 목록 영역에서 Application Signals 활성화를 선택합니다.
-
Lambda 타일을 선택합니다.
-
Application Signals에 대해 활성화하려는 각 함수를 선택한 다음 완료를 선택합니다.
Lambda 콘솔 사용
다음 단계에 따라 Lambda 콘솔을 사용하여 Lambda 함수에 대한 Application Signals를 활성화합니다.
https://console.aws.amazon.com/lambda/
에서 AWS Lambda 콘솔을 엽니다. -
탐색 창에서 함수를 선택한 다음 활성화하려는 함수의 이름을 선택합니다.
-
구성을 선택한 다음 모니터링 및 운영 도구를 선택합니다.
-
편집을 선택합니다.
-
CloudWatch Application Signals and X-Ray 섹션에서 Automatically collect application traces and standard application metrics with Application Signals와 Automatically collect Lambda service traces for end to end visibility with X-Ray를 둘 다 선택합니다.
-
저장을 선택합니다.
AWS CDK를 사용하여 Lambda에서 Application Signals 활성화
이 계정에서 아직 Application Signals를 활성화하지 않은 경우 서비스를 검색하는 데 필요한 권한을 Application Signals에 부여해야 합니다. 자세한 내용은 계정에서 Application Signals 활성화 섹션을 참조하세요.
-
애플리케이션에 대해 Application Signals 활성화
import { aws_applicationsignals as applicationsignals } from 'aws-cdk-lib'; const cfnDiscovery = new applicationsignals.CfnDiscovery(this, 'ApplicationSignalsServiceRole', { } );
Discovery CloudFormation 리소스는 Application Signals에 다음 권한을 부여합니다.
-
xray:GetServiceGraph
-
logs:StartQuery
-
logs:GetQueryResults
-
cloudwatch:GetMetricData
-
cloudwatch:ListMetrics
-
tag:GetResources
이에 대한 자세한 내용은 CloudWatch Application Signals에 대한 서비스 연결 역할 권한 섹션을 참조하세요.
-
-
Lambda 함수에 IAM 정책
CloudWatchLambdaApplicationSignalsExecutionRolePolicy
를 추가합니다.const fn = new Function(this, 'DemoFunction', { code: Code.fromAsset('$YOUR_LAMBDA.zip'), runtime: Runtime.PYTHON_3_12, handler: '$YOUR_HANDLER' }) fn.role?.addManagedPolicy(ManagedPolicy.fromAwsManagedPolicyName('CloudWatchLambdaApplicationSignalsExecutionRolePolicy'));
-
$AWS_LAMBDA_LAYER_FOR_OTEL_ARN
을 해당 리전의 실제 OpenTelemetry ARN용 AWS Lambda 계층으로 바꿉니다.fn.addLayers(LayerVersion.fromLayerVersionArn( this, 'AwsLambdaLayerForOtel', '$AWS_LAMBDA_LAYER_FOR_OTEL_ARN' )) fn.addEnvironment("AWS_LAMBDA_EXEC_WRAPPER", "/opt/otel-instrument");
(선택 사항) 애플리케이션 상태 모니터링
Lambda에서 애플리케이션을 활성화하면 애플리케이션 상태를 모니터링할 수 있습니다. 자세한 내용은 Application Signals를 사용하여 애플리케이션의 운영 상태 모니터링 섹션을 참조하세요.
Application Signals를 수동으로 활성화합니다.
다음 단계에 따라 Lambda 함수에 대해 Application Signals를 수동으로 활성화합니다.
-
Lambda 런타임에 OpenTelemetry용 AWS Lambda 계층을 추가합니다. 계층 ARN을 찾으려면 OpenTelemetry용 AWS Lambda 계층 ARN 섹션을 참조하세요.
-
환경 변수
AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-instrument
를 추가합니다.환경 변수
LAMBDA_APPLICATION_SIGNALS_REMOTE_ENVIRONMENT
를 추가하여 사용자 지정 Lambda 환경을 구성합니다. 기본적으로 Lambda 환경은lambda:default
로 구성됩니다. -
AWS 관리형 IAM 정책 CloudWatchLambdaApplicationSignalsExecutionRolePolicy를 Lambda 실행 역할에 연결합니다.
-
(선택 사항) 추적 경험을 더욱 개선하려면 Lambda 활성 추적을 활성화하는 것이 좋습니다. 자세한 내용은 AWS X-Ray로 Lambda 함수 간접 호출 시각화 섹션을 참조하세요.
Application Signals 수동으로 비활성화
Lambda 함수에 대해 Application Signals를 수동으로 비활성화하려면 Lambda 런타임에서 OpenTelemetry용 AWS Lambda 계층을 제거하고 AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-instrument
환경 변수를 제거합니다.
Application Signals 구성
이 섹션을 사용하여 Lambda에서 Application Signals를 구성할 수 있습니다.
여러 Lambda 함수를 하나의 서비스로 그룹화
환경 변수 OTEL_SERVICE_NAME
에서는 서비스의 이름을 설정합니다. Application Signals 대시보드에 애플리케이션의 서비스 이름으로 표시됩니다. 여러 Lambda 함수에 동일한 서비스 이름을 할당하면 Application Signals에서 단일 서비스로 병합됩니다. 이 키에 대한 값을 제공하지 않으면 기본값 Lambda 함수 이름이 사용됩니다.
샘플링
기본적으로 트레이스 샘플링 전략은 상위 기반입니다. 환경 변수 OTEL_TRACES_SAMPLER
를 설정하여 샘플링 전략을 조정할 수 있습니다.
예를 들면, 트레이스 샘플링 비율을 30%로 설정합니다.
OTEL_TRACES_SAMPLER=traceidratio OTEL_TRACES_SAMPLER_ARG=0.3
자세한 내용은 OpenTelemetry 환경 변수 사양
모든 라이브러리 계측 활성화
Lambda 콜드 스타트가 감소하도록 기본적으로 Python, 노드 및 Java에는 AWS SDK 및 HTTP 계측만 활성화되어 있습니다. 환경 변수를 설정하여 Lambda 함수에서 사용되는 다른 라이브러리에 대한 계측을 활성화할 수 있습니다.
-
Python –
OTEL_PYTHON_DISABLED_INSTRUMENTATIONS=none
-
노드 -
OTEL_NODE_DISABLED_INSTRUMENTATIONS=none
-
Java –
OTEL_INSTRUMENTATION_COMMON_DEFAULT_ENABLED=true
OpenTelemetry용 AWS Lambda 계층 ARN
다음 표에는 지원되는 리전마다 OpenTelemetry용 AWS Lambda 계층을 사용하는 ARN이 나열되어 있습니다.
- Python
-
리전 ARN 미국 동부(버지니아 북부)
arn:aws:lambda:us-east-1:615299751070:layer:AWSOpenTelemetryDistroPython:16
미국 동부(오하이오)
arn:aws:lambda:us-east-2:615299751070:layer:AWSOpenTelemetryDistroPython:13
미국 서부(캘리포니아 북부)
arn:aws:lambda:us-west-1:615299751070:layer:AWSOpenTelemetryDistroPython:20
미국 서부(오리건)
arn:aws:lambda:us-west-2:615299751070:layer:AWSOpenTelemetryDistroPython:20
아프리카(케이프타운)
arn:aws:lambda:af-south-1:904233096616:layer:AWSOpenTelemetryDistroPython:10
아시아 태평양(홍콩)
arn:aws:lambda:ap-east-1:888577020596:layer:AWSOpenTelemetryDistroPython:10
아시아 태평양(하이데라바드)
arn:aws:lambda:ap-south-2:796973505492:layer:AWSOpenTelemetryDistroPython:10
아시아 태평양(자카르타)
arn:aws:lambda:ap-southeast-3:039612877180:layer:AWSOpenTelemetryDistroPython:10
아시아 태평양(멜버른)
arn:aws:lambda:ap-southeast-4:713881805771:layer:AWSOpenTelemetryDistroPython:10
아시아 태평양(뭄바이)
arn:aws:lambda:ap-south-1:615299751070:layer:AWSOpenTelemetryDistroPython:13
아시아 태평양(오사카)
arn:aws:lambda:ap-northeast-3:615299751070:layer:AWSOpenTelemetryDistroPython:12
아시아 태평양(서울)
arn:aws:lambda:ap-northeast-2:615299751070:layer:AWSOpenTelemetryDistroPython:13
아시아 태평양(싱가포르)
arn:aws:lambda:ap-southeast-1:615299751070:layer:AWSOpenTelemetryDistroPython:12
아시아 태평양(시드니)
arn:aws:lambda:ap-southeast-2:615299751070:layer:AWSOpenTelemetryDistroPython:13
아시아 태평양(도쿄)
arn:aws:lambda:ap-northeast-1:615299751070:layer:AWSOpenTelemetryDistroPython:13
캐나다(중부)
arn:aws:lambda:ca-central-1:615299751070:layer:AWSOpenTelemetryDistroPython:13
유럽(프랑크푸르트)
arn:aws:lambda:eu-central-1:615299751070:layer:AWSOpenTelemetryDistroPython:13
유럽(아일랜드)
arn:aws:lambda:eu-west-1:615299751070:layer:AWSOpenTelemetryDistroPython:13
유럽(런던)
arn:aws:lambda:eu-west-2:615299751070:layer:AWSOpenTelemetryDistroPython:13
유럽(밀라노)
arn:aws:lambda:eu-south-1:257394471194:layer:AWSOpenTelemetryDistroPython:10
유럽(파리)
arn:aws:lambda:eu-west-3:615299751070:layer:AWSOpenTelemetryDistroPython:13
유럽(스페인)
arn:aws:lambda:eu-south-2:490004653786:layer:AWSOpenTelemetryDistroPython:10
유럽(스톡홀름)
arn:aws:lambda:eu-north-1:615299751070:layer:AWSOpenTelemetryDistroPython:13
유럽(취리히)
arn:aws:lambda:eu-central-2:156041407956:layer:AWSOpenTelemetryDistroPython:10
이스라엘(텔아비브)
arn:aws:lambda:il-central-1:746669239226:layer:AWSOpenTelemetryDistroPython:10
중동(바레인)
arn:aws:lambda:me-south-1:980921751758:layer:AWSOpenTelemetryDistroPython:10
중동(UAE)
arn:aws:lambda:me-central-1:739275441131:layer:AWSOpenTelemetryDistroPython:10
남아메리카(상파울루)
arn:aws:lambda:sa-east-1:615299751070:layer:AWSOpenTelemetryDistroPython:13
- Node.js
-
리전 ARN 미국 동부(버지니아 북부)
arn:aws:lambda:us-east-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
미국 동부(오하이오)
arn:aws:lambda:us-east-2:615299751070:layer:AWSOpenTelemetryDistroJs:8
미국 서부(캘리포니아 북부)
arn:aws:lambda:us-west-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
미국 서부(오리건)
arn:aws:lambda:us-west-2:615299751070:layer:AWSOpenTelemetryDistroJs:8
아프리카(케이프타운)
arn:aws:lambda:af-south-1:904233096616:layer:AWSOpenTelemetryDistroJs:8
아시아 태평양(홍콩)
arn:aws:lambda:ap-east-1:888577020596:layer:AWSOpenTelemetryDistroJs:8
아시아 태평양(하이데라바드)
arn:aws:lambda:ap-south-2:796973505492:layer:AWSOpenTelemetryDistroJs:6
아시아 태평양(자카르타)
arn:aws:lambda:ap-southeast-3:039612877180:layer:AWSOpenTelemetryDistroJs:8
아시아 태평양(멜버른)
arn:aws:lambda:ap-southeast-4:713881805771:layer:AWSOpenTelemetryDistroJs:8
아시아 태평양(뭄바이)
arn:aws:lambda:ap-south-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
아시아 태평양(오사카)
arn:aws:lambda:ap-northeast-3:615299751070:layer:AWSOpenTelemetryDistroJs:8
아시아 태평양(서울)
arn:aws:lambda:ap-northeast-2:615299751070:layer:AWSOpenTelemetryDistroJs:8
아시아 태평양(싱가포르)
arn:aws:lambda:ap-southeast-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
아시아 태평양(시드니)
arn:aws:lambda:ap-southeast-2:615299751070:layer:AWSOpenTelemetryDistroJs:8
아시아 태평양(도쿄)
arn:aws:lambda:ap-northeast-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
캐나다(중부)
arn:aws:lambda:ca-central-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
유럽(프랑크푸르트)
arn:aws:lambda:eu-central-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
유럽(아일랜드)
arn:aws:lambda:eu-west-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
유럽(런던)
arn:aws:lambda:eu-west-2:615299751070:layer:AWSOpenTelemetryDistroJs:8
유럽(밀라노)
arn:aws:lambda:eu-south-1:257394471194:layer:AWSOpenTelemetryDistroJs:8
유럽(파리)
arn:aws:lambda:eu-west-3:615299751070:layer:AWSOpenTelemetryDistroJs:8
유럽(스페인)
arn:aws:lambda:eu-south-2:490004653786:layer:AWSOpenTelemetryDistroJs:8
유럽(스톡홀름)
arn:aws:lambda:eu-north-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
유럽(취리히)
arn:aws:lambda:eu-central-2:156041407956:layer:AWSOpenTelemetryDistroJs:8
이스라엘(텔아비브)
arn:aws:lambda:il-central-1:746669239226:layer:AWSOpenTelemetryDistroJs:8
중동(바레인)
arn:aws:lambda:me-south-1:980921751758:layer:AWSOpenTelemetryDistroJs:8
중동(UAE)
arn:aws:lambda:me-central-1:739275441131:layer:AWSOpenTelemetryDistroJs:8
남아메리카(상파울루)
arn:aws:lambda:sa-east-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
- .Net
-
리전 ARN 미국 동부(버지니아 북부)
arn:aws:lambda:us-east-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:6
미국 동부(오하이오)
arn:aws:lambda:us-east-2:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
미국 서부(캘리포니아 북부)
arn:aws:lambda:us-west-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
미국 서부(오리건)
arn:aws:lambda:us-west-2:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
아프리카(케이프타운)
arn:aws:lambda:af-south-1:904233096616:layer:AWSOpenTelemetryDistroDotNet:5
아시아 태평양(홍콩)
arn:aws:lambda:ap-east-1:888577020596:layer:AWSOpenTelemetryDistroDotNet:5
아시아 태평양(하이데라바드)
arn:aws:lambda:ap-south-2:796973505492:layer:AWSOpenTelemetryDistroDotNet:5
아시아 태평양(자카르타)
arn:aws:lambda:ap-southeast-3:039612877180:layer:AWSOpenTelemetryDistroDotNet:5
아시아 태평양(멜버른)
arn:aws:lambda:ap-southeast-4:713881805771:layer:AWSOpenTelemetryDistroDotNet:5
아시아 태평양(뭄바이)
arn:aws:lambda:ap-south-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
아시아 태평양(오사카)
arn:aws:lambda:ap-northeast-3:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
아시아 태평양(서울)
arn:aws:lambda:ap-northeast-2:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
아시아 태평양(싱가포르)
arn:aws:lambda:ap-southeast-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
아시아 태평양(시드니)
arn:aws:lambda:ap-southeast-2:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
아시아 태평양(도쿄)
arn:aws:lambda:ap-northeast-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
캐나다(중부)
arn:aws:lambda:ca-central-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
유럽(프랑크푸르트)
arn:aws:lambda:eu-central-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
유럽(아일랜드)
arn:aws:lambda:eu-west-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
유럽(런던)
arn:aws:lambda:eu-west-2:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
유럽(밀라노)
arn:aws:lambda:eu-south-1:257394471194:layer:AWSOpenTelemetryDistroDotNet:5
유럽(파리)
arn:aws:lambda:eu-west-3:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
유럽(스페인)
arn:aws:lambda:eu-south-2:490004653786:layer:AWSOpenTelemetryDistroDotNet:5
유럽(스톡홀름)
arn:aws:lambda:eu-north-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
유럽(취리히)
arn:aws:lambda:eu-central-2:156041407956:layer:AWSOpenTelemetryDistroDotNet:5
이스라엘(텔아비브)
arn:aws:lambda:il-central-1:746669239226:layer:AWSOpenTelemetryDistroDotNet:5
중동(바레인)
arn:aws:lambda:me-south-1:980921751758:layer:AWSOpenTelemetryDistroDotNet:5
중동(UAE)
arn:aws:lambda:me-central-1:739275441131:layer:AWSOpenTelemetryDistroDotNet:5
남아메리카(상파울루)
arn:aws:lambda:sa-east-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
- Java
-
리전 ARN 미국 동부(버지니아 북부)
arn:aws:lambda:us-east-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
미국 동부(오하이오)
arn:aws:lambda:us-east-2:615299751070:layer:AWSOpenTelemetryDistroJava:5
미국 서부(캘리포니아 북부)
arn:aws:lambda:us-west-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
미국 서부(오리건)
arn:aws:lambda:us-west-2:615299751070:layer:AWSOpenTelemetryDistroJava:5
아프리카(케이프타운)
arn:aws:lambda:af-south-1:904233096616:layer:AWSOpenTelemetryDistroJava:5
아시아 태평양(홍콩)
arn:aws:lambda:ap-east-1:888577020596:layer:AWSOpenTelemetryDistroJava:5
아시아 태평양(하이데라바드)
arn:aws:lambda:ap-south-2:796973505492:layer:AWSOpenTelemetryDistroJava:5
아시아 태평양(자카르타)
arn:aws:lambda:ap-southeast-3:039612877180:layer:AWSOpenTelemetryDistroJava:5
아시아 태평양(멜버른)
arn:aws:lambda:ap-southeast-4:713881805771:layer:AWSOpenTelemetryDistroJava:5
아시아 태평양(뭄바이)
arn:aws:lambda:ap-south-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
아시아 태평양(오사카)
arn:aws:lambda:ap-northeast-3:615299751070:layer:AWSOpenTelemetryDistroJava:5
아시아 태평양(서울)
arn:aws:lambda:ap-northeast-2:615299751070:layer:AWSOpenTelemetryDistroJava:5
아시아 태평양(싱가포르)
arn:aws:lambda:ap-southeast-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
아시아 태평양(시드니)
arn:aws:lambda:ap-southeast-2:615299751070:layer:AWSOpenTelemetryDistroJava:5
아시아 태평양(도쿄)
arn:aws:lambda:ap-northeast-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
캐나다(중부)
arn:aws:lambda:ca-central-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
유럽(프랑크푸르트)
arn:aws:lambda:eu-central-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
유럽(아일랜드)
arn:aws:lambda:eu-west-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
유럽(런던)
arn:aws:lambda:eu-west-2:615299751070:layer:AWSOpenTelemetryDistroJava:5
유럽(밀라노)
arn:aws:lambda:eu-south-1:257394471194:layer:AWSOpenTelemetryDistroJava:5
유럽(파리)
arn:aws:lambda:eu-west-3:615299751070:layer:AWSOpenTelemetryDistroJava:5
유럽(스페인)
arn:aws:lambda:eu-south-2:490004653786:layer:AWSOpenTelemetryDistroJava:5
유럽(스톡홀름)
arn:aws:lambda:eu-north-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
유럽(취리히)
arn:aws:lambda:eu-central-2:156041407956:layer:AWSOpenTelemetryDistroJava:5
이스라엘(텔아비브)
arn:aws:lambda:il-central-1:746669239226:layer:AWSOpenTelemetryDistroJava:5
중동(바레인)
arn:aws:lambda:me-south-1:980921751758:layer:AWSOpenTelemetryDistroJava:5
중동(UAE)
arn:aws:lambda:me-central-1:739275441131:layer:AWSOpenTelemetryDistroJava:5
남아메리카(상파울루)
arn:aws:lambda:sa-east-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
Amazon ECR 컨테이너를 사용하여 Lambda 함수 배포
컨테이너 이미지로 배포된 Lambda 함수에서는 기존 방식으로 Lambda 계층을 지원하지 않습니다. 컨테이너 이미지를 사용하는 경우 다른 Lambda 배포 방법처럼 계층을 연결할 수 없습니다. 그 대신 빌드 프로세스 중에 계층의 콘텐츠를 컨테이너 이미지에 수동으로 통합해야 합니다.
- Java
-
OpenTelemetry용 AWS Lambda 계층을 컨테이너화된 Java Lambda 함수에 통합하고,
layer.zip
아티팩트를 다운로드하고 Java Lambda 함수 컨테이너에 통합하여 Application Signals 모니터링을 활성화하는 방법을 알아볼 수 있습니다.사전 조건
-
자격 증명으로 구성된 AWS CLI
-
Docker 설치됨
-
이러한 지침에서는 사용자가 x86_64 플랫폼에 있다고 가정합니다.
-
프로젝트 구조 설정
Lambda 함수에 대한 디렉터리 생성
mkdir java-appsignals-container-lambda && \ cd java-appsignals-container-lambda
Maven 프로젝트 구조 생성
mkdir -p src/main/java/com/example/java/lambda mkdir -p src/main/resources
-
Dockerfile 생성
Application Signals가 지원되는 OpenTelemetry 계층을 다운로드하여 Lambda 컨테이너 이미지에 바로 통합합니다. 이를 위해
Dockerfile
파일이 생성됩니다.FROM public.ecr.aws/lambda/java:21 # Install utilities RUN dnf install -y unzip wget maven # Download the OpenTelemetry Layer with AppSignals Support RUN wget https://github.com/aws-observability/aws-otel-java-instrumentation/releases/latest/download/layer.zip -O /tmp/layer.zip # Extract and include Lambda layer contents RUN mkdir -p /opt && \ unzip /tmp/layer.zip -d /opt/ && \ chmod -R 755 /opt/ && \ rm /tmp/layer.zip # Copy and build function code COPY pom.xml ${LAMBDA_TASK_ROOT} COPY src ${LAMBDA_TASK_ROOT}/src RUN mvn clean package -DskipTests # Copy the JAR file to the Lambda runtime directory (from inside the container) RUN mkdir -p ${LAMBDA_TASK_ROOT}/lib/ RUN cp ${LAMBDA_TASK_ROOT}/target/function.jar ${LAMBDA_TASK_ROOT}/lib/ # Set the handler CMD ["com.example.java.lambda.App::handleRequest"]
참고
layer.zip
파일에는 AWS Application Signals 지원에서 Lambda 함수를 모니터링하는 데 필요한 OpenTelemetry 계측이 포함되어 있습니다.계층 추출 단계에서 다음이 확보됩니다.
-
layer.zip 콘텐츠가
/opt/ directory
에 제대로 추출됩니다. -
otel-instrument
스크립트가 적절한 실행 권한을 받습니다. -
이미지 크기가 더 작게 유지되도록 임시 layer.zip 파일이 제거됩니다.
-
-
Lambda 함수 코드 -
src/main/java/com/example/lambda/App.java:
에서 Lambda 핸들러에 대한 Java 파일 생성프로젝트가 다음과 같아야 합니다.
. ├── Dockerfile ├── pom.xml └── src └── main ├── java │ └── com │ └── example │ └── java │ └── lambda │ └── App.java └── resources
-
컨테이너 이미지 빌드 및 배포
환경 변수 설정
AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) AWS_REGION=$(aws configure get region) # For fish shell users: # set AWS_ACCOUNT_ID (aws sts get-caller-identity --query Account --output text) # set AWS_REGION (aws configure get region)
ECR로 인증
먼저 퍼블릭 ECR 사용(기본 이미지의 경우):
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws
그런 다음에 프라이빗 ECR 사용:
aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com
이미지 빌드, 태그 지정 및 푸시
# Build the Docker image docker build -t lambda-appsignals-demo . # Tag the image docker tag lambda-appsignals-demo:latest $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/lambda-appsignals-demo:latest # Push the image docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/lambda-appsignals-demo:latest
-
Lambda 함수 생성 및 구성
Lambda 콘솔을 사용하여 새 함수를 생성합니다.
배포 옵션으로 컨테이너 이미지를 선택합니다.
이미지 찾아보기기 선택하여 Amazon ECR 이미지를 선택합니다.
-
테스트 및 확인 - 간단한 이벤트로 Lambda를 테스트합니다. 계층 통합에 성공하면 Application Signals 서비스 맵 아래에 Lambda가 나타납니다.
CloudWatch 콘솔에 Lambda 함수에 대한 트레이스 및 지표가 표시됩니다.
문제 해결
Application Signals가 작동하지 않는 경우 다음을 확인합니다.
-
OpenTelemetry 계측과 관련된 오류가 있는지 함수 로그를 확인합니다.
-
환경 변수
AWS_LAMBDA_EXEC_WRAPPER
가 올바르게 설정되었는지 확인 -
Docker 파일의 계층 추출이 성공적으로 완료되었는지 확인
-
IAM 권한이 제대로 연결되었는지 확인
-
필요한 경우 Lambda 함수의 일반 구성에서 타임아웃 및 메모리 설정을 늘립니다.
-
- .Net
-
Application Signals가 지원되는 OpenTelemetry 계층을 컨테이너화된 .Net Lambda 함수에 통합하고,
layer.zip
아티팩트를 다운로드하고 .Net Lambda 함수 컨테이너에 통합하여 Application Signals 모니터링을 활성화하는 방법을 알아볼 수 있습니다.사전 조건
-
자격 증명으로 구성된 AWS CLI
-
Docker 설치됨
-
.Net 8 SDK
-
이러한 지침에서는 사용자가 x86_64 플랫폼에 있다고 가정합니다.
-
프로젝트 구조 설정
Lambda 함수 컨테이너 이미지용 디렉터리 생성
mkdir dotnet-appsignals-container-lambda && \ cd dotnet-appsignals-container-lambda
-
Dockerfile 생성
Application Signals가 지원되는 OpenTelemetry 계층을 다운로드하여 Lambda 컨테이너 이미지에 바로 통합합니다. 이를 위해
Dockerfile
파일이 생성됩니다.FROM public.ecr.aws/lambda/dotnet:8 # Install utilities RUN dnf install -y unzip wget dotnet-sdk-8.0 which # Add dotnet command to docker container's PATH ENV PATH="/usr/lib64/dotnet:${PATH}" # Download the OpenTelemetry Layer with AppSignals Support RUN wget https://github.com/aws-observability/aws-otel-dotnet-instrumentation/releases/latest/download/layer.zip -O /tmp/layer.zip # Extract and include Lambda layer contents RUN mkdir -p /opt && \ unzip /tmp/layer.zip -d /opt/ && \ chmod -R 755 /opt/ && \ rm /tmp/layer.zip WORKDIR ${LAMBDA_TASK_ROOT} # Copy the project files COPY dotnet-lambda-function/src/dotnet-lambda-function/*.csproj ${LAMBDA_TASK_ROOT}/ COPY dotnet-lambda-function/src/dotnet-lambda-function/Function.cs ${LAMBDA_TASK_ROOT}/ COPY dotnet-lambda-function/src/dotnet-lambda-function/aws-lambda-tools-defaults.json ${LAMBDA_TASK_ROOT}/ # Install dependencies and build the application RUN dotnet restore # Use specific runtime identifier and disable ReadyToRun optimization RUN dotnet publish -c Release -o out --self-contained false /p:PublishReadyToRun=false # Copy the published files to the Lambda runtime directory RUN cp -r out/* ${LAMBDA_TASK_ROOT}/ CMD ["dotnet-lambda-function::dotnet_lambda_function.Function::FunctionHandler"]
참고
layer.zip
파일에는 AWS Application Signals 지원에서 Lambda 함수를 모니터링하는 데 필요한 OpenTelemetry 계측이 포함되어 있습니다.계층 추출 단계에서 다음이 확보됩니다.
-
layer.zip 콘텐츠가
/opt/ directory
에 제대로 추출됩니다. -
otel-instrument
스크립트가 적절한 실행 권한을 받습니다. -
이미지 크기가 더 작게 유지되도록 임시 layer.zip 파일이 제거됩니다.
-
-
Lambda 함수 코드 - Lambda .NET 템플릿을 사용하여 AWS Lambda 프로젝트를 초기화합니다.
# Install the Lambda templates if you haven't already dotnet new -i Amazon.Lambda.Templates # Create a new Lambda project dotnet new lambda.EmptyFunction -n dotnet-lambda-function
프로젝트가 다음과 같아야 합니다.
. ├── Dockerfile └── dotnet-lambda-function ├── src │ └── dotnet-lambda-function │ ├── Function.cs │ ├── Readme.md │ ├── aws-lambda-tools-defaults.json │ └── dotnet-lambda-function.csproj └── test └── dotnet-lambda-function.Tests ├── FunctionTest.cs └── dotnet-lambda-function.Tests.csproj
-
컨테이너 이미지 빌드 및 배포
환경 변수 설정
AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) AWS_REGION=$(aws configure get region) # For fish shell users: # set AWS_ACCOUNT_ID (aws sts get-caller-identity --query Account --output text) # set AWS_REGION (aws configure get region)
Function.cs
코드를 다음과 같이 업데이트합니다.dotnet-lambda-function.csproj
코드를 다음과 같이 업데이트합니다.<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net8.0>/TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles> <AWSProjectType>Lambda</AWSProjectType> <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> <PublishReadyToRun>true</PublishReadyToRun> </PropertyGroup> <ItemGroup> <PackageReference Include="Amazon.Lambda.Core" Version="2.5.0" /> <PackageReference Include="Amazon.Lambda.Serialization.SystemTextJson" Version="2.4.4" /> <PackageReference Include="AWSSDK.S3" Version="3.7.305.23" /> </ItemGroup> </Project>
-
컨테이너 이미지 빌드 및 배포
환경 변수 설정
AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) AWS_REGION=$(aws configure get region) # For fish shell users: # set AWS_ACCOUNT_ID (aws sts get-caller-identity --query Account --output text) # set AWS_REGION (aws configure get region)
퍼블릭 Amazon ECR로 인증
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws
프라이빗 Amazon ECR로 인증
aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com
Amazon ECR 리포지토리 생성(필요한 경우)
aws ecr create-repository \ --repository-name lambda-appsignals-demo \ --region $AWS_REGION
이미지 빌드, 태그 지정 및 푸시
# Build the Docker image docker build -t lambda-appsignals-demo . # Tag the image docker tag lambda-appsignals-demo:latest $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/lambda-appsignals-demo:latest # Push the image docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/lambda-appsignals-demo:latest 5. Create and Configure the Lambda Function
-
Lambda 함수 생성 및 구성
Lambda 콘솔을 사용하여 새 함수를 생성합니다.
배포 옵션으로 컨테이너 이미지를 선택합니다.
이미지 찾아보기기 선택하여 Amazon ECR 이미지를 선택합니다.
-
테스트 및 확인 - 간단한 이벤트로 Lambda를 테스트합니다. 계층 통합에 성공하면 Application Signals 서비스 맵 아래에 Lambda가 나타납니다.
CloudWatch 콘솔에 Lambda 함수에 대한 트레이스 및 지표가 표시됩니다.
문제 해결
Application Signals가 작동하지 않는 경우 다음을 확인합니다.
-
OpenTelemetry 계측과 관련된 오류가 있는지 함수 로그를 확인합니다.
-
환경 변수
AWS_LAMBDA_EXEC_WRAPPER
가 올바르게 설정되었는지 확인 -
Docker 파일의 계층 추출이 성공적으로 완료되었는지 확인
-
IAM 권한이 제대로 연결되었는지 확인
-
필요한 경우 Lambda 함수의 일반 구성에서 타임아웃 및 메모리 설정을 늘립니다.
-
- Node.js
-
Application Signals가 지원되는 OpenTelemetry 계층을 컨테이너화된 Node.js Lambda 함수에 통합하고,
layer.zip
아티팩트를 다운로드하고 Node.js Lambda 함수 컨테이너에 통합하여 Application Signals 모니터링을 활성화하는 방법을 알아볼 수 있습니다.사전 조건
-
자격 증명으로 구성된 AWS CLI
-
Docker 설치됨
-
이러한 지침에서는 사용자가 x86_64 플랫폼에 있다고 가정합니다.
-
프로젝트 구조 설정
Lambda 함수 컨테이너 이미지용 디렉터리 생성
mkdir nodejs-appsignals-container-lambda &&\ cd nodejs-appsignals-container-lambda
-
Dockerfile 생성
Application Signals가 지원되는 OpenTelemetry 계층을 다운로드하여 Lambda 컨테이너 이미지에 바로 통합합니다. 이를 위해
Dockerfile
파일이 생성됩니다.# Dockerfile FROM public.ecr.aws/lambda/nodejs:22 # Install utilities RUN dnf install -y unzip wget # Download the OpenTelemetry Layer with AppSignals Support RUN wget https://github.com/aws-observability/aws-otel-js-instrumentation/releases/latest/download/layer.zip -O /tmp/layer.zip # Extract and include Lambda layer contents RUN mkdir -p /opt && \ unzip /tmp/layer.zip -d /opt/ && \ chmod -R 755 /opt/ && \ rm /tmp/layer.zip # Install npm dependencies RUN npm init -y RUN npm install # Copy function code COPY *.js ${LAMBDA_TASK_ROOT}/ # Set the CMD to your handler CMD [ "index.handler" ]
참고
layer.zip
파일에는 AWS Application Signals 지원에서 Lambda 함수를 모니터링하는 데 필요한 OpenTelemetry 계측이 포함되어 있습니다.계층 추출 단계에서 다음이 확보됩니다.
-
layer.zip 콘텐츠가
/opt/ directory
에 제대로 추출됩니다. -
otel-instrument
스크립트가 적절한 실행 권한을 받습니다. -
이미지 크기가 더 작게 유지되도록 임시 layer.zip 파일이 제거됩니다.
-
-
Lambda 함수 코드
다음과 같은 콘텐츠로
index.js
파일을 생성합니다.const { S3Client, ListBucketsCommand } = require('@aws-sdk/client-s3'); // Initialize S3 client const s3Client = new S3Client({ region: process.env.AWS_REGION }); exports.handler = async function(event, context) { console.log('Received event:', JSON.stringify(event, null, 2)); console.log('Handler initializing:', exports.handler.name); const response = { statusCode: 200, body: {} }; try { // List S3 buckets const command = new ListBucketsCommand({}); const data = await s3Client.send(command); // Extract bucket names const bucketNames = data.Buckets.map(bucket => bucket.Name); response.body = { message: 'Successfully retrieved buckets', buckets: bucketNames }; } catch (error) { console.error('Error listing buckets:', error); response.statusCode = 500; response.body = { message: `Error listing buckets: ${error.message}` }; } return response; };
프로젝트 구조가 다음과 같아야 합니다.
. ├── Dockerfile └── index.js
-
컨테이너 이미지 빌드 및 배포
환경 변수 설정
AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) AWS_REGION=$(aws configure get region) # For fish shell users: # set AWS_ACCOUNT_ID (aws sts get-caller-identity --query Account --output text) # set AWS_REGION (aws configure get region)
퍼블릭 Amazon ECR로 인증
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws
프라이빗 Amazon ECR로 인증
aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com
Amazon ECR 리포지토리 생성(필요한 경우)
aws ecr create-repository \ --repository-name lambda-appsignals-demo \ --region $AWS_REGION
이미지 빌드, 태그 지정 및 푸시
# Build the Docker image docker build -t lambda-appsignals-demo . # Tag the image docker tag lambda-appsignals-demo:latest $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/lambda-appsignals-demo:latest # Push the image docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/lambda-appsignals-demo:latest 5. Create and Configure the Lambda Function
-
Lambda 함수 생성 및 구성
Lambda 콘솔을 사용하여 새 함수를 생성합니다.
배포 옵션으로 컨테이너 이미지를 선택합니다.
이미지 찾아보기기 선택하여 Amazon ECR 이미지를 선택합니다.
-
테스트 및 확인 - 간단한 이벤트로 Lambda를 테스트합니다. 계층 통합에 성공하면 Application Signals 서비스 맵 아래에 Lambda가 나타납니다.
CloudWatch 콘솔에 Lambda 함수에 대한 트레이스 및 지표가 표시됩니다.
문제 해결
Application Signals가 작동하지 않는 경우 다음을 확인합니다.
-
OpenTelemetry 계측과 관련된 오류가 있는지 함수 로그를 확인합니다.
-
환경 변수
AWS_LAMBDA_EXEC_WRAPPER
가 올바르게 설정되었는지 확인 -
Docker 파일의 계층 추출이 성공적으로 완료되었는지 확인
-
IAM 권한이 제대로 연결되었는지 확인
-
필요한 경우 Lambda 함수의 일반 구성에서 타임아웃 및 메모리 설정을 늘립니다.
-
- Python
-
Application Signals가 지원되는 OpenTelemetry 계층을 컨테이너화된 Python Lambda 함수에 통합하고,
layer.zip
아티팩트를 다운로드하고 .Python Lambda 함수 컨테이너에 통합하여 Application Signals 모니터링을 활성화하는 방법을 알아볼 수 있습니다.사전 조건
-
자격 증명으로 구성된 AWS CLI
-
Docker 설치됨
-
이러한 지침에서는 사용자가 x86_64 플랫폼에 있다고 가정합니다.
-
프로젝트 구조 설정
Lambda 함수 컨테이너 이미지용 디렉터리 생성
mkdir python-appsignals-container-lambda &&\ cd python-appsignals-container-lambda
-
Dockerfile 생성
Application Signals가 지원되는 OpenTelemetry 계층을 다운로드하여 Lambda 컨테이너 이미지에 바로 통합합니다. 이를 위해
Dockerfile
파일이 생성됩니다.참고
layer.zip
파일에는 AWS Application Signals 지원에서 Lambda 함수를 모니터링하는 데 필요한 OpenTelemetry 계측이 포함되어 있습니다.계층 추출 단계에서 다음이 확보됩니다.
-
layer.zip 콘텐츠가
/opt/ directory
에 제대로 추출됩니다. -
otel-instrument
스크립트가 적절한 실행 권한을 받습니다. -
이미지 크기가 더 작게 유지되도록 임시 layer.zip 파일이 제거됩니다.
-
-
Lambda 함수 코드
app.py
파일에 Lambda 함수를 생성합니다.import json import boto3 def lambda_handler(event, context): """ Sample Lambda function that can be used in a container image. Parameters: ----------- event: dict Input event data context: LambdaContext Lambda runtime information Returns: __ dict Response object """ print("Received event:", json.dumps(event, indent=2)) # Create S3 client s3 = boto3.client('s3') try: # List buckets response = s3.list_buckets() # Extract bucket names buckets = [bucket['Name'] for bucket in response['Buckets']] return { 'statusCode': 200, 'body': json.dumps({ 'message': 'Successfully retrieved buckets', 'buckets': buckets }) } except Exception as e: print(f"Error listing buckets: {str(e)}") return { 'statusCode': 500, 'body': json.dumps({ 'message': f'Error listing buckets: {str(e)}' }) }
프로젝트 구조가 다음과 같아야 합니다.
. ├── Dockerfile ├── app.py └── instructions.md
-
컨테이너 이미지 빌드 및 배포
환경 변수 설정
AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) AWS_REGION=$(aws configure get region) # For fish shell users: # set AWS_ACCOUNT_ID (aws sts get-caller-identity --query Account --output text) # set AWS_REGION (aws configure get region)
퍼블릭 Amazon ECR로 인증
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws
프라이빗 Amazon ECR로 인증
aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com
Amazon ECR 리포지토리 생성(필요한 경우)
aws ecr create-repository \ --repository-name lambda-appsignals-demo \ --region $AWS_REGION
이미지 빌드, 태그 지정 및 푸시
# Build the Docker image docker build -t lambda-appsignals-demo . # Tag the image docker tag lambda-appsignals-demo:latest $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/lambda-appsignals-demo:latest # Push the image docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/lambda-appsignals-demo:latest 5. Create and Configure the Lambda Function
-
Lambda 함수 생성 및 구성
Lambda 콘솔을 사용하여 새 함수를 생성합니다.
배포 옵션으로 컨테이너 이미지를 선택합니다.
이미지 찾아보기기 선택하여 Amazon ECR 이미지를 선택합니다.
-
테스트 및 확인 - 간단한 이벤트로 Lambda를 테스트합니다. 계층 통합에 성공하면 Application Signals 서비스 맵 아래에 Lambda가 나타납니다.
CloudWatch 콘솔에 Lambda 함수에 대한 트레이스 및 지표가 표시됩니다.
문제 해결
Application Signals가 작동하지 않는 경우 다음을 확인합니다.
-
OpenTelemetry 계측과 관련된 오류가 있는지 함수 로그를 확인합니다.
-
환경 변수
AWS_LAMBDA_EXEC_WRAPPER
가 올바르게 설정되었는지 확인 -
Docker 파일의 계층 추출이 성공적으로 완료되었는지 확인
-
IAM 권한이 제대로 연결되었는지 확인
-
필요한 경우 Lambda 함수의 일반 구성에서 타임아웃 및 메모리 설정을 늘립니다.
-