Amazon VPC와 함께 Elastic Beanstalk 사용 - AWS Elastic Beanstalk

Amazon VPC와 함께 Elastic Beanstalk 사용

Amazon Virtual Private Cloud(Amazon VPC)를 사용하여 Elastic Beanstalk 애플리케이션 및 관련 AWS 리소스를 위한 보안 네트워크를 생성할 수 있습니다. 환경을 생성할 때 애플리케이션 인스턴스 및 로드 밸런서에 사용되는 VPC, 서브넷 및 보안 그룹을 선택할 수 있습니다. 다음 요구 사항을 충족하는 한 원하는 VPC 구성을 모두 사용할 수 있습니다.

VPC 요구 사항

  • 인터넷 액세스 – 인스턴스가 다음 방법 중 하나를 통해 인터넷에 액세스할 수 있습니다.

    • 퍼블릭 서브넷 – 인스턴스에 퍼블릭 IP 주소가 있으며 인스턴스에서 인터넷 게이트웨이를 사용하여 인터넷에 액세스합니다.

    • 프라이빗 서브넷 – 인스턴스에서 NAT 디바이스를 사용하여 인터넷에 액세스합니다.

    참고

    elasticbeanstalkelasticbeanstalk-healthd 서비스 모두에 연결하도록 VPC의 [VPC 엔드포인트]를 구성하는 경우 인터넷 액세스는 선택 사항이며, 애플리케이션에 특별히 필요한 경우에만 필수입니다. VPC 엔드포인트가 없으면 VPC가 인터넷에 액세스할 수 있어야 합니다.

    Elastic Beanstalk에서 자동으로 설정되는 기본 VPC는 인터넷 액세스를 제공합니다.

    Elastic Beanstalk는 웹 프록시 구성 시 HTTPS_PROXY 같은 프록시 설정을 지원하지 않습니다.

  • NTP – Elastic Beanstalk 환경의 인스턴스는 NTP(Network Time Protocol)를 사용하여 시스템 클록을 동기화합니다. 인스턴스가 UDP 포트 123에서 통신할 수 없는 경우 Elastic Beanstalk 상태 보고 관련 문제로 인해 클록이 동기화되지 않을 수 있습니다. 이러한 문제를 방지하려면 VPC 보안 그룹과 네트워크 ACL에서 포트 123에서의 인바운드 및 아웃바운드 UDP 트래픽을 허용하는지 확인하십시오.

elastic-beanstalk-samples 리포지토리는 Elastic Beanstalk 환경에 사용할 VPC를 생성하는 데 사용할 수 있는 AWS CloudFormation 템플릿을 제공합니다.

AWS CloudFormation 템플릿을 사용하여 리소스를 생성하려면

  1. README의 링크를 사용하여 템플릿을 다운로드하거나 샘플 리포지토리를 복제합니다.

  2. AWS CloudFormation 콘솔을 엽니다.

  3. [Create stack]을 선택합니다.

  4. Amazon S3에 템플릿 업로드를 선택합니다.

  5. 파일 업로드를 선택하고 로컬 시스템에서 템플릿 파일을 업로드합니다.

  6. 다음을 선택하고 지침에 따라 템플릿의 리소스를 사용하여 스택을 생성합니다.

스택 생성이 완료되면 출력 탭을 확인하여 VPC ID 및 서브넷 ID를 찾습니다. 이러한 정보를 사용하여 새 환경 마법사 네트워크 구성 범주에서 VPC를 구성합니다.

퍼블릭 VPC

AWS CloudFormation 템플릿vpc-public.yaml

설정(로드 밸런싱 수행)

  • 로드 밸런서 표시 여부 – 퍼블릭

  • 로드 밸런서 서브넷 – 두 퍼블릭 서브넷

  • 인스턴스 퍼블릭 IP – 활성화됨

  • 인스턴스 서브넷 – - 두 퍼블릭 서브넷

  • 인스턴스 보안 그룹 – 기본 보안 그룹 추가

설정(단일 인스턴스)

  • 인스턴스 서브넷 – 퍼블릭 서브넷 중 하나

  • 인스턴스 보안 그룹 – 기본 보안 그룹 추가

기본 퍼블릭 전용 VPC 레이아웃에는 하나 이상의 퍼블릭 서브넷, 인터넷 게이트웨이 및 기본 보안 그룹(VPC 내 리소스 간 트래픽 허용)이 포함되어 있습니다. VPC에서 환경 생성 시 Elastic Beanstalk는 환경 유형에 따라 달라지는 추가 리소스를 생성합니다.

