Application Modernization 51

AWS 환경에서 Data Streaming으로 어떤 것을 선택할까? Kinesis vs MSK

웹 서핑을 하다, 이 포스팅의 주제로 좋은 비교를 한 사이트를 찾았습니다. https://programmaticponderings.com/2023/04/23/streaming-data-on-aws-amazon-kinesis-data-streams-or-amazon-msk/ Streaming Data on AWS: Amazon Kinesis Data Streams or Amazon MSK? Given similar functionality, what differences make one AWS-managed streaming service a better choice over the other? Kinesis Data Streams and Amazon MSK can often be used intercha..

Spring Boot, Kafka(Amazon MSK)를 이용한 Event Driven Architecture 예

시작에 앞서 이 포스팅 글은 제가 SA로 재직하면서 개인적으로 만든 AWS Workshop을 기반으로 작성되었습니다. 이 포스팅에서 언급되는 워크샵이라는 단어는 '실습' 정도로 해석하시면 됩니다. Introduction MSA(Micro Service Architecture)를 Loose Coupling하게 구축하기 위해 꼭 필요한 EDA(Event Driven Architecture)를 Amazon MSK와 Java로 실습해 보면서 이해하는 워크샵입니다. 시나리오 EDA(Event Driven Architecture) 워크샵에서 사용할 서비스는 고객(Customer)와 주문(Order) 2개의 서비스로 구성되어 있으며 신규 고객을 등록할때 이름(Name)과 그 고객이 사용수 있는 선지불금(Credit)..

MSA 그리고 분산 어플리케이션 기술 비교

기업의 아키텍처를 담당하는 담당자 분들을 만나 이야기 하다 보면 많은 분들이 과거 분산 아키텍처는 계속해서 실패했다는 이야기를 하곤 합니다. 이에 과거 분산 아키텍처 기술과 MSA를 비교하는 표를 만들어 보았습니다. 개인적으로 MSA는 클라우드 시대 어플리케이션을 구성하는 기본 아키텍처가 될 것이라고 봅니다. 이 표에는 그간의 분산 어플리케이션 아키텍처가 왜 실패했었는지도 기술했습니다. RPC CORBA EJB SOA MSA 시기 •1980년대 중후반 •1990년대 초반 •2000년대 초반 •2000년대 중반 •2010년대 중반 특징 •가장 오래된 프로세스간 통신 방식 •원격의 프로시저를 로컬에서 동작 •OMG그룹에서 표준 정의 •로컬/원격 객체 간 메소드 호출 표준 규격 •다양한 언어를 지원 •원격 자..

Amazon MSK - 보상 트랜잭션 예

개요 이번 포스팅은 Choreography 기반의 Saga 패턴을 실습해 보기 위해 구성되었으며 Spring Boot와 AWS의 MSK(Managed Streaming for apache Kafka) 기반으로 구성되었습니다. 아키텍처 빠른 예제와 비용 최적화를 위해 1개의 EC2 인스턴스에서 2개의 서비스(Spring Boot 기반)를 서로 다른 포트로 실행시켜 두대의 서버에서 운영하는 방식으로 예제를 구성했습니다. Amazon MSK(Managed Streaming service for apache Kafka)는 2대의 브로커를 구성할 예정입니다. 유즈케이스 다이어그램 두대로 구성되는 스프링 부트 서비스는 Customer와 Order로 구성되어 있습니다. - 커스터머는 등록시 이름과 CreditLimi..

AWS CodeBuild로 EKS에 배포해 보자

개요 현재까지(22년 4월) AWS의 CodeDeploy는 EKS 배포를 지원하지 않는다. 따라서 명령어 기반 build 툴인 CodeBuild를 통해서 배포를 하던지 별도의 서드파티 제품과 연동해야 EKS 배포가 가능하다. 여기서는 CodeBuild를 통해서 EKS배포를 하는 방법에 대해 알아 보겠다. * 이 예제를 성공적으로 따라해 보기 위해서는 AWS의 CodeCommit이 구성되어 있어야 하며, ECR, EKS등 이미 배포 환경이 만들어져 있어야 한다. 다만 CodeBuild의 작동 방식만 참조를 할때는 해당 구성이 없다고 하더라도 상관없다. 파이프라인 구성할 파이프라인은 아래의 아키텍처에서 볼 수 있듯이 AWS Code Series로 구성할 예정이며 파이프라인 관리 -> CodePipeline,..

K8S HPA(Horizontal Pod Autoscaling) 적용

개요 HPA(Horizontal Pod Autoscaling)는 K8S 노드 내부의 Pod의 레플리카 확장을 의미한다. CPU 사용량에 따라 배포된 파드의 복제를 지정해 서비스가 원활하게 작동할 수 있도록 하는데 그 목표가 있다.(이는 추후에 설명할 워크노드의 인스턴스를 늘리는 Instance Autoscaling 과는 다르다.) 적용 순서(AWS EKS 기준) 1. 쿠버네티스 metrics server를 생성한다. Metrics Server는 쿠버네티스 클러스터 전체의 리소스 사용 데이터를 집계한다. 각 워커 노드에 설치된 kubelet을 통해서 워커 노드나 컨테이너의 CPU 및 메모리 사용량 같은 메트릭을 수집한다. kubectl apply -f https://github.com/kubernetes-..

