앱 러너용 애플리케이션 코드 개발 - AWS App Runner

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

앱 러너용 애플리케이션 코드 개발

이 장에서는 배포할 응용 프로그램 코드를 개발하거나 마이그레이션할 때 고려해야 하는 런타임 정보와 개발 지침에 대해 설명합니다. AWS App Runner

런타임 정보

컨테이너 이미지를 제공하든 App Runner에서 빌드하든 관계없이 App Runner는 컨테이너 인스턴스에서 애플리케이션 코드를 실행합니다. 다음은 컨테이너 인스턴스 런타임 환경의 몇 가지 주요 측면입니다.

  • 프레임워크 지원 — App Runner는 웹 애플리케이션을 구현하는 모든 이미지를 지원합니다. 어떤 프로그래밍 언어를 선택하든, 어떤 웹 애플리케이션 서버나 프레임워크를 사용하든 상관없이 사용할 수 있습니다. 편의를 위해 다양한 프로그래밍 플랫폼에 대한 플랫폼별 관리 런타임을 제공하여 애플리케이션 빌드 프로세스와 추상 이미지 생성을 간소화합니다.

  • 웹 요청 — App Runner는 컨테이너 인스턴스에 HTTP 1.0 및 HTTP 1.1에 대한 지원을 제공합니다. 서비스 구성에 대한 자세한 내용은 을 참조하십시오App Runner 서비스 구성. HTTPS 보안 트래픽 처리를 구현하지 않아도 됩니다. App Runner는 들어오는 모든 HTTP 요청을 해당 HTTPS 엔드포인트로 리디렉션합니다. HTTP 웹 요청을 리디렉션할 수 있도록 설정하지 않아도 됩니다. App Runner는 요청을 애플리케이션 컨테이너 인스턴스로 전달하기 전에 TLS를 종료합니다.

    참고
    • HTTP 요청에는 총 120초의 요청 제한 시간이 있습니다. 120초에는 애플리케이션이 본문을 포함하여 요청을 읽고 HTTP 응답 작성을 완료하는 데 걸리는 시간이 포함됩니다.

    • 요청 읽기 및 응답 제한 시간은 사용하는 애플리케이션에 따라 다릅니다. 이러한 애플리케이션에는 자체 내부 시간 제한이 있을 수 있습니다. 예를 들어 Python용 HTTP 서버인 Gunicorn에는 30초의 기본 시간 제한 시간이 있습니다. 이러한 경우 애플리케이션의 제한 시간이 App Runner 120초 제한 시간보다 우선합니다.

    • App Runner는 완전관리형 서비스이므로 TLS 종료를 자동으로 관리하므로 TLS 암호 제품군이나 기타 매개변수를 구성할 필요가 없습니다.

  • 스테이트리스 앱 — 현재 App Runner는 스테이트풀 앱을 지원하지 않습니다. 따라서 App Runner는 단일 수신 웹 요청을 처리하는 기간 이후에도 상태 지속성을 보장하지 않습니다.

  • 스토리지 — App Runner는 들어오는 트래픽 양에 따라 App Runner 애플리케이션의 인스턴스를 자동으로 늘리거나 줄입니다. App Runner 애플리케이션에 대한 Auto Scaling 옵션을 구성할 수 있습니다. 웹 요청을 처리하는 현재 활성 인스턴스 수는 들어오는 트래픽 볼륨을 기반으로 하므로 App Runner는 파일이 단일 요청 처리 이후에도 계속 유지될 수 있다고 보장할 수 없습니다. 따라서 App Runner는 컨테이너 인스턴스의 파일 시스템을 임시 저장소로 구현하므로 파일이 일시적입니다. 예를 들어 App Runner 서비스를 일시 중지했다가 다시 시작해도 파일이 유지되지 않습니다.

    App Runner는 3GB의 임시 스토리지를 제공하며 3GB의 임시 스토리지 중 일부를 인스턴스에서 가져와 압축하고 압축하지 않은 컨테이너 이미지를 저장하는 데 사용합니다. 나머지 임시 스토리지는 App Runner 서비스에서 사용할 수 있습니다. 하지만 이 스토리지는 스테이트리스 (Stateless) 특성 때문에 영구 스토리지는 아닙니다.

    참고

    스토리지 파일이 여러 요청에 걸쳐 지속되는 시나리오가 있을 수 있습니다. 예를 들어, 다음 요청이 동일한 인스턴스에 도착하더라도 스토리지 파일은 계속 유지됩니다. 요청 간에 스토리지 파일이 계속 유지되는 것은 특정 상황에서 유용할 수 있습니다. 예를 들어 요청을 처리할 때 향후 요청에서 필요할 경우 애플리케이션에서 다운로드하는 파일을 캐시할 수 있습니다. 이렇게 하면 향후 요청 처리 속도가 빨라질 수 있지만 속도 향상을 보장할 수는 없습니다. 코드는 이전 요청에서 다운로드한 파일이 여전히 존재한다고 가정해서는 안 됩니다.

    처리량이 높고 지연 시간이 짧은 인메모리 데이터 스토어를 사용하여 캐싱을 보장하려면 Amazon과 같은 서비스를 사용하십시오. ElastiCache

  • 환경 변수 - 기본적으로 App Runner는 컨테이너 인스턴스에서 PORT 환경 변수를 사용할 수 있도록 합니다. 포트 정보로 변수 값을 구성하고 사용자 지정 환경 변수 및 값을 추가할 수 있습니다. AWS Secrets Manager또는 AWS Systems Manager 파라미터 스토어에 저장된 민감한 데이터를 환경 변수로 참조할 수도 있습니다. 환경 변수 생성에 대한 자세한 내용은 을 참조하십시오환경 변수 참조.

  • 인스턴스 역할 - 애플리케이션 코드가 서비스 API 또는 AWS SDK 중 하나를 사용하여 AWS 서비스를 호출하는 경우 AWS Identity and Access Management (IAM) 을 사용하여 인스턴스 역할을 생성하십시오. 그런 다음 앱을 만들 때 App Runner 서비스에 연결하세요. 코드에 필요한 모든 AWS 서비스 작업 권한을 인스턴스 역할에 포함하세요. 자세한 정보는 인스턴스 역할을 참조하세요.