VPC 리소스

  • 단일 인스턴스 – Elastic Beanstalk는 인터넷에서 포트 80을 통해 수신되는 트래픽을 허용하는 애플리케이션 인스턴스에 대한 보안 그룹을 생성하고 이 인스턴스에 탄력적 IP를 할당하여 퍼블릭 IP 주소를 지정합니다. 이 환경의 도메인 이름은 인스턴스의 퍼블릭 IP 주소로 확인됩니다.

  • 로드 밸런스 수행 – Elastic Beanstalk는 인터넷에서 포트 80을 통해 수신되는 트래픽을 허용하는 로드 밸런서용 보안 그룹과, 로드 밸런서 보안 그룹에서 전송되는 트래픽을 허용하는 애플리케이션 인스턴스용 보안 그룹을 생성합니다. 이 환경의 도메인 이름은 로드 밸런서의 퍼블릭 도메인 이름으로 확인됩니다.

이 구성은 기본 VPC 사용 시 Elastic Beanstalk에서 네트워킹을 관리하는 방식과 비슷합니다. 퍼블릭 서브넷의 보안은 에서 생성되는 로드 밸런서 및 인스턴스 보안 그룹에 따라 달라집니다. 이 구성은 NAT 게이트웨이가 필요하지 않으므로 가장 경제적인 구성입니다.

퍼블릭/프라이빗 VPC

AWS CloudFormation 템플릿vpc-privatepublic.yaml

설정(로드 밸런싱 수행)

  • 로드 밸런서 표시 여부 – 퍼블릭

  • 로드 밸런서 서브넷 – 두 퍼블릭 서브넷

  • 인스턴스 퍼블릭 IP – 비활성화됨

  • 인스턴스 서브넷 – 두 프라이빗 서브넷

  • 인스턴스 보안 그룹 – 기본 보안 그룹 추가

추가 보안을 위해 프라이빗 서브넷을 VPC에 추가하여 퍼블릭-프라이빗 레이아웃을 생성합니다. 이 레이아웃에서는 로드 밸런서와 NAT 게이트웨이가 퍼블릭 서브넷에 있어야 하며 애플리케이션 인스턴스, 데이터베이스 및 그 밖의 리소스를 프라이빗 서브넷에서 실행할 수 있습니다. 프라이빗 서브넷의 인스턴스는 로드 밸런서와 NAT 게이트웨이를 통해서만 인터넷과 통신할 수 있습니다.

프라이빗 VPC

AWS CloudFormation 템플릿vpc-private.yaml

설정(로드 밸런싱 수행)

  • 로드 밸런서 표시 여부 – 프라이빗

  • 로드 밸런서 서브넷 – 두 프라이빗 서브넷 모두

  • 인스턴스 퍼블릭 IP – 비활성화됨

  • 인스턴스 서브넷 – 두 프라이빗 서브넷

  • 인스턴스 보안 그룹 – 기본 보안 그룹 추가

인터넷에서 액세스해서는 안 되는 내부 애플리케이션의 경우, 모든 것을 프라이빗 서브넷에서 실행하고 로드 밸런서가 내부로 연결되도록 구성할 수 있습니다(로드 밸런서 표시 여부내부로 변경). 이 템플릿은 퍼블릭 서브넷과 인터넷 게이트웨이가 없는 VPC를 생성합니다. 동일한 VPC 또는 연결된 VPN에서만 액세스해야 하는 애플리케이션에는 이 레이아웃을 사용합니다.

프라이빗 VPC에서 Elastic Beanstalk 환경 실행

