Developing on AWS 1일차
포스트
취소

Developing on AWS 1일차

클라우드 컴퓨팅이란?

클라우드 컴퓨팅이란 인터넷을 통해 IT 리소스와 애플리케이션을 온디맨드로 제공하는 서비스를 말한다.

클라우드 컴퓨팅 모델

  • Infrastructure as a Service(IaaS) 클라우드 IT의 기본 구성 요소
    • 네트워킹 기능
    • 컴퓨터
    • 데이터 스토리지 공간
  • Platform as a Service(PaaS) 기본 인프라(예: 하드웨어와 운영체제)를 관리할 필요 없이 애플리케이션을 실행할 수 있게 해줌
  • Software as a Service(SaaS) 서비스 제공자가 실행 및 관리하는 완전한 제품을 사용자에게 제공

AWS는 IaaS로 시작해 점차 PaaS, SaaS로 발전함.

AWS 클라우드 컴퓨팅의 이점

  • 자본 비용을 가변 비용으로 대체 필요 없어지면 비용 지불을 하지않아도 된다.
  • 규모의 경제로 얻게 되는 이점 많이 쓸수록 할인 받을 수 있다.
  • 용량 추정 불필요 서비스에 제공되고 있는 서버의 성능을 원하는 만큼 언제든지 바꿀 수 있다.
  • 속도 및 민첩성 개선
  • 데이터 센터 운영 및 유지 관리에 비용을 투자할 필요가 없다.

AWS Global Infra

  • Region - 지역
  • A.Z. - 가용영역 Region을 이루고 있는 Region -> (추상화된) 데이터센터
  • Edge Location 속도를 중시하는 서비스에서 Region 근처에서 캐싱 - CDN, DNS 등

관리형 vs 비관리형 서비스 비교

  • 비관리형(Customer Managed) 사용자가 확장, 내결함성 및 가용성을 관리 - EC2 등
  • 관리형(AWS Managed) 일반적으로 확장, 내결함성 및 가용성이 서비스에 내장되어 있음 - RDS 등

클라우드 배포 모델

  • 올인 클라우드 All Cloud Service
  • 하이브리드 Cloud Service + 기업 IDC
    • 리프트 앤 시프트(lift&shift) 올인: 모놀리식 애플리케이션 -> 제공중인 서비스를 통째로 클라우드 환경으로 옮기는 것 하이브리드: 클라우드 환경에 맞게 리팩토링하면서 기업 IDC 병행

마이크로서비스 아키텍처

  • 기존의 모놀리식 아키텍처는 확장성이 좋지않다.
  • 마이크로서비스 아키텍처 내에서 각 애플리케이션 구성 요소는 자체 서비스로 실행되며, 각 구성 요소는 잘 정의된 API를 통해 다른 서비스와 통신한다.
  • 서비스마다 한 가지 기능을 수행한다.
  • MSA의 장점
    • 민첩성 서비스 소유권을 가지는 소규모 독립된 팀으로 구성되어 팀이 작고 이해하기 쉬운 컨텍스트 내에서 역할을 수행할 수 있다. -> 독립적이고 빠른 작업이 가능해 개발 주기가 단축된다.
    • 기술적 자유 독립적인 팀은 각자 특정 문제를 해결하는 데 가장 적합한 도구를 선택할 수 있다.
    • 유연한 규모 조정 각 서비스를 독립적으로 확장할 수 있다.
    • 재사용 가능한 코드
    • 손쉬운 배포
    • 복원력
  • Best Practice 서버를 상태 비저장으로 처리하기 -> 언제든지 인스턴스를 추가/제거 할 수 있도록 일회용 서버로 취급해주기!

    AWS Lambda를 이용한 서버리스 컴퓨팅

Amazon EC2 요금

  • 온디맨드 기본 요금제 - 사용자의 사용량만큼만 요금을 지불
  • 예약 인스턴스 R.I - 약정 할인 요금제(1/3년) - 온디맨드에 비해 70%정도 할인
  • 스팟 인스턴스 놀고 있는 인스턴스들을 90%정도 할인해서 제공 - 인스턴스의 리소스가 부족해지면 종료 2분 전 공지 후 리소스를 회수

