Github Actions를 이용해 S3에 배포된 코드 압축 파일은 용량만 차지할 뿐 정말 쓸모가 없다. 백업 용도로 사용하기에도 적합하지 않다. 게다가 배포가 자주 이뤄질 수록 차지하는 용량은 매우 커지기 때문에 매일 S3 객체를 비워서 비용을 아낄 필요가 있어 람다 함수를 만들게 되었다.
IAM 역할 만들기
일단 AWS 람다에서 사용할 IAM 역할을 만들어준다. IAM에서 역할을 선택한 후 역할 만들기를 클릭한다.
람다를 클릭해주고 다음으로 넘어간다.
AmazonS3FullAccess를 추가해준다.
AWSLambdaBasicExecutionRole 도 추가해주고 다음으로 넘어간다.
역할 이름과 설명을 적고, 정책이 제대로 추가되었는지 확인한 후 역할 생성을 클릭한다.
LAMBDA 함수 만들기
AWS 람다로 이동해서 함수 생성을 클릭한다.
- 람다 함수 이름 입력
- 런타임은 파이썬 최신 버전
- 기본 실행 역할 변경을 클릭한 후 기존 역할 사용 클릭
- 아래 기존 역할 셀렉트에서 이전에 생성해준 IAM 역할 선택
- 함수 생성 클릭
코드란에 아래 함수를 입력해준다.
import logging
import boto3
import datetime
from botocore.exceptions import ClientError
def lambda_handler(event, context):
# Set up logging
logging.basicConfig(level=logging.DEBUG,
format='%(levelname)s: %(asctime)s: %(message)s')
bucket_name = 'trywalking-cicd'
s3 = boto3.client('s3')
objects = list_bucket_objects(bucket_name)
if objects is not None:
# List the object names
logging.info(f'Objects in {bucket_name}')
for obj in objects:
# 모든 배포된 코드 압축 파일 제거
key=obj["Key"]
try:
s3.delete_object(Bucket=bucket_name, Key=key)
print(f'Success to delete: {key}')
except ClientError as e:
logging.error(e)
print('Success to clean up S3 for trywalking CICD!!!')
return True
def list_bucket_objects(bucket_name):
# Retrieve the list of bucket objects
s3 = boto3.client('s3')
try:
response = s3.list_objects_v2(Bucket=bucket_name)
except ClientError as e:
logging.error(e)
return None
return response['Contents']
테스트를 클릭하고 새로운 테스트를 생성해준다.
테스트 이름을 입력해주고 저장을 클릭한다.
테스트 결과가 함수의 실행 결과인지 확인한다. 아래 화면에선 객체가 없으므로 객체를 찾을 수 없다는 에러를 볼 수 있다.
CloudWatch로 Cron job 생성하기
트리거 추가 클릭
EventBridge 선택
- 새 규칙 생성 클릭
- 규칙 이름, 설명 입력
- 규칙 유형은 예약 표현식을 선택
- 아래 예약 표현식에 크론 함수 입력 -> cron(0 19 ? * MON-FRI *)
- 크론 함수는 월~금 19시 00분에 함수를 실행한다는 뜻이다.
추가를 클릭한 후 제대로 생성 되었는지 확인한다. 크론이 제대로 도는지 확인하는 방법은 S3에 아무 객체나 추가한 후 실행 주기를 하루가 아닌 매시 1분마다로 설정하고 S3의 파일이 지워지는지 확인하면 된다.
매 분마다 도는 크론 함수 -> cron(*/1 * ? * MON-FRI *)
람다 함수 실행 로그 확인
cloudwatch에서 로그의 로그 그룹 클릭
로그 그룹에서 생성된 로그 그룹 선택
아래 로그 스트림에서 실행 로그 확인
이번에 S3에 람다와 CloudWatch를 접목해보면서 주기적으로 실행할 함수들을 더 손쉽게 사용할 수 있게 되었다. S3에서 파일을 삭제할 뿐만 아니라 람다를 잘 이용하면 AWS에서 할 수 있는 작업들이 매우 많아진다.
'Devops > Aws' 카테고리의 다른 글
AWS CloudWatch + SNS + lambda + Slack 알람 연동 (0) | 2023.07.18 |
---|---|
EC2 랑 RDS 연결하기(postgresql) (0) | 2023.02.22 |
EC2에 CodeDeploy Agent 설치하기 (0) | 2023.01.30 |
AWS에 Docker, docker-compose 설치 (0) | 2023.01.30 |
AWS MobaXterm으로 접속하기 (0) | 2023.01.30 |