프라이빗 VPC에서 Elastic Beanstalk 환경을 생성하면 해당 환경은 인터넷에 액세스할 수 없습니다. 애플리케이션에서 Elastic Beanstalk 서비스 또는 다른 서비스에 액세스해야 할 수 있습니다. 사용자 환경에서 향상된 상태 보고를 사용할 수 있으며, 이 경우 환경 인스턴스는 상태 정보를 향상된 상태 서비스로 전송합니다. 또한 환경 인스턴스의 Elastic Beanstalk 코드는 트래픽을 다른 AWS 서비스로 전송하고 다른 트래픽을 AWS 외 엔드포인트로 전송합니다(예: 애플리케이션의 종속성 패키지 다운로드). 이 경우 환경이 제대로 작동하는지 확인하기 위해 다음과 같은 몇 가지 단계를 수행해야 할 수 있습니다.

  • Elastic Beanstalk에 대한 VPC 엔드포인트 구성 – Elastic Beanstalk 및 향상된 상태 서비스에서는 VPC 엔드포인트를 지원하므로, 이러한 서비스에 대한 트래픽이 Amazon 네트워크 내부에 유지되고 인터넷 액세스가 필요하지 않습니다. 자세한 내용은 VPC 엔드포인트와 함께 Elastic Beanstalk 사용 단원을 참조하십시오.

  • 추가 서비스에 대한 VPC 엔드포인트 구성 – Elastic Beanstalk 인스턴스가 사용자를 대신해 Amazon Simple Storage Service(Amazon S3), Amazon Simple Queue Service(Amazon SQS), AWS CloudFormation, Amazon CloudWatch Logs 등 다른 여러 AWS 서비스로 트래픽을 전송합니다. 이러한 서비스에 대해서도 VPC 엔드포인트를 구성해야 합니다. 서비스별 링크를 포함하여 VPC 엔드포인트에 대한 자세한 내용은 Amazon VPC 사용 설명서VPC 엔드포인트를 참조하십시오.

    참고

    Elastic Beanstalk를 비롯한 일부 AWS 서비스는 제한된 수의 AWS 리전에서 VPC 엔드포인트를 지원합니다. 프라이빗 VPC 솔루션을 설계할 때 Elastic Beanstalk와 여기에 언급된 다른 종속 서비스가 선택된 AWS 리전에서 VPC 엔드포인트를 지원하는지 확인합니다.

  • 프라이빗 Docker 이미지 제공Docker 환경에서 환경 인스턴스의 코드가 환경 생성 중에 인터넷에서 구성된 Docker 이미지를 가져오려고 하지만 실패할 수 있습니다. 이 문제를 방지하려면 사용자 환경에서 사용자 지정 Docker 이미지를 빌드하거나, Amazon Elastic Container Registry(Amazon ECR)에 저장된 Docker 이미지를 사용하고 Amazon ECR 서비스에 대한 VPC 엔드포인트를 구성합니다.

  • DNS 이름 활성화 – 환경 인스턴스의 Elastic Beanstalk 코드는 퍼블릭 엔드포인트를 사용하여 트래픽을 모든 AWS 서비스에 전송합니다. 이 트래픽이 이동하도록 하려면 모든 인터페이스 VPC 엔드포인트를 구성할 때 [Enable DNS name] 옵션을 선택합니다. 그러면 퍼블릭 서비스 엔드포인트를 인터페이스 VPC 엔드포인트에 매핑하는 DNS 항목이 VPC에 추가됩니다.

    중요

    VPC가 프라이빗이 아니고 퍼블릭 인터넷에 액세스되는 경우와 VPC 엔드포인트에 대해 [Enable DNS name]을 비활성화한 경우 해당 서비스에 대한 트래픽은 퍼블릭 인터넷을 통해 이동합니다. 이는 원하는 것이 아닐 것입니다. 프라이빗 VPC는 이 트래픽이 이동하는 것을 차단하고 오류를 표시하므로 프라이빗 VPC를 사용하면 이 문제를 쉽게 감지할 수 있습니다. 하지만 퍼블릭 VPC를 사용하면 아무것도 표시되지 않습니다.

  • 애플리케이션 종속성 포함 – 애플리케이션에 언어 런타임 패키지와 같은 종속성이 있는 경우 환경 생성 중에 인터넷에서 종속성을 다운로드하여 설치하려고 시도하지만 실패할 수 있습니다. 이 문제를 방지하려면 애플리케이션의 소스 번들에 모든 종속성 패키지를 포함합니다.

  • 현재 플랫폼 버전 사용 – 사용자 환경에서 2020년 2월 24일 이후에 릴리스된 플랫폼 버전을 사용해야 합니다. 특히, Linux 업데이트 2020-02-28, Windows 업데이트 2020-02-24의 두 업데이트 중 하나 또는 그 이후에 릴리스된 플랫폼 버전을 사용합니다.

    참고

    업데이트된 플랫폼 버전이 필요한 이유는 이전 버전에서는 [Enable DNS name] 옵션으로 생성된 DNS 항목이 Amazon SQS에 대해 제대로 작동하지 않는 문제가 있기 때문입니다.