본문 바로가기
TIL _Today I Learned/2024.10

[DAY 66] AWS 클라우드 환경 이해 및 실습

by gamdong2 2024. 10. 23.
[천재교육] 프로젝트 기반 빅데이터 서비스 개발자 양성 과정 9기
학습일 : 2024.10.23

📕 학습 목록

  • AWS 클라우드 환경 이해
  • AWS 실습

 

📗 기억할 내용

[개념]

1. AWS 클라우드 환경 이해

1) 주요 개념

  • AWS 서비스 개요: AWS 클라우드는 다양한 서비스를 제공하여, 사용자가 필요에 따라 리소스를 조정하고, 여러 애플리케이션을 효율적으로 관리할 수 있도록 함

2) 서비스별 주요 기능

  • S3 (Simple Storage Service)
    • 객체 스토리지 서비스로, 대규모 데이터 파일을 안전하게 저장 및 관리
    • 버킷(bucket)과 버킷 정책을 사용하여 접근을 제어할 수 있음
  • Lambda
    • 서버리스 컴퓨팅 서비스로, 다양한 AWS 서비스와 결합하여 자동으로 코드 실행을 가능하게 함
    • 환경 변수 설정, 언어 지원(Python, Node.js 등) 및 데이터 처리 백엔드에서의 활용이 가능
  • RDS (Relational Database Service)
    • AWS의 관계형 데이터베이스 서비스로, MySQL, PostgreSQL 등을 지원
    • 보안 그룹 설정, 자동 백업 및 스케일링 기능을 제공

2. VPC (Virtual Private Cloud)

1) 구성 요소

  • VPC
    • 계정 전용 가상 네트워크로, 사용자가 정의한 네트워크 환경을 제공
    • IP 주소 범위, 서브넷, 라우팅 등을 제어할 수 있으며, 사설 대역(RFC 1918)을 통해 네트워크 중복을 방지.
  • 가용 영역(AZ)
    • 물리적으로 분리된 데이터 센터로, VPC 내에서 고가용성 및 확장성을 제공
  • Subnet
    • 네트워크를 분할하여 프라이빗 서브넷과 퍼블릭 서브넷으로 구분하며, CIDR 기법으로 IP 범위를 관리
  • Gateway
    • NAT Gateway: 프라이빗 서브넷 인스턴스가 인터넷과 통신하도록 함
    • Internet Gateway: VPC와 인터넷 간의 통신을 가능하게 함
  • 보안 그룹(SG) 및 NACL
    • 보안 그룹(SG): 인스턴스 단위 방화벽으로 인바운드/아웃바운드를 제어
    • NACL(Network Access Control List): 서브넷 단위 방화벽으로 상태 저장이 불가능하며 우선순위 설정이 가능

3. 기타 AWS 구성 요소와 보안

  • IAM (Identity and Access Management)
    • AWS API 접근을 위한 인증 정보인 Access Key와 Secret Access Key를 통해 안전한 서비스 접근을 설정
  • boto3
    • Python SDK로 AWS와 상호작용하여 다양한 리소스를 호출하고 자동화를 구현할 수 있는 라이브러리
    • 주로 정기 백업 수행, 컴퓨팅 리소스 관리 등에 사용

4. AWS 네트워크와 아키텍처 이해

1) 네트워크 구성 요소

  • Port: 네트워크 통신의 출입구로, 특정 서비스 식별 및 보안 강화를 위해 사용
  • 네트워크 트래픽 흐름: 트래픽이 라우터, 게이트웨이를 통해 전송되며, IP는 네트워크 내 장치 식별 주소 역할을 함

2) 아키텍처 설계

  • AWS 아키텍처: AWS 서비스와 인프라 구성 요소를 설계한 청사진으로, DevOps와 개발자가 협력하여 구축

 

[실습]

 

1) 프로젝트 제목

AWS를 활용한 S3 버킷 및 Lambda 함수 관리 자동화

 

2) 프로젝트 목표

  • 클라우드 환경에서 파일 저장과 서버리스 컴퓨팅 기능 이해 및 자동화
    • S3, Lambda, VPC 등 AWS의 핵심 서비스 사용
    • Boto3를 이용해 AWS 자원 관리, 파일 저장 및 Lambda 트리거 설정 자동화

3) 사용한 데이터 셋

  • 사용자 지정 데이터를 사용하지 않고, AWS S3 서비스의 버킷을 생성하여 데이터를 관리하는 방식으로 실습 진행

4) 워크플로우

① AWS S3 버킷 생성 및 관리

  • Boto3 라이브러리를 사용해 S3 버킷을 생성하고 목록을 확인함. 환경 변수 파일 (.env)에 AWS Access Key 및 Secret Key를 저장하여 보안을 유지하며 접근.
  • S3에 파일을 업로드하고, 버킷 정책을 설정하여 접근을 제어함.

