자동화된 보고 시스템
Source: Dev.to
위에 제공된 Source 링크만으로는 번역할 텍스트가 포함되어 있지 않습니다. 번역이 필요한 전체 내용(본문, 코드 블록, 마크다운 등)을 제공해 주시면, 요청하신 대로 한국어로 번역해 드리겠습니다.
개요
- AWS Lambda와 기타 서버리스 도구를 사용하여 일일 보고서를 자동화합니다.
- 시스템은:
- 여러 소스에서 데이터를 수집합니다.
- PDF 보고서를 생성합니다.
- 이메일로 보고서를 전송합니다.
- 이 프로세스를 매일 트리거합니다.
이 가이드는 AWS에 대한 기본적인 이해가 있다고 가정합니다.
1단계: S3 버킷 만들기
- S3 서비스로 이동합니다.
- Create bucket를 클릭합니다.
- 버킷 이름을 지정합니다 (예:
daily-reports-s3-bucket). - 다른 설정은 기본값으로 두고 Create를 클릭합니다.
필요한 경우 이 버킷에 보고서를 저장합니다.
단계 2: SES에서 이메일 주소 확인
- Amazon SES를 엽니다.
- Identity Management 아래의 Email Addresses로 이동합니다.
- Verify a New Email Address를 클릭하고 이메일을 입력합니다.
- 받은 편지함을 확인하고 인증 링크를 클릭합니다.
인증을 하면 SES가 이 주소에서 이메일을 보낼 수 있습니다.
단계 3: Lambda 함수 작성
- AWS Lambda 로 이동하여 Create function 을 클릭합니다.
- Author from scratch 를 선택합니다.
- Function name:
daily-report-lambda - Runtime: Python 3.9 (또는 그 이후 버전)
- Function name:
- Create function 를 클릭합니다.
Lambda 함수 코드
기본 코드를 아래 코드로 교체합니다:
import boto3
from fpdf import FPDF
import os
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
def lambda_handler(event, context):
try:
# PDF 보고서 생성
pdf = FPDF()
pdf.add_page()
pdf.set_font("Arial", size=12)
pdf.cell(200, 10, txt="Daily Report", ln=True, align="C")
pdf.cell(200, 10, txt="This is your automated report.", ln=True)
# PDF 저장
report_path = "/tmp/daily_report.pdf"
pdf.output(report_path)
# S3에 업로드 (선택 사항)
s3 = boto3.client('s3')
bucket_name = "daily-reports-s3-bucket"
s3.upload_file(report_path, bucket_name, "daily_report.pdf")
# SES를 사용해 첨부 파일이 포함된 이메일 전송 (raw email 방식)
ses = boto3.client('ses')
msg = MIMEMultipart()
msg['From'] = "sender_email@gmail.com" # SES에서 인증된 발신자 이메일로 교체
msg['To'] = "receiver_email@gmail.com" # 수신자 이메일로 교체
msg['Subject'] = "Daily Report"
# 텍스트 본문 첨부
body = MIMEText("Please find the attached report.", 'plain')
msg.attach(body)
# PDF 보고서 첨부
with open(report_path, 'rb') as file:
part = MIMEBase('application', 'octet-stream')
part.set_payload(file.read())
encoders.encode_base64(part)
part.add_header('Content-Disposition',
f'attachment; filename={os.path.basename(report_path)}')
msg.attach(part)
# SES의 send_raw_email 로 이메일 전송
response = ses.send_raw_email(
Source=msg['From'],
Destinations=[msg['To']],
RawMessage={'Data': msg.as_string()}
)
return {"status": "success", "response": response}
except Exception as e:
return {"status": "error", "message": str(e)}
Step 4: 라이브러리를 로컬에 설치하고 배포 (선택 사항)
Lambda 런타임에는 fpdf가 포함되어 있지 않으므로 직접 패키징하세요:
pip install fpdf -t ./package
cd package
zip -r ../lambda_layer.zip .
생성된 ZIP(lambda_layer.zip)을 Lambda 함수에 레이어로 또는 함수 코드로 직접 업로드하세요.
5단계: EventBridge 트리거 설정
- EventBridge를 엽니다.
- Create rule을 클릭합니다.
- Name:
daily-report-trigger - Define pattern: Schedule
- Cron expression:
cron(0 9 * * ? *)(매일 UTC 09:00)
- Name:
- Target 아래에서 Lambda 함수(
daily-report-lambda)를 선택합니다. - Create를 클릭합니다.
6단계: Lambda 함수 테스트
- Lambda 콘솔에서 Test 탭으로 이동합니다.
- 새 테스트 이벤트를 생성합니다(기본 템플릿은 비워두어도 됩니다).
- Test를 클릭합니다.
생성된 PDF 보고서가 수신자 메일함에 도착했는지 확인하세요.
서버리스 보고 시스템을 구축했습니다! 🎉
행복한 클라우드 학습
— Adeel Abbas