AWS Hands-on LAB 04

soo·2023년 9월 1일
0

AWS

목록 보기
8/9
post-thumbnail

LAB 05. 서버리스 아키텍처 구축

워크플로우

시나리오 워크플로는 다음과 같습니다.

  • 이미지 파일을 Amazon S3 버킷에 업로드합니다.
  • 버킷의 ingest 폴더에 파일을 업로드하면 SNS 주제에 대한 이벤트 알 림이 호출됩니다.
  • 그러면 SNS가 3개의 별도의 SQS 대기열에 알림을 배포합니다.
  • Lambda 함수는 이미지를 세 가지 형식으로 처리하고 출력을 S3 버킷 폴더에 저장합니다.
  • S3 버킷 폴더의 처리된 이미지를 검증하고 Amazon CloudWatch에서 로그합니다.

Amazon SNS

Amazon SNS(Simple Notification Service)에서 주제 클릭

주제 생성

표준 유형의 주제 생성. 나머지 옵션은 기본으로 둔다.

생성됨

SQS 대기열 3개 생성

Amazon SQS(Simple Queue Service)에서

대기열 생성 클릭

유형 선택 및 이름 설정. 필요에 따라 액세스 정책이나 암호화 등 다른 옵션들도 설정이 가능하다.

생성

생성한 SQS 대기열을 SNS 주제에 등록

Amazon SNS에서 구독 클릭

구독 생성 클릭 후 주제 ARN과 프로토콜 유형 선택

생성

위 순서를 반복하여 이름이 각각 web-queue, mobile-queue인 SQS 대기열을 생성한 뒤 SNS 주제를 구독하도록 설정한다.

web-queue

mobile-queue

생성

구독 확인

Amazon SNS 주제클릭 후 확인할 주제 클릭

메시지 게시 클릭

제목, 본문, 속성 등 메시지에 대한 세부 정보 입력

입력 후 메시지 게시 클릭

메시지 게시

Amazon SQS 대기열 목록에서 테스트할 임의의 대기열 선택 후

메시지 전송 및 수신 클릭

메시지 수신 항목에서 메시지 폴링 클릭

폴링 진행됨

SNS 액세스 정책 구성

편집할 주제를 클릭한 뒤 편집 클릭

액세스 정책 항목을 누르고 주제에 액세스할 수 있는 사용자를 정의는 JSON 문서를 입력한다.

입력한 JSON 값. 이 정책은 Amazon Simple Notification Service (SNS)와 Amazon S3 서비스 간의 상호 작용에 대한 권한을 정의함.

{
  "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",
        "SNS:Receive"
      ],
      "Resource": "SNS_TOPIC_ARN",
      "Condition": {
        "StringEquals": {
          "AWS:SourceAccount": "SNS_TOPIC_OWNER"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "s3.amazonaws.com"
      },
      "Action": "SNS:Publish",
      "Resource": "SNS_TOPIC_ARN",
      "Condition": {
        "StringEquals": {
          "AWS:SourceAccount": "SNS_TOPIC_OWNER"
        }
      }
    }
  ]
}

내용 설명

  • Version: 이 IAM 정책의 버전. 일반적으로 날짜 형식으로 지정됩니다.
  • Id: 정책의 고유 식별자. 이 경우에는 기본값으로 설정되어 있습니다.
  • Statement: 정책의 권한 내용을 정의하는 핵심 섹션입니다. 이 섹션은 하나 이상의 권한 명령문을 포함할 수 있습니다.
  • 첫 번째 권한 명령문:
    - Sid: 이 명령문의 고유 식별자.
    - Effect: 이 권한 명령문의 효과. "Allow"로 설정되어 있으므로 허용됩니다.
    - Principal: 권한을 부여받는 주체를 지정합니다. 여기서는 모든 AWS 주체(AWS: "*")에게 허용됩니다.
    - Action: 허용되는 작업 목록. SNS와 관련된 다양한 작업을 허용합니다.
    - Resource: 권한을 부여하는 대상 리소스를 나타냅니다. SNS_TOPIC_ARN은 실제 SNS 토픽의 Amazon 리소스 이름(ARN)으로 대체됩니다.
    - Condition: 권한을 추가 제어하는 조건을 지정합니다. 여기서는 AWS:SourceAccount가 SNS_TOPIC_OWNER와 일치하는 경우에만 허용됩니다.
  • 두 번째 권한 명령문:
    - Effect: 이 권한 명령문의 효과. 다시 한 번 "Allow"로 설정되어 있으므로 허용됩니다.
    - Principal: 권한을 부여받는 주체. 여기서는 AWS S3 서비스가 허용됩니다.
    - Action: 허용되는 작업. SNS 토픽에 대한 "Publish" 작업을 허용합니다.
    - Resource: 권한을 부여하는 대상 SNS 토픽의 ARN.
    - Condition: 조건을 지정하여 특정 소스 계정(AWS:SourceAccount)이 SNS_TOPIC_OWNER와 일치하는 경우에만 허용됩니다.
    위 정책은 SNS 토픽과 S3 서비스 간의 연동을 허용하는 권한을 정의합니다. 실제로 사용하는 경우, SNS_TOPIC_ARN 및 SNS_TOPIC_OWNER 등을 실제 값으로 대체해야 합니다.

S3 버킷에 업로드 시 단일 S3 알림 생성

Amazon S3에서 버킷 선택

속성 탭에서

이벤트 알림 세션으로 이동

이벤트 알림 생성 클릭 후 설정

대상(Destination) 옵션. 대상으로 SNS 주제를 원하는 경우 SNS 주제를 지정해줘야 한다.

생성

AWS Lambda 생성

S3에서 이미지를 읽고 이미지 크기를 조정한뒤 변경된 이미지를 S3에 저장하는 AWS Lambda 함수를 SQS와 함께 생성한다.

람다에서 함수 생성 클릭

옵션 입력

...


TMI: 클라우드 환경에서 DB를 Scale-Up(수직 확장)하는 것보다 Scale-Out(수평 확장)하는 것이 더 쉽기 때문에 Scale-Out을 통해 Reader Replica를 늘려서 부하를 줄인다. 이러한 구조에서는 SQL보다 NoSQL(비관계형 DB)가 더 적합하다.

생각해볼만한 질문들:
auroraDB와 dynamodb의 차이를 아나요?
퍼블릭 서브넷은 뭐고 프라이빗 서브넷은 뭐고 차이점을 아나요?
프라이빗에 있는 인스턴스는 어떻게 외부통신하죠?
배스천 서버 사용하는 이유?
EKS와 k8s의 차이?
테라폼이란 건 뭐죠?
람다는 뭐죠?
람다와 step function의 차이는?

profile
이것저것 공부하는

0개의 댓글