프로필사진
DevOps 부트캠프 기록일지
DevOps_04_김재환
2023.05.11(SQS, SNS, Lambda을 이용하여 email 알림 보내기)
2023.05.11(SQS, SNS, Lambda을 이용하여 email 알림 보내기)

2023. 5. 12. 07:13부트캠프/DevOps (TIL)

이전에 포스팅한 서버리스 사진 이후

Advanced Challenge

  • 과제를 달성하면, S3 이벤트가 SQS로 전송되게 만들고, SQS로부터 이벤트를 받아 람다가 실행하게 만들어봅시다.
  • 썸네일 생성이 완료되면, 메일로 해당 썸네일 URL과 함께 전송이 되게 만들어봅시다.
    • Amazon SNS를 활용합니다.
  • S3의 Pre-signed URL 기능을 이용하여, 업로드 전용 URL을 획득하고, 이를 통해 이미지를 S3 업로드할 수 있게 만들어봅시다.

STEP 1: SQS 생성 및 정책 변경

1. SQS 콘솔로 이동합니다.

2. SQS 대기열 생성 버튼 클릭합니다.

3. SQS 생성합니다.

이름을 정해주고 나머지는 기본값으로 설정 후 대기열 생성 버튼을 클릭해줍니다.

4. S3 원본 버킷에서 SQS로 메세지를 보낼 수 있도록  정책을 변경합니다.

{
"Version": "2012-10-17",
 "Id": "example-ID",
 "Statement": [
   {
    "Sid": "example-statement-ID",
    "Effect": "Allow",
    "Principal": {"Service": "s3.amazonaws.com"},
    "Action": "SQS:SendMessage",
    "Resource": "arn:aws:sqs:ap-northeast-2:516761981198:SQS-Success",
    "Condition": {
      "ArnLike": {
        "aws:SourceArn": "arn:aws:s3:::serverless-photo"
      }
    }
  }
 ]
}

5. Resource 에는 방금 만든 SQS 의 arn 정보를 넣고, aws:SourceArn 에는 원본 버킷 의 arn 을 넣습니다.

STEP 2: 원본 버킷에 SQS 이벤트 알림 연동

1. 원본 버킷으로 이동해 이벤트 알림을 생성해줍니다.

2. 이름 설정 후 선택 사항은 기본 사진첩과 동일하게 접미사 부분에 .jpeg로 설정합니다.

3. 객체 생성과 대상을 다음과 같이 설정하고 생성합니다.

 

STEP 3: 람다 함수에 SQS 트리거 추가

만약 생성하는 동안 오류가 발생했습니다 trigger. Queue visibility timeout: 30 seconds is less than Function timeout: 100 seconds 이와 같은 오류가 뜬다면 Lambda - 구성 - 일반구성 에서  제한시간을 30초로 줄이면 생성이 가능해진다.

STEP 4: SNS 생성 및 이메일 구독

1. SNS 주제 생성

2. 편집에서 액세스 정책을 다음과 같이 수정해줍니다.

{
  "Version": "2008-10-17",
  "Id": "__default_policy_ID",
  "Statement": [
    {
      "Sid": "__default_statement_ID",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": [
        "SNS:GetTopicAttributes",
        "SNS:SetTopicAttributes",
        "SNS:AddPermission",
        "SNS:RemovePermission",
        "SNS:DeleteTopic",
        "SNS:Subscribe",
        "SNS:ListSubscriptionsByTopic",
        "SNS:Publish"
      ],
      "Resource": "arn:aws:sns:ap-northeast-2:516761981198:SNS-test",
      "Condition": {
        "StringEquals": {
          "AWS:SourceOwner": "640668917513"
        }
      }
    },
    {
      "Sid": "Allow-AWS-Service-to-publish-to-the-topic",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "SNS:Publish",
      "Resource": "arn:aws:sns:ap-northeast-2:516761981198:SNS-test"
    }
  ]
}

- Resource arn은 본인이 만든 sns arn을 넣어줍니다.

3. 이메일 구독 설정하기

4. 위에 작성한 이메일로 들어가 Confirm subscription 클릭합니다.

5. 상태가 확인됨으로 된것을 확인 할 수 있습니다.

 

람다 함수로 이동해 대상으로 sns을 추가해줍니다.