면접을 본 곳에서 대량 발송 처리를 위한 Messaging System 아키텍쳐 구성도를 과제로 요청을 해서 만들어 봤습니다. 

과거에 msp 업무를 진행하면서 이런 서비스를 구성 해본적이 경험이 없어 많이 고민을 했습니다. 

 

주로 했던 고민에 첫번째는 다양한 메시지 서비스 (RabbitMQ, Apache Kafka, SQS) 들이 있는데 어떤 서비스를 사용 할 것인가 ?

두번째는 사용을 해본적이 없어 해당 구성도를 그려도 되는가? 를 가장 고민을 했습니다. 

 

요청 사항

- 1,000 TPS 처리 가능하여야 함
- 발송 전에 회원 검증, 과금, 템플릿 검수 등 내부 로직이 수반 되어야 함
- 발송 이후 고객에게 성공 유무를 전송하여야 함.
 
결과물 

* SQS FIFO를  높은 처리량 모드 변경이 필요합니다.

* FIFO 대기열 값으로 오토 스케일링 설정합니다. 

* 구성도에서는 FIFO 대기열을 1개만 존재하지만 SNS 와 SQS를 같이 사용하여 팬 아웃 구조로 사용하여 서비스 속도를 증가할 수 있을 것 같습니다.

* 성공 여부를 어떤 방식으로 전송하는 기준이 정확지 않아서 SNS 서비스를 사용하였습니다.

 

후기

 

1. 조금 더 다양한 서비스 workshop, awsskillbuilder 을 진행하면서 구성을 이해하는 노력이 필요하다.

2. 다양한 서비스가 합쳐지면 요구사항에 "1,000 TPS 처리" 가능 할까? 어떻게 측정해야되는가?? 

'etc.' 카테고리의 다른 글

[DNS]네이버 클라우드 스터디  (0) 2023.04.03
[git] 특정 브랜치 지정해서 clone  (0) 2023.03.14
AWS SAA-C03 합격 후기  (0) 2023.01.27
[참석 후기] AWSKRUG 보안 소모임 온라인 밋업  (0) 2022.12.21
chat.openai 후기  (0) 2022.12.06

AWS Certified Solutions Architect - Associate (SAA-C03) 시험을 보고 후기를 적습니다. 

 

2020년도에 통과를 했지만 회사에서 ec2, alb ,vpc, s3, cloud front 정도에 서비스만 사용해서 다른 서비스가 기억이 잘 나지않아서 다시 시험을 받습니다. 

 

다행이 합격했습니다. :)

 

문제를 풀면서 주로 특정 키워드를 찾고 해당 키워드에 맞는 서비스의 특징을 예상하면서 문제를 풀었습니다. 

 

examtopics 사이트에서는 정답 보다는 토론에 내용을 보면서 aws 서비스 특징을 정리했습니다.

 

주로 사용한 사이트 목록 

https://docs.aws.amazon.com/ko_kr/index.html

 

https://docs.aws.amazon.com/ko_kr/index.html

 

docs.aws.amazon.com

https://www.examtopics.com/

 

Free Exam Prep By IT Professionals | ExamTopics

ExamTopics The only source for free & accurate actual exam questions & answers, passing your exam easily is guaranteed, and for free!

www.examtopics.com

https://explore.skillbuilder.aws/

 

https://explore.skillbuilder.aws/lms/

 

explore.skillbuilder.aws

 

참고

 

2023년 1월 16일부터 2023년 4월 17일까지의 기간 사이에 Pearson VUE를 통해 AWS 시험을 예약하실 때, 이번 프로모션 코드를 입력하시면, 추후 재응시가 필요한 경우 무료 재응시가 가능합니다.

주제 : 카오스 엔지니어링

 

해당 온라인 밋업을 듣고 나서 카오스 엔지니어링이 필요한 이유 및 다양한 툴이 있는 사실에 알게 되었습니다. 

 

