AWS CLI

김동하·2021년 3월 1일
0

aws

목록 보기
1/1
post-thumbnail

배포를 위해 aws cli라는 친구와 조우해보자

정적 웹 호스팅과 동적 웹 호스팅

인터넷에 연결된 컴퓨터 각각을 호스트라 칭한다. 컴퓨터를 빌려주는 사업을 호스팅이라고 한다. 그럼 호스팅의 원리를 알아보장

나(index.html) -> 호스팅업체(index.html -> Web Server) <-> visitor(Web Brower)

이런 식으로 서버에 미리 저장된 파일(html, js 등)이 그대로 전달되는 웹페이지를 정적 웹 페이지라고 한다. 서버는 사용자가 요청에 해당되는 저장된 웹 페이지를 내보낸다. 사용자는 서버에 저정된 데이터가 변하지 않는 한 고정된 웹 페이지를 본다.

그러면 동적 웹 페이지란 사용자의 요청, 시간 등에 따라 페이지가 변경되어 보여지는 웹 페이지다!

AWS에 대해

배포 과정을 단순화 하면

  1. EC2 인스턴스(컴퓨터 하나)와 RDS를 생성한다.
  2. EC2 서버에 내 프로젝트를 가져온다.
  3. 프로젝트 DB 세팅은 로컬이 아닌 RDS로 연결되어야 한다.

기본 개념

PaaS

  • Platform as a Service 서비스로서의 플랫폼. 클라우트 컴퓨팅 서비스 분류 중 하나다. SaaS의 개념을 개발 플랫폼에도 확장한 방식으로, 개발을 위한 플랫폼을 구축할 필요 없이 필요한 개발 요소를 웹에서 쉽게 빌려쓸 수 있다. 구글의 앱 엔진 같은 public API의 경우 직접 온라인 서비스를 개발에서 배포, 관리까지 할 수 있는 플랫폼을 제공하고 있다.

Saas

  • Software as a Service 서비스로서의 소프트웨어. 주문형 소프트웨어라고도 부르며, 고객 관리 영역이나 회계쪽 분야에서 사용된다.

엣지 로케이션(Edge Location)

  • 엣지 로케이션은 리전과 가용영역과 별개로 AWS의 CDN 서비스인 클라우드 프론트와 AWS DNS 서비스인 Route53의 캐시 서버를 의미한다. CDN과 DNS같은 서비스들의 서버들은 리전과 별개로 여러개의 엣지 로케이션이 적용되어 서비스된다!

Computing

EC2(Elastic Compute Cloud)

  • 클라우드 서버 인스턴스다.

ECS(EC2 Container Service)

  • 클라우드 서버인 EC2를 도커 컨테이너로 관리 가능하도록 나온 서비스

EB(Elastic Beanstalk)

  • 웹 어플리케이션용 클라우드 플랫폼 서비스(배포, 모니터링, 확장, 관리) 주로 간단한 서비스 배포용

AWS Lambda

AWS의 클라우드 Function 서비스. 서버 없이 작성한 코드를 실행하는 환경을 제공하는 서비스다.(serverless 아키텍쳐 구현에 사용)

ELB(Elastic Load Balancing)

  • L4 서비스(load balancing) 트래픽을 분산해주는 역할을 하고 고가용성 서비스를 구축한다.

Auto Scaling

  • 트래픽에 따라 EC2 인스턴스들을 확장해주는 서비스. 위의 ELB와 함께 사용되는 기능으로 특정 트래픽 초과하면 자동으로 EC2 인스턴스를 생성하고, 트래픽이 줄어들면 삭제하는 유연한 서비스 구축하게 함

AMI(Amazon Machine Images)

  • AWS에서 제공하는 가상머신 이미지

Storage

S3

  • HTTP 프로토콜과 연동되는 스토리지. 정적 사이트를 호스팅하는데 사용할 수도 있다. 이미지 파일이나 웹 사이트 정적 요소 관리 등을 할 수 있고 파일 버전 관리 가능!

스냅샷

  • 스냅샷은 S3에 저장된 EC2 볼륨의 백업. 스냅샷의 ID를 입력하여 스냅샷에 저장된 데이터를 사용하여 새 볼륨을 만들 수 있다. 또는 스냅샷 필드에 텍스트를 입력하여 퍼블릭 스냅샷을 검색할 수 있다. 설명은 대/소문자를 구분한다.

