CodeBuild의 로그를 Lambda로 로그를 성형
2910 단어 람다CodeBuildCloudWatchAWS
경위
CodeBuild의 로그를 정형하고 메일 통지해야했습니다.
건설
이번에는 CodeBuild 실패 로그가 트리거되므로 CloudWatch Events에서
CodeBuild의 실패한 이벤트를 만듭니다.
거기에서 SNS를 통해 로그 그룹과 로그 스트림 이름을 Lambda에서 받고 로그를 어쩔 수 없습니다.
※AWS 아이콘이 업데이트되어 더욱 세련되게 되었습니다
이런 세세한 업데이트가 있는 것도 AWS의 매력이군요.
단지, 최신판에 Email의 아이콘이 없어진 것 같은···?
CloudWatch 이벤트
품목
값
이벤트 패턴
점검
서비스 이름
CodeBuild
이벤트 유형
CodeBuild Build State Change
특정 상태
FAILED
목표
SNS①
SNS①
이번에는 CodeBuild 실패 로그가 트리거되므로 CloudWatch Events에서
CodeBuild의 실패한 이벤트를 만듭니다.
거기에서 SNS를 통해 로그 그룹과 로그 스트림 이름을 Lambda에서 받고 로그를 어쩔 수 없습니다.
※AWS 아이콘이 업데이트되어 더욱 세련되게 되었습니다
이런 세세한 업데이트가 있는 것도 AWS의 매력이군요.
단지, 최신판에 Email의 아이콘이 없어진 것 같은···?
CloudWatch 이벤트
품목
값
이벤트 패턴
점검
서비스 이름
CodeBuild
이벤트 유형
CodeBuild Build State Change
특정 상태
FAILED
목표
SNS①
SNS①
람다
설정 항목
값
함수 만들기
처음부터 만들기
이름
선택
런타임
Python3.6
롤
하나 이상의 템플릿에서
역할 이름
선택
정책 템플릿①
Amazon SNS 게시 정책
정책 템플릿②
CloudWatchLogsReadOnlyAccess
트리거 추가
SNS①
타임아웃
1분
환경 변수
SNSarn/SNS②의 Arn
코드
import json
import boto3
import os
import time
TOPIC_ARN = os.environ['SNSarn']
def lambda_handler(event, context):
message_unicode = event['Records'][0]['Sns']['Message']
message_dist = json.loads(message_unicode)
group_name = message_dist['detail']['additional-information']['logs']['group-name']
stream_name = message_dist['detail']['additional-information']['logs']['stream-name']
time.sleep(90)
client = boto3.client('logs')
logs = client.get_log_events(
logGroupName=group_name,
logStreamName=stream_name,
startFromHead=True
)
body = logs['events']
message = ""
for line in body:
log = '{}'.format(line['message'])
message = message + log + '\n'
Msg = message
sub = '[Codebuild FAILED]'
client = boto3.client('sns')
response = client.publish(
TopicArn=TOPIC_ARN,
Message=Msg,
MessageStructure='context',
Subject=sub
)
SNS②
마지막으로
실제로 검토를 실시한 CodeBuild의 로그는 7000행으로,
메일이 여러 번 오거나 내용이 부족했습니다.
원인은 (환경 차이가 있다고 생각합니다만) CodeBuild에서 CloudWatch Logs로 로그가 출력될 때까지 약 1분 차이가 있는 것입니다.
Lambda가 시작되면 로그가 모두 출력되지 않고 작동하지 않고 Lambda가 3 초 후에 timeout됩니다.
그래서 파이썬 코드에서 잠을 썼고 람다의 타임 아웃을 3 초부터 늘렸습니다.
그러면 SNS 본문에 기재 할 수있는 양을 초과하여 오류가 발생했기 때문에,
일단, S3에 보존해, 통지하고 싶은 내용을 선별해 SNS 본문에 기재하는 내용을 좁혔습니다.
고전했습니다만, 하고 싶은 일은 실현할 수 있었습니다.
더 똑똑한 방법이 있으면 가르쳐 주시면 감사하겠습니다.
Reference
이 문제에 관하여(CodeBuild의 로그를 Lambda로 로그를 성형), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tomoki_s/items/6351307e2962b5a3202b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(CodeBuild의 로그를 Lambda로 로그를 성형), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tomoki_s/items/6351307e2962b5a3202b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)