AWS Account : roaldhkdrnr05@gmail.com
IAM : Identify Acces Management
AWS Regions
- AWS Availability Zones(AZ) (At Least 2 Data Center)
AWS Data Centers
AWS Edge Locations / Points of Presence
{
"Version": "2012-10-17",
"ID": "S3-Account-Permissions", <- optinal
"Statement": [ <- required , can be one or multiple ones
{
"Sid": "1", <- Statement ID
"Effect": "Allow", <- Allow or Deny ★
"Principal" : { <- accounts/user/role 정책이 적용될 대상 ★
"AWS": ["arn:aws:iam::123456789012:root"] <- 루트계정에게 허용
}, <-
"Action": [ <- 수행될 API 호출 목록(verb 항목) ★
"s3:GetObject",
"s3:PutObject"
],
"Resource": ["arn:aws:s3:::mybucket/*"] <- 조치가 적용될 대상(resource 항목) ★
}
]
}
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
MFA ★ = password you know + security device you own
- Virtual MFA device : Google Authenticator (only 1 device) , Authy (Multiple device)
- Universal 2nd Factor (USF) Security Key : Yubikey (3rd party , Multiple root and IAM users using a single secrity key)
- Harware key Fob MFA Device : Provided by Gemalto (3rd party)
- Hardware key Fob MFA Device for AWS GovCloud (US , 3rd party)
MFA 설정
my acconut - my security credentials - multi-factor authentication (Activate MFA) - Virture MFA device (phone) - Authy 다운 https://aws.amazon.com/iam/features/mfa/?audit=2019q1
- QR코드 스캔 - 계정생성 - 코드2개입력
MFA , CLI
SDK(Software Developer Kit) : for code=protected by access keys (어플리케이션 코드 내에서 AWS에서 API를 호출할때마다 사용)
- Language-specific APIs (set of libraries)
- Embedded within your application
- Supports
- SKDs : (JavaScript , Java , Python , PHP , .Net , Ruby , Go , Nodejs , C++)
- Mobile SDKs : (Android , iOS , ... )
- IoT Device SDKs (Embedded C , Arduino , ... )
Example : AWS CLI is built on AWS SDK for Python
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
AWS CLI for Windows Install
- https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/install-cliv2-windows.html (AWS CLI Version 2 다운)
- cmd - aws --version
AWS CLI for Linux
(최신버전 설치)
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --version
(특정 버전 설치)
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64-2.0.30.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --version
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Access Key 생성
iam - user - security credentials - create access key
키 저장 -> cmd - aws configure (로그인) - regions : ap-northeast-2
aws iam list-users
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
AWS CloudShell ( ap-northeast-1(도쿄) 로 전환후 사용가능 )
aws --version
aws iam list-users --region
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[Create Role]
ex) EC2 - lambda 함수
IAM - role - create role - AWS Service - EC2 - IAM RO 권한선택 - 태그설정X Next - roleName설정 - 완료
[IAM Security Tools]
- IAM Credentials Report (account-level)
- IAM Access Advisor (user-level)
IAM - Credential Report - Download Report - 각종 내역 확인가능
IAM - User - Access Advisor (특정 사용자 감사)
IAM 에서 사용자에게 사용자계정 할당
유저를 그룹에 할당 - 그룹에 권한 추가 - IAM Role - Strong Password Policy - MFA 사용 - Access Key 사용 (CLI / SDK) - IAM Credential Report / Access Analyz - Never share IAM User & Access Keys
Users 생성
그룹에 넣기
Policies 생성
Roles (EC2 할당)
MFA 생성
Access Key 생성
IAM Credential Report & IAM Access Advisor
Quiz
AWS Bugget Setup - create bugget
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[ECS Basics]
- 가상머신 대여
- 가상드라이브 & EBS볼륨에 데이터 저장
- 엘라스틱 로드밸런서 (ELB)
- 오토스케일링 그룹(ASG) 사용하여 서비스 확장
[EC2 sizing]
- CPU
- RAM
- Storage space
- Network-attached (EBS & EFS)
- hardware (EC2 Instance Store)
- Network Card : sped of the card , Public IP address
- Firewall rules : security group
- Bootstrap script (configure at first launch) : EC2 User Data (웹 서버 구성)
{EC2 instance tyes]
- t2.micro : 1 / 1 vCPU,RAM , storage: EBS , Network성능 : low&moderate
- t2.xlarge : 4 / 16 vCPU,RAM , storage: EBS , Network성능 : moderate
- c5d.4xlarge : 16 / 32 vCPU,RAM , storage: SSD , Network성능 : 10G , EBS bandwidth : 4750
- r5.16xlarge : 64 / 512 vCPU,RAM , storage: EBS , Network성능 : 20G , EBS bandwidth : 13600
- m5.8xlarge : 32 / 128 vCPU,RAM , storage: EBS , Network성능 : 10G , EBS bandwidth : 6800
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[Launch EC2 Instance]
EC2 - instance - Select AMI - Select instance type(t2.micro) - detalis (User data)
#!/bin/bash
yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd
echo "
Hello World from $(hostname -f)
" > /var/www/html/index.html
- storage (delete on termination) - security group (add 80,httpd)
Security Group
inbound 차단
outbound 허용
보안그룹끼리 연결가능
ssh : ec2-user 로 로그인 - sudo su 로 root 전환 - 키파일 권한 0400으로 수정
윈도우ssh : pem파일 우클릭 - 보안 - 고급보안설정 - 사용자 제거
[EC2 Instance Connect] needed port=22 ★ aws configure 명령은 절대 쓰지말자 ★
[EC2 Instance roles (IAM role 사용)]
ec2 - instance 선택 - action - security - modify IAM role ★ IAM role을 추가함으로 인해 자격증명 생성 ★
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
EC2 On demand
- pay for what you use - billing per second , after the first minute
- All other operationg systems - billing per hour
- Has the Highest cost but no upfront payment
- No long-term commitment
- Recommended for short-term and un-interrupted workloads
EC2 reserved instance (예약 인스턴스) : Minimum 1 year , 3가지 유형의 인스턴스
- Up to 75% discount compared to On-demand
- Reservation period : 1 year = + discount | 3 years = +++ discount
- Reserved instances : ling workloads
- convertible Reserved Instances : long workloads with flexible instances
- Scheduled Reserved Instances : example - every Thursday between 3 and 6 pm
Spot Instances : short workloads , cheap , can lose instances (less reliable)
- can get a discount of up to 90% compared to On-demand
- Not suitable for critical jobs ror databases
★스팟 집합= 스팟인스턴스 + 온디맨스 인스턴스 의 집합 , 이를통해 가장 저렴한 가격으로 스핏 인스턴스 자동요청
Dedicated hosts : book an entire physical server , control instance placement
★ 전용 호스트 , 전용 인스턴스 차이 꼭 알아두기 ★
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[Spot Instance] ★ 시험 ★
배치작업,데이터분석,장애에 탄력적인 워크로드
비용 유예 - 설정된 가격보다 높아지면 인스턴스 회수
스팟 인스턴스 종료법 : persistent request 취소 - 실행중인 인스턴스 종료
Spot Fleets ★ 알아보기 ★
- 여러 시작 pool을 정의 할수 있음 , 여러 인스턴스 유형으로
- set of Spot Instances + (optional) On-Demand instance
- spot fleet이 예산 limit에 도달하면 인스턴스 시작이 중지됨
- 그래서 전략을 정의
- lowestPrice
- diversified(distributed across all pools : greate for availability , long workloads)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
EC2 elastic IP : 고정 Public IP 설정
EC2 Placement Groups
- Cluster - cluster instances into a low-latency group in a single Availability Zone (고성능 네트워크) ★
- 하나라도 실패하면 전체 인스턴스가 실패 (대신빠름)
- spread - spreads instances across underlying hardware (max 7 instance per group per AZ) - critical applications
- 고가용성과 같은의미 , AZ 1개당 인스턴스 7개로 제한 (고가용성 ★)
- partition - spread instances across many different partitions
- AZ 1개당 인스턴그 7개로 제한 , 파티션=AWS의 랙
- 인스턴스가 어떤 파티션에 있는지 알려면 메타데이터 서비스 사용
[Elastic Network Interfaces = ENI] 특정 AZ에 바인딩 , 다른 AZ의 인스턴스에 연결 불가능 ★
- The ENI can have Primary private IPv4 , one or more secondary IPv4 / one Public IPv4
- One or more Security Groups
- A mac adress
instance - network interfaces - create - AZ선택 (ap-northeast-2) - action - attach
https://aws.amazon.com/blogs/aws/new-elastic-network-interfaces-in-the-virtual <- ENI Details
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[EC2 Hibernate]
- Ram의 전체상태가 root EBS Volume에 파일형태로 Dump됨
- The root EBS volume must be encrypted ★
- Supported instance families : C3, C4, C5, M3, M4, M5, R3, R4 ,R5
- instance Ram size bust be less than 150GB
- bare betal instance 에는 아직 지원안함
- Available for On-Demand and Reserved Instances ★
- AN instance cannot be hibernated more than 60 days
instance 생성시 enable hibernate - root volume encrption (alias/aws/ebs)
uptime 으로 가동시간 중지확인(중지되면안됨)
[EBS]
- EBS = Elastic Block Store (Network Drive)
- EBS를 사용하는이유 : 인스턴스를 terminate 시켜도 데이터를 유지할수 있음
- 특정 AZ에 바인딩, 한번에 하나의 인스턴스에만 마운트 가능
- 인스턴스에서 분리가능 -> 다른 인스턴스에 적재가능
- 종료시 삭제 옵션 ★
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[EC2 Nitro] ★시험에 나옴
- 차세대 EC2 인스턴스
- 더나은 성능 (네트워킹,고성능 컴퓨팅 및 ipv6 지원 , 더빠른 EBS 볼륨
- 기본보안 향상 , 여러가지 백엔드 개선사항
- 증가된 IOPS 작업성능
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[EC2 Instance Storage Section]
- EBS 볼륨을 추가하여 인스턴스에 붙일수 있음.
- Instance 선택 - Storage - 블록디바이스 선택 - 볼륨 생성
[EBS Snapshot]
- 인스턴스에 볼륨을 연결하고 볼륨을 가져와서 스냅샷 생성 가능
- 다른 AZ로 EBS볼륨 스냅샷 restore 가능
- EC2 - EBS - Volumes - Action (Create Snapshot , Create Volume)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[AMI (Amazon Machine Image)] 도커허브 이미지 같은 기능
- EC2 인스턴스의 사용자지정
- 자체 소프트웨어 구성, 운영체재 정의 , 모든 모니터링 도구 설정
- 자체 AMI 생성시 더 빠른 부팅속도와 구성시간, 설치하려는 모든 소프트웨어가 EC2 인스턴스에 AMI를통해 사전 패키징 됨
- 그후 지역 전체에 복사 가능
- AWS Parketplace AMI 에서 타인의 AMI 사용 가능
* EC2 인스턴스의 AMI 프로세스 = 인스턴스 시작 - 사용자 지정 - 데이터 무결성 확인을 위해 인스턴스 중지 후 AMI 빌드 - 백그라운드 EBS스냅샷 생성됨 - 다른 AMI에서 인스턴스 시작 가능
Create Instance -> Amazon2 -> t2.micro -> User data(html index미작성,httpd만 설치) 입력 -> 기존 보안그룹선택 -> 기존키페어 -> 인스턴스 시작
Instance 우클릭 -> image and templates (create image) -> create AMI
Create Instance -> My AMI -> t2.micro -> Userdata(html index만 작성) 입력 echo "
Hello World from $(hostname -f)
" > /var/www/html/index.html
(인스턴스를 스냅샷찍는거랑 똑같다고 보면 됨)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[EC2 Instance Store]
- 더 나은 I/O성능
- 매우 높은 디스크 성능
- 주의할점 : 인스턴스 종료하거나 스토어가있는 스토리지 손실
- 단기보관 임시 콘텐츠에 적합
- i3.large*
- 고성능 하드웨어 볼륨 연결
[EBS Volume Type] 루트 볼륨 유형은 삭제되고 EBS 볼륨 유형은 삭제안됨
- gp2/gp3 : 범용SSD볼륨 / 가격,성능 균형 / 다양한 워크로드용 / 대기시간이 짧은 효율적인 비용의 스토리지
/ 가상데스크탑 , 개발 및 테스트환경 크기는 1GB~16TB 까지 다양
/ gp3 은 최소 3000 IOPS & 125MB/s 처리량 제공 // 독립적인 IOPS 16000 & 최대처리량 1000MB/s
/ gp2는 서로 연결 / gp3는 연결되지않고 독립동작
- io1/io2 : 최고성능 SSD, 미션크리티컬 , 짧은대기시간 및 높은 워크로드 처리량 , io1/io2 선택시 최신세대 선택하는게 좋음
4~16TB 사이 / Nitro EC2의 경오 최대 IOPS 64000 , Nitro가아닌경우 최대 32000 IOPS
[io2 Block Express] (4GB - 64TB) : 최대 256000 IOPS , 1GB당 IOPS비율 = 1:1000
- support EBS Multi-attach
★ - io2 Muiti attach 의 파일시스템은 매우 특정한 유형의 워크로드의 경우 그 특정 유형의 EBS볼륨에만 해당됨
파일시스템이 XFS나 ex4,etc 가 아닌 특별한 파일시스템이어야함
-------------------------부팅볼륨 사용불가 ↓ ------------------------------------------------
- st1 (최대16TB) : 저비용 HDD / 자주 액세스하는 잡약적 워크로드 처리용 / 처리량 최적화 (빅데이터에 적합)
/ 데이터 웨어하우징 및 로그처리 초당500MB / 500 IOPS
- sc1 (최대16TB) : 최저비용 HDD / 덜 액세스하는 워크로드용 / 아카이브 데이터용에 적합
최대 250MB/s , 250 IOPS
- EBS 볼륨 정의 요인 : IOPS , 크기
- EC2 인스턴스의 경우 gp2/gp3 , io1/io2 만 부팅볼륨으로 사용가능, 이는 루트 OS가 실행될 위치를 위미
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[EBS Multi Attach]
- 동일한 AZ 내에서만 Multi-attach 가능
- 높은 어플리케이션 가용성이 필요한경우 (클러스티링된 Linux 어플리케이션)
- 동일한 볼륨에 대한 동시 쓰기 작업 관리
[EBS Encription]
- 볼륨내에서 암호화된 저장 데이터를 가져옴, 모든스냅샷 보호, 스냅샷에서 생성된 모든볼륨 암호화 , 인스턴스간 이동중인 모든데이터 암호화
- 지연시간에 따른 영향이 매우 적기때문에 MKS의 키 활용하므로 AED-256 사용
- 암호화되지않은 스냅샷을 복사할때 암호화를 활성화
- 암호화되지않은 EBS 볼륨을 암호화하는방법 : 볼륨의 EBS 스냅샷생성 -> 복사기능을 사용하여 EBS 스냅샷 암호화 -> 스냅샷에서 새 EBS 볼륨 생성 - 해당 볼륨 암호화
- EC2 -> Create Volume -> Ecription Option not checked -> 만들어진 볼륨 우클릭-스냅샷생성 -> 스냅샷탭 -> 우클릭 복사 -> 스냅샷 암호화
암호호된 스냅샷 우클릭 볼륨생성 -> 볼륨 들어가보면 암호화되있음 (KMS로)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
[EFS] (Linux Only)
- Managed NFS & Network File System
- EBS와 차이점 = 다중 AZ 영역 배치 가능
- 매우 비싼편이며 마운트가능 확장가능 gp2드라이브의 약 3배 , but 사용한만큼 지불이기떄문에 EBS보다 쌀 수도있음
- 보안그룹과 연결, 각 다른 AZ에 동일하게 NFS로 마운트 , 모든 인스턴스는 동일한파일에 액세스가능
- 웹서비스 , 데이터공유 , wordpress 사이트 , NFSv4.1 버전 사용
- EFS는 Linux 기반 AMI 에서만 작동 , 보안그룹을 사용해야함
- EFS 암호화 = 미사용 KMS 키 사용가능
- POSIX 파일시스템에만 사용가능 , 파일시스템 자동확장 , 종량제이며 용량계획이 없음 / 파일시스템 petabyte 규모로 성장가능
- 최대 10GB/s 처리가능 / 수천개의 NFS 클라이언트 동시지원 가능 , 고성능
- ★ Performance mode (Set at EFS creaton time)
- web서버나 범용 EFS, 많은 작은파일 , 빅데이터 , 미디어 처리에 적합
- ★ Throughtput mode
- 1TB 스토리지에 대해 초당 50MB/s & 최대 100MB/s // 더높은 처리량을 원하면 더작은 크기의 EFS파일 시스템 사용
- 파일시스템의 크기에 따라 처리량이 증가하기 때문에 일반적으로 프로비저닝 처리량 모드로 이동 가능 , 이를통해 처리량 설정 가능 , 스토리지 크기에 상관없이
- Provisioned : 매우높은 처리량을 필요로 하면 아주 작은 파일시스템을 가져야함
- ★ Storage tier (파일의 수명 주기 관리 기능)
- 30일후에 새 계층으로 이동
- 표준은 자주 액세스하는 파일
- ★ Infrequent access (EFS-IA) 저비용 계층
- 액세스가 드문 파일 검색(비용발생)
- EFS_IA 라고도 함
[EFS Hands ON] ★
Infrequent Access ( 자주 액세스하지 않는 스토리지 클래스 ) = EFS IA 스토리지 클래스 사용하는게 비용효율
EFS - Create File System - Customize - 수명주기선택 - Network Access 탭 -> 가용AZ 선택(보안그룹 만들기)
인스턴스 생성 -> 다른 AZ에 생성 - 보안그룹 새로 생성 -> 만들어진 인스턴스 우클릭 수정 - 인스턴스 디테일 - edit - 다른 AZ선택후 만들기
서로 다른 AZ인스턴스 각각 SSH 연결 - EFS -> attach ->
[sudo] install amazon-efs-utils -> mkdir efs -> mount -t efs -o tls [EFS이름]:/ efs
만들어진 보안그룹의 인바운드 허용 - 보안그룹 우클릭 - 수정 - NFS - source보안그룹(인스턴스만들떄 만든거)
[EBS vs EFS]
EBS
- 한개의 AZ에만 할당
- 다른 AZ로 넘길려면 스냅샷 - restore 스냅샷
- 인스턴스를 종료하면 볼륨 삭제됨
EFS
- 탄력적 파일시스템
- OS = 리눅스만 사용가능
- EFS에서 사용한만큼만 비용청구
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
[Scalability & High Availability]
Scalability
- 수직적 확장성
- 인스턴스의 크기 (t2.micro -> 52.large)
- 비분산 시스템에 일반적 (ex : DB,RDS,ElastiCache)
- 수평적 확장성 (elasticity)
- Distributed system (common for web application)
High Availability
- 일반적으로 수평적 확장 사용
- for Load Balancer multi AZ
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
[Elastic Load Balancer]
- 다중 백엔드로 수신될 트래픽을 전달할 서버들의 합집합
- 여러 다운스트림 인스턴스의 단앨 액세스지점(DNS)를 Expose gka
- SSL 종료 제공
- Intergration with EC2 offerings / services (ex : Auto Scaling Groups, Amazon ECS, AWS Certificate Manager(ACM), CloudWatch, Route 53, AWS WAF, AWS Global Accelerator
[Helath Check]
- ELB ---- Helath Check -----> EC2 Instance
[4 Kind of Manage of Elastic Load Balancer]
* Some Load Balancers can be setup as *internal* or *external* ELBs
Classic Load Balancer (CLB) 2009
- HTTP,HTTPS,TCP,SSL(Secure TCP)
- Not Use
- Helath Checks are TCP or HTTP based
- HTTP Listener -> CLB
- 내부적으로 CLB -> Traffic Redirecting
- 인스턴스 생성 -> 로드밸런서 생성(CLB) -> 로드밸런서용 보안그룹 생성 ->
Application Load Balancer (ALB) 2016
- HTTP,HTTPS,WebSocket
Network Load Balancer (NLB) 2017
- TCP,TLS (Secure TCP),UDP
Gateway Load Balancer (GWLB) 2020
- 네트워크계층에서 동작
- common use
[Security Group for Load Balancer]
- EC2가 로드밸런서에서 오는 직접오는 트래픽을 허용해야함 (source가 IP가 아닌 Security Group으로 설정)
-> Helath Check (4523) -> 인스턴스 선택 -> 생성 (규칙 수정하는 방법 -> 규칙삭제 후 "source"가 CLB 보안그룹인 새 규칙을 생성해야함)
-- 76 ALB
ALB (application load balancer)
- Layer7 (HTTP)
- 여러시스템, 여러HTTP 응용 프로그램에 로드밸런싱 (대상 그룹)
- 동일 인스턴스 내의 여러 애플리케이션에 로드밸런싱 허용
- 컨테이너 , ECS , HTTP/2 , Websocker , Redirection 지원
- 경로 라우팅
- 호출되는 HTTP 요청에서 X-Forwarded-for (IP) , Port(port) , Proto(Protocol) 을 봐야 인스턴스에서 클라이언트 IP를 알수 있다
-- ALB hands on
'Ops > AWS' 카테고리의 다른 글
[CI/CD with AWS] - Deploy Client to S3 Bucket (0) | 2022.12.02 |
---|---|
[CI/CD with AWS] - Deploy Server (0) | 2022.12.02 |
Amazon Web Service (AWS) Deployment (2) | 2022.12.02 |
AWS CloudWatch Custom Metric (0) | 2022.09.22 |
AWS 기본개념 (0) | 2022.08.01 |