본문 바로가기
Back-end

AWS 서버리스 단축URL 서비스 만들기 - 2

by 노아론 2021. 7. 25.

이전 글 : AWS 서버리스 단축URL 서비스 만들기 - 1

이번 두번째 글에선 AWS Lambda와 S3에 대한 소개, 본격적으로 우리가 개발할 단축 URL 서비스 구조에 대해 알아볼 것이다.
그리고 개발에 앞서 필요한 AWS CLI와 Toolkit 설정을 해본다

1. 람다

AWS Lambda  소개 페이지

람다는 서버 프로비저닝, 런타임 관리 없이 코드를 실행할 수 있는 서버리스 컴퓨팅 서비스이다. 대부분의 유형의 어플리케이션이나 백엔드 서비스에 대한 코드를 별다른 인프라 관리 없이 바로 실행할 수 있다.

람다는 코드를 ZIP 파일이나 도커 컨테이너 이미지를 업로드하면 바로 사용할 수 있게 된다.
또한 AWS 서비스에서의 일어나는 동작에 대한 자동 트리거를 설정하여 람다가 동작하도록 할 수 있고, API Gateway를 이용해서 API 엔드포인트로도 제공할 수 있는 장점을 가지고 있다. 더불어 요청 수가 많아져 트래픽이 증가하는 상황에서도 규모에 맞게끔 유동적인 조정이 가능하다. 
Python, Java, Node.js, Ruby, Go 등의 다양한 언어를 지원하고 있다.

우리는 람다를 API Gateway와 연결하여 API로서 이용할 것이다

 

2. S3

AWS S3 소개 페이지

S3는 확장성, 가용성을 갖춘 AWS의 객체 스토리지 서비스이다.
웹사이트, 모바일 어플리케이션의 백업 및 복원 등 다양한 사용 사레에서 원하는 만큼의 데이터를 저장하고 보호할 수 있다
쉬운 관리 기능을 제공하여 어렵지 않게 사용할 수 있다. 

우린 이러한 S3를 원본 URL 데이터를 저장하는 용도로 사용하고자 한다

 

3. 우리의 단축 URL 서비스 아키텍처

우리가 만들어볼 AWS 서버리스 기반 단축 URL 서비스의 구조는 아래와 같다.

람다를 이용해 단축 URL 생성, URL 전달 기능을 구현하고, API Gateway에 연결하여 API 엔드포인트로 제공한다
S3를 이용해 정적 웹 호스팅을 하여 단축 URL 서비스의 간단한 웹페이지를 만들고, 원본 URL 값을 지니는 오브젝트를 관리한다.

최종적으로 커스텀 도메인에 Route53 DNS 주소를 연결한다

실제 운영 가능한 프로덕트의 모습으로서 hufs.me 를 보이게 된다 

서버리스 기반으로 운영되어 한달 1만회 요청이 이루어져도 약 3천원짜리로 운영할 수 있게 된다.
물론 프리티어 요금, 비용 및 성능 최적화를 하면 이보다 훨씬 더 저렴하게 운영할 수 있을 것이다.

우리가 만들 AWS 서버리스 기반의 단축 URL 서비스 아키텍처

 

4. AWS CLI 설정과 vs code의 AWS Toolkit 익스텐션 설치 

Visual Studio Code로 개발을 진행할 것이다
AWS Toolkit 익스텐션을 통해 Vscode 내에서 AWS와의 연결이 가능하다

Vscode AWS Toolkit Extension 설치 링크

우린 이 익스텐션으로 Lambda에 코드를 업데이트하고 S3 버킷에 index.html 정적파일을 업로드 할 것이다.
(AWS SAM(Serverless Application Model)은 따로 사용하지 않을 것이다)

Toolkit과 연결하기 위해선 개발환경에서 AWS CLI에서 사용할 AWS Access Key 설정이 필요하다

AWS CLI는 이 곳에서 설치 가이드를 확인할 수 있다

윈도우 기준 설치 방법

msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi

리눅스에서의 설치 방법

sudo apt-get install awscli

MacOS에서의 설치 방법

brew install awscli

 

정상적으로 설치가 되었다면 콘솔에서 aws --version 명령어 입력 시 아래처럼 나오는 것을 볼 수 있다

$ aws --version
aws-cli/2.2.18 Python/3.9.6 Darwin/20.5.0 source/x86_64 prompt/off

# aws-cli/2.*.* 버전으로 나온다면 이외 버전 명은 개발 환경에 따라 다르므로 완벽히 일치하지 않아도 된다.

 

그럼 이제  AWS CLI에 credential을 입력하기 위해 AWS의 IAM에 접속한다

IAM은 AWS 리소스에 대한 권한 관리 서비스다.
사용자를 추가하기 위해 Add Users를 눌러 이름을 입력하고, AWS Access type에서 Programmatic access를 체크한다.
이를 체크해야 우리가 원하는 AWS CLI credential 정보 입력을 위한 키 값을 얻을 수 있다

Set permission 설정은 생략하고 진행한다

추가가 되었다면 Access key ID와 Secret access key가 나온다.
Secret access key는 이 페이지에서만 조회가 가능하며, 이후에는 값을 확인할 수 없으므로 Download .csv 버튼을 눌러 csv 파일로 저장을 해둔다.

 

유저 생성이 완료된 것을 확인할 수 있다.

 

이제 User groups에서 그룹을 추가해 방금 만든 유저에게 권한을 부여해줄 것이다

Create group 버튼을 눌러 유저 그룹을 생성해본다
유저 그룹 이름을 지정하고, 방금 만든 유저를 선택한다. 권한 정책은 AdministratorAccess 로 지정해둔다.

(전체 권한 설정은 보안 상 권장하지 않지만, 학습 차원에서 권한에 대한 번거로움을 해소하기 위해 전체 권한으로 지정을 하고자 한다)  

 

 이제 유저 그룹까지 성공적으로 생성하였다.

 

이제 AWS CLI에 credential을 지정해본다

$ aws configure
AWS Access Key ID [None]: 액세스키ID를입력하세요
AWS Secret Access Key [None]: 시크릿키값을입력하세요
Default region name [None]: ap-northeast-2
Default output format [None]: json

 

드디어 AWS CLI 환경에서 사용가능한 프로필이 나의 개발 환경에 세팅되었다.
이제 Vscode의 Toolkit 익스텐션의 Option(...버튼)에서 Connect to AWS를 눌러 방금 만든 profile을 지정한다.

AWS profile  연결이 되었다면 아래와 같이 AWS 익스텐션의 Explorer에 다음과 같이 나오는 것을 확인할 수 있다

VSCODE의 AWS Toolkit 설치 및 profile 연결 후 모습

 

다음 글에서는 AWS Lambda의 기초적인 사용법과 함께 본격적으로 단축 URL 서비스에서 필요한 API를 구현해본다

AWS 서버리스 단축URL 서비스 만들기 - 3

댓글