② Lambda 함수 설정

  • 서버리스 환경에서 Lambda 함수를 생성하고 특정 트리거에 의해 실행되도록 설정.
  • 제한 시간과 메모리를 설정하고, Python을 활용하여 파일 처리 및 데이터 전송 작업을 자동화함.

③ VPC 및 네트워크 설정

  • VPC를 생성하여 사설 네트워크를 구성하고, 서브넷을 설정하여 퍼블릭/프라이빗 통신이 가능한 환경 구축.
  • 보안 그룹과 NACL을 설정하여 접근 제어 및 보안을 강화.

5) 프로젝트 결과

  • AWS 자원 자동화: Boto3를 통해 S3 버킷의 생성, 파일 업로드 및 삭제가 자동화되었으며, Lambda 함수를 통해 서버리스 데이터 처리도 자동화됨

6) 트러블 슈팅

  • 인증 오류 해결: 처음에는 AWS 인증 관련 오류가 발생하여 환경 변수 파일(.env)에 AWS Access Key와 Secret Key를 저장하고, 이를 Python 코드에서 불러오는 방식으로 해결

7) 프로젝트를 통해 얻은 역량

  • 클라우드 서비스 이해: AWS S3, Lambda, VPC 등의 서비스 구조와 역할에 대한 이해
  • Python과 Boto3 사용: Boto3 라이브러리를 사용해 Lambda 트리거 설정 자동화

 

📘AWS 실습 상세

[S3 버킷]

1) 버킷 생성

① 버킷 → 버킷 만들기

  • 일반 구성
    • 버킷 이름 설정; URL에 박제되므로 고유한∙규칙있는 이름으로 명명

② 생성된 버킷 이름 클릭 → 버킷 정보 확인 가능

버킷 정보

2) 버킷 객체 생성

① 버킷 → 객체 → 업로드 → 객체 파일(student.csv) 업로드

객체 생성(업로드) 완료

3) 객체 폴더 생성 

① 버킷 → 객체 → 폴더 만들기

  • 폴더
    • 폴더 이름 설정

폴더 이름 설정
객체 폴더 생성 완료

4) 버킷 정책 설정

① 버킷 → 권한 → 버킷 정책 → 편집 → 새 문 추가 → 버킷 정책 붙여넣기

# 버킷 정책 예시
{
    "Version": "2012-10-17",
    "Id": "{Id}",
    "Statement": [
        {
            "Sid": "{Sid}",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::{계정ID}:user/{유저이름}"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::{버킷이름}/*"
        }
    ]
}

버킷 정책 설정 완료

[tip] 계정ID 확인 : IAM 우클릭 → 새 탭/창 으로 열기 → 대시보드의 계정 ID(숫자) 확인

 

[RDS]

1) RDS 생성

① RDS → 데이터베이스 → 데이터베이스 생성

  • 엔진 옵션 
    • 엔진 유형 : MariaDB
    • 엔진 버전
  • 템플릿
    • 개발/테스트
  • 설정
    • DB 인스턴스 식별자 : 식별자 이름 설정
    • 자격 증명 설정 : 마스터 사용자 이름, 자체 관리, 마스터 암호 설정
  • 인스턴스 구성
    • DB 인스턴스 클래스 : 버스터블 클래스(t 클래스 포함), db.t3.micro 
  • 연결
    • 퍼블릭 엑세스 : 예 (집/회사에서 모두 접속 가능, 보안에 취약)
    • 가용 영역 : 임의 설정(기능에 차이 없음)
  • 추가 구성
    • 데이터베이스 옵션 : 암호화 활성화 체크 해제
    • cf) 언젠가 데이터베이스에 문제가 생길 경우, '추가 구성 → DB 파라미터그룹/옵션그룹' 설정 변경해야 함

데이터베이스 창
데이터베이스 엔진 선택
데이터베이스 인스턴스 식별자 입력
데이터베이스 자격 증명 설정
데이터베이스 인스턴스 구성
데이터베이스 연결
데이터 베이스 방화벽
데이터베이스 추가 구성

 

데이터베이스 암호화

[EC2 인스턴스]

1) EC2 인스턴스 생성

① EC2 → 인스턴스 → 인스턴스 시작

  • 이름 및 태그
    • 인스턴스 이름 설정
  • 애플리케이션 및 OS 이미지
    • Ubuntu
  • 키 페어(로그인)
    • 키 페어 이름 : 키 페어 이름 설정
  • 네트워크 설정 → 편집
    • 보안 그룹 이름 : 보안 그룹 이름 설정

2) EC2 인스턴스에 연결

(i) AWS 콘솔 : EC2 인스턴스 연결 옵션 이용

