AWS 에서 이벤트를 감지 라는 것은 어떠한 이슈가 발생했을 경우 (예/ S3 버킷에 data가 올라갔다 또는 RDS 가 생성 되었다)에 알람을 발생 시키거나 로그를 남기는 것이다.
여기서는 S3 버킷을 만들어 Event Bridge를 이용해 이벤트를 감지하고 Cloud Watch에서 로그를 확인하여 Lambda를
이용해서 사람이 쉽게 확인 할 수 있도록 로그를 분석하여 SNS를 통해 관리자에게 메일을 전송하는 과정을 할 것 이다.
순서 : S3 버킷 생성 -> IAM 생성 -> Lambda 생성 -> Evnet Bridge 생성 -> Cloud Watch 로그확인 -> SNS 생성 후 구독
S3 버킷 생성
S3 버킷을 만들어서 이미지를 업로드 해본다.
IAM 생성
IAM 은 정책과 역할을 생성할 수 있으며 USER에게 권한을 줄 수도 있으며 권한을 부여받은 만큼 접근이 가능하다
JSON 코드는 다음과 같다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:DisassociateKmsKey",
"logs:DeleteSubscriptionFilter",
"logs:UntagLogGroup",
"logs:DeleteLogGroup",
"logs:DeleteLogStream",
"logs:PutLogEvents",
"logs:CreateExportTask",
"logs:PutMetricFilter",
"s3:GetObject",
"logs:CreateLogStream",
"logs:DeleteMetricFilter",
"logs:TagLogGroup",
"sns:Publish",
"logs:DeleteRetentionPolicy",
"logs:AssociateKmsKey",
"logs:PutSubscriptionFilter",
"logs:PutRetentionPolicy"
],
"Resource": [
"arn:aws:logs:리전:계정ID:log-group:/aws/lambda/functionName:*",
"arn:aws:logs:*:계정ID:log-group:*:log-stream:*",
"arn:aws:logs:*:계정ID:log-group:*",
"arn:aws:s3:::버킷 이름/*"
]
}
]
}
Lambda 생성
Lambda란 AWS 에서 제공하는 서버리스 컴퓨팅 서비스 이다.
애플리케이션을 실행하기 위한 별도의 서버 셋업 없이 곧바로 코드를 실행해주는 서비스를 의미하며 고정비용 없이 사용 시간에 대해서만 비용이 발생한다.
여기서는EventBridge가 이벤트를 감지해 Lambda함수를 호출 하면 Lambda에서 작성된 코드를 실행 하도록 한다.
Event Bridge 생성
이벤트 브릿지를 설정 할 때 모든 이벤트를 감지 할 수도 있고 특정 이벤트만 감지 할 수도 있다.
Cloud Watch 에서 로그 확인
Cloud Watch에서 로그를 확인 하기 위해서는 Lambda에서 별도의 코드를 작성하여 테스트를 거쳐야 한다.
SNS 생성후 구독
SNS는 관리자에게 메일/SMS 등으로 특정 내용을 전달 할 수 있는 SERVICE이다.
Lambda 에서 코드를 작성한 다음 s3이벤트 발생 시 sns에 구독한 메일로 알림이 가도록 설정해보자
영상에서 확인 하면 IAM을 수정하여 SNS 에 대한 권한도 추가하는 것을 확인 할 수 있다.
import json
import urllib.parse
import boto3
print('Loading function')
s3 = boto3.client('s3')
sns = boto3.client('sns')
def lambda_handler(event, context):
bucket = event['detail']['bucket']['name']
key = event['detail']['object']['key']
eventname = event['detail-type']
sns_message = str("새로운 이슈가 있습니다. \n\n 저장된 Buket : "+ bucket +"\n\n 파일 이름 : " + key + "\n\n")
try:
print(eventname)
if eventname == "Object Deleted":
sns_message += str("File Deleted")
elif eventname == "Object Created":
sns_message += str("File Created")
else:
response = s3.get_object(Bucket=bucket, Key=key)
sns_message += str("FILE CONTENT TYPE: " + str(response['ContentType']) + "\n\nFILE CONTENT: " + str(response['Body'].read()))
print("CONTENT TYPE: " + response['ContentType'])
print(str(sns_message))
subject= "S3 Bucket[" + bucket + "] Event[" + eventname + "]"
print(subject)
sns_response = sns.publish(
TargetArn='SNS주제ARN',
Message= str(sns_message),
Subject= str(subject)
)
except Exception as e:
print(e)
raise e
'클라우드 > AWS' 카테고리의 다른 글
AWS AutoScaling /Load Balrancer (0) | 2022.10.25 |
---|---|
AWS EC2 생성 (0) | 2022.10.25 |
AWS 기본 인프라 생성 (0) | 2022.10.25 |