AWS EKS 관리를 위한 Amazon EC2 구성시 문제 해결

kubectl 명령어 발행시 localhost:8080 접속이 불가능하는 에러가 나온다면? [ec2-user@ip-192-168-44-40 ~]$ kubectl get nodes The connection to the server localhost:8080 was refused - did you specify the right host or port? aws eks 명령어로 kubernetes 접속 환경을 변경하는 것이 필요 aws eks --region [사용하는 리전명] update-kubeconfig --name [EKS CLUSTER이름]

AWS EKS Workshop 진행시 자주 발생하는 에러 및 처리

개요 AWS상에서 EKS를 구성하고 실습해 보는 교재 중 최고는 개인적으로 "AWS EKS 워크샵 스튜디오"라고 생각한다. 다만 이 워크샵을 그대로 따라 진행한다고 해도 예상치 못하는 몇몇 문제를 만나곤 하는데 이 포스팅은 진행시 만날 수 있는 에러에 대해 해결방법을 정리한 것이다. Workshop Studio catalog.us-east-1.prod.workshops.aws aws의 eks-workshop을 따라하다가 아래와 같이 AWS콘솔에서 EKS노드를 보기위해 권한을 주는 작업인 assumedrolename 명령어 수행시 " An error occurred (ValidationError) when calling the GetRole operation: The specified value for r..

ubuntu에 docker 설치 및 삭제하기

설치 apt-get update sudo apt-get update apt가 https를 통해 repository를 사용할 수 있도록 패키지 설치 sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg \ lsb-release Docker 공식 GPG Key 추가 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg apt source list에 repository 추가 echo "deb [arch=amd64 signed-by=/usr/share/keyr..

AWS CodeCommit을 이용해 S3에 정적 컨텐츠를 배포해 보자

개요 이번 포스팅은 AWS의 GitHub에 대응되는 CodeCommit의 레파지토리에 HTML로 구성된 정적 컨텐츠가 업로드되면 AWS의 CodePipeline이 이를 감지해 Amazon S3에 정적 컨텐츠를 배포하는 것을 구성해 보고자 한다.(AWS의 S3는 웹서버 기능을 대신 할 수 있다) 아키텍처 이번 포스팅에서는 웹서버 역할을 위해 S3를 사용할 것이고 정적 컨텐츠(html, css, js, image) 소스 관리를 위해 AWS CodeCommit을, 그리고 파이프라인 구성을 위해 AWS CodePipeline을 사용할 것이다. 그 아키텍처는 아래 그림과 같다. 사전조건 1. html 서비스를 위한 정적 컨텐츠 준비(html, css, js, image) - 별도로 준비하기 힘들다면 간단한 파일이..

Github대신 AWS의 CodeCommit을 사용해 보자 - HTTPS 인증 방식

개요 이번 포스팅은 앞서 포스팅했었던 동일 제목의 포스팅과 동일한 내용이다. 다만, 레포지토리 사용을 위한 인증방식만 차이가 있다. 따라서 기본 시나리오나 내용는 이전 포스팅을 참조해 보도록 하자 Github대신 AWS의 CodeCommit을 사용해 보자 - SSH 인증 방식 개요 중앙 집중화된 소스 관리툴은 에전에도 많았지만 최근 몇년사이 이 부분 defacto는 git으로 통일되고 있는 듯 하다. 요즘은 이러한 git 원격 저장소 역할을 하는 무료/유료의 서비스들이 다양 sharplee7.tistory.com 사용환경 macOS - Monterey gradle intelliJ 적용 수순 1. IAM 사용자 생성 및 CodeCommit 사용권한 추가 2. CodeCommit Repository 생성 ..

Github대신 AWS의 CodeCommit을 사용해 보자 - SSH 인증 방식

개요 중앙 집중화된 소스 관리툴은 에전에도 많았지만 최근 몇년사이 이 부분 defacto는 git으로 통일되고 있는 듯 하다. 요즘은 이러한 git 원격 저장소 역할을 하는 무료/유료의 서비스들이 다양하게 있고 여기서는 AWS의 유료서비스인 CodeCommit에 대해 다루어 보고자 한다. 간단히 github(무상)과 AWS의 CodeCommit에 대해 비교해 보자 구분 GitHub(무상) AWS CodeCommit(유상) 비용 무상 서비스 월 접속 계정 5개, 계정당 요청수 2k까지 무료 그외 유료 편리성 - 상대적 유리 - AWS 서비스와 통합성이 상대적으로 약함 - 상대적 불리 - AWS Code 시리즈와 통합성 강함 보안 암호화 지원 없음 암호화 지원 사실 고객들을 만나 미팅을 하다보면 오픈소스에 ..