: AWS 관리 콘솔을 통해 EC2 인스턴스에 연결하는 방법. AWS 콘솔은 GUI 기반이므로 사용하기 쉬움

  • 단계
    1. AWS 콘솔에 로그인한 후 EC2 대시보드로 이동
    2. 연결할 인스턴스를 선택한 후 연결 버튼을 클릭
    3. EC2 Instance Connect 옵션을 선택하여 브라우저에서 인스턴스에 직접 연결할 수 있음
    4. 인스턴스에 연결된 후 터미널 창이 나타나며, 여기서 SSH 명령을 실행하여 인스턴스 내부에서 작업을 수행할 수 있음
  • 장점
    • 별도의 설정 없이 웹 브라우저에서 직접 접속 가능
    • 키 페어 관리가 간편함
  • 단점
    • 고급 사용자들이 터미널을 선호하는 경우, 브라우저 기반은 제약이 있을 수 있음

(ii) 터미널 (SSH 연결 이용)

: 터미널을 사용하여 직접 SSH로 EC2 인스턴스에 연결하는 방법. 클라이언트는 비밀번호 없이 개인 키만으로 SSH 접속이 가능(공개 키를 서버에 등록함으로써 인증된 사용자만 서버에 접속할 수 있게 함)

  • 단계

1. 서버 측의 ~/.ssh/authorized_keys 파일에 클라이언트의 공개 키(.pub)를 복사해 넣음

cd .ssh  # ssh 폴더로 경로 이동
nano authorized_keys  # → 공개 키 붙여 넣고 nano 창 닫음
cat authorized_keys  # 공개 키 잘 붙여졌나 확인

ssh -i "my-key.pem" ec2-user@<EC2-공개-IP>  # SSH 요청을 통해 EC2 인스턴스에 연결

2. 클라이언트가 서버에 접속할 때, 자신의 개인 키(.pem)로 서명된 인증 요청을 서버에 보냄

3. 서버는 authorized_keys에 등록된 공개 키로 서명이 유효한지 확인하여 클라이언트를 인증함

  • 장점
    • 명령줄 인터페이스를 통해 강력한 제어 가능
    • 모든 SSH 옵션을 사용할 수 있어 커스텀 가능
  • 단점
    • 키 페어가 없으면 연결 불가
    • 네트워크 설정에 따라 접속이 제한될 수 있음 (예: 보안 그룹 설정 등)

(iii) VSCode 플러그인(Remote-SSH) 이용

: VSCode를 사용하여 EC2 인스턴스에 원격으로 접속하는 방법. Remote-SSH 플러그인을 이용해 VSCode에서 직접 인스턴스에 연결할 수 있음

  • 단계

1. VSCode에 Remote-SSH 플러그인을 설치

2. VSCode의 Command Palette (Ctrl+Shift+P)에서 Remote-SSH: Connect to Host를 선택

3. SSH 설정 파일 (~/.ssh/config)에 EC2 인스턴스 정보를 추가

Host my-ec2-instance
    HostName <EC2-공개-IP>
    User ec2-user
    IdentityFile ~/.ssh/my-key.pem

 

4. 설정 후 해당 호스트로 연결

  • 장점
    • 코드 편집 환경과 SSH 세션이 통합되어 있어 코드 작성 및 디버깅에 편리
    • SSH 접속 설정이 VSCode 내에서 쉽게 관리 가능
  • 단점
    • VSCode 플러그인 설치 및 설정 과정이 다소 복잡할 수 있음
    • 설정 파일 오류 시 접속이 어려울 수 있음

 

[Lambda 함수]

1) Lambda 함수 생성

Lambda → 함수 생성 → 새로 작성 → 구성 → 권한 → 편집 → 제한 시간: 5분으로 늘리기
  • 메모리 설정: Lambda 함수의 메모리 용량을 최대 10GB까지 설정 가능
  • 런타임 선택: Python, Node.js, Go, C# 등 지원하는 언어 선택

 

[VPC]

1) VPC 생성

VPC → VPC → VPC 생성 → CIDR 블록 지정: RFC 1918 사설 대역 중 하나 선택
  • 태그 추가: 필요한 경우 VPC에 대한 식별 태그 설정

2) 서브넷 생성

VPC → 서브넷 → 서브넷 생성 → 서브넷 이름 지정 및 CIDR 범위 설정
  • 가용 영역(AZ) 선택: 특정 가용 영역 내에 서브넷을 생성하여 고가용성 지원

3) 인터넷 게이트웨이 생성

VPC → 인터넷 게이트웨이 → 인터넷 게이트웨이 생성 → 생성한 인터넷 게이트웨이를 VPC에 연결하여 외부 인터넷과의 통신 가능

 

 

 

📙 내일 일정

  • aws 실습


 
 
 
 

 

'TIL _Today I Learned > 2024.10' 카테고리의 다른 글

[DAY 68] 데이터 엔지니어링  (1) 2024.10.25
[DAY 67] AWS 아키텍처 그리기  (0) 2024.10.24
[DAY 65] AWS, Linux 란?  (2) 2024.10.22
[DAY 64] AWS 환경 이해  (0) 2024.10.21
[DAY 63] AWS 특강  (0) 2024.10.18