서버리스 전환 - CloudWatch Logs를 S3로 내보내기
이를 달성하기 위해 다음 AWS 서비스를 사용할 것입니다.
1. S3 버킷 생성
로그를 내보낼 S3 버킷을 생성합니다. CloudWatch가 객체를 버킷에 PUT(WRITE 액세스)하도록 허용하려면 다음 정책을 연결합니다.
{
"Version": "2008-10-17",
"Id": "Policy1335892530063",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "logs.YOUR-REGION.amazonaws.com"
},
"Action": "s3:GetBucketAcl",
"Resource": "arn:aws:s3:::YOUR-BUCKET-NAME"
},
{
"Effect": "Allow",
"Principal": {
"Service": "logs.YOUR-REGION.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::YOUR-BUCKET-NAME/*",
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "bucket-owner-full-control"
}
}
}
]
}
2. IAM 역할 생성
여기에서는 Lambda가 이벤트를 기록하고 생성한 S3 버킷에 쓰기 위한 IAM 역할, 즉 'Export-CloudWatch-Logs-To-S3-Lambda-Role'을 생성합니다. 생성된 역할에 다음 정책을 추가합니다.
3. Lambda 함수 생성 및 구성
Lambda를 사용하면 서버를 프로비저닝하거나 관리할 필요가 없습니다. 아래 코드를 함수에 붙여넣기만 하면 트리거될 때 실행됩니다. 기사의 이 섹션에서는 Lambda 함수를 설정합니다.
Lambda >> Functions >> Create Function으로 이동하여 다음을 수행해야 합니다.
'처음부터 작성'을 선택합니다.
함수 이름: Export-CloudWatch-Logs-To-S3
런타임: Node.js 16.x
권한에서 기존 역할을 선택합니다. '기존 역할 사용'을 선택하고 이전에 생성한 IAM을 선택합니다. 이제 함수 생성을 클릭하십시오.
아래 스크린샷과 같이 함수 코드 섹션 아래에 위의 코드를 붙여넣어야 합니다.
NB: 버킷 이름을 위에서 만든 것과 배포할 지역으로 변경하십시오.
4. 단계 함수 상태 머신 만들기
한 번에 하나의 내보내기 작업이 수행되므로 여러 로그 그룹 데이터를 내보내려면 단계 시스템이 필요합니다.
서비스로 이동 >> Step Functions >> 시작하기 >> 상태 시스템 생성 >> 코드로 워크플로 작성 >> 다음 JSON 입력
{
"StartAt": "CreateExportTask",
"States": {
"CreateExportTask": {
"Type": "Task",
"Resource": "LAMBDA_FUNCTION_ARN",
"Next": "IsAllLogsExported"
},
"IsAllLogsExported": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.continue",
"BooleanEquals": true,
"Next": "CreateExportTask"
}
],
"Default": "SuccessState"
},
"SuccessState": {
"Type": "Succeed"
}
}
}
(이전에 생성한 람다 함수 ARN을 JSON에 State machine 정의에 넣음) → Create state machine 클릭.
5. CloudWatch 이벤트 규칙 생성
Lambda 함수가 특정 시간에 실행 또는 트리거되도록 예약하려면 CloudWatch 이벤트 규칙을 생성하고 구성해야 합니다.
새 규칙을 생성하려면 CloudWatch >> 규칙 >> Amazon EventBridge로 이동 >> 규칙 생성으로 이동해야 합니다. 이 예에서는 EAT 오후 11시에 Lambda 함수를 트리거합니다. (필요에 따라 시간 조정) 대상 >> AWS 서비스 >> Step Functions 상태 머신 선택(이전에 생성한 상태 머신 선택) >> 실행 역할(새 역할 생성) >> 추가 설정 >> 드롭다운에서 상수(JSON) 선택 텍스트) 다음 JSON을 입력합니다. 규칙을 검토하고 만듭니다.
{
"region":"REGION",
"logGroupFilter":"/aws",
"s3BucketName":"BUCKET_NAME",
"logFolderName":"cloudwatchlogs"
}
NB: logGroupFilter 목록에 대해 ["/aws", "/prod"] 사용
여기서 region은 이 솔루션을 설정한 지역입니다. 로그 그룹에만 logGroupFilter 값이 포함되어 내보내집니다. s3BucketName은 대상 버킷이며 logFolderName에 제공하는 값에 명명된 폴더가 생성되고 해당 로그에 저장됩니다.
이 특정 리소스에 대한 새 역할 생성을 선택합니다(이 역할은 CloudWatch 이벤트에 Step Functions 상태 시스템으로 이벤트를 보낼 권한이 필요함 >> 세부 정보 구성 클릭).
결론
이 솔루션은 매일 로그를 S3 버킷으로 내보냅니다. 이를 통해 CloudWatch에서 비용 사용량을 관리할 수 있습니다. 계속해서 S3 버킷에 수명 주기를 추가하여 로그가 90일이 지난 후 삭제되도록 합니다.
Reference
이 문제에 관하여(서버리스 전환 - CloudWatch Logs를 S3로 내보내기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bianca/going-serverless-export-cloudwatch-logs-to-s3-1jbh텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)