[천재교육] 프로젝트 기반 빅데이터 서비스 개발자 양성 과정 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 기반이므로 사용하기 쉬움
- 단계
- AWS 콘솔에 로그인한 후 EC2 대시보드로 이동
- 연결할 인스턴스를 선택한 후 연결 버튼을 클릭
- EC2 Instance Connect 옵션을 선택하여 브라우저에서 인스턴스에 직접 연결할 수 있음
- 인스턴스에 연결된 후 터미널 창이 나타나며, 여기서 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 |