Amazon S3로 Lambda 함수 로그 전송
Lambda 콘솔을 사용하여 Amazon S3로 직접 로그를 전송하도록 Lambda 함수를 구성할 수 있습니다. 이 기능은 장기 로그 스토리지를 위한 비용 효과적인 솔루션을 제공하며 Athena와 같은 서비스를 사용하여 강력한 분석 옵션을 활성화합니다.
참고
Lambda 콘솔, AWS CLI, AWS CloudFormation 및 모든 AWS SDK를 사용하여 Amazon S3로 Lambda 함수 로그가 전송되도록 구성할 수 있습니다.
요금
요금에 대한 자세한 내용은 Amazon CloudWatch 요금
Amazon S3 로그 대상에 필요한 권한
Lambda 콘솔을 사용하여 Amazon S3를 함수의 로그 대상으로 구성할 때 다음이 필요합니다.
-
Lambda에서 CloudWatch Logs를 사용하는 데 필요한 IAM 권한
-
Amazon S3로 Lambda 함수 로그를 전송하도록 CloudWatch Logs 구독 필터 설정을 수행합니다. 이 필터는 Amazon S3 버킷으로 전송되는 로그 이벤트를 정의합니다.
Amazon S3로 Lambda 함수 로그를 전송하도록 CloudWatch Logs 구독 필터 설정
CloudWatch Logs에서 Amazon S3로 로그를 전송하려면 구독 필터를 생성해야 합니다. 이 필터는 Amazon S3 버킷으로 전송되는 로그 이벤트를 정의합니다. Amazon S3 버킷은 로그 그룹과 동일한 리전에 있어야 합니다.
Amazon S3에 대한 구독 필터를 생성하려면 다음을 수행하세요.
-
Amazon Simple Storage Service(Amazon S3) 버킷을 생성합니다. CloudWatch Logs를 위해 특별히 생성한 버킷을 사용하는 것이 좋습니다. 그러나 기존 버킷을 사용하고 싶으면 2단계로 건너뛸 수 있습니다.
다음 명령을 실행하여 자리 표시자 리전을 사용하고자 하는 리전으로 바꿉니다.
aws s3api create-bucket --bucket amzn-s3-demo-bucket2 --create-bucket-configuration LocationConstraint=region
참고
amzn-s3-demo-bucket2
는 예시 Amazon S3 버킷 이름입니다. 예약되어 있습니다. 이 절차를 수행하려면 고유한 Amazon S3 버킷 이름으로 바꿔야 합니다.다음은 예 출력입니다.
{ "Location": "/amzn-s3-demo-bucket2" }
-
Amazon S3 버킷에 데이터를 입력하는 데 필요한 권한을 CloudWatch Logs에 부여하는 IAM 역할을 생성합니다. 이 정책에는 혼동된 대리자 보안 문제를 방지하는 데 도움이 되는 aws:SourceArn 글로벌 조건 컨텍스트 키가 포함되어 있습니다. 자세한 내용은 혼동된 대리자 방지를 참조하세요.
-
텍스트 편집기를 사용하여 신뢰 정책을 다음과 같은
~/TrustPolicyForCWL.json
파일로 생성합니다.{ "Statement": { "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Condition": { "StringLike": { "aws:SourceArn": "arn:aws:logs:region:123456789012:*" } }, "Action": "sts:AssumeRole" } }
-
create-role 명령을 사용하여 신뢰 정책 파일을 지정하는 IAM 역할을 생성합니다. 이후 단계에서 필요할 수 있기 때문에 반환된 Role.Arn 값을 적어둡니다.
aws iam create-role \ --role-name CWLtoS3Role \ --assume-role-policy-document file://~/TrustPolicyForCWL.json { "Role": { "AssumeRolePolicyDocument": { "Statement": { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Condition": { "StringLike": { "aws:SourceArn": "arn:aws:logs:region:123456789012:*" } } } }, "RoleId": "AAOIIAH450GAB4HC5F431", "CreateDate": "2015-05-29T13:46:29.431Z", "RoleName": "CWLtoS3Role", "Path": "/", "Arn": "arn:aws:iam::123456789012:role/CWLtoS3Role" } }
-
-
CloudWatch Logs가 계정에서 수행할 수 있는 작업을 정의하는 권한 정책을 생성합니다. 먼저 텍스트 편집기를 사용하여 권한 정책을
~/PermissionsForCWL.json
파일로 생성합니다.{ "Statement": [ { "Effect": "Allow", "Action": ["s3:PutObject"], "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket2/*"] } ] }
다음
put-role-policy
명령을 사용하여 권한 정책을 역할에 연결합니다.aws iam put-role-policy --role-name CWLtoS3Role --policy-name Permissions-Policy-For-S3 --policy-document file://~/PermissionsForCWL.json
-
Delivery
로그 그룹을 생성하거나 기존Delivery
로그 그룹을 사용합니다.aws logs create-log-group --log-group-name my-logs --log-group-class DELIVERY --region REGION_NAME
-
PutSubscriptionFilter
를 사용하여 대상을 설정합니다.aws logs put-subscription-filter --log-group-name my-logs --filter-name my-lambda-delivery --filter-pattern "" --destination-arn arn:aws:s3:::amzn-s3-demo-bucket2 --role-arn arn:aws:iam::123456789012:role/CWLtoS3Role --region REGION_NAME
Amazon S3로 Lambda 함수 로그 전송
Lambda 콘솔에서 새 함수를 생성한 후 Amazon S3로 직접 함수 로그를 전송할 수 있습니다. 이렇게 하려면 다음 단계를 완료하세요.
-
AWS Management Console에 로그인하고 Lambda 콘솔을 엽니다.
-
함수 이름을 선택합니다.
-
구성 탭을 선택합니다.
-
모니터링 및 운영 도구 탭을 선택합니다.
-
‘로깅 구성’ 섹션에서 편집을 선택합니다.
-
‘로그 콘텐츠’ 섹션에서 로그 형식을 선택합니다.
-
‘로그 대상’ 섹션에서 다음 단계를 완료합니다.
-
대상 서비스를 선택합니다.
-
새 로그 그룹 생성을 선택하거나 기존 로그 그룹을 사용합니다.
참고
Amazon S3 대상에 대한 기존 로그 그룹을 선택하는 경우 해당 로그 그룹이
Delivery
로그 그룹 유형인지 확인합니다. -
함수 로그의 대상으로 Amazon S3 버킷을 선택합니다.
-
CloudWatch
Delivery
로그 그룹이 나타납니다.
-
-
저장을 선택합니다.
교차 계정 로깅
다른 AWS 계정의 Amazon S3 버킷으로 로그를 전송하도록 Lambda를 구성할 수 있습니다. 이렇게 하려면 대상을 설정하고 두 계정 모두에서 적절한 권한을 구성해야 합니다.
필요한 IAM 역할과 정책을 포함하여 교차 계정 로깅을 설정하는 방법에 대한 자세한 지침은 CloudWatch Logs 설명서의 Setting up a new cross-account subscription을 참조하세요.