본문 바로가기

개발기술/테스트, 인프라

AWS 서비스

  • AWS는 25개 리전과 81개의 가용 영역(AZ)을 기반으로 다양한 클라우드 서비스를 제공
  • 리전은 리전은 AWS의 서비스가 호스팅되는 지리적 위치를 의미합니다 각 리전은 특정 국가나 도시에 위치하고 있습니다. AZ는각 리전 내에 존재하는 독립된 데이터 센터 집합을 의미합니다.
  • 주요 서비스: 컴퓨팅(EC2), 스토리지(S3), 네트워킹(VPC, ELB), 데이터베이스(RDS, DynamoDB), 보안(IAM, Shield) 등

1. 기본 개념

클라우드 컴퓨팅 개념:

  • 공유가능한 컴퓨팅 자원을 네트워크를 통해 접근할 수 있도록 하는 모델
  • IaaS (Infrastructure as a Service) : 서버, 스토리지, 네트워킹 등의 기본 인프라 
    • 예시: AWS EC2, Microsoft Azure, Google Compute Engine
  • PaaS (Platform as a Service) :   개발에 필요한 환경을 제공
    • 미들웨어 서비스 제공: PaaS는 데이터베이스, 메시징 서비스, 로드 밸런서, 방화벽, 캐시 스토리지, 데이터 분석 도구 등의 미들웨어 서비스를 제공합니다  
    • 예시: AWS Elastic Beanstalk, Google App Engine, Heroku
  • SaaS (Software as a Service) : 사용자가 별도의 설치없이 브라우저로 즉시 사용 가능, 유지보수 필요 없는 소프트웨어 성격
    • 예시: Google Workspace, Salesforce, Dropbox

사용자 관리 ; IAM(Identity and Access Management):

  •  사용자(User) : AWS 리소스에 접근할 수 있는 개별 사용자 계정. 각각 고유한 로그인 자격 증명(Access Key, Secret Key, 비밀번호)을 가집니다.
  • 그룹(Group) : 사용자 계정을 묶어서 관리하는 그룹. 그룹에 정책을 할당하여 공통 권한을 사용자들에게 일괄 적용할 수 있습니다.
  • 정책(Policy) : 사용자의 권한을 정의하는 문서(JSON 형식). 특정 리소스에 대한 접근 권한(예: 읽기, 쓰기)을 설정합니다.
  • 역할(Role): **IAM 사용자 계정이 아닌 엔터티(AWS 서비스, 애플리케이션)**에 권한을 부여하는 메커니즘. 사용자가 직접 로그인을 하지 않더라도 역할(Role)을 통해 특정 작업을 수행할 수 있습니다. 예: EC2 인스턴스에 S3 버킷에 접근할 수 있는 역할(Role)을 부여.
  • 최소 권한 원칙(Principle of Least Privilege) 정의: 사용자가 작업을 수행하는 데 필요한 최소한의 권한만 부여하는 보안 원칙.

 

2.  핵심 요소

  • EC2:
    • AWS의 가상 서버. 
    • 서버 생성, 보안 그룹 설정(방화벽 역할).
    • SSH 접속 방법 이해.
    • EBS Elastic IP는 EC2의 부속 기능으로, 스토리지와 네트워크를 제공하는 역할을 합니다.
  • S3:
    • 단순한 파일 저장소(이미지, 문서, 동영상 등)로 aws가 제공하는 url을 통해서 정적파일에 접근할 수 있음
    • IP할당이나 라우터와 같은 기능이 없기때문에 ngnix같이 gateway로 활용할 수 없음. ec2를 활용해야함.
  •  RDS:
    • 관리형 데이터베이스(MySQL, PostgreSQL 등).
    • 데이터베이스 백업/복구와 연결 정보 설정.
  • CloudWatch로 리소스 모니터링:
    • 배포된 애플리케이션의 상태를 확인(CPU, 메모리, 네트워크).
    • EC2, RDS 등 리소스의 CPU, 메모리 등 모니터링.
    • 설정한 임계치를 초과하면 알림(알람) 발송.
  • BeanStalk
    • AWS Elastic Beanstalk은 애플리케이션을 쉽게 배포하고 관리할 수 있도록 도와주는 완전 관리형 서비스입니다.
    • 배포 자동화: Elastic Beanstalk은 애플리케이션의 배포, 업데이트, 롤백 등을 자동으로 처리해 줍니다
    • 자동 확장 (Auto-scaling):애플리케이션의 트래픽이 급증하거나 감소할 때 자동으로 EC2 인스턴스를 추가하거나 제거합니다. 
    • 모니터링 및 로깅: Beanstalk은 애플리케이션의 상태를 실시간으로 모니터링하고, CloudWatch와 통합되어 로그 데이터를 제공합니다. 이를 통해 애플리케이션의 성능과 상태를 쉽게 추적할 수 있습니다.
    • 환경 구성: 여러 환경 (예: 개발, 테스트, 프로덕션)을 만들어서 각각에 대해 별도의 설정을 관리할 수 있습니다. 이를 통해 여러 환경에서 동일한 애플리케이션을 쉽게 관리할 수 있습니다.
    • 로드 밸런싱 : Beanstalk은 애플리케이션에 대한 요청을 여러 서버에 분배하기 위해 로드 밸런서를 자동으로 설정합니다. 이는 트래픽이 많은 환경에서 중요합니다.

 

