CloudWatch 로그 그룹 구성 - AWS Lambda

CloudWatch 로그 그룹 구성

기본적으로 CloudWatch는 함수를 처음 간접 호출할 때 함수의 /aws/lambda/<function name>이라는 이름이 지정된 로그 그룹을 자동으로 생성합니다. 기존 로그 그룹에 로그를 전송하도록 함수를 구성하거나 함수에 대한 새 로그 그룹을 생성하려면 Lambda 콘솔 또는 AWS CLI를 사용할 수 있습니다. CreateFunction, UpdateFunctionConfiguration Lambda API 명령 및 AWS Serverless Application Model (AWS SAM) AWS::Serverless::Function 리소스를 사용하여 사용자 지정 로그 그룹을 구성할 수도 있습니다.

로그를 동일한 CloudWatch 로그 그룹에 전송하도록 여러 Lambda 함수를 구성할 수 있습니다. 예를 들어 단일 로그 그룹을 사용하여 특정 애플리케이션을 구성하는 모든 Lambda 함수에 대한 로그를 저장할 수 있습니다. Lambda 함수에 대한 사용자 지정 로그 그룹을 사용하는 경우 Lambda가 생성하는 로그 스트림에는 함수 이름과 함수 버전이 포함됩니다. 이렇게 하면 여러 함수에 동일한 로그 그룹을 사용하더라도 로그 메시지와 함수 간의 매핑이 보존됩니다.

사용자 지정 로그 그룹의 로그 스트림 이름 지정 형식은 다음 규칙을 따릅니다.

YYYY/MM/DD/<function_name>[<function_version>][<execution_environment_GUID>]

사용자 지정 로그 그룹을 구성할 때 로그 그룹에 대해 선택한 이름은 CloudWatch 로그 이름 지정 규칙을 따라야 한다는 점에 유의합니다. 또한 사용자 지정 로그 그룹 이름은 aws/ 문자열로 시작해서는 안 됩니다. aws/로 시작하는 사용자 지정 로그 그룹을 생성하는 경우 Lambda는 로그 그룹을 생성할 수 없습니다. 따라서 함수의 로그가 CloudWatch로 전송되지 않습니다.

함수의 로그 그룹 변경하기(콘솔)
  1. Lambda 콘솔의 함수 페이지를 엽니다.

  2. 함수를 선택합니다.

  3. 함수 구성 페이지에서 모니터링 및 작업 도구를 선택합니다.

  4. 로깅 구성 창에서 편집을 선택합니다.

  5. 로깅 그룹 창의 CloudWatch 로그 그룹에서 사용자 지정을 선택합니다.

  6. 사용자 지정 로그 그룹에서 함수가 로그를 전송하기를 원하는 CloudWatch 로그 그룹의 이름을 입력합니다. 기존 로그 그룹의 이름을 입력하면 함수가 해당 그룹을 사용합니다. 입력한 이름을 가진 로그 그룹이 없는 경우 Lambda는 해당 이름으로 함수에 대한 새 로그 그룹을 생성합니다.

함수의 로그 그룹 변경하기(AWS CLI)
  • 기존 함수의 로그 그룹을 변경하려면 update-function-configuration 명령을 사용합니다.

    aws lambda update-function-configuration \ --function-name myFunction \ --logging-config LogGroup=myLogGroup
함수를 생성할 때 사용자 지정 로그 그룹 지정하기(AWS CLI)
  • AWS CLI를 사용하여 새 Lambda 함수를 생성할 때 사용자 지정 로그 그룹을 지정하려면 --logging-config 옵션을 사용하십시오. 다음 예제 명령은 myLogGroup이라는 로그 그룹에 로그를 보내는 Node.js Lambda 함수를 생성합니다.

    aws lambda create-function \ --function-name myFunction \ --runtime nodejs24.x \ --handler index.handler \ --zip-file fileb://function.zip \ --role arn:aws:iam::123456789012:role/LambdaRole \ --logging-config LogGroup=myLogGroup

실행 역할 권한

함수가 로그를 CloudWatch Logs로 전송하려면 해당 함수에 logs:PutLogEvents 권한이 있어야 합니다. Lambda 콘솔을 사용하여 함수의 로그 그룹을 구성하면 다음 조건에서 Lambda가 역할에 이 권한을 추가합니다.

  • 서비스 대상이 CloudWatch Logs로 설정됨

  • 함수의 실행 역할에 CloudWatch Logs(기본 대상)에 로그를 업로드할 수 있는 권한이 없습니다.

