AWS 간단 리뷰1
김한성
목차
•IAM
•EC2
•S3
•다음 시간
•Lambda
•Step Function
•CloudWatch
IAM
IAM(Identity and Access Management)
• AWS 리소스에 대한 액세스를
안전하게 제어할 수 있는 서비스
• 리눅스 권한과 유사
• root
• user
• service
IAM – 용어 정리
• 리소스(Resource)
• IAM에 저장된 사용자, 역할, 그룹 및 정책 객체
• IAM에서 리소스를 추가, 편집 및 제거 가능
• ID
• 식별 및 그룹화에 사용되는 IAM 리소스 객체
• 사용자, 그룹 및 역할 포함
IAM – 용어 정리
• 개체(Entities) - 인증에 사용하는 IAM 리소스 객체입니다
• 역할 : 웹 자격 증명 또는 SAML을 통해 페더레이션된 사용자는 물론
사용자 또는 다른 계정의 IAM 사용자
• 사용자 : IAM 사용자(root, user)
• 보안주체(Principal)
• 개체를 사용하여 AWS에 로그인하고 요청하는
사람 또는 애플리케이션입니다.
IAM – 용어 정리
• 보안주체
• AWS 리소스에 대한 작업을 요청할 수 있는
사람 또는 애플리케이션
• 필수 - 보안주체로 root를 사용X
• IAM 사용자(user)
• 별개의 계정이 아니라 root 계정 내의 사용자
• IAM User != 사람(일부는 어플리케이션)
IAM – 기존 사용자 연동
• 사용자가 이미 기업 디렉토리에 자격 증명을 보유한 경우
• SAML 2.0 호환 X : 기업 디렉토리를 구성하여 사용자에게 AWS Management 콘솔에 대한 SSO 액세스를 제공
• SAML 2.0 호환 O : 자격 증명 브로커 애플리케이션을 생성하여 사용자에게 AWS Management 콘솔에 대한 Single-Sign On(SSO)
액세스를 제공
• 사용자가 이미 인터넷 자격 증명을 보유한 경우
• Login with Amazon, Facebook, Google 또는 OpenID Connect(OIDC) 호환 자격 증명 공급자 등의 인터넷 자격 증명 공급자를 통
해 자신을 식별할 수 있도록 모바일 앱 또는 웹 기반 앱을 만들면, 해당 앱에서 연동을 통해 AWS에 액세스
• https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/introduction_identity-management.html
SAML = Security Assertion Markup Language 2.0
SSO = Single-Sign On
정책
정책
그룹1
IAM – 권한(Permissions) / 정책(Policies)
• 하나의 계정을 관리하려면
정책을 사용하여
해당 계정 내 권한을 정의
• 교차 계정 관리 - AWS Organizations
IAM User(A)
정책
S3 권한
EC2 권한
IAM User(B)
정책
S3 권한
IAM 권한
그룹1
Lambda 권한
Glue 권한
Athena 권한
IAM – 정책
1
2
3
4
5
6
7
8
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "dynamodb:*",
"Resource": "arn:aws:dynamodb:us-east-2:123456789012:table/Books"
}
} cs
• 정책 설명
Dynamo DB에서
us-east-2에서
user(ID=123456789012) 는
Books table에 대한
모든 Action(dynamodb:*)을
허가
IAM – 그룹
IAM – 역할
• 유사 IAM User
• AWS 리소스에 액세스할 수 없는
사용자, 애플리케이션 또는 서비스에 액세스 권한을 위임
• IAM User와 다르게 영구적인 ID가 부여X
• 쉽게 말하자면, IAM Access(Secret) Key 를 줄 수 없는 상황에서 사용함
IAM – 역할
• 사용 시나리오
• 여러 AWS 계정 전반에 걸친 액세스 권한 제공
• 타사 AWS 계정에 액세스 권한 제공
• AWS 서비스에 대한 액세스 권한 제공
• 자격 증명 연동을 통한 액세스 권한 제공
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": [
"dynamodb:BatchGetItem",
"dynamodb:GetItem",
"dynamodb:Query",
"dynamodb:Scan",
"dynamodb:BatchWriteItem",
"dynamodb:PutItem",
"dynamodb:UpdateItem"
],
"Resource": "arn:aws:dynamodb:eu-west-1:123456789012:table/SampleTable"
},
{
"Effect": "Allow",
"Action": [
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:eu-west-1:123456789012:*"
},
{
"Effect": "Allow",
"Action": "logs:CreateLogGroup",
"Resource": "*"
}
]
} cs
IAM – ARN(Amazon Resource Name)
• 예제 : arn:aws:s3:::example_bucket/marketing/newproductlaunch/widget/*
• 형식 - arn:partition:service:region:account:resource
• partition : 표준 = aws, 다른 파티션에 있는 경우 파티션은 aws-partitionname(ex: aws-cn)
• service : IAM 리소스의 경우 항상 iam입니다(ex: s3, ec2…)
• region : IAM 리소스의 경우 항상 공백입니다(ex: us-east, us-west)
• account : AWS 계정 ID, 하이픈은 제외(ex: 123456789012)
• resource : 리소스
EC2
EC2(Elastic Compute Cloud)
• AWS에서 제공하는 확장식 컴퓨터(서버)
• 모든 AWS 서비스의 기반이자 기초 서비스
EC2 - 기능
• 인스턴스 : 가상 컴퓨팅 환경
• Amazon 머신 이미지(AMI)
• SW, OS 구성된 템플릿 이미지(ex - vmware 이미지)
• 다양한 인스턴스 Type
• 키 페어(.pem)를 사용하여 인스턴스 로그인 정보 보호
• AWS는 퍼블릭 키를 저장
• 사용자는 개인 키를 안전한 장소에 보관
EC2 - 기능
• 인스턴스 스토어 볼륨
• 임시 데이터를 저장하는 스토리지 볼륨
• 인스턴스 종료 시 삭제됨
• Amazon Elastic Block Store(Amazon EBS)
• 영구 스토리지 볼륨에 데이터 저장
• 자유롭게 인스턴스에서 접근 가능
• 리전(Region) 및 가용 영역(Availability Zone/AZ)
• 리전 : us-east, ap-northeast-2
• 가용 영역 : ap-northeast-2a, ap-northeast-2 b, ap-northeast-2 c
• 보안 그룹
• 프로토콜, 포트, 소스 IP 범위를 지정하는 방화벽 기능
EC2 - 기능
• 탄력적 IP 주소(EIP)
• 동적 클라우드 컴퓨팅을 위한 고정 IPv4 주소
• 태그
• Amazon EC2 리소스에 할당할 수 있는 메타데이터
• 주로 비용 탐색의 편의성을 위해 사용
• Virtual Private Clouds(VPC)
• 가상 네트워크
• 네트워크를 논리적으로 격리
• 격리된 환경 = 테넌트/Tenent
• CIDR(Classless Inter-Domain Routing)
EC2 – 모든 AWS 서비스의 기반?
instance
instance
instance
instance
instance
instance
EC2 – AWS vs 물리 네트워크
EC2 – 인스턴스 타입
• 타입마다 성능 수치가 다름
• 리전마다 사용 가능한 타입이 다름
• 서울은 스펙이 작은 타입 지원이 적음
• 대신 일반적인 스펙은 지원이 활발
• 세대가 증가할수록 비용감소, 성능 항샹
• M4 → M5
• 세대는 바꾸는 것이 무조건 이득(=HA 구성이 필수인 이유)
• 성능적으로는 바꾸는게 이득이지만 선결제로 구입한 경우가 더 가성비가 좋음
• T시리즈는 되도록 사용X = 서비스 장애의 원인
EC2 – T시리즈(Credit)
• 1 Credit = 1분 동안 100%의 사용률로 실행되는 vCPU 하나
• 1 Credit = 2분동안 vCPU 1개 50% 사용
• 1 Credit = 2분동안 vCPU 2개 25% 사용
• 기본 성능만큼의 Credit을 지속적으로 제공
• CPU 사용량 > 제공량 = Credit 잔고 감소(CPU Burst)
• CPU 사용량 < 제공량 = Credit 잔고 증가
• Credit = 0 → 순차적으로 CPU 성능 저하 발생
• Credit 잔고는 최대 한도가 존재(=하루동안 얻을 수 있는 Credit)
EC2 – T시리즈(Credit)
• CPU Steel Time
• 하이퍼바이저가 띄운 프로세스에서 가상CPU가 실제CPU를 기다리는 시간
• 발생한 경우엔 회피하기 위해서는 인스턴스 Stop/Start해서 물리 하드웨어를 변경
• 영구적인 회피방법으로는 Unlimit 기능 사용
• 기준 성능
• 인스턴스가 시간당 획득한 크레딧 수를 CPU 사용률의 백분율로 표시한 것
• vCPU가 2개인 t3.nano 인스턴스는 시간당 6개의 크레딧을 획득하므로 vCPU당 기준 성능이 5%(3/60분)
• EBS Optimized 비활성화
• I/O 성능이 보장이 안됨
• T3에서는 활성화 가능
EC2 – T시리즈 Unlimit
• CPU Steel Time이 존재하면 안되는 인스턴스에 적용
• T3는 자동 활성화
• 쉽게 생각해서 무이자 마이너스 통장
• CPU 성능 저하 없이 CPU Credit을 빌려 쓸 수 있음
• 24시간동안 잔고가 마이너스가 아니라면 추가비용 발생X
EC2 – T시리즈
• 사용하기 좋은 사례
• 메일 서버
• Gateway
• Batch
• 개발/테스트 서버
• 메모리 큐
EC2 – Elastic IP(EIP)
• 동적 클라우드 컴퓨팅을 위해 고안된 public, static IPv4 주소
• EIP는 AWS 계정과 연결
• IPv6는 지원X
• 리전당 최대 5개 지원(support를 통해 추가 요청 가능)
• 사용 예시
• 인스턴스 장애 시 주소를 다른 인스턴스로 다시 매핑하는 기능이 필요할 때는 EIP 주소 사용
(다른 모든 노드 간 통신에는 DNS 호스트네임을 사용)
• intel meltdown 사태로 인해 전체적인 인스턴스 교체
• 메일, Gateway 서버처럼 외부에서 접근하거나 타사에 IP가 등록 되어야 할때 사용
• Domain은 없지만 다른 서비스에 OAuth 로그인 제공
• 스팸메일 방지를 위해서 kisa에 화이트 리스트 등록시 IP 필요
EC2 – VPC(Virtual Private Cloud)
• 사용자의 AWS 계정 전용 가상 네트워크
• 오리지널 버전은 EC2-Classic 플랫폼
• AWS 클라우드에서 다른 가상 네트워크와 논리적으로 분리
• IP 주소 범위, VPC 범위, 서브넷, 보안 그룹을 설정하고
라우팅 테이블을 구성
• 여기서의 서브넷(Subnet)은 VPC의 IP 주소 범위
• 각 서브넷의 AWS리소스를 보호하기 위해
보안 그룹 및 네트워크 액세스 제어 목록(ACL)을 비롯한 여러 보안 계층을 사용
• 격리된 환경 = 테넌트/Tenent
EC2 – VPC 장점
• 인스턴스의 시작/중지에 상관 없이 유지되는 고정 IPv4 주소 할당
• IPv6 CIDR 블록을 VPC에 연결하고 IPv6 주소를 인스턴스에 할당하는 옵션 사용
• 인스턴스에 여러개의 IP 주소 할당이 가능
• 네트워크 인터페이스를 정의하고,
하나 혹은 그 이상의 네트워크 인터페이스를 VPC 인스턴스에 설치 가능합니다.
• 인스턴스의 인바운드 트래픽 제어(Ingress filtering),
아웃바운드 트래픽 제어(Egress filtering) 가능
• 네트워크 액세스 제어 리스트(ACL)를 통해,
인스턴스에 대한 액세스 보안이 한단계 더 강화
• 단일 테넌트 하드웨어에서 인스턴스 실행
EC2 – VPC Default
• 기본으로 생성된 VPC
• 인터넷 Gateway
• Private IP
• Public IP
• 기본 서브넷(=Public)
• 인스턴스간 통신 가능
EC2 – VPC Custom
• 직접 생성한 VPC
• 인터넷 Gateway X
• 기본적으로 Public IP X
• 기본 서브넷(=Public)
• 인스턴스간 통신 가능
EC2 – VPC Custom 2
• 직접 생성한 인터넷 가능 VPC
• 인터넷 Gateway 추가
• EC2 인스턴스에 EIP 설정
• 필요한 사례
• AWS Lambda에서
외부 Redis에 연결해야되는 경우
• 별도의 서버 모니터링 서비스에
EC2 인스턴스를 등록할때
S3
S3(Simple Storage Service)
• 확장성과 데이터 가용성 및 보안과 성능을 제공하는
객체 스토리지 서비스
• Storage : Object – CRUD
• Update = Overwrite(실제론 X)
A A’
Router
A A’
Router
S3 – Example
S3 - ACL
• 객체, bucket,
folder(prefix)별로
유저, 그룹, guest별로
접근 권한 부여 가능
S3 – 활용?
• EFS(Elastic File System) – EC2 Instance Store/EBS(Elastic Block Store)
• Data Export/Import – DMS(Database Migration Service), CloudWatch....
• Athena, Glue, Redshift – Data Worehouse
• CloudFront – Streaming, Image
(CDN - Content Delivery/Distribution Network)
• Static Web Page
• Network Drive
• Storage Manage : 압축, 생명주기, versioning
S3 – 개인적인 활용 사례
• 문제
• 회원 가입시 학생증 사진으로 학교 인증
• 가입 인증 처리 후 삭제가 필요
• 인증 담당자의 잦은 실수
• 스토리지 비용 누적
• 해결
• 15일 뒤에 삭제되는 Life cycle을 설정한 버킷 생성(휴지통)
• 인증처리가 완료되면 휴지통 버킷으로 이동
S3 – 단점
• 버킷의 prefix당 초당 횟수 제한이 있음
• PUT/COPY/POST/DELETE = 3500개
• GET/HEAD = 5500개
• 버킷의 최대수 = 100/1000(제한 요청시 가능한 최대)
• 내부적으로 성능이 Scaling되지만
수치적으로 정확히 알 수 없음
→ 버킷/prefix 설계 중요
Limit을 초과 가능성?
하나의 버킷(prefix)에 대해서
여러 서비스가 동작할 수 있기 때문에 어느정도 고려 필요
CloudFront
유저/개발자API Gateway
Batch
S3 – 설계?
• prefix는 다양하게 – name limit = 1024 bytes
• X – user/123_profile.jpg, 123_profile_thumbnail.jpg
• O - user/[user id]/profile, thumbnails
• 지연시간에 민감
• 최대한 AWS SDK를 사용
• 하나의 object, folder(prefix)에 요청이 몰리지 않게 Balancing
slack/emoji
S3 – 설계?
• 재처리는 필요가 아닌 필수!
• 요청이 몰리면 자동으로 Scaling되지만
Scaling 완료될 때까지 방법이 없다...... = 503 Server Error!
• 클라이언트에서 재시도 처리 필수(백오프 방식)
- retry interval = 1차 2초, 2차 4초, 3차 6초
- Scaling이 완료되어 성공할 때까지 재시도
S3 – 설계?
• 지연 시간이 매우 짧은(ms)
작은 요청(512KB 미만)은 적극적으로 재시도!
• 멀티파트 업로드 파일(128MB 이상)의 경우,
병목이 걸린 요청들 중에서 가장 느린 일부만(1~5%)
재시도 하는 것이 좋음
• 처리량 자체가 매우 높은 경우,
병렬로 GET/PUT하는 애플리케이션을 사용
(Java SDK - S3 Transfer Manager)
S3 – IP문제(Network)
• 느린 이유가 IP 대역문제일때도 있음
• xxx.100~105에 put 요청 중
• 106~110이 새로 Scaling되어 새로운 HTTP Connection 사용 가능
• 이미 진행 중인 요청들은 새로운 커넥션을 쓰지 않아서 요청이 밀림
• 503 Server Error & 재처리의 중요성!
• 주로 IP 캐싱 문제가 많음(로드 밸런싱 X, 단일 IP 사용)
• S3와의 통신에 쓰이는 IP 주소를 확인할 필요가 있음(netstat)
S3 – IP문제(Program Language)
• 주로 Java, PHP에서 많이 발생하는 문제
• Java : JVM에서 DNS 조회를 영구 캐시함(InetAddress)
• PHP : PHP VM이 재시작될 떄까지 DNS 조회를 캐싱(getHostByName)
• Python, Node.js에서는 자주 발생하지 않는 이유?
- DNS Caching X, App 수준에서 따로 제어
- 서비스가 죽어서 재시작되어 캐시가 삭제 or 갱신
- 가끔 심심할때 인스턴스를 죽여줘야하는 이유
https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/dev/DNSConsiderations.html
S3 – Glacier
• 데이터 보관 및 백업을 목적으로
보안 기능과 함께 내구성 있는 저장 공간을 제공하는 매우 저렴한 스토리지 서비스
• 주로 Life cycle, 백업에 사용
• 장점 : 안정적이고 싸다(비용은 1/3, 안정성은 S3와 동일)
• 단점 – 마음대로 사용하기 어려움(자유도=비용 청구)
• 검색 비용이 매우 비싸다(GB당 0.01 USD)
• 3개월 이전에 삭제시 비용발생, 이후에는 무료
• 업로드, 검색에 대한 UI 제공X
• 데이터 다운로드시 3~5시간 소요

AWS-IAM,S3,EC2

  • 1.
  • 2.
  • 3.
  • 4.
    IAM(Identity and AccessManagement) • AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 서비스 • 리눅스 권한과 유사 • root • user • service
  • 5.
    IAM – 용어정리 • 리소스(Resource) • IAM에 저장된 사용자, 역할, 그룹 및 정책 객체 • IAM에서 리소스를 추가, 편집 및 제거 가능 • ID • 식별 및 그룹화에 사용되는 IAM 리소스 객체 • 사용자, 그룹 및 역할 포함
  • 6.
    IAM – 용어정리 • 개체(Entities) - 인증에 사용하는 IAM 리소스 객체입니다 • 역할 : 웹 자격 증명 또는 SAML을 통해 페더레이션된 사용자는 물론 사용자 또는 다른 계정의 IAM 사용자 • 사용자 : IAM 사용자(root, user) • 보안주체(Principal) • 개체를 사용하여 AWS에 로그인하고 요청하는 사람 또는 애플리케이션입니다.
  • 7.
    IAM – 용어정리 • 보안주체 • AWS 리소스에 대한 작업을 요청할 수 있는 사람 또는 애플리케이션 • 필수 - 보안주체로 root를 사용X • IAM 사용자(user) • 별개의 계정이 아니라 root 계정 내의 사용자 • IAM User != 사람(일부는 어플리케이션)
  • 8.
    IAM – 기존사용자 연동 • 사용자가 이미 기업 디렉토리에 자격 증명을 보유한 경우 • SAML 2.0 호환 X : 기업 디렉토리를 구성하여 사용자에게 AWS Management 콘솔에 대한 SSO 액세스를 제공 • SAML 2.0 호환 O : 자격 증명 브로커 애플리케이션을 생성하여 사용자에게 AWS Management 콘솔에 대한 Single-Sign On(SSO) 액세스를 제공 • 사용자가 이미 인터넷 자격 증명을 보유한 경우 • Login with Amazon, Facebook, Google 또는 OpenID Connect(OIDC) 호환 자격 증명 공급자 등의 인터넷 자격 증명 공급자를 통 해 자신을 식별할 수 있도록 모바일 앱 또는 웹 기반 앱을 만들면, 해당 앱에서 연동을 통해 AWS에 액세스 • https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/introduction_identity-management.html SAML = Security Assertion Markup Language 2.0 SSO = Single-Sign On
  • 9.
    정책 정책 그룹1 IAM – 권한(Permissions)/ 정책(Policies) • 하나의 계정을 관리하려면 정책을 사용하여 해당 계정 내 권한을 정의 • 교차 계정 관리 - AWS Organizations IAM User(A) 정책 S3 권한 EC2 권한 IAM User(B) 정책 S3 권한 IAM 권한 그룹1 Lambda 권한 Glue 권한 Athena 권한
  • 10.
    IAM – 정책 1 2 3 4 5 6 7 8 { "Version":"2012-10-17", "Statement": { "Effect": "Allow", "Action": "dynamodb:*", "Resource": "arn:aws:dynamodb:us-east-2:123456789012:table/Books" } } cs • 정책 설명 Dynamo DB에서 us-east-2에서 user(ID=123456789012) 는 Books table에 대한 모든 Action(dynamodb:*)을 허가
  • 11.
  • 12.
    IAM – 역할 •유사 IAM User • AWS 리소스에 액세스할 수 없는 사용자, 애플리케이션 또는 서비스에 액세스 권한을 위임 • IAM User와 다르게 영구적인 ID가 부여X • 쉽게 말하자면, IAM Access(Secret) Key 를 줄 수 없는 상황에서 사용함
  • 13.
    IAM – 역할 •사용 시나리오 • 여러 AWS 계정 전반에 걸친 액세스 권한 제공 • 타사 AWS 계정에 액세스 권한 제공 • AWS 서비스에 대한 액세스 권한 제공 • 자격 증명 연동을 통한 액세스 권한 제공 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "dynamodb:BatchGetItem", "dynamodb:GetItem", "dynamodb:Query", "dynamodb:Scan", "dynamodb:BatchWriteItem", "dynamodb:PutItem", "dynamodb:UpdateItem" ], "Resource": "arn:aws:dynamodb:eu-west-1:123456789012:table/SampleTable" }, { "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:eu-west-1:123456789012:*" }, { "Effect": "Allow", "Action": "logs:CreateLogGroup", "Resource": "*" } ] } cs
  • 14.
    IAM – ARN(AmazonResource Name) • 예제 : arn:aws:s3:::example_bucket/marketing/newproductlaunch/widget/* • 형식 - arn:partition:service:region:account:resource • partition : 표준 = aws, 다른 파티션에 있는 경우 파티션은 aws-partitionname(ex: aws-cn) • service : IAM 리소스의 경우 항상 iam입니다(ex: s3, ec2…) • region : IAM 리소스의 경우 항상 공백입니다(ex: us-east, us-west) • account : AWS 계정 ID, 하이픈은 제외(ex: 123456789012) • resource : 리소스
  • 15.
  • 16.
    EC2(Elastic Compute Cloud) •AWS에서 제공하는 확장식 컴퓨터(서버) • 모든 AWS 서비스의 기반이자 기초 서비스
  • 17.
    EC2 - 기능 •인스턴스 : 가상 컴퓨팅 환경 • Amazon 머신 이미지(AMI) • SW, OS 구성된 템플릿 이미지(ex - vmware 이미지) • 다양한 인스턴스 Type • 키 페어(.pem)를 사용하여 인스턴스 로그인 정보 보호 • AWS는 퍼블릭 키를 저장 • 사용자는 개인 키를 안전한 장소에 보관
  • 18.
    EC2 - 기능 •인스턴스 스토어 볼륨 • 임시 데이터를 저장하는 스토리지 볼륨 • 인스턴스 종료 시 삭제됨 • Amazon Elastic Block Store(Amazon EBS) • 영구 스토리지 볼륨에 데이터 저장 • 자유롭게 인스턴스에서 접근 가능 • 리전(Region) 및 가용 영역(Availability Zone/AZ) • 리전 : us-east, ap-northeast-2 • 가용 영역 : ap-northeast-2a, ap-northeast-2 b, ap-northeast-2 c • 보안 그룹 • 프로토콜, 포트, 소스 IP 범위를 지정하는 방화벽 기능
  • 19.
    EC2 - 기능 •탄력적 IP 주소(EIP) • 동적 클라우드 컴퓨팅을 위한 고정 IPv4 주소 • 태그 • Amazon EC2 리소스에 할당할 수 있는 메타데이터 • 주로 비용 탐색의 편의성을 위해 사용 • Virtual Private Clouds(VPC) • 가상 네트워크 • 네트워크를 논리적으로 격리 • 격리된 환경 = 테넌트/Tenent • CIDR(Classless Inter-Domain Routing)
  • 20.
    EC2 – 모든AWS 서비스의 기반? instance instance instance instance instance instance
  • 21.
    EC2 – AWSvs 물리 네트워크
  • 22.
    EC2 – 인스턴스타입 • 타입마다 성능 수치가 다름 • 리전마다 사용 가능한 타입이 다름 • 서울은 스펙이 작은 타입 지원이 적음 • 대신 일반적인 스펙은 지원이 활발 • 세대가 증가할수록 비용감소, 성능 항샹 • M4 → M5 • 세대는 바꾸는 것이 무조건 이득(=HA 구성이 필수인 이유) • 성능적으로는 바꾸는게 이득이지만 선결제로 구입한 경우가 더 가성비가 좋음 • T시리즈는 되도록 사용X = 서비스 장애의 원인
  • 23.
    EC2 – T시리즈(Credit) •1 Credit = 1분 동안 100%의 사용률로 실행되는 vCPU 하나 • 1 Credit = 2분동안 vCPU 1개 50% 사용 • 1 Credit = 2분동안 vCPU 2개 25% 사용 • 기본 성능만큼의 Credit을 지속적으로 제공 • CPU 사용량 > 제공량 = Credit 잔고 감소(CPU Burst) • CPU 사용량 < 제공량 = Credit 잔고 증가 • Credit = 0 → 순차적으로 CPU 성능 저하 발생 • Credit 잔고는 최대 한도가 존재(=하루동안 얻을 수 있는 Credit)
  • 24.
    EC2 – T시리즈(Credit) •CPU Steel Time • 하이퍼바이저가 띄운 프로세스에서 가상CPU가 실제CPU를 기다리는 시간 • 발생한 경우엔 회피하기 위해서는 인스턴스 Stop/Start해서 물리 하드웨어를 변경 • 영구적인 회피방법으로는 Unlimit 기능 사용 • 기준 성능 • 인스턴스가 시간당 획득한 크레딧 수를 CPU 사용률의 백분율로 표시한 것 • vCPU가 2개인 t3.nano 인스턴스는 시간당 6개의 크레딧을 획득하므로 vCPU당 기준 성능이 5%(3/60분) • EBS Optimized 비활성화 • I/O 성능이 보장이 안됨 • T3에서는 활성화 가능
  • 25.
    EC2 – T시리즈Unlimit • CPU Steel Time이 존재하면 안되는 인스턴스에 적용 • T3는 자동 활성화 • 쉽게 생각해서 무이자 마이너스 통장 • CPU 성능 저하 없이 CPU Credit을 빌려 쓸 수 있음 • 24시간동안 잔고가 마이너스가 아니라면 추가비용 발생X
  • 26.
    EC2 – T시리즈 •사용하기 좋은 사례 • 메일 서버 • Gateway • Batch • 개발/테스트 서버 • 메모리 큐
  • 27.
    EC2 – ElasticIP(EIP) • 동적 클라우드 컴퓨팅을 위해 고안된 public, static IPv4 주소 • EIP는 AWS 계정과 연결 • IPv6는 지원X • 리전당 최대 5개 지원(support를 통해 추가 요청 가능) • 사용 예시 • 인스턴스 장애 시 주소를 다른 인스턴스로 다시 매핑하는 기능이 필요할 때는 EIP 주소 사용 (다른 모든 노드 간 통신에는 DNS 호스트네임을 사용) • intel meltdown 사태로 인해 전체적인 인스턴스 교체 • 메일, Gateway 서버처럼 외부에서 접근하거나 타사에 IP가 등록 되어야 할때 사용 • Domain은 없지만 다른 서비스에 OAuth 로그인 제공 • 스팸메일 방지를 위해서 kisa에 화이트 리스트 등록시 IP 필요
  • 28.
    EC2 – VPC(VirtualPrivate Cloud) • 사용자의 AWS 계정 전용 가상 네트워크 • 오리지널 버전은 EC2-Classic 플랫폼 • AWS 클라우드에서 다른 가상 네트워크와 논리적으로 분리 • IP 주소 범위, VPC 범위, 서브넷, 보안 그룹을 설정하고 라우팅 테이블을 구성 • 여기서의 서브넷(Subnet)은 VPC의 IP 주소 범위 • 각 서브넷의 AWS리소스를 보호하기 위해 보안 그룹 및 네트워크 액세스 제어 목록(ACL)을 비롯한 여러 보안 계층을 사용 • 격리된 환경 = 테넌트/Tenent
  • 29.
    EC2 – VPC장점 • 인스턴스의 시작/중지에 상관 없이 유지되는 고정 IPv4 주소 할당 • IPv6 CIDR 블록을 VPC에 연결하고 IPv6 주소를 인스턴스에 할당하는 옵션 사용 • 인스턴스에 여러개의 IP 주소 할당이 가능 • 네트워크 인터페이스를 정의하고, 하나 혹은 그 이상의 네트워크 인터페이스를 VPC 인스턴스에 설치 가능합니다. • 인스턴스의 인바운드 트래픽 제어(Ingress filtering), 아웃바운드 트래픽 제어(Egress filtering) 가능 • 네트워크 액세스 제어 리스트(ACL)를 통해, 인스턴스에 대한 액세스 보안이 한단계 더 강화 • 단일 테넌트 하드웨어에서 인스턴스 실행
  • 30.
    EC2 – VPCDefault • 기본으로 생성된 VPC • 인터넷 Gateway • Private IP • Public IP • 기본 서브넷(=Public) • 인스턴스간 통신 가능
  • 31.
    EC2 – VPCCustom • 직접 생성한 VPC • 인터넷 Gateway X • 기본적으로 Public IP X • 기본 서브넷(=Public) • 인스턴스간 통신 가능
  • 32.
    EC2 – VPCCustom 2 • 직접 생성한 인터넷 가능 VPC • 인터넷 Gateway 추가 • EC2 인스턴스에 EIP 설정 • 필요한 사례 • AWS Lambda에서 외부 Redis에 연결해야되는 경우 • 별도의 서버 모니터링 서비스에 EC2 인스턴스를 등록할때
  • 34.
  • 35.
    S3(Simple Storage Service) •확장성과 데이터 가용성 및 보안과 성능을 제공하는 객체 스토리지 서비스 • Storage : Object – CRUD • Update = Overwrite(실제론 X) A A’ Router A A’ Router
  • 36.
  • 37.
    S3 - ACL •객체, bucket, folder(prefix)별로 유저, 그룹, guest별로 접근 권한 부여 가능
  • 38.
    S3 – 활용? •EFS(Elastic File System) – EC2 Instance Store/EBS(Elastic Block Store) • Data Export/Import – DMS(Database Migration Service), CloudWatch.... • Athena, Glue, Redshift – Data Worehouse • CloudFront – Streaming, Image (CDN - Content Delivery/Distribution Network) • Static Web Page • Network Drive • Storage Manage : 압축, 생명주기, versioning
  • 39.
    S3 – 개인적인활용 사례 • 문제 • 회원 가입시 학생증 사진으로 학교 인증 • 가입 인증 처리 후 삭제가 필요 • 인증 담당자의 잦은 실수 • 스토리지 비용 누적 • 해결 • 15일 뒤에 삭제되는 Life cycle을 설정한 버킷 생성(휴지통) • 인증처리가 완료되면 휴지통 버킷으로 이동
  • 40.
    S3 – 단점 •버킷의 prefix당 초당 횟수 제한이 있음 • PUT/COPY/POST/DELETE = 3500개 • GET/HEAD = 5500개 • 버킷의 최대수 = 100/1000(제한 요청시 가능한 최대) • 내부적으로 성능이 Scaling되지만 수치적으로 정확히 알 수 없음 → 버킷/prefix 설계 중요
  • 41.
    Limit을 초과 가능성? 하나의버킷(prefix)에 대해서 여러 서비스가 동작할 수 있기 때문에 어느정도 고려 필요 CloudFront 유저/개발자API Gateway Batch
  • 42.
    S3 – 설계? •prefix는 다양하게 – name limit = 1024 bytes • X – user/123_profile.jpg, 123_profile_thumbnail.jpg • O - user/[user id]/profile, thumbnails • 지연시간에 민감 • 최대한 AWS SDK를 사용 • 하나의 object, folder(prefix)에 요청이 몰리지 않게 Balancing slack/emoji
  • 43.
    S3 – 설계? •재처리는 필요가 아닌 필수! • 요청이 몰리면 자동으로 Scaling되지만 Scaling 완료될 때까지 방법이 없다...... = 503 Server Error! • 클라이언트에서 재시도 처리 필수(백오프 방식) - retry interval = 1차 2초, 2차 4초, 3차 6초 - Scaling이 완료되어 성공할 때까지 재시도
  • 44.
    S3 – 설계? •지연 시간이 매우 짧은(ms) 작은 요청(512KB 미만)은 적극적으로 재시도! • 멀티파트 업로드 파일(128MB 이상)의 경우, 병목이 걸린 요청들 중에서 가장 느린 일부만(1~5%) 재시도 하는 것이 좋음 • 처리량 자체가 매우 높은 경우, 병렬로 GET/PUT하는 애플리케이션을 사용 (Java SDK - S3 Transfer Manager)
  • 45.
    S3 – IP문제(Network) •느린 이유가 IP 대역문제일때도 있음 • xxx.100~105에 put 요청 중 • 106~110이 새로 Scaling되어 새로운 HTTP Connection 사용 가능 • 이미 진행 중인 요청들은 새로운 커넥션을 쓰지 않아서 요청이 밀림 • 503 Server Error & 재처리의 중요성! • 주로 IP 캐싱 문제가 많음(로드 밸런싱 X, 단일 IP 사용) • S3와의 통신에 쓰이는 IP 주소를 확인할 필요가 있음(netstat)
  • 46.
    S3 – IP문제(ProgramLanguage) • 주로 Java, PHP에서 많이 발생하는 문제 • Java : JVM에서 DNS 조회를 영구 캐시함(InetAddress) • PHP : PHP VM이 재시작될 떄까지 DNS 조회를 캐싱(getHostByName) • Python, Node.js에서는 자주 발생하지 않는 이유? - DNS Caching X, App 수준에서 따로 제어 - 서비스가 죽어서 재시작되어 캐시가 삭제 or 갱신 - 가끔 심심할때 인스턴스를 죽여줘야하는 이유 https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/dev/DNSConsiderations.html
  • 47.
    S3 – Glacier •데이터 보관 및 백업을 목적으로 보안 기능과 함께 내구성 있는 저장 공간을 제공하는 매우 저렴한 스토리지 서비스 • 주로 Life cycle, 백업에 사용 • 장점 : 안정적이고 싸다(비용은 1/3, 안정성은 S3와 동일) • 단점 – 마음대로 사용하기 어려움(자유도=비용 청구) • 검색 비용이 매우 비싸다(GB당 0.01 USD) • 3개월 이전에 삭제시 비용발생, 이후에는 무료 • 업로드, 검색에 대한 UI 제공X • 데이터 다운로드시 3~5시간 소요