반응형
S3 업로드 이벤트 발생 시 SNS 솔루션을 통해 업로드 로그 기록을 받을 수 있었다.
하지만 가독성이 너무 안좋아 필요한 정보만 뽑아서 보기 위해서는 Lambda 함수를 통해 필요한 부분만 필터링하는 것과 SNS를 보내는 코드를 작성하고 이벤트 트리거로 S3 버킷을 연동해줘야 한다.
SNS 프로토콜은 SMS가 지원되는 리전으로 바꾸어서 진행하였다.
목차
- Lambda 함수 정책 생성
- Lambda 생성
- 이벤트 트리거 추가
- 함수 작성
- OwnCloud로 파일 업로드 후 결과 보기
1. Lambda 함수 정책 생성
먼저 Lambda 함수에서 S3와 SNS에 대해 읽기/쓰기 권한이 있어야 하기 때문에 정책을 추가해 준다.
2. Lambda 생성
언어는 자신이 익숙한 언어를 선택하면 된다.
본인은 python을 선택
그리고 기존 역할 사용에서 방금 만들었던 정책을 연결시켜주면 된다.
3. 이벤트 트리거 추가
나머지는 그대로 냅두고 밑에 동의 체크해 주고 추가해 주면 된다.
4. 함수 작성
import json
import boto3
def lambda_handler(event, context):
sns_client = boto3.client('sns')
bucket = event['Records'][0]['s3']['bucket']['name']
ip_address = event['Records'][0]['requestParameters']['sourceIPAddress']
file_name = event['Records'][0]['s3']['object']['key']
message = f"IP: {ip_address}\nbucket: {bucket}\nFile name: {file_name}"
# SMS 보내기
sns_client.publish(
TopicArn='< SNS 주제 ARN>',
Message=message
)
return {
'statusCode': 200,
'body': json.dumps('Event processed successfully')
}
추출해야 하는 리스트는 S3 이벤트 리스트 구조를 보면 알 수 있다. ↓
{
"Records": [
{
"eventVersion": "2.0",
"eventSource": "aws:s3",
"awsRegion": "us-east-1",
"eventTime": "2022-01-01T00:00:00.000Z",
"eventName": "ObjectCreated:Put",
"userIdentity": {
"principalId": "EXAMPLE"
},
"requestParameters": {
"sourceIPAddress": "IP_ADDRESS"
},
"responseElements": {
"x-amz-request-id": "EXAMPLE123",
"x-amz-id-2": "EXAMPLE123/5678"
},
"s3": {
"s3SchemaVersion": "1.0",
"configurationId": "testConfigRule",
"bucket": {
"name": "BUCKET_NAME",
"ownerIdentity": {
"principalId": "EXAMPLE"
},
"arn": "arn:aws:s3:::BUCKET_NAME"
},
"object": {
"key": "OBJECT_KEY",
"size": 1024,
"eTag": "0123456789abcdef0123456789abcdef",
"sequencer": "0A1B2C3D4E5F678901"
}
}
}
]
}
여기서 리스트 요소를 선택하여 필요한 데이터를 추출할 수 있다.
작성 후 테스트를 해보자
5. OwnCloud로 파일 업로드 후 결과 보기
UserLogin.php 파일 업로드
반응형
'서버 > AWS' 카테고리의 다른 글
[AWS]18. Lambda 프록시 통합과 비프록시 통합의 간단한 차이점 (0) | 2024.03.29 |
---|---|
[AWS]17. 웹 Serverless Architecture 구성 (1) | 2024.03.19 |
[AWS]15. OwnCloud와 S3 연동 (feat. SNS Topic) (1) | 2024.03.13 |
[AWS]14. Cloudfront 단일 배포로 웹 서비스 구현 (Route53, ELB, Auto Scaling, S3, RDB) (0) | 2024.01.24 |
[AWS]13. S3 버킷에 ELB Access Log 저장 (0) | 2024.01.24 |
댓글