카오스 엔지니어링을 하려면 모니터링 설정에서 다양한 정보를 수집하고 분석하는 지식이 필요할 것 같습니다.

 

현재는 공부하기 힘들지만 추후 테스트 해보려고 합니다!

 

이해되는 내용을 정리하자면 

 

카오스 엔지니어링의 구현 :

 

 - 가설 수립 -> 결함 주입 -> 관찰 -> 개선

 - 정상 상태와 비정상 상태를 명확하게 구분을 지어야 한다.

 - 장애가 발생하면 대조군과  실험군의 데이터로 정상 상태 차이를 찾아서 가설을 반증 한다.

 - 필요한것 IaC <-> CI/CD <-> 테스트 자동화 <-> 마이크로 서비스<-> 클라우드 네이티브 <-> ㅜNoSql (Nosql의 필요성은 아직 잘 이해하지 못했습니다.)

 - 작은 단위 부터 테스트 : 인스턴스 -> 클러스터 그룹 -> 가용영역 ->  리전 ->  클라우드 서비스

 

 

사용되는 서비스 or tool

 AWS : Cloudwatch , Fault Injection Simulator 
 오픈 소스 : Chaos Mesh, Litmus Chaos 등등

 

k8s 를 공부하면서 배포가 실패해서 내용을 찾아보니 오브젝트 리소스 이름 유형 틀려서 발생한 문제 였습니다. 

CI / CD 를 구축하면 자동으로 검사 및 알람 설정이 필요한 것 같습니다. (github actions에서 구현?)

 

참고 : https://kubernetes.io/ko/docs/concepts/overview/working-with-objects/names/

 

오브젝트 이름과 ID

클러스터의 각 오브젝트는 해당 유형의 리소스에 대하여 고유한 이름 을 가지고 있다. 또한, 모든 쿠버네티스 오브젝트는 전체 클러스터에 걸쳐 고유한 UID 를 가지고 있다. 예를 들어, 이름이 mya

kubernetes.io

 

 

docker 강의 수강하면서 gradle 로 빌드 하는 경우 많아졌습니다.

 

전에는 gradle bootBuildImage 진행을 하면 정상 동작했지만 gradlew bootBuildImage 할 경우 Unsupported class file major version 61가 발생 했습니다. 

 

해당이슈를 해결하려고 현재 서버 확인 :  java 버전 (17), gralde 버전(7.5.1)

 

gralde 공식 사이트에 호환성을 확인했습니다. 

https://docs.gradle.org/current/userguide/compatibility.html#header

[해결]

1. build.gradle에서 sourceCompatibility = '17' 로 수정하고 다시 bootBuildImage 했지만 동일한 에러가 발생했습니다.

2. ./gradle/wrapper/gradle-wrapper.properties 안에서 gralde 버전(7.5.1)으로 변경 후 bootBuildImage 진행 시 정상 동작

 

[이유 추정]

1. 듣는 강의 git을 clone 하면서 ./gradle 가 같이 들어왔고 /gradle/wrapper/gradle-wrapper.properties 파일에 gralde 버전(7.1) 로 기입되어 있었고 $gradle bootBuildImage 로 실행할 경우 7.5.1 버전으로 동작하였고, $./gradlew bootBuildImage으로 실행하면 7.1 버전으로 동작하지 않았을까 생각합니다.

 

java, gradle에 깊은 지식이 없어서 오류는 해결 했지만 정확한 원인 분석은 하지 못했습니다.

 

잘못된 정보가 있으면 댓글 부탁드립니다!!!

 

 

 

 

'troubleshooting' 카테고리의 다른 글

가용영역에서 인스턴스 타입 이슈 -1  (0) 2022.11.28

chat.openai를 사용해보고 후기를 남깁니다. 

 

결론만 말하면 정말 대단합니다. 

 

간단한 aws eks 생성, terraform 코드 작성, 문의한 내용에 보완되면 좋은 것들 등등 최대한 깔끔하게 내용이 출력됩니다.

 