ELB

  • 트래픽을 여러 가용 역역에서 여러 Amazon EC2 인스턴스에 걸쳐 분산한다.
  • Amazon EC2 인스터스의 상태 확인을 지원한다.
  • EC2 인스턴스에 대한 트래픽의 라우팅과 로드 밸런싱을 지원한다.

  • 종류
    • Classic
    • Application
    • Network
  • 고정 세션
    • 로드 밸런서의 고정 세션 기능을 사용하면 로드 밸런서가 사용자의 세션을 특정 서버 인스턴스에 바인딩할 수 있다.
    • 고정 세션으로 인해 애플리케이션의 확장성이 제한될 수 있다.
    • 서버 전반에 걸쳐 로드가 불균등해져 사용자 응답 시간에 나쁜 영향을 미칠 수 있다.
    • 대안으로 분산 캐시나 NoSQL 데이터베이스를 사용할 수 있다.

Amazon EC2 Auto Scaling

  • 수동 조정
  • 예약된 조정 예측 가능한 이벤트를 대응할 때 - 특정 시간 트래픽 증가 대비
  • 동적 조정 예측 불가능한 상황을 대비

AWS 시작하기

  1. AWS 자격 증명 획득
  2. 개발 환경 설치
  3. 특정 언어용 AWS SDK 설치 - Resource SDK 권장
  4. AWS 자격 증명 설정

AWS 접근 방식

  • Console ID/PW를 이용해 접근할 수 있다.
  • SDK
  • CLI
  • API API 사용시 통신에 필요한 인증/보안 모듈을 구현해줘야한다.

개발자 도구(IDE)

  • AWS Cloud9
    • 별도의 설치 필요없이 브라우저에서 운용 가능
    • 실시간 페어 코딩이 가능
  • AWS X-Ray
    • 애플리케이션의 통신을 모니터링
    • 서비스 상태의 내부를 모니터링(병목현상 등)을 할 수 있음
    • 람다로 구현 시 쉽게 동작 가능
    • 소스 코드 레벨에서 구현
    • API 작업
      • PutRaceSegments
      • BatchGetRaces
      • GetServiceGraph
      • GetRaceSummaries
  • Cloud Watch
    • AWS 리소스(EC2 등)을 모니터링
  • Cloud Trail
    • AWS 사용자(사용자의 로그인, 요청 성공/실패, 실패 이유 등 기록)를 모니터링

IAM

  • 공동 책임 모델 AWS + Client 측 모두가 보안 책임을 진다.
    • AWS AWS 기초 서비스(컴퓨팅, 스토리지, 데이터베이스, 네트워킹), AWS 글로벌 인프라(리전, 가용 영역, 엣지 로케이션)
    • Client 클라이언트 측 데이터 암호화 및 데이터 무결정 인증, 서버측 암호화, 네트워크 트래픽 보호, 운영체제/네트워크/방화벽 구성
  • IAM의 4가지 요소

    • user user는 여러 group을 가질 수 있다.
    • group group은 중첩될 수 없다.
    • role 정책을 user에게 덮어씌움 - 임시 권한 (role을 적용하면 user에게 적용된 기존 policy가 모두 무시됨)
    • policy 권한을 JSON으로 정의하고 Allow/Deny로 구분 (allow/deny가 충돌시 Deny 우선)
  • IAM 권한 유형

    • 자격 증명 기반 권한
    • 리소스 기반 권한
  • IAM 정책 유형
    • 관리형: AWS 관리형/고객 관리형
    • 인라인: 리소스 기반 정책
    • 최소 권한을 부여하기 위해 명시적 거부 정책을 설정해준다.

AWS의 인증 개요

  1. AWS 인증 (IAM O) ex) 환경을 빌드하는 경우
  2. 애플리케이션 인증 (IAM X) ex) 사용자가 앱에 로그인할 때
  3. 리소스 인증 (IAM O) ex) 사용자가 사진을 찍어 Amazon S3에 업로드
  4. 데이터베이스 인증 (IAM X) ex) 사진이 S3버킷에 업로드되고, 이로 인해 백엔드 작업이 항목 있는 RDS 데이터베이스를 업데이트 하는 경우

