본문 바로가기

Compute

(31)
AWS Network Load Balancer(NLB) 동작 방식과 주의사항 AWS Network Load Balancer(NLB)란? AWS(Amazon Web Services) NLB(Network Load Balancer)는 들어오는 트래픽을 하나 이상의 가용성 영역에서 Amazon EC2 인스턴스, 컨테이너 및 IP 주소와 같은 여러 대상에 분산하는 로드 밸런싱 서비스입니다. NLB는 초저지연 상태를 유지하면서 초당 수백만 건의 요청을 처리하도록 설계되었습니다. NLB는 연결 수준(계층 4)에서 작동하며 대상 IP 주소 및 포트, 소스 IP 주소 및 포트와 같은 IP 프로토콜 데이터를 기반으로 트래픽을 라우팅합니다. NLB는 TCP 및 UDP 트래픽을 모두 처리할 수 있으며 초당 수백만 패킷으로 확장할 수 있습니다. 따라서 HTTP(S)의 cookie 방식의 sticky는..
Serverless Framework [환경설정] Cloud9을 이용 아래 내용에 따라 Cloud9의 Role을 적용 https://awskrug.github.io/eks-workshop/prerequisites/workspaceiam/ EKSworkshop.com In this workshop, we will explore multiple ways to configure VPC, ALB, and EC2 Kubernetes workers, and Amazon Elastic Kubernetes Service. www.eksworkshop.com 서버리스의 IAM 권한 확인 https://www.serverless.com/framework/docs/providers/aws/guide/iam Serverless Framework - AWS Lam..
AWS Lambda X-ray 및 Insight(Serverless, MSA 모니터링) 재미와 학습으로 시작했던 서버리스 MSA로 구성한 서비스가 어느새 2년이라는 시간이 지났다. 사용자도 꽤 늘어 기능을 추가하다 보니, 현재 40개가 좀 넘는 Lambda가 돌아가고 있다. (비용은 월 $150 정도) 모든 것을 AWS에 위임하여 서비스 중이더라도 장애는 발생되어(특히 외부 API들) 서버리스 MSA 모니터링을 위한 X-Ray와 Lambda Insight에 대해 간략하게 포스팅 한다. (규모가 작은 서비스지만 모니터링 체계는 크게 다르지 않을 듯 하여..) 기본적으로 CloudWatch를 통한 Lambda 모니터링은 아래와 같다. Invocations – 5분 동안 함수가 호출된 람다 횟수 기간 – 함수 코드가 이벤트를 처리하는 데 소요하는 평균, 최소 및 최대 시간 오류 수 및 성공률(%..
AWS Lambda Edge 콜드스타트? Lambda Edge(이하 LE) 도입을 위해 성능을 측정 비교는 LE를 적용한 CF와 적용하지 않은 CF의 레이턴시 및 에러률 측정 원본은 동일하게 S3로 정적이미지 URL LE의 동작은 Viwer Response에 커스텀 헤더를 추가 성능 측정은 locust로, RPS 5,000 / 인터벌 1~3초 / 커넥션 50,000 그 결과 콜드스타트 문제를 넘어 RPS가 1,000을 넘어갈 때 약 3% 이상의 503(람다 실행 초과)가 발생 반면 LE를 적용하지 않은 CF의 경우 특이사항은 발견되지 않음 사실 LE의 RPS 기본 쿼터는 1,000으로 아주 정확하게 동작하고 있는 듯 보임 https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cl..
AWS Lambda@Edge Redirect / Add Custom Header Viewer Request, Origin Request 둘 다 동작 (Viewer Req의 경우 캐싱 동작) 'use strict'; /* This is an origin request function */ exports.handler = (event, context, callback) => { /* * Generate HTTP redirect response with 301 status code and Location header based on region. */ const request = event.Records[0].cf.request; const request_uri = request.uri; const host = request.headers.host[0].value const path = ..
AWS ELB WebSocket 사용 시 헬스체크 방안 테스트용 WS 데모 [채팅 서버] const WebSocketServer = require("websocket").server; const http = require("http"); const port = 3000; //포트 const server = http.createServer(function (request, response) { //일반 HTTP 요청 처리 console.log( new Date() + " Can not get information reqeust of http " + request.url ); response.writeHead(416); response.end(); }); server.listen(port, function () { console.log(new Date() + "..
Amazon EC2 Linux 2 minikube 설치 [Docker Install] 의 Docker 기본 사항Amazon ECS - Amazon Elastic Container Service 경우에 따라서는 ec2-user가 도커 데몬에 액세스할 수 있는 권한을 제공하기 위해 인스턴스를 재부팅해야 할 수도 있습니다. 다음 오류가 표시될 경우 인스턴스를 재부팅해 보십시오. Cannot connect t docs.aws.amazon.com [kubectl Install] Install and Set Up kubectl on Linux Before you begin You must use a kubectl version that is within one minor version difference of your cluster. For example, a v1.2..
AWS Batch 사용법 AWS Batch 서비스는 말 그대로 Batch 프로세스 관련 서비스다. S3의 오브젝트 파일 프로세싱이나 로그 전처리 등 배치성 일을 처리할 때, AWS Batch를 사용할 수 있다. Tutorial은 S3 Bucket에 업로드 되는 오브젝트의 네임을 인덱싱하여, DynamoDB에 적재하는 예제를 진행한다. AWS Batch는 EC2로 서비스 되나요? 아니면 Lambda와 같은 서버리스? AWS Batch는 Amazon ECS와 연동된다. Batch에 수행되는 VM은 컨테이너 기반으로 동작하기 때문에 도커 이미지를 미리 생성해놔야 한다. Batch는 AMI를 사용하나요? 레파지토리는 어떻게 구성하죠? Batch는 사용자가 만든 AMI를 이용할 수도 있고, Amazon의 AMI를 사용할 수도 있다. 또한..
AWS Lambda Edge를 이용한 이미지 리사이징 먼저 기본 내용은 아래 AWS Blog를 통해 확인하자. Resizing Images with Amazon CloudFront & Lambda@Edge | AWS CDN Blog | Amazon Web Services Do you have lots of images that need to be modified before delivery? No problem with Amazon CloudFront and Lambda@Edge. Read more on how you can use our services to modify image dimensions, apply watermarks, or optimize formats based on browser support all aws.amazon.com 중요 키..
AWS Spot Instance 이해하기 AWS 스팟 인스턴스는 사전 약정 없이 On-demand 요금보다 70~90% 절감된 비용으로 사용할 수 있는 EC2 Instance(VM)이다. 시작하려는 인스턴스에 대해 현재 시간에 유효한 가격만 지불하면 된다. 주로 Batch Job 등 용도로 사용하는 서버에 잘 어울린다. 장점은 세 가지로 나열할 수 있다. 첫 번째, 용량 활용 EC2 스페어 용량의 수요와 공급량에 따라 가격이 결정되기 때문에 시장 중심의 낮은 가격으로 Amazon EC2의 안정성, 보안성, 성능, 제어 및 탄력성을 제공 받을 수 있다. 두 번째, 운영비용 절감 On-demand Instance와 비교하여 최대 70~90%의 운영 비용을 절감할 수 있다. 세 번째, 처리량 향상 상태 비저장 웹 서비스, 이미지 랜더링, 빅데이터 분..
AWS EC2 User data script sample(node.js) AWS EC2의 User data에서 yarn install/run 명령어 수행이 되지 않음.. 초기 EC2 생성 시의 User data 아래와 같이 구성하면 되고 시작 시 Linux 인스턴스에서 명령 실행 - Amazon Elastic Compute Cloud 시작 시 Linux 인스턴스에서 명령 실행 Amazon EC2에서 인스턴스를 시작할 때 사용자 데이터를 인스턴스에 전달하여 일반적인 구성 작업을 자동으로 수행하는 데 사용하도록 할 수 있고, 인스턴스가 시작된 후에 스크립트를 실행할 수도 있습니다. Amazon EC2에 shell 스크립트 및 cloud-init 명령이라는 두 가지 유형의 사용자 데이터를 전달할 수 있습니다. 시작 마법사에 이 데이터를 일반 텍스트, 파일(명령줄 도구를 사용하여 인..
AWS EBS AMI 백업 1. EBS 백업 방법 1-1. Data Lifecycle Manager EBS 태그를 기반 12 또는 24 시간 기준으로 EBS의 Snapshot을 수행한다. 또한 Snapshot의 갯수를 조절할 수 있다. (예시 최근 7개) 1-2. CloudWatch Event - EC2 CreateSnapshot API call CloudWatch Event를 통해서도 Snapshot이 가능하다. 그러나 문제는 아직 Delete Option은 존재하지 않는다. 일해라! 아마존! 2. EC2 Image 백업 방법 아직 AWS에서 EC2 AMI에 대한 자동 백업 서비스는 없음. 그러나 CloudWatch Event -> Lambda(aws sdk)를 통해서 아래와 같이 구현은 가능. ec2List.json: AMI로..
AWS ELB Backend Connection Errors 오픈 준비중인 서비스에서 ELB에서 Backend Connection Errors 및 Surge Queue Length 발생. Request가 없으나 Backend Connection Errors가 일정하게 발생되며, Surge Queue Length가 쌓이기 시작. Surge Queue Length는 ELB의 Backend EC2에서 처리하지 못한 Request가 버퍼에 쌓이는 것, Backend Connection Errors는 Backend EC2와 세션 과정에서 문제가 발생되는 것을 의미. 주로 Backend 가용성 문제로 인해 발생되는 메트릭으로 준비중인 서비스에서 발생되는게 이상함.. 업무는 아니지만.. 확인해봄 Application, EC2 OS, log 상에서도 특이점은 확인되지 않음. 또..
AWS ElasticBeanstalk Root 경로 /var/app/current//var/www/html/ .extensinos sample files: "/etc/httpd/conf.d/vhost.conf": mode: "000644" owner: root group: root encoding: plain content: | NameVirtualHost *:80 DocumentRoot "/var/app/current/" Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted ServerName www.jschoi.net DocumentRoot "/var/app/current/jschoi" Options Indexes FollowSymLinks MultiViews A..
AWS Lambda 활용 태깅 없는 EC2 Instance 정지 Sample Code(Python boto3) import boto3 def lambda_handler(event, context): no_tag_instances = [] ec2 = boto3.client('ec2') instances = [i for i in boto3.resource('ec2', region_name='ap-northeast-2').instances.all()] # Print instance_id of instances that do not have a Tag of Key='Foo' for i in instances: if i.tags is None: no_tag_instances.append(i.instance_id); response = ec2.stop_instances( Ins..
AWS Lambda 활용 EIP 변경 방화벽 문제 등이나 기타 이유로 Elastic IP를 사용하는 서비스를 운영할 때 SPOF 발생 (과거 NAT Gateway가 생기기 전에 NAT Instance 단일 장애 지점 문제와 같은...ELB는 아직 EIP를 지원하지 않음) 1. 필요한 Policy { "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1491964068000", "Effect": "Allow", "Action": [ "ec2:AssociateAddress", "ec2:DescribeAddresses" ], "Resource": [ "*" ] } ] } 2. Role 생성(Trust relationsships) { "Version": "2012-10-17", "Statement": ..
AWS EC2 EIP 사용 시 HA 구성 외부 서비스와 API 통신 시에 외부 업체에서 보안을 이유상으로 고정 IP 몇 개 허용해 줄 때가 있다. 기존 IDC에서는 VIP를 통해 HA 구성을 했지만, Cloud에서 외부 API 서비스를 이용하기 위해 NAT 구성은 위험성이 있다. (NAT의 비용 및 네트워크 문제) 그 경우 보통 AWS 클라우드에서는 Elastic IP를 이용해서 사용하는데, 그 경우 해당 EC2는 SOPF(Single Of Point Failure) 상태가 된다. 그래서 나노 사이즈의 작은 EC2 Instance를 사용하여 2대의 EC2 Instance에 Health Check를 배치잡을 이용하여 Master 서버에 문제가 발생할 경우 Slave 서버로 EIP를 교체할 수 있다. 아래 간단한 샘플코드를 첨부한다. var AWS..
Amazon EC2 태그 기준으로 Instance Private IP 확인 CLI aws ec2 describe-instances --filters "Name=tag:Name,Values=wisen-blog-ec2" |jq '.Reservations[].Instances[0] | select(.State.Name == "running")' |jq '.PrivateIpAddress' (jq: https://stedolan.github.io/jq/) #!/bin/bash privateIpList=$(aws ec2 describe-instances --filters "Name=tag:Name,Values=wisen-blog-ec2" |jq '.Reservations[].Instances[0] | select(.State.Name == "running")' |jq '.PrivateIpAddr..
AWS ELB 사용 시 Apache 408/503 error log AWS ELB와 Apache 사용 시 Apache의 Access Log에 408/50X 에러 로그가 발생되는 경우가 있다. 이 증상은 ELB의 idle timeout과 Apache의 mod_reqtimeout 모듈과의 충돌로 발생된다. ELB의 idle timeout은 Back-end EC2 Instance와 세션 유지를 위한 timeout 시간이며, mod_reqtimeout은 웹 서버 보안 모듈이다. 1. ELB Idle timeout까지 ELB는 Back-end EC2 Instance와 TCP 세션 유지 2. mod_reqtimeout은 일정 시간(default 20~40초)이 경과해도 probe를 보내지 않는 세션을 공격으로 간주하고 차단(408 에러 발생) 3. ELB Idle timeout은 ..
AWS Lambda를 이용하여 Security Group 자동 제어 이번 블로그는 AWS의 How to Automatically Update Your Security Group .. AWS Lambda 블로깅 테스트 후기? 참고 How to Automatically Update Your Security Groups for Amazon CloudFront and AWS WAF by Using AWS Lambda | Amazon Web Services Update on June 14, 2018: We removed an out-of-date code sample. Update on August 23, 2018: We revised the “Configure your Lambda function’s trigger” procedure. Amazon CloudFront can h..
Amazon EC2 MySQL 5.6 설치 https://gist.github.com/dragonjet/270cf0139df45d1b7690
AWS EBS Daily Snapshot aws node sdk를 이용해서 EBS Daily Snapshot를 생성해본다. aws sdk 사용 방법은 이번 블로깅 범위가 아니니 생략한다. 사전에 sdk 사용 방법은 숙지해야 한다. 참고 Node.js의 JavaScript용 AWS SDK Mac/Linux의 경우 ~/.aws/credentials에, Windows의 경우 C:\Users\USERNAME\.aws\credentials에 자격 증명 파일을 생성 [기본값] aws_access_key_id = your_access_key aws_secret_access_key = your_secret_key 자격 증명을 로드하는 다른 방법은 시작 안내서를 참조하십시오. 버킷 이름은 소문자, 숫자, 하이픈(-)을 포함할 수 있습니다. 각 레이블은 aws...
AWS EBS mount: unknown filesystem type ‘LVM2_member’ error 접근이 불가한 CentOS6.X EC2 Instance의 시스템 로그를 보기 위해 Amazon EC2 Instance에 Rood Disk를 Mount 하려 했으나 다음과 같은 Error가 발생되었습니다. mount: unknown filesystem type ‘LVM2_member’ 검색을 해보니 LVM으로 잡아놓은 파티션 디스크는 바로 Mount가 불가하네요. 아래 링크를 통해서 해결했습니다! EBS의 특성은 아니라고 생각됩니다만, AWS를 사용하면 이기종 간 Disk mount가 빈번할 듯 해서 카피하여 블로깅합니다. PissedOffAdmins » mount: unknown filesystem type ‘LVM2_member’ 2007 05.07 Category: Linux, OS / Tags: n..
AWS ELB Pre-warm 신청 양식 Elastic Load Balancer(ELB)의 경우 2대의 VM으로 구성된 HTTP정도로 생각하시면 됩니다. 기존 LB 장비에서 사용하는 VIP를 사용할 수 없습니다. 대신 Domain 기반의 End-Point를 제공합니다. ELB의 디폴트 성능 임계치는 나와있지 않습니다. 검색한 바로 초당 200~300 Request 처리가 가능하다고 되어 있습니다. 경험상 세션 임계치는 in/out 총 6만 세션이 디폴트 수치로 보입니다. 따라서 그보다 더 큰 부하 발생 시 ELB는 Scale up/out이 필요합니다. 일반적으로 linear 형태의 Traffic 증가는 ELB 자체적으로 Scale up/out이 됩니다. 그러나 step 형태의 Traffic은 AWS Case Open(ELB Pre-warm)을 ..
AWS EC2 Keypair 없이 사용하기 금일은 EC2에 Key Pair 없이 사용이 가능하도록 짧게 포스팅 하도록 한다. 먼저, 계정 생성은 미리 해놓자. $adduser leedoing $passwd leedoing 패스워드 입력 $vim /etc/ssh/sshd_config PasswordAuthentication no -> PasswordAuthentication yes 수정 $/etc/init.d/sshd restart sudo 권한 추가 /etc/sudoers #User privilege specification root ALL=(ALL:ALL) ALL 'user' ALL=(ALL:ALL) ALL 설정한 Instance가 재부팅 시에 다시 key pair를 요청할 수 있다. 그럴 경우 아래 내용에 따라 cloud-init config..
AWS Amazon Linux AMI에 node.js npm aws-sdk 설치 금일은 EC2 Amazon AMI에 node.js / Express / npm / aws-sdk를 구성한다. 인터넷에서 잘못된 정보로 헤매는 경우가 많아, 간단하게 정리해봄. 이것도 언젠가 잘못된 정보가 될 수 있으니 AWS Document를 참고하는게 낫다. 설치 전에 먼저 yum update를 한다. Tutorial: Setting Up Node.js on an Amazon EC2 Instance - AWS SDK for JavaScript The AWS Documentation website is getting a new look! Try it now and let us know what you think. Switch to the new look >> You can return to the ori..
AWS ELB Proxy Protocol 기능 활성화 하기(TCP) 금일은 TCP 통신을 위해서 ELB에 Proxy Protocol 정책을 추가해보도록 한다. 1. 개요 기본적으로 ELB는 http 및 https 통신에 한해서 Sticky Session 지원과 Client IP를 포워딩한다. 기존 http 헤더에서 x-forwarded-for/port/protocol 의 항목이 추가 됐다. 아래는 ELB를 통해 들어온 http 통신 header 값이다. { host: 'test-2139921278.ap-northeast-1.elb.amazonaws.com:8080', accept: '*/*', 'accept-encoding': 'gzip, deflate, sdch', 'accept-language': 'ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4', ..
Amazon EC2 접속 시 Disconnected: No supported authentication methods available 에러 잘 접속되던 EC2에 접속을 하려고 하니 Disconnected: No supported authentication methods available과 같은 에러가 발생되는 경우가 있습니다. 해당 문제는 EC2 /home/ec2-user 디렉터리의 퍼미션을 변경했을 때 발생됩니다. 기본적으로 /home 하위 디렉터리 구조는 다음과 같습니다. (test의 경우 제가 생성) /home/ec2-user 디렉터리 관련된 작업시에 ec2 접속에 문제가 발생될 수 있다는 것을 인지하고 있었지만, 실수로 ec2-user 해당 디렉터리를 삭제해버렸었습니다. 다시 ec2-user 디렉터리 생성 후 퍼미션 400 / 권한 ec2-user로 원복했으나, 재접속 시에 해당 문제가 발생했습니다. 다시 원복해도 발생되네요 -_ -..
AWS Lambda를 이용하여 S3 업로드된 파일 meta-data 변경 오늘은 Lambda에 관련 포스팅 Lambda를 이용하여 S3 업로드 시에 파일의 meta-data(헤더)를 변경해보도록 하겠음. meta-data를 통해 client가 vod(mp4) 파일을 스트리밍할 지, 강제로 다운로드 받을지 결정할 수 있음. App 서버에서 Client가 업로드 시 meta-data 수정 전/후 파일을 S3에 업로드 할 수 있지만, Lambda 학습할 겸 테스트 해봄. 1.Overview Lambda는 AWS의 event trigger function 서비스입니다. S3 / SNS 등에서 Event가 발생되면 Lambda에 호출을 하고 Lambda는 node / python / java 등을 이용하여 작업을 함. Lambda와 S3를 연동해서 썸네일, 파일의 메타 데이터 변경이 ..
AWS Elastic Block Store(EBS) 이해 EBS 관련 포스팅 1. AWS Disk? AWS의 Disk는 S3 / EBS / EFS 정도로 나눌 수 있음. S3는 Http 통신을 하는 대용량 스토리지 서버 EBS는 일반 Disk EFS는 Nas 정도로 생각하실 수 있음. 2. EBS 분류 EBS는 General Purpose SSD (이하 gp2) / Provisioned IPOS SSD(이하 io1) / Magnetic으로 나눌 수 있음. 1.GP2 가장 일반적인 Disk로 1GB~1.5TB Size를 지정할 수 있으며 볼륨 크기에 따라 IOPS를 보장.(1GB 당 3) 버스팅 기능이 있어 I/O가 발생되지 않는 시간동안 IOPS가 충전됩니다. 최대 3,000 IOPS까지 충전. 2. io2 프로비전 된 Disk로 용량에 상관없이 IOPS를 보..