Glacier

  • 데이터 보관 및 백업 용도를 위한 저렴한 스토리지. S3와 다르게 저장에만 특화되어있다. 꺼내는데 시간이 오래 걸려서 S3에서 백업을 자동 생성사도록 설정이 가능하다.

Networking

CloudFront

프론트란 말이 들어가서 뭔가 프론트엔드랑 친숙한 개념인가 했지만 전혀 다른 AWS의 CDN 서비스. 리전에 상관없이 엣지 로케이션 기준으로 가장 가까운 곳에서 파일 캐시를 가져오기 때문에 속도 빠르고 EC2, S3로 서비스 제공하는 것보다 더 저렴

Route 53

  • AWS의 DNS서비스, EC2 / ELB 같은 서비스와 결합하여 사용 가능하며 L4 혹은 GSLB(Global Server Load Balancing)를 구축할 수 있다.

VPC(Virtual Private Cloud)

  • 클라우드 가상 네트워크 구축 서비스로서 내부망(VPN)을 구축하거나 서브넷을 나눠 네트워크를 용도별로 관리가 가능하도록 제공한다.

EC2 서버

  1. Software Configuration
  • AMI(Amazon Machine Image)는 소프트웨어 설정 탬플릿이다. 소프트웨어 구성(운영체제, 어플리케이션 서버, 애플리케이션)을 선택할 수 있는 단계다.

    • 루트 디바이스 유형: ebs
    • 가상화 유형: hvm
    • ENA 활성화: y/n
  1. Instance Type

CPU, 메로리, 스토리지 등 네트워크 용량 조합을 선택할 수 있다.

  1. Instance Detail

네트워크

  • 인스턴스를 Amazon Virtual Private Cloud(VPC)로 시작한다. VPC를 생성하고 고유의 IP 주소 범위를 선택하며 서브넷을 생성하고, 라우팅 테이블을 구성하며, 네트워크 게이트웨이를 구성할 수 있다.

서브넷

  • EC2 리소스를 리소스 서로 간에 또는 인터넷으로부터 격리하는 데 사용할 수 있는 VPC 내 IP 주소 범위다. 각 서브넷이 한 가용 영역에 상주한다.
  1. 보안그룹 구성

보안그룹에서 프로토콜이나 리소스, 포트 등을 선택해서 어떤 트래픽이 인스턴스에 도달할 수 있는지에 대한 규칙을 정한다. 인터넷 트래픽을 인스턴스에 도달하도록 하는 경우 HTTP, HTTPS 트래픽을 허용하고, 어떤 전송 방식을 사용할지, 어떤 포트를 통해 접속할지에 대해 정할 수 있다.

s3로 정적 웹호스팅 하기

AWS에 파일을 업로드 되면 독립적인 다른 리전에 분산되어 저장된다. 내구성이 아주 좋아서 스토리지로 좋다. 또한 버전 관리 기능도 제공한다!

버킷 생성하기

버킷

  • 하나의 프로젝트는 하나의 버킷. 버킷 안에는 폴더, 그리고 폴더 안에는 파일이 있다. S3에서 파일은 오브젝트(Object).

AWS CLI란?

AWS Command Line Interface(AWS CLI)는 명령줄 셸의 명령을 사용하여 AWS 서비스와 상호 작용할 수 있는 오픈 소스 도구, 터미널로 AWS를 제어할 수 있는 것!

AWS CLI 설치 및 프로필 설정

brew install awscli

  • 구성 및 자격 증명 저장
Users/user/.aws/
├── config
└── credentials

config는 output, region이 있다. output은 aws cli로 부터 응답을 받는 형식(json 등) 그리고 region은 aws region이다

crenditals엔 Access Key ID, Secret Access Key를 입력한다.

  • AWS 인증 정보 개념

    • Access Key ID: 일반 웹사이트의 아이디에 해당. 줄여서 Aceess Key(접근키)라고 부르기도 함.

    • Secret Access Key: 일반 웹사이트의 비밀번호에 해당. 줄여서 Secret Key(보안키)라고 부르기도 함.

  • 인증 정보 설정