5. 실제 활용 사례

  • DevOps 및 CI/CD 파이프라인: Jenkins 또는 GitHub Actions와의 통합
  • 로깅 및 분석 : CloudWatch Logs와 ELK 스택 연결
  • 캐싱 및 성능 최적화 : ElastiCache(Redis, Memcached) 설정
  • 서버리스 애플리케이션 : API Gateway + Lambda + DynamoDB 조합 활용

 

AWS배포 방식 

 

1. SSH를 사용하는 배포

  • EC2 인스턴스 직접 배포:
    • EC2에 직접 접속(SSH)하여 애플리케이션을 배포하거나 설정을 변경합니다.

2. SSH를 사용하지 않는 배포

  • Elastic Beanstalk : AWS CLI 또는 Elastic Beanstalk 관리 콘솔에서 소스 코드를 업로드하고 배포.
  • CodeDeploy: AWS CodeDeploy를 사용하면 배포가 자동화됩니다.
  • Docker 및 ECS/EKS: Docker 이미지를 빌드하여 AWS Elastic Container Service (ECS) 또는 Kubernetes (EKS)에 배포.
  • CI/CD 파이프라인 : GitHub Actions, Jenkins, GitLab CI/CD 등을 사용하여 배포.
    • 파이프라인이 AWS CLI, CodeDeploy, 또는 ECS API를 호출해 배포.

 

AWS 클라우드 컴퓨팅 설정 - 리눅스설치

 

AWS 프리티어 서비스, EC2(서버) 생성진행과정 (우분투 리눅스 OS 기반)

  1. AWS 콘솔 접속 및 위치 설정: AWS 콘솔에 로그인후 우측 상단에서 위치정보를 "서울"로 설정. 상단 검색창에 EC2 입력 후 접속.
  2. EC2 인스턴스 생성: 좌측 메뉴에서 Instances (인스턴스) 클릭 후 Launch Instance (인스턴스 시작) 클릭.
  3. OS 및 인스턴스 설정:
    • 원하는 운영체제 선택: Ubuntu 20.04 LTS.
    • Instance type: 프리티어에 해당하는 옵션(예: t2.micro) 선택.
    • 네트워크 설정: 기본값 유지.
    • 메모리 용량: 프리티어로 제공되는 최대 용량 선택.
  4. Key Pair 생성 및 다운로드:
    • Key Pair 생성:
      • Key Pair 이름: 본인의 이름으로 설정.
      • Key Pair 생성 후 .pem 파일 다운로드. (이 파일은 개인키로, 안전하게 보관해야 함.)
  5. Elastic IP 할당:
    • 임시 IP 주소 대신 고유의 Elastic IP를 할당:AWS 콘솔에서 Elastic IPs 메뉴 접속 후 Allocate Elastic IP Address 클릭하여 새로운 IP 생성. 생성한 Elastic IP를 EC2 인스턴스에 Associate하여 연결.
  6. Security 설정:
    • 최초에는 ssh를 위한 22번 포트만 열려있다. http 통신을 위해서 추가로 security group에서 ip와 port를 개방해야한다.
    • 유형: Custom TCP Rule (또는 HTTP), 프로토콜: TCP, 포트 범위: 8080, 소스: 0.0.0.0/0 (모두 허용)

 

자기 PC에서 EC2(서버)접속

 

- 맥의 터미널에 접속하여 ('cd' 'pem이있는파일') 

  1. 터미널 실행 및 디렉토리 이동: .pem 파일이 저장된 디렉토리로 이동:
  2. .pem 파일 권한 변경 : .pem 파일의 권한을 안전하게 설정 : ('chmod 400' 'pem파일')
  3. SSH를 통해 EC2에 접속 : Ubuntu의 기본 사용자 이름과 Elastic IP를 사용하여 SSH 접속: 첫 연결 시 "yes" 입력하여 호스트 인증서 추가.
    •  (ssh -i pem파일 ubuntu@15.164.40.88(givenipaddress) (yes),  클라우드 컴퓨터의 기본 사용자이름(우분투)과 ip(given address)를 명시하여 대상을 실행함.