참고

Lambda가 Amazon S3 또는 Firehose 로그 대상에 대한 Put 권한을 추가하지 않습니다.

Lambda가 이 권한을 추가하면 모든 CloudWatch Logs 로그 그룹에 로그를 전송할 수 있는 권한을 함수에 부여합니다.

Lambda가 함수의 실행 역할을 자동으로 업데이트하지 않도록 하고 대신 수동으로 편집하려면 권한을 확장하고 필요한 권한 추가를 선택 취소합니다.

AWS CLI를 사용하여 함수의 로그 그룹을 구성하면 Lambda는 logs:PutLogEvents 권한을 자동으로 추가하지 않습니다. 함수의 실행 역할에 권한을 추가합니다(아직 권한이 없는 경우). 이러한 권한은 AWSLambdaBasicExecutionRole 관리형 정책에 포함됩니다.

Lambda 관리형 인스턴스의 CloudWatch 로깅

Lambda 관리형 인스턴스를 사용하는 경우 CloudWatch Logs로 로그를 전송하는 것과 관련된 추가 고려 사항이 있습니다.

VPC 네트워킹 요구 사항

Lambda 관리형 인스턴스는 VPC 내의 고객 소유 EC2 인스턴스에서 실행됩니다. CloudWatch Logs로 로그를 전송하고 X-Ray로 트레이스를 보내려면 VPC에서 AWS API가 라우팅 가능해야 합니다. 여러 가지 옵션이 있습니다.

  • AWS PrivateLink(권장): AWS PrivateLink를 사용하여 CloudWatch Logs 및 X-Ray 서비스에 대한 VPC 엔드포인트를 생성합니다. 이를 통해 인스턴스는 인터넷 게이트웨이 또는 NAT 게이트웨이 없이 이러한 서비스에 비공개로 액세스할 수 있습니다. 자세한 내용은 인터페이스 VPC 엔드포인트에서 CloudWatch Logs 사용 항목을 참조하세요.

  • NAT 게이트웨이: 프라이빗 서브넷에서 아웃바운드 인터넷 액세스를 허용하도록 NAT 게이트웨이를 구성합니다.

  • 인터넷 게이트웨이: 퍼블릭 서브넷의 경우 VPC에 인터넷 게이트웨이가 구성되어야 합니다.

CloudWatch Logs 또는 X-Ray API가 VPC에서 라우팅할 수 없는 경우 함수 로그 및 트레이스가 전달되지 않습니다.

동시 간접 호출 및 로그 어트리뷰션

Lambda 관리형 인스턴스 실행 환경은 여러 개의 간접 호출을 동시에 처리할 수 있습니다. 여러 간접 호출이 동시에 실행되면 해당 로그 항목이 동일한 로그 스트림에 인터리브됩니다. 동시 간접 호출에서 로그를 효과적으로 필터링 및 분석하려면 각 로그 항목에 AWS 요청 ID가 포함되어야 합니다.

다음 접근 방식 중 하나를 따르는 것이 좋습니다.

  • 기본 Lambda 런타임 로거 사용(권장): Lambda 관리형 런타임에서 제공하는 기본 로깅 라이브러리는 각 로그 항목에 요청 ID를 자동으로 포함합니다.

  • 구조화된 JSON 로깅 구현: 사용자 지정 런타임을 빌드하거나 사용자 지정 로깅이 필요한 경우 각 항목에 요청 ID가 포함된 JSON 형식의 로그를 구현합니다. Lambda 관리형 인스턴스는 JSON 로그 형식만 지원합니다. JSON 로그에 requestId 필드를 포함하여 간접 호출별 필터링을 활성화합니다.

    { "timestamp": "2025-01-15T10:30:00.000Z", "level": "INFO", "requestId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "message": "Processing request" }

요청 ID 어트리뷰션을 사용하면 CloudWatch Logs Insights 쿼리를 사용하여 특정 간접 호출에 대한 CloudWatch Logs 로그 항목을 필터링할 수 있습니다. 예제:

fields @timestamp, @message | filter requestId = "a1b2c3d4-e5f6-7890-abcd-ef1234567890" | sort @timestamp asc

Lambda 관리형 인스턴스 로깅 요구 사항에 대한 자세한 내용은 Lambda 관리형 인스턴스 실행 환경 이해 항목을 참조하세요.