서버리스 전환 - CloudWatch Logs를 S3로 내보내기

5079 단어 s3clouddevopsaws
Amazon CloudWatch 로그를 사용하면 지표를 모니터링, 수집, 조치, 분석, 스트리밍하고 Amazon EC2 인스턴스, AWS CloudTrail, Lambda 함수, VPC 흐름 로그 또는 기타 리소스에서 로그 파일에 액세스할 수 있습니다. CloudWatch는 비용이 많이 들 수 있으며 비용을 통제하려면 장기 보존 기간 동안 오래된 로그를 S3로 옮기는 것이 이상적입니다.

이를 달성하기 위해 다음 AWS 서비스를 사용할 것입니다.
  • S3(버킷 및 버킷 정책)
  • IAM(Lambda 역할)
  • CloudWatch(이벤트 규칙)
  • 람다(함수)
  • 단계 함수

  • 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일이 지난 후 삭제되도록 합니다.

    좋은 웹페이지 즐겨찾기