1. AWS App Runner 란?

소스 코드 또는 리눅스 기반 컨테이너 이미지를 웹 응용 프로그램에 배포할 수 있는 서버리스(Serverless) 서비스이다. Github 또는 AWS ECR과 같은 이미지 저장소와 연결하여 손쉽게 컨테이너를 배포하거나 이를 자동화할 수 있다.

쉽게 말해 빌드된 컨테이너 이미지를 Docker, NginX 등 사전 설치 및 설정 없이 바로 배포하고 실행할 수 있게 해준다. AWS App Runner를 생성하면 자동으로 지급되는 엔드포인트 URL과 초기에 설정한 포트를 통해 내 컨테이너 애플리케이션에 접속할 수 있다.

Pasted-image-20231015183926.png

ECR(Elastic Container Registry) 란? GHCR, Docker Hub와 같은 컨테이너 이미지를 관리해주는 AWS 서비스이다.


2. App Runner로 전환한 이유?

첫 번째로 비용 문제이다.

트래픽이 많지 않거나(또는 발생하지 않는) 애플리케이션의 경우, 기존 EC2 환경에서 불필요한 비용이 발생하였다. 예를 들어 하나의 서비스를 담당하는 EC2 인스턴스를 생성하여 애플리케이션을 배포 하였다면 다음과 같은 비용이 발생한다.

EC2 온디맨드(On-Demand) 비용

t2.micro 인스턴스 사용 기준

  • vCPU: 1
  • 메모리: 1GiB

| 기준 | 요금 | | — | — | | 시간당 요금| 0.0144$ | | =월별 요금 | 10.368$ | (실제 확인해보니 한 달에 대략 9달러 정도 나온다.)

스크린샷 2023-10-15 오전 2.26.32.png

온디맨드(On-Demand) 플랜이란? 장기 약정 없이 컴퓨팅 파워를 사용한 만큼 요금을 지불하는 방식으로 오픈소스 기준으로 초당 비용을 지불함 이 말인즉, 인스턴스를 실행한 순간부터 종료 시점까지 매 순간 비용이 발생한다.

여담이지만 SaaS가 한참 뜨기 시작할 때 스터디 겸 프리티어 EC2 인스턴스를 생성한 적이 있다. 인스턴스를 실행시키고 잘 되는걸 보고 그대로 방치 했었는데, 몇 년 뒤에 확인해보니 요금 폭탄을 맞았던 기억이.. (그 때는 종료하지 않아도 사용하지 않았다고 생각해서 무조건 공짜인 줄 알았다. 사실은 실행 자체가 컴퓨팅 파워를 사용하고 있는 샘이니)

App Runner 비용

요청이 들어오면 AWS가 컴퓨팅 리소스를 사용중이라고 판별하고 요금을 먹인다. 만약 들어온 요청이 복잡하여 내가 초기에 설정한 컴퓨팅 파워가 초과될 경우, 자동으로 스케일 업하여 초과된 컴퓨팅 파워에 대한 추가 비용을 지불하게 된다.

예를 들어, 0.5개의 vCPU 메모리 1GB 기준

  • 배포만 된 애플리케이션: 시간별 메모리 GB 당 0.007$
  • 활성화 된 애플리케이션: 시간별 vCPU당 0.064$ + 메모리 GB 당 0.007$

0.5 vCPU 이므로 0.064 / 2 = 0.032$ 비용이 발생

스크린샷 2023-10-15 오후 5.50.12.png

다음은 AWS 요금 계산기를 이용한 App Runner 예상 비용이다.

  • 처리할 수 있는 동시 요청 수: 1
  • 컨테이너 인스턴스: 1개
  • 하루 1시간 동안 1초에 1건의 요청이 들어 옴
  • 자동 배포 활성화

예상 비용: 한 달 8.50$

제목 없음-1.jpg

![[스크린샷 2023-10-15 오후 5.58.53.png]]

실제로 한 달 동안 사용해본 결과 대량 6.0$ 정도 비용이 발생하였다.

2.1 EC2 vs App Runner

개발 중이거나, 실제로 사용하지 않고 있는(요청이 들어오고 있지 않은) 서비스를 기준으로 두 서비스의 비용 차이는 다음과 같다.

Pasted image 20231015190541.png

유형 vCPU Memory
EC2 t2.small 1 2GB
App Runner 0.5 1GB

(현재 가지고 있는 데이터가 EC2 t2.small 말고는 비교가 힘들어 어쩔 수 없이 t2.small을 참고했다.)

EC2 자원이 높은 점을 고려하였을 때 대략 40%에 비용 절감을 할 수 있었다.

3. 그 밖에 장점

기존 백엔드 프로젝트들은 전부 컨테이너 기반의 관리 및 배포가 이루어졌기 때문에 App Runner와 궁합이 좋다고 생각했다. 때문에 매번 EC2 인스턴스를 생성하고, 서버 설치 및 컨테이너 기반 애플리케이션을 동작하기 위한 패키지 설치와 설정과 같은 작업들을 안해도 된다는 점 또한 좋았다.

내가 느꼈던 서버리스의 장점

  1. 매번 프로젝트를 진행할 때마다 EC2 인스턴스 생성, Docker & Nginx 설치, 리버스 프록시 설정 등을 안해도 자동으로 되어있음(이를 통해 개발에 집중)
  2. 기존 서버에서 진행했던 배포 자동화 파이프라인 구축을 안해도 Github와 잘 통합되어 있어 좋음
  3. 그 밖에도 Auto 스케일 업 등 관리를 알아서 해줌