CloudWatch Logs에 로그가 담긴 로그 그룹이 존재해야 합니다.lambda_function -> CloudWatch Logs(/aws/lambda/lambda_function)
-> test-hyeob-subscription-function -> CloudWatch Logs(/aws/lambda/test-hyeob-subscription-function)
AWSLambdaBasicExecutionRole 정책이 연결된 Lambda용 역할을 생성합니다.

CloudWatch 로그 그룹에서 필터링되어 보내온 로그를 처리할 함수를 생성합니다.
앞서 생성한 실행 역할을 부여합니다.
AWS 공식 문서를 참고해, 수신한 로그를 보여주는 js 코드를 작성합니다.
var zlib = require('zlib');
exports.handler = function(input, context) {
var payload = Buffer.from(input.awslogs.data, 'base64');
zlib.gunzip(payload, function(e, result) {
if (e) {
context.fail(e);
} else {
result = JSON.parse(result.toString());
console.log("Event Data:", JSON.stringify(result, null, 2));
context.succeed();
}
});
};

[CloudWatch Logs 콘솔] > [로그 그룹] > 원하는 로그 그룹 선택 > [구독 필터] > [생성] > [Lambda 구독 필터 생성]
Lambda 함수를 선택합니다.
로그 형식을 기타로 선택하면, 구독 필터 패턴에서 필터링을 원하는 문자열을 입력하면 그 문자열을 가진 줄이 필터링됩니다.
로그 데이터를 선택하고, 패턴 테스트 버튼을 눌러 필터링이 원활히 작동하는지 확인합니다.
Lambda 함수로 접근해보면 트리거에 CloudWatch Logs가 설정되어 있는 것을 확인할 수 있습니다.
Lambda_function으로 접근해서 테스트 이벤트를 통해 함수를 호출합니다.
다시 로그 그룹으로 돌아가서 선택한 Lambda 함수의 로그 그룹의 로그 스트림을 보면 아래와 같이 패턴에 맞게 로그가 필터링되어 나타난 것을 볼 수 있습니다.

{
"messageType": "DATA_MESSAGE",
"owner": "797587922006",
"logGroup": "/aws/lambda/lambda_function",
"logStream": "2022/06/13/[$LATEST]f27e02e2a343494595e99afe24f7f0b1",
"subscriptionFilters": [
"test-hyeob-subscription-filter"
],
"logEvents": [
{
"id": "36909988877094605541449121199307387343409251306215374848",
"timestamp": 1655101143415,
"message": "START RequestId: 6ba03044-b86f-4d44-a25c-7e046d23ed61 Version: $LATEST\n"
}
]
}
owner: 원본 로그 데이터의 AWS 계정 ID입니다.logGroup: 원본 로그 데이터의 로그 그룹 이름입니다.logStream: 원본 로그 데이터의 로그 스트림 이름입니다.subscriptionFilters: 원본 로그 데이터과 일치한 구독 필터 이름 목록입니다.messageType: 데이터 메시지는 "DATA_MESSAGE" 유형을 사용합니다. 때로 CloudWatch Logs는 주로 대상이 도달 가능한지 확인하기 위한 목적으로 "CONTROL_MESSAGE" 유형을 가진 Lambda 레코드를 출력할 수 있습니다.logEvents: 그 이벤트 레코드 어레이 형태로 표현되는 실제 로그 데이터입니다. "ID" 속성은 모든 로그 이벤트의 고유 식별자입니다.CloudWatch Logs의 구독 필터를 이용하면 이처럼 원하는 로그를 필터링해서 Lambda 함수를 통해 가공할 수 있습니다.