SES는 바다, 유진, 슈 의 약자로.. SeaEugeneShoo
가.. 아니고
Simple Email Service
1. AWS Console 에서 simple email... 검색
일 200건까지 이메일 발송이 무료 입니다. (리소스가 제한된 샌드박스에서 프로덕션으로 넘어가면 리소스를 더 사용할 수 있습니다.)
2. 자격 증명 생성
email 입력 후 [자격 증명 생성] 클릭
이제 위에 입력한 본인의 이메일을 확인해주세요.
이 링크를 클릭해서 이메일 소유를 증명합니다.
클릭해서 뜨는 페이지는 닫아도 되고, 다시 AWS 콘솔의 Amazon SES 페이지에서
[테스트 이메일 전송] 버튼을 누릅니다.
3. 테스트 발송
gmail 가서 확인해보면,
잘 옵니다.
4. Lambda 함수 생성
서비스에서 Lambda 검색
함수 생성
아무 Python 버전을 선택해도 됩니다. 전 3.11 을 선택했습니다.
잠깐이면 함수가 생성됩니다.
5. Lambda 함수 이메일 전송 코드 작성
import json
import boto3
import botocore
def lambda_handler(event, context):
sender = event.get('sender', 'com.bryan.oh@gmail.com')
to_email = event.get('to_email')
subject = event.get('subject')
content = event.get('content')
content_type = event.get('content_type', 'Text') # Html / Text
client = boto3.client("ses", region_name="ap-northeast-2")
try:
response = client.send_email(
Destination={
"ToAddresses": [
to_email,
],
},
Message={
"Body": {
content_type: {
"Charset": "UTF-8",
"Data": content,
}
},
"Subject": {
"Charset": "UTF-8",
"Data": subject,
},
},
Source=sender,
)
except botocore.exceptions.ClientError as e:
err_message = e.response.get("Error", {}).get("Message")
print(err_message)
return {
'statusCode': 500,
'body': json.dumps(err_message)
}
return {
'statusCode': 200,
'body': json.dumps('Success Message ID : ' + response.get('MessageId', ''))
}
6. Deploy 후 Test
Test 버튼을 누르면 이벤트를 구성하는 다이알로그가 나옵니다.
아래와 같이 입력합니다.
{
"sender": "SES에서 인증을 받았던 이메일",
"to_email": "받는 사람 이메일 주소",
"subject": "메일 제목입니다",
"content": "안녕, \nhello-bryan.tistory.com \n반가워",
"content_type": "Text"
}
sender, to_email, subject, content 를 바꿔주세요.
content 에 html 을 보내려면 html 로 입력하고, content_type 을 "Html" 로 합니다.
그리고 실행해보면,
Response
{
"statusCode": 500,
"body": "\"User `arn:aws:sts::11111:assumed-role/EmailSender-role-zzzzzz/EmailSender' is not authorized to perform `ses:SendEmail' on resource `arn:aws:ses:ap-northeast-2:111111111:identity/com.bryan.oh@gmail.com'\""
}
이런 오류가 발생합니다.
원인은 Lambda 함수가 이메일 보낼 권한이 없어서 그렇습니다.
권한을 추가하는 방법은 여러가지 있지만, 여기에서는 두가지만 해보겠습니다.
7-1. 권한 추가 (Lambda 실행 역할에 SES 권한주기)
구성 -> 권한 -> 역할 이름 을 클릭합니다. Lambda 함수 이름으로 시작되는 역할입니다.
권한추가 -> 정책연결 을 클릭합니다.
권한 검색란에 SES를 입력하고, 아래 항목에 체크, 하단에 [권한추가] 버튼을 누릅니다.
이제 Lambda 함수를 실행하는 역할에 SES 권한이 추가되었습니다.
다시 Lambda 함수로 가서 Test 버튼을 눌러보면,
발송 성공 메시지가 뜹니다.
7-2. 권한 추가 ( SES 에 Lambda 함수 권한 추가하기 )
권한을 추가하는 두번째 방법입니다.
서비스 콘솔에서 Simple Email Service 를 검색하고,
확인된 자격 증명 -> 위에서 등록했던 이메일 클릭.
권한부여 탭에 [정책 생성기 사용]버튼 클릭
브라우저에서 AWS 콘솔 탭을 하나 더 띄우고,
Lambda 로 돌아와서, 권한이 없다는 메시지에서 User : 뒤에 문자를 복사합니다. 아래 빨간색 부분.
복사한 User arn 을 아래의 "보안주체" 에 붙혀넣기 하고, 바로 아래 추가 버튼을 누릅니다.
그리고 작업 추가 드랍다운을 누르고
ses:SendEmail, ses:SendRawEmail, ses:SendTemplatedEmail 을 추가합니다.
(지금 테스트하는것은 ses:SendEmail 만 있어도 됩니다.)
다음 버튼 -> 다음 버튼 -> [정책 적용] 버튼까지 클릭.
그리고 Lambda 에서 Test 해보면,
성공.
참고
lambda 의 기본 실행 시간은 3초로 되어있습니다.
이메일은 보통 1~2초 걸리는데, 아슬아슬하니까 실행 시간을 늘려주세요~
구성 -> 일반구성 -> 제한시간
이제 이 Lambda 함수 URL을 호출해서 파라메터를 넘겨 받아서 메일 발송을 하면 됩니다.
requestBody 로 파라메터를 받아야겠네요.
이건 시간될 때 포스트 작성하도록 하겠습니다.
'AWS' 카테고리의 다른 글
[AWS] Cloud9 에서 Selenium 으로 크롤링하기 (Amazon Linux2) (7) | 2023.09.12 |
---|---|
[AWS Lambda] post 로 파라메터 받기 (0) | 2023.08.30 |
[AWS] Python 으로 CloudWatch Log 쓰기 (Feat. FastAPI) (1) | 2023.08.14 |
AWS - RDS - MySQL 사용해보기 (외부접속 설정) (0) | 2023.08.12 |
AWS Cloud9 에서 Selenium 으로 크롤링 하기(Amazon Linux2) (2) | 2023.08.01 |
댓글