GitHub, Code Build 그리고 CodePipeline를 이용한 간단한 배포 실습

개요 이 포스트는 node.js로 작성되어 있는 AWS 한국 리전 홈페이지의 지속적 전달 파이프라인 생성 예제를 spring boot로 변환해 재 구성해서 포스팅하는 글이다. 이 글에서는 git을 통해 소스를 커밋하게 되면 aws의 CodePipeline을 통해 CodeBuild가 컴파일을 완료하게 되고 이를 다시 Elastic Beanstalk에 배포하는 방식이다. 이때, 필요하다면 사용자 승인을 거쳐야만 배포가 되게 할 수도 있다. 다루는 내용 1. GitHub 설정 2. 샘플 앱을 배포할 AWS Elastic Beanstalk 환경 생성 3. GitHub의 소스를 빌드하도록 AWS Code Build 구성 4. AWS CodePipeline을 이용한 소스, 빌드 및 지속적 배포 환경 구성 아키텍처 ..

Spring Boot 와 ELK (ElasticSearch, Logstash, Kibana)

이미 이 블로그를 통해 나는 Microservice Architecture 기반의 응용 프로그램을 설계 할때 고려해야 하는 6가지 영역(API Gateway, Service Mesh, Container Management, Backing Service, Telemetry, CI/CD)에 대해 언급한 적이 있다. Microservice Architecture 컴포넌트 Microservice Architecture를 구성하는데 필요한 각각의 필요 요소들에 대해 이를 그룹화 하고 잘 정리한 자료를 찾는 것은 쉽지 않다. 사실 이 분야 전문가는 Gartner라고 생각하고 있고 그 분야의 전문 sharplee7.tistory.com 이 6개 영역 중 Telemetry 혹은 Observation 이란 영역은 '로깅..

현재 OS에 열린 포트 확인

Mac OS 쉘에서 다음과 같이 치면 현재 열린 포트 목록을 확인할 수 있다. sudo lsof -PiTCP -sTCP:LISTEN 특정 포트를 찾아 포트를 닫고 싶으면 다음과 같이 쳐서 PID를 알아낸다. sudo lsof -i :3000 여기서 3000이 포트번호이다. 위에서 나온 PID를 다음 명령어에 넣으면 포트가 닫힌다. sudo kill -9 PID Linux 쉘에서 다음과 같이 치면 현재 열린 포트 목록을 확인 할 수 있다. sudo netstat -antup 위에 나온 PID를 죽이고 싶이면 다음과 같이 한다. sudo kill -9 PID Windows 커맨트 콘솔상에서 다음과 같이 치면 확인할 수 있다. netstat -ano | findstr LISTEN 이 특정 포트를 닫고 싶으면 ..

Kubernetes Ingress

Minikube(미니큐브)에 ingress 설치 ingress Controller 동작 확인 curl -I http://sharplee7.io/healthz 호출을 통한 ingress controller health check apiVersion: v1 kind: Service metadata: name: hello-minikube3 namespace: default labels: app: hello-minikube3 spec: selector: app: hello-minikube3 ports: - protocol: TCP port: 8080 targetPort: 8080 type: NodePort ingress ip 확인 DNS에 HOST명과 IP 등록(예제에선 로컬 PC로 접속하기 때문에 시스템의 h..

EKS, Ingress, AWS API Gateway

Kubernetes with AWS API gateway Docker container + AWS API gateway로 개발환경이 구성되어 있는 상태에서 Kubernetes 도입을 검토하게 되었다. Image build나 배포를 위해 Jenkins와 Ansible을 이용하고 있기는 했지만 원래의 구성이라면 배포나 배포 후의 작업들이 번거롭기도 하고 배포의 편의성이나 유연함과는 거리가 멀다고 느껴졌기 때문이다. 예를 들어 같은 기능을 갖는 backend service가 가용성을 위해 여러개 떠있다고 가정했을 때 update를 진행한다 생각하면 기존의 방식으로는 머리가 아플 것이 분명하다. AWS API gateway의 특징 Kubernetes를 도입하기 전에 AWS API gateway을 살펴보지 않을 ..

NodePort vs LoadBalancer vs Ingress

이번 포스팅은 구글 클라우드의 Kubernetes Service 비교 글을 참조 했으며 참조한 원본 글을 아래의 링크에서 확인 할 수 있다. Kubernetes NodePort vs LoadBalancer vs Ingress? When should I use what? Recently, someone asked me what the difference between NodePorts, LoadBalancers, and Ingress were. They are all different ways to get… medium.com Kubernetes 서비스 Kubernetes 서비스는 Pod(파드) 집합에서 실행중인 애플리케이션을 네트워크 서비스로 노출하는 방법을 의미한다. Kubernetes는 Pod에게 고..

반응형