AWS에서 spot을 사용해서 컴퓨팅 비용을 절감하는 방식은 너무 유명합니다. 하지만 spot은 언제든 빼앗길 여지가 있는데요. EKS에서 AutoScaler로 카펜터(karpenter)를 사용 중이고 인스턴스 타입으로 spot을 사용 중이라면 NTH(Node Termination Handler) 사용을 고려하셔야 합니다. 마치 애플리케이션이 종료되기 전에 시그널을 받아서 처리(signal handler)하는 것처럼 NTH는 노드가 종료되기 전에 "어떤" 이벤트를 받고 종료 전에 필요한 것들을 처리할 수 있도록 돕습니다.spot 인스턴스는 종료되기 2분 전에 EC2 Spot Instance interruption notice를 수신하는데요. 관련된 내용은 아래와 같이 cloudtrail에서 이벤트 이름을..
우리가 구축한 서비스가 견고한지, 가용성을 보장하는지, 확장성은 어떤지 등 시스템 탄력성을 테스트하기 위한 기법으로 카오스 엔지니어링이 있습니다. AWS Resilience Hub - Fault Injection Service(FIS)는 카오스 엔지니어링을 AWS에서 손쉽게 할 수 있도록 돕습니다. 이 기능을 이해하기 위해서는 aws cli로 접근하는 것보다 콘솔을 이용하시는 게 좋습니다. 어느 정도 기능을 익힌 후에는 터미널에서 마음껏 실행할 수 있을 겁니다.FIS의 기본 콘셉트는 Experiment templates 메뉴에서 실험 템플릿을 만들고, 템플릿을 실행하는 것에서 출발합니다. 템플릿에는 특정 리소스(e.g., EC2)의 ID로 지정해서 이벤트(종료 등)를 보낼 수도 있고, tags 기반으로 ..
Redshift는 Workload management(WLM) 설정을 통해 큐(queue)와 슬롯(slot)이라는 개념을 제공합니다. 넓은 범주에서 이야기하면 한 개에 큐 안에는 여러 개의 슬롯이 존재할 수 있습니다. 그리고 슬롯은 쿼리 실행의 동시성을 나타낸다고 보시면 됩니다. 즉, 슬롯 개수만큼 쿼리가 동시에 실행될 수 있는 거죠. 그렇다고 쿼리 속도가 슬롯에 독립적으로 보장된다는 말은 아닙니다. 클러스터 전체에서 사용하는 메모리를 나눠서 사용하는 구조라서요. 큐는 실행을 기다리는 쿼리 그룹을 나타내는 논리적 구성입니다. 큐 종류는 다음과 같습니다.- 삭제할 수 없는 default queue 1개- 사용자가 추가로 정의할 수 있는 큐 7개- AWS 콘솔 상에 나타나지 않는 superuser를 위한 큐..
AWS에 대표적인 Data Warehouse 제품인 Redshift에 Serverless 버전의 비용 관련된 내용이 잘 정리된 글이 없어서 이번 기회에 정리해 봅니다. 글을 정리하는데 백서도 도움이 됐지만 메가존 포럼과 AWS Global Center의 도움을 많이 받았습니다. 우선 Redshift Serverless 비용을 이해하려면 Redshift Processing Units(RPUs) 개념을 알아야 합니다. Redshift Serverless는 워크로드에 따라 자동으로 컴퓨팅 파워를 확장하는데 그게 RPUs 단위입니다. 가벼운 쿼리는 32 RPUs(최소 설정 값)로 처리되고 좀 더 복잡한 쿼리는 최대 512 RPUs까지 늘어납니다. 기본 값을 Base capacity라고 하는데 이 값을 32부터 ..
클러스터를 생성할 때 함께 만든 슈퍼계정 이름을 변경하는 방법을 기술합니다. 우선, 계정 이름을 변경하는 쿼리는 다음과 같고 슈퍼계정 권한이 있어야만 실행할 수 있습니다. ( 기존 계정 이름이 admin이고 이를 sysadmin으로 변경하겠다는 예제입니다 ) alter user admin rename to sysadmin; 하지만 위에 쿼리를 실행하면 아래와 같은 에러를 만나게 됩니다. 현재 접속한 계정의 이름을 변경할 수 없다는 내용입니다. 이 상태에서 우리가 선택할 수 있는 방법은 1) 임시 계정(tempadmin)을 추가로 2) 임시 계정에 슈퍼계정 권한을 줍니다 3) 임시 계정으로 접속해서 기존 계정(admin)의 이름을 변경해줍니다 4) 그리고 다시 변경된 이름(sysadmin)으로 접속해서 임..
redis를 사용하면서 필요에 의해 CONFIG SET을 통해 설정을 변경하는 경우가 있습니다. 아마 처음 config set을 검색했을 때 목적은 notify-keyspace-events 변경을 통해 key expire에 대한 이벤트를 받기 위해서가 많을 듯합니다. notify-keyspace-events 변경은 아래 페이지에 자세히 설명되어 있습니다. https://redis.io/topics/notifications Redis Keyspace Notifications – Redis *Redis Keyspace Notifications IMPORTANT Keyspace notifications is a feature available since 2.8.0 *Feature overview Keyspac..
AWS에서 EC2를 제 돈 주고 쓰면 많이 손해입니다. 비용을 절약할 수 있는 몇 가지 방법이 있는데요, SP (Savings Plans) RI (Reserved Instances) Spot 이렇게 기본적으로 세 가지를 언급할 수 있겠습니다. 이번 글에서는 Spot의 설명은 아니고, 그래서 얼마나 할인되는데? 에 대한 이야기를 해보려고 합니다. 위에 그림에서 보여지듯이 Spot Instance 가격은 c5.large 기준으로 리전 별로 차이는 보이지만 최대 64%까지 할인되는 것을 볼 수 있습니다. 한 달이면 $44 차이까지 발생하죠. 이런 인스턴스 열 대를 운영하면 $440입니다. 절대 무시할 수 있는 수준이 아닙니다. 위에 표를 볼 수 있는 경로는 EC2 -> INSTANCES -> Spot Requ..
AWS에서 선택 가능한 EC2 인스턴스 타입은 범용, 컴퓨팅 최적화, 메모리 최적화, 가속화된 컴퓨팅, 스토리지 최적화로 나눌 수 있습니다. 이번 글에서는 범용 타입에서도 버스터 가능한 인스턴스 타입을 소개합니다. 버스트(burst) 가능한 인스턴스 타입은 현재(2021-05-06) 기준으로 T2, T3, T3a, T4g 네 가지 타입이 존재하고 각각의 타입은 CPU와 메모리에 따라서 nano, micro, small, medium, large, xlarge, 2xlarge로 나누어집니다. T 타입 인스턴스에는 CPU credits이라는 개념이 존재하는데 CPU 유휴시간에 따라 credits을 획득하고, CPU가 사용되면 사용률에 따라 획득한 크레딧을 소모하게 되는 구조입니다. 이 의미를 상세히 이해하기..
ECS 클러스터 안에 서비스를 등록할 때 선택하게 되는 Service type에 대해서 살펴보겠습니다. 먼저 옆에 i 아이콘에 마우스를 올려서 팝업 도움말을 살펴보면 다음과 같은 문구를 볼 수 있습니다. Replica services place and maintain a desired number of tasks across your cluster. Daemon services place and maintain one copy of your task on each container instance. If a capacity provider strategy is used, the DAEMON service type is not supported. 위의 내용은 아래와 같이 정리하고 사용할 수 있습니다 # R..
컨테이너와 컨테이너 인스턴스라는 용어로 본문에 많이 등장합니다. 컨테이너 인스턴스는 클러스터에 묶여있는 EC2 인스턴스를 나타냅니다. 표준 표현을 따르다 보니 본문을 읽는데 어려움이 있을 수 있습니다. 이번 글에서는 Task, Container에 CPU와 Memory 설정에 대해 알아봅니다. ECS를 처음 접하면 리소스를 설정하는 곳이 너무 많아서 정신이 혼미해질 정도인데요, 추려보면 다음과 같습니다. 인스턴스의 CPU, Memory 설정 (인스턴스 타입에 따라 고정, 혹은 custom 사용) task의 CPU, Memory 설정 container의 CPU, Memory 설정 위에서 아래로 갈수록 작은 개념으로 이어집니다. 직감적으로 보면 container는 task 안에서 돌기 때문에 당연히 task에..
ECS를 구축, 관리하기 위해서는 그 안에서 사용되는 용어를 이해해야 합니다. 이번 글에서 ECS에서 통용되는 용어들의 개념을 이해하도록 합니다. 자원 개념 위에서 아래로 내려갈수록 큰 개념으로 생각하시면 됩니다. container는 ECS에서 가장 작은 단위, cluster가 가장 큰 단위입니다. # container 단순히 시야가 제한된 리눅스 프로세스입니다. namespace 분리로 컨테이너 환경 안에서 호스트의 프로세스 목록을 볼 수 없고, 루트 디렉터리 변경으로 호스트의 디렉터리를 볼 수 없도록 제한합니다. (chroot) 끝으로 제어 그룹을 통해 컨테이너가 접근할 수 있는 자원을 제어합니다. (control group) 우리가 알고 있는 바로 그 컨테이너의 원리죠? # task definiti..
본문을 읽기 전에 Zombie, Orphan 프로세스란 무엇인지 알고 있을 필요가 있다. 관련된 내용은 다음 글에 매우 잘 정리가 되어 있으니 참고하기 바란다. - Zombie process reaping 에 대하여, Container에서 고려할 부분들 컨테이너를 생성할 때 한 개의 일만 처리하게 설계하면 좋겠지만 그렇지 못한 경우도 분명 생길 수 있다. 간혹 자식(child process)을 만들어서 일을 시켜야 하는 경우가 있는데 새로운 컨테이너를 생성하거나 API 통신으로 동작시키는 것보다 나은 상황이 있기 때문이다. 아무튼, 이렇게 자식 프로세스를 만들어서 일을 시켜보면 의도치 않게 자식이 고아가 되는 경우가 발생한다. 자식의 자식의 자식 이라던가... 뭐 물론 좋은 설계는 아니지만. 이런 경우가..
이번 글에서는 AWS에서 제공하는 대표적인 컨테이너 서비스 중 하나인 ECS의 기본 개념을 살펴보도록 합니다. ECS는 쿠버네티스 기반의 완전 관리형 컨테이너 오케스트레이션인 AWS EKS(Elastic Kubernetes Service), 그리고 옆동네 GCP의 GKE(Google Kubernetes Engine)와 비교할 수 있는데요, 여기서는 ECS에 초점을 맞춰서 설명합니다. ECS는 완전 관리형 컨테이너 오케스트레이션 서비스 입니다. 컨테이너와 오케스트레이션을 이해하기 위해 기존 서비스 방식을 살펴보면 다음과 같습니다. 애플리케이션을 인스턴스에 직접 설치해서 운영 진입 장벽이 낮아서 빠르게 애플리케이션을 개발&검증하는데 유리합니다 한편, 컴퓨팅 리소스의 수평확장(scale-out)을 위해 애플리..
aws cli를 사용하기 위해서 IAM( Identity and Access Management )에 사용자를 등록하고 액세스 키를 생성하는 과정에 대해서 알아보도록 합니다. 기본적으로 aws cli는 우리가 console.aws.amazone.com 로 브라우저에 접속해서 할 수 있는 대부분의 액션을 터미널에서 사용할 수 있게 해주는 일종의 sdk라고 생각해도 좋을 듯합니다. 우선 AWS에 접속해서 아래와 같이 IAM 페이지로 접근하도록 합시다. 좌측 메뉴중에 사용자를 선택하도록 합니다. 아래와 같이 사용자를 추가하거나 삭제할 수 있고 등록된 사용자가 있다면 리스트 형식으로 보여주는 UI가 제공됩니다. 여기서 사용자 추가를 선택하도록 합니다. 이제 사용자 정보를 입력하는 단계를 거치게 됩니다. 구분할 ..
AMI( amazon machine image )를 CLI에서 아래와 같이 export 하려고 할 때 발생되는 에러입니다. 커맨드에 대한 공식문서는 여기에서 확인 할 수 있습니다. $ aws ec2 export-image --image-id ami-07512400xxxxx --disk-image-format VMDK \ --s3-export-location S3Bucket=my-export-bucket,S3Prefix=exports/ 에러내용 An error occurred (InvalidParameter) when calling the ExportImage operation: \ The service role vmimport provided does not exist or does not have su..
서비스를 운영하면서 적당한 시점이 되면 인스턴스를 AMI( amazon machine image )를 생성하고 그때부터는 해당 이미지를 흔히 이야기하는 오토스케일링, 즉 인스턴스 확장으로 사용하게 됩니다. AWS의 경우에는 대부분의 기능들이 리전 단위로 묶여있는데 AMI도 예외는 아닙니다. 글로벌 서비스를 준비하면서 생성한 AMI를 다른 리전에서 사용할 수 없다면 큰 낭패겠죠? 해당 이미지가 왜 리전에 종속되는지 알 수는 없지만 글로벌 배포를 위해서는 AMI를 각 리전에 복사해서 사용해야 합니다. 리전에 종속된다는 사실을 알고 다른 리전으로 넘기기 위해서 AMI를 Export 하고 Import 해야 하는지까지 생각해봤었는데요, 다행히 복사 기능이 제공되어 간단하게 글로벌로 사용이 가능합니다. 우선 아래와..
letsencrypt를 통해 인증서를 아래와 같이 발급합니다. letsencrypt certonly --manual --preferred-challenges=dns \ -d example.com -d *.example.com 터미널에서 위 명령어를 입력하면 아래와 같은 메시지를 확인할 수 있습니다. Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator manual, Installer None Obtaining a new certificate Performing the following challenges: dns-01 challenge for example.com dns-01 challenge for..
람다, 서버리스의 첫걸음을 통해 AWS 의 Lambda 서비스에 대해 간략하게 소개를 했다. 이번에는 조금은 더 심도 있는 이야기를 할 텐데 람다의 구조와 원리를 파악하고 자연스럽게 그 한계를 깨우치도록 하자. 내부 로직을 어느정도 이해하고 있어야 어떤 상황에 서버리스( Serverless ) 람다가 독이 되는지 알 수 있게된다. 어설프게 이해하고 사용 하다가는 독이 된다는 사실로 시작해보자.서버리스는 없다람다는 AWS 에서 서버리스를 대표하는 서비스 중 하나다. 앞선 글에서도 그렇게 밝혔고. 근데 이제와서 서버리스는 없다니 이게 무슨 소리지? 이건 클라우드로 넘어오면서 생긴 개념인데 EC2 와 같은 IaaS 는 이미 사용자에게 서버를 클라우드 상에서 제공하며 IDC 상황에서 겪었어야 했던 수 많은 작업..
아주 오래전부터 있던 개념이지만 클라우드와 함께 MSA 가 뜨거워지자 그 다음 단계로 Serverless 가 등장했다. Rest API 처리나 어차피 평소에 할일없이 빈둥거리는 서버를 없애고 인스턴스 내부에서 소소한 역할을 수행하던 것들을 함수처럼 클라우드에 등록해놓고 필요할 때 적절한 이벤트 트리거를 걸어 사용하는 방식이 람다에 대한 짧지 않은 소개가 되겠다. AWS lambda 는 GCP 에서는 Cloud Function 이라는 이름으로 존재하는 기능이다. 아무튼 여기서 람다에 대해 살펴보고 작은 모듈을 등록해서 사용까지 해보도록 하자. 우선 AWS console 에 접속해서 lambda 서비스를 검색하도록 하자. 검색후 서비스에 진입하게 되면 EC2 나 다른 서비스와 다르게 다소 심플한 메뉴로 구성..
- Total
- Today
- Yesterday