문의 내용을 자세히 기입할 수록 내용이 잘 나옵니다. 

 

앞으로 공부하다가 모른는 것이 있으면 chat.openai에 물어볼것 같습니다. 

 

예시 

 

 
이슈 : aws 인스턴스 타입을 변경 후 시작시 에러가 발생 ( t3.medium  -> t3a.large)
 
확인 결과 :
 
"aws ec2 describe-instance-type-offerings --location-type availability-zone --filters Name=instance-type,Values=t3a.large
--region ap-northeast-2 --output table" 를 사용하여 해당 가용영역에서 사용 가능 한지 확인 = t3a.large 는 b영역에서 사용 불가능!
 
현재 인스턴스가 가용영역 ap-northeast-2b에서 t3.medium 사용하는 것으로 확인
 
조치 방안 :
  1. ami 이미지 생성 후 가용영역 변경
  2. 하기 방법인 ssm 에서 AWSSupport-CopyEC2Instance 런북을 사용 (선택) https://aws.amazon.com/ko/premiumsupport/knowledge-center/move-ec2-instance/
 

Amazon EC2 인스턴스를 다른 서브넷, 가용 영역 또는 VPC로 이동

닫기 Walter 씨의 동영상을 통해 자세히 알아보기(6:51)

aws.amazon.com

 
선택 이유 : 그냥 궁금해서
 
확인 결과 참조!

ssm 파라미터 
인스턴스 타입, 리전, 복사할 인스턴스, 키 페어 , 서브넷!(가용영역), 보안 그룹

'troubleshooting' 카테고리의 다른 글

[해결]Unsupported class file major version 61  (0) 2022.12.07

신규 목표 

  전달 되는 메일이 너무 지저분했다. 구성 변경

 

구성도

  CloudTrail -> Eventbridge -> Lambda -> SNS

 

내용 정리
  1. 람다 함수 생서 (블루프린트 sns-message-python 사용) -> SNS 트리거
  2. 람다 코드에 #첨부2 코드 적용 -> 테스트 (첨부3 데이터 활용)
  3. 기존 인프라에서 Eventbridge 대상 변경 (Lambda)

 

#첨부 2

import json
import boto3

sns = boto3.client('sns')

def lambda_handler(event, context):

    #Extract details from JSON event JSON 이벤트에서 세부정보 추출
    detailType= event["detail-type"]
    region = event["region"]
    accountId = event["account"] 



    time = event["detail"]["eventTime"]
    eventName = event["detail"]["eventName"]
    requestParameters = event["detail"]["requestParameters"]
    taskuser = event["detail"]["userIdentity"]["userName"]

    message = "Alert: %s in %s for account: %s at time: %s\n\n Event: %s \n Task user : %s \n Request parameters: %s" % (detailType, region, accountId, time, eventName,taskuser,requestParameters)

    response = sns.publish(
            TopicArn = "arn:aws:sns:us-east-1:40265848665302129:test_setet",
            Message = message
            )

    return {
      'statusCode': 200,
      'body': json.dumps('Success!')
}

#첨부3