하지말아야할 것!

  • 루트 계정 자격 증명 사용
  • 코드에 AWS 자격 증명 삽입
  • GIT 리포지토리, Wiki와 같이 공개된 위치에 자격 증명 저장

보안 자격 증명: 우선순위 순서

  1. 코드에 지정되어 있음
  2. 환경 변수
    • AWS_ACCESS_KEY_ID
    • AWS_SECRET_ACCESS_KEY
  3. 자격 증명 파일의 기본 자격 증명 프로필
    • Linux&Mac: ~/.aws/credentials
    • Windows: %Userprofile%/.aws/credentials
  4. EC2 인스턴스 역할: Best Practice 역할을 부여하는게 가장 올바른 방법이기 때문에 우선순위가 높은 1~3은 적용하지않는다.
  • EC2 인스턴스 역할 부여하기

    1. 역할 생성하기 사진
    2. 정책 연결하기 사진 사진

      서비스에 요구되는 권한 정책을 연결해준다.

    3. EC2에 역할 적용하기 사진 사진

      IAM 역할 수정으로 들어가 위에서 생성한, 정책이 연결된 역할을 적용시켜준다.

AWS 스토리지 옵션

  • Amazon S3 클라우드상의 확장 가능하고 내구성이 뛰어난 객체 스토리지

    • 원하는 양의 데이터를 저장하고 검색할 수 있는 간편한 웹 서비스 인터페이스 제공
    • 언제든 웹상 어디서나 액세스 가능
    • 매우 안전하고 내구성이 뛰어나며 확장 가능한 객체 스토리지 제공

    요약하면, 기능 많은 웹하드(…)

  • Amazon S3 Glacier 클라우드상의 저렴하고 내구성이 뛰어난 아카이브 스토리지
  • Amazon EFS Amazon EC2 인스턴스용 확장 가능 네트워크 파일 스토리지
  • AWS Storage Gateway 사실상 무제한의 클라우드 스토리지에 대한 온프레미스 액세스 권한을 제공하는 하이브리드 클라우드 스토리지 서비스
  • Amazon EBS Amazon EC2 인스턴스를 위한 내구성이 있는 블록 수준 스토리지를 제공하는 네트워크 연결 볼륨

개발자 시점에서 보는 S3

  • 쓰기(Put)
    • upload - 최대 5T, 파일이 커질 경우 분할 업로드 해야함
    • multipart - sdk단에서도 지원, 코드레벨에서 구현해도 됨
    • sse - s3, kms, cms… 서버 측 암호화를 사용하여 저장된 데이터를 보호
    • md5 checksum - 무결성 검사 구현
  • 읽기(Get)
    • byte stream read가 가능
    • sql 쿼리가 가능 (select) - 원하는 데이터만 가져와 읽기 때문에 read 비용이 절감됨
    • key를 기반으로 목록을 뽑을 수 있음 key==filename, prefix 개념
    • presigned url: 임시(10~3600초)로 접근을 허용하는 url - 지정된 시간이 지나면 AccessDenied
  • 삭제
    • Versioning - 어디까지 보관할지
  • 버킷 이름은 전역적으로 고유해야 한다.
    • 3~53자를 사용
    • 소문자, 숫자, 하이픈(-)판 사용
    • SSL과 함께 가상 호스팅 방식 버킷을 사용하는 동안에는 마침표(.)를 사용하면 안 됨
    • 밑줄(_)문자는 사용하면 안 됨
  • 비용
    • 버킷 서울 리전 -> EC2 서울 리전일 경우 비용X
    • 버킷 도쿄 리전 -> EC2 서울 리전일 경우 비용O 같은 리전을 사용하는 것으로 비용 문제를 회피할 수 있음
  • 객체 키와 메타데이터
    • 각 객체는 고유한 키를 가진다. (키 인코딩: UTF-8 / 최대 키 길이: 1024바이트)
    • 메타데이터도 하나의 요청에 몰아서 쓰면 비용이 감소
  • 접근
    • 리소스 정책이 잘 부여되어있는지 확인 사진
    • exist bucket 확인시 if문을 사용하지말고 try-except문을 이용해서 한 번의 요청만으로 처리할 것 - 요청 횟수 감소
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.