코드 개발 가이드라인

App Runner 웹 애플리케이션용 코드를 개발할 때는 이 가이드라인을 고려하세요.

  • 상태 비저장 코드 설계 - App Runner 서비스에 배포하는 웹 애플리케이션을 상태 비저장 모드로 설계하십시오. 코드에서는 수신되는 단일 웹 요청을 처리하는 기간 이후로는 어떤 상태도 지속되지 않는다고 가정해야 합니다.

  • 임시 파일 삭제 - 파일을 만들면 파일 시스템에 저장되며 서비스 스토리지 할당의 일부를 차지합니다. out-of-storage 오류를 방지하려면 임시 파일을 장기간 보관하지 마세요. 파일 캐싱을 결정할 때는 스토리지 크기와 요청 처리 속도의 균형을 맞추세요.

  • 인스턴스 시작 — App Runner는 5분의 인스턴스 시작 시간을 제공합니다. 인스턴스는 구성된 수신 포트에서 요청을 수신하고 시작 후 5분 이내에 정상 상태여야 합니다. 시작 시간 동안 앱 러너 인스턴스에는 vCPU 구성에 따라 가상 CPU (vCPU) 가 할당됩니다. 사용 가능한 vCPU 구성에 대한 자세한 내용은 을 참조하십시오. 앱 러너 지원 구성

    인스턴스가 성공적으로 시작되면 유휴 상태가 되어 요청을 기다립니다. 인스턴스 시작 시간을 기준으로 비용을 지불하며, 인스턴스 시작당 최소 요금은 1분입니다. 요금에 대한 자세한 정보는 AWS App Runner 요금을 참조하세요.