{ 
  "version": "0", 
  "id": "e951asdfasdf-asdfasdf1-0easdf7-1917-a71c621d65bc", 
  "detail-type": "AWS API Call via CloudTrail", 
  "source": "aws.iam", 
  "account": "40265848665302129", 
  "time": "2022-03-31T08:49:13Z", 
  "region": "us-east-1", 
  "resources": [], 
  "detail": { 
    "eventVersion": "1.08", 
    "userIdentity": { 
      "type": "IAMUser", 
      "principalId": "AIDAV3ECDVRDDDsW3GQ", 
      "arn": "arn:aws:iam::40265848665302129:user/seasdfasdfas@asdfasdft.co.kr", 
      "accountId": "40265848665302129", 
      "accessKeyId": "ASIAVASDFEEDFC3QGS2H2QXBFWSDFSDFWAU", 
      "userName": "seasdfasdfas@asdfasdft.co.kr", 
      "sessionContext": { 
        "sessionIssuer": {}, 
        "webIdFederationData": {}, 
        "attributes": { 
          "creationDate": "2022-03-31T06:17:57Z", 
          "mfaAuthenticated": "false" 
        } 
      } 
    }, 
    "eventTime": "2022-03-31T08:49:13Z", 
    "eventSource": "iam.amazonaws.com", 
    "eventName": "DeleteUser", 
    "awsRegion": "us-east-1", 
    "sourceIPAddress": "AWS Internal", 
    "userAgent": "AWS Internal", 
    "requestParameters": { 
      "userName": "testtestst" 
    }, 
    "responseElements": null, 
    "requestID": "68ASDFASEFEF822b43-ad-86de91d9c5e6", 
    "eventID": "45251asdfsdf-d666d4c8a7f", 
    "readOnly": false, 
    "eventType": "AwsApiCall", 
    "managementEvent": true, 
    "recipientAccountId": "40265848665302129", 
    "eventCategory": "Management", 
    "sessionCredentialFromConsole": "true" 
  } 
}

기존 목표 중 이슈 
 
  1. sns publish에서 권한이 없어서 오류가 발생 (lambda에 SNS full 권한을 부여)

'AWS > IAM' 카테고리의 다른 글

IAM user 생성, 삭제 알람 설정 (1)  (0) 2022.04.05

기존 목표 : IAM유저 생성 및 삭제 alarm 설정하기(버지니아 리전)

구성도 : CloudTrail -> Eventbridge -> SNS

내용 정리

  1. CloudTrail 추적 활성화 (API 활동)
  2. eventbridge에서 사용할 이벤트 버스 활성화 -> 규칙 생성 (이벤트 패턴 #첨부 1 참조) -> 대상 SNS (email)

기존 목표 중 이슈

  1. IAM 계정 생성 및 삭제 이슈는 글로벌 리전에서 관리가 된다. (버지니아 북부)
  2. CloudTrail 추적 활성화를 안하면 eventbridge에서 이벤트를 인식 못하였다.

#첨부1

{   
  "source": ["aws.iam"],   
  "detail-type": ["AWS API Call via CloudTrail"],   
  "detail": {   
    "eventSource": ["iam.amazonaws.com"],
    "eventName": ["CreateUser", "DeleteUser"]   
  }   
}

IAM user 생성, 삭제 알람 설정 (2)에서는 전달 되는 메일이 너무 지저분하게 와서 lambda 로 정리 후 SNS로 전달 하려고 합니다.

'AWS > IAM' 카테고리의 다른 글

IAM user 생성, 삭제 알람 설정 (2)  (0) 2022.04.05

aws backup  설정 실수 하여 생성된 valut를 삭제 하려고 한다. 

 

하지만 안에 너무 많은 백업이 존재하여 awscli로 삭제 (전체 삭제 )

 

 

## history  aws backup 백업 볼트 삭제

## 작업시 필요 awscli, jq 프로그램 (yum install jq), aws backup 사용가능 권한

## 하기 작업 백업 볼트 네임 확인 필요 !!

 

aws backup list-recovery-points-by-backup-vault --backup-vault-name EC2-Daliy --query "RecoveryPoints [*]. {ARN : ResourcePointArn}" --output json > Recovery_points.json (성공) 백업 포인트 정보 추출

 

cat Recovery_points.json | jq  -c '.RecoveryPoints[].RecoveryPointArn'  > arn.txt (성공)  백업 포인트ARN 정보 파싱

파싱 "" 남아 있어서 모두 공백으로 치환 아래 명령어 실행

                

cat arn.txt | while read in; do aws backup delete-recovery-point --backup-vault-name EC2-Daliy  --recovery-point-arn "$in"; done (성공) 백업 파일들 삭제

 

aws backup delete-backup-vault --backup-vault-name EC2-Daliy(벡업 볼트 삭제)

 

aws 콘솔에서 확인 후 마무리

+ Recent posts