매번 AWS를 호출할 때 마다 위에 생성한 Access Key ID와 Secret Access Key를 보내려면 클라이언트 측에서 설정이 필요하다. AWS CLI는 aws configure를 통해 커맨드로 인증 정보 설정을 제공한다.

$ aws configure
AWS Access Key ID [None]: ABCDEF
AWS Secret Access Key [None]: GHIJKL
Default region name [None]: ap-northeast-2
Default output format [None]: json

이런 식이다!

  • 프로필 파일

aws configure 초기에 이렇게 설정하고

aws configure --profile "프로필명" 터미널에 입력하면 자격 증명을 저장한다. (여러 쌍의 인증 정보 저장)

aws configure list로 설정한 인증 정보를 확인할 수 있다.

cat ~/.aws/credentials 인증 정보 파일을 확인할 수 있다.

명령어

버킷 명령어

  • 버킷 생성

Amazon S3에 데이터를 저장하려면 먼저 버킷을 생성해야 한다. 버킷은 S3에서 파일 시스템의 최상위 디렉토리나 드라이브 정도 역할을 하는 저장 단위 개념!

aws s3 mb 을 통해 생성한다.

aws s3 mb s3://버킷명 이렇게 생성하면 된다!

  • 버킷 목록 조회

aws s3 ls 이렇게 버킷 목록을 조회할 수 있다.

  • 파일 복사하기

먼저 로컬에 버킷 이름과 동일한 디렉토리를 생성한다. 그리고 touch로 파일을 생성한다.

aws s3 cp 생성한 로컬 파일 s3://버킷 이름

요렇게 복사한다.

  • 파일 이동하기

로컬 파일을 복사하지 않고 S3 버킷으로 이동시켜보자!

aws s3 mv 로컬 파일 s3://버킷 이름

그러면 로컬에서는 삭제된다.

  • 파일 삭제하기

aws s3 rm s3://my-fruits/banana.txt

커맨드로 복사/이동했던 파일을 rm으로 삭제할 수 있다.

  • 디렉토리 동기화시키기

aws s3 sync . s3://버킷 이름

  • —recursive 옵션

cp, mv , rm 친구들은 --recursive 옵션을 사용하면 하위 디렉토리까지 적용되어 편하다.

예제를 살펴보장!

먼저 로컬에 디렉토리를 생성하고 그 안에 파일을 만든다.

aws s3 cp . s3://버킷 이름 --recursive

요렇게 하면 하위 디렉토리까지 모두 실행된다.

  • 버킷 제거하기

    aws s3 rb s3://버킷 이름

    버킷이 비어있지 않으면 삭제가 안된다. 이럴 경우 --force!

  • s3 버킷 region 확인

aws s3api get-bucket-location --bucket test-bucket

  • s3 버킷 라이프 사이클 설정

aws s3api put-bucket-lifecycle를 통해 특정 버킷 라이프 사이클 주기 설정 가능!

예시!

aws s3api put-bucket-lifecycle --bucket test-bucket --lifecycle-configuration

  • 이건 버킷 생명 주기 확인

aws s3api get-bucket-lifecycle

  • 이건 생명 주기 삭제

aws s3api delete-bucket-lifecycle --bucket test-bucket

AWS S3 vs AWS S3api

aws s3를 통해 aws파일에 접근할 수 있고 s3api를 통해 Restful api처럼 사용할 수 있다.

aws s3api list-objects --bucket test-bucket --prefix css

참고 : https://velog.io/@matisse/AWS-%EB%B0%B0%ED%8F%AC-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC

https://www.youtube.com/watch?v=6P6HoumuTOw&list=PLuHgQVnccGMCFHj64mNZxlbeNWOYUpua4

https://web-front-end.tistory.com/74

https://www.youtube.com/watch?v=f-muwhjan4E

https://www.daleseo.com/aws-cli-configure/

https://jangseongwoo.github.io/aws_cli/aws_cli_basic/#cp-%EB%AA%85%EB%A0%B9%EC%96%B4

profile
프론트엔드 개발

1개의 댓글

comment-user-thumbnail
2021년 4월 1일

동하님 블로그 꾸준히 쓰시네요, 대단합니다. 갓동하

답글 달기