외부 Amazon RDS 데이터베이스에 연결된 고가용성 Drupal 웹 사이트를 Elastic Beanstalk에 배포 - AWS Elastic Beanstalk

외부 Amazon RDS 데이터베이스에 연결된 고가용성 Drupal 웹 사이트를 Elastic Beanstalk에 배포

본 자습서에서는 AWS Elastic Beanstalk 외부의 RDS DB 인스턴스를 시작하는 절차를 단계별로 살펴봅니다. 그런 다음 해당 DB 인스턴스에 연결하도록 Drupal 웹 사이트를 실행하는 고가용성 환경을 구성하는 절차를 설명합니다. 이 웹 사이트는 업로드된 파일의 공유 스토리지로 Amazon Elastic File System(Amazon EFS)을 사용합니다. Elastic Beanstalk 외부에서 DB 인스턴스를 실행하면 데이터베이스가 해당 환경의 수명 주기와 분리되며, 따라서 여러 환경의 동일한 데이터베이스에 연결하거나 데이터베이스를 서로 바꾸거나 데이터베이스에 영향을 주지 않고 블루/그린 배포를 수행할 수 있습니다.

사전 조건

이 자습서에서는 사용자가 기본 Elastic Beanstalk 작업 및 Elastic Beanstalk 콘솔에 대해 어느 정도 알고 있다고 가정합니다. 아직 그렇지 않은 경우 Elastic Beanstalk 사용 시작하기의 지침에 따라 첫 Elastic Beanstalk 환경을 시작합니다.

이 설명서의 절차에 따르려면 명령을 실행할 셸 또는 명령줄 터미널이 필요합니다. 명령은 프롬프트 기호($)와 해당하는 경우 현재 디렉터리의 이름이 앞에 붙은 상태로 목록에 표시됩니다.

~/eb-project$ this is a command this is output

Linux 및 macOS에서 권장되는 셸과 패키지 관리자를 사용할 수 있습니다. Windows 10에서 Linux용 Windows Subsystem을 설치하여 Ubuntu와 Bash의 Windows 통합 버전을 가져옵니다.

이 자습서에서 Amazon Relational Database Service(Amazon RDS) 작업의 절차는 기본 Amazon Virtual Private Cloud(Amazon VPC)의 리소스를 시작한다고 가정합니다. 모든 새 계정에는 각 리전에 기본 VPC가 포함되어 있습니다. 기본 VPC가 없는 경우 절차가 다릅니다. EC2-Classic 및 사용자 지정 VPC 플랫폼에 대한 지침은 Amazon RDS와 함께 Elastic Beanstalk 사용을(를) 참조하세요.

샘플 애플리케이션은 Amazon EFS를 사용합니다. 이는 Amazon EFS를 지원하는 AWS 리전에서만 작동합니다. 지원되는 AWS 리전에 대한 자세한 내용은 AWS 일반 참조Amazon Elastic File System 엔드포인트 및 할당량을 참조하세요.

Elastic Beanstalk 환경의 플랫폼에서 PHP 7.4 이전 버전을 사용하는 경우 이 자습서에서는 Drupal 버전 8.9.13을 사용하는 것이 좋습니다. PHP 8.0 이상의 버전과 함께 설치된 플랫폼의 경우, Drupal 9.1.5를 사용하는 것이 좋습니다.

Drupal 릴리스 및 지원되는 PHP 버전에 대한 자세한 내용은 Drupal 웹 사이트에서 PHP 요구 사항을 참조하세요. Drupal이 권장하는 핵심 버전은 웹 사이트 https://www.drupal.org/project/drupal에 나와 있습니다.

Amazon RDS에서 DB 인스턴스 시작

애플리케이션이 실행 중인 Elastic Beanstalk에서 외부 데이터베이스를 사용하려면, 먼저 Amazon RDS에서 DB 인스턴스를 시작합니다. Amazon RDS에서 시작한 인스턴스는 Elastic Beanstalk 및 Elastic Beanstalk 환경과 무관하며 Elastic Beanstalk에서 종료하거나 모니터링하지 않습니다.

Amazon RDS 콘솔을 사용하여 다중 AZ MySQL DB 인스턴스를 시작합니다. 다중 AZ 배포를 선택하면 소스 DB 인스턴스가 작동하지 않더라도 장애 조치를 통해 데이터베이스를 계속 사용할 수 있게 됩니다.

기본 VPC에서 RDS DB 인스턴스를 시작하려면
  1. RDS 콘솔을 엽니다.

  2. 탐색 창에서 데이터베이스를 선택합니다.

  3. 데이터베이스 생성을 선택합니다.

  4. Standard Create(표준 생성)를 선택합니다.

    중요

    Easy Create(간편 생성)를 선택하지 마십시오. 이를 선택하면 이 RDS DB를 시작하는 데 필요한 설정을 구성할 수 없습니다.

  5. Additional configuration(추가 구성) 아래 Initial database name(초기 데이터베이스 이름)ebdb을 입력합니다.

  6. 기본 설정을 검토하고 특정 요구 사항에 따라 이러한 설정을 조정합니다. 다음 옵션에 주의하십시오.

    • DB 인스턴스 클래스(DB instance class) - 사용하는 워크로드에 적절한 메모리와 CPU 성능을 갖고 있는 인스턴스 크기를 선택합니다.

    • 다중 AZ 배포(Multi-AZ deployment) - 고가용성을 위해 이 옵션을 다른 AZ에 Aurora 복제본/읽기 노드 생성(Create an Aurora Replica/Reader node in a different AZ)으로 설정합니다.

    • 마스터 사용자 이름(Master username)마스터 암호(Master password) - 데이터베이스 사용자 이름과 암호입니다. 이러한 값은 나중에 다시 사용할 것이므로 적어둡니다.

  7. 나머지 옵션의 기본 설정을 확인하고 데이터베이스 생성을 선택합니다.

그 다음 DB 인스턴스에 연결된 보안 그룹을 수정하여 해당 포트에서 인바운드 트래픽을 허용합니다. 이 보안 그룹은 나중에 Elastic Beanstalk 환경에 연결할 바로 그 보안 그룹이기 때문에, 추가한 규칙은 동일한 보안 그룹의 다른 리소스에 대한 수신 권한을 부여합니다.

RDS 인스턴스에 연결된 보안 그룹에 대한 인바운드 규칙 수정하기
  1. Amazon RDS 콘솔을 엽니다.

  2. 데이터베이스를 선택합니다.

  3. 세부 정보를 보려면 DB 인스턴스의 이름을 선택합니다.

  4. 연결 단원에서 이 페이지에 표시되는 서브넷, 보안 그룹엔드포인트를 적어둡니다. 이는 나중에 이 정보를 사용할 수 있도록 하기 위한 것입니다.

  5. 보안에는 DB 인스턴스와 연결된 보안 그룹이 표시됩니다. 링크를 열어 Amazon EC2 콘솔에서 보안 그룹을 봅니다.

    
        Amazon RDS 콘솔 내 DB 인스턴스 페이지의 연결 섹션
  6. 보안 그룹 세부 정보에서 인바운드 탭을 선택합니다.

  7. 편집(Edit)을 선택합니다.

  8. 규칙 추가(Add Rule)를 선택합니다.

  9. 유형에서 애플리케이션이 사용하는 DB 엔진을 선택합니다.

  10. 소스sg-를 입력하여 사용할 수 있는 보안 그룹 목록을 확인합니다. Elastic Beanstalk 환경에서 사용되는 Auto Scaling 그룹과 연결된 보안 그룹을 선택합니다. 따라서 환경의 Amazon EC2 인스턴스가 데이터베이스에 액세스할 수 있습니다.

    
        Amazon EC2 콘솔 내 보안 그룹의 인바운드 규칙 편집
  11. 저장(Save)을 선택합니다.

DB 인스턴스를 만드는 데 약 10분이 걸립니다. 그동안 Elastic Beanstalk 환경을 시작합니다.

Elastic Beanstalk 환경 시작

Elastic Beanstalk 콘솔을 사용하여 Elastic Beanstalk 환경을 생성합니다. PHP 플랫폼을 선택하고 기본 설정과 샘플 코드를 적용합니다. 환경을 시작한 후 데이터베이스에 연결하도록 환경을 구성한 다음 Drupal 코드를 환경에 배포할 수 있습니다.

환경을 시작하려면(콘솔)
  1. 미리 구성된 다음 링크를 사용하여 Elastic Beanstalk 콘솔을 엽니다. console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced

  2. [플랫폼]에서 애플리케이션에 사용되는 언어와 일치하는 플랫폼 및 플랫폼 브랜치를 선택합니다.

  3. 애플리케이션 코드에서 샘플 애플리케이션을 선택합니다.

  4. 검토 및 시작을 선택합니다.

  5. 사용할 수 있는 옵션을 검토하십시오. 사용할 수 있는 옵션을 선택하고 준비가 되면 앱 생성을 선택합니다.

다음 리소스를 사용해 환경을 생성하는 데 약 5분 가량 걸립니다.

  • EC2 인스턴스(EC2 instance) - 선택한 플랫폼에서 웹 앱을 실행하도록 구성된 Amazon Elastic Compute Cloud(Amazon EC2) 가상 머신입니다.

    특정 언어 버전, 프레임워크, 웹 컨테이너 또는 그 조합을 지원하도록 각 플랫폼마다 특정 소프트웨어, 구성 파일 및 스크립트 세트를 실행합니다. 대부분의 플랫폼에서는 웹 앱 앞에 위치해 웹 앱으로 요청을 전달하고, 정적 자산을 제공하고, 액세스 및 오류 로그를 생성하는 역방향 프록시로 Apache 또는 NGINX를 사용합니다.

  • 인스턴스 보안 그룹(Instance security group) - 포트 80에서 인바운드 트래픽을 허용하도록 구성된 Amazon EC2 보안 그룹입니다. 이 리소스를 통해 로드 밸런서의 HTTP 트래픽이 웹 앱을 실행하는 EC2 인스턴스에 도달할 수 있습니다. 기본적으로 다른 포트에서는 트래픽이 허용되지 않습니다.

  • 로드 밸런서(Load balancer) - 애플리케이션을 실행하는 인스턴스로 요청을 분산하도록 구성된 Elastic Load Balancing 로드 밸런서입니다. 또한 로드 밸런서가 있으면 인터넷에 인스턴스를 직접 노출할 필요가 없습니다.

  • 로드 밸런서 보안 그룹(Load balancer security group) - 포트 80에서 인바운드 트래픽을 허용하도록 구성된 Amazon EC2 보안 그룹입니다. 이 리소스를 통해 인터넷의 HTTP 트래픽이 로드 밸런서에 도달할 수 있습니다. 기본적으로 다른 포트에서는 트래픽이 허용되지 않습니다.

  • Auto Scaling 그룹(Auto Scaling group) - 인스턴스가 종료되거나 사용할 수 없게 될 경우 인스턴스를 대체하도록 구성된 Auto Scaling 그룹입니다.

  • Amazon S3 버킷(Amazon S3 bucket) - Elastic Beanstalk 사용 시 생성된 소스 코드, 로그 및 기타 아티팩트의 스토리지 위치입니다.

  • Amazon CloudWatch 경보(Amazon CloudWatch alarms) - 환경의 인스턴스에 대한 로드를 모니터링하는 두 개의 CloudWatch 경보로, 로드가 너무 높거나 너무 낮은 경우 트리거됩니다. 경보가 트리거되면 이에 대한 응답으로 Auto Scaling 그룹이 확장 또는 축소됩니다.

  • AWS CloudFormation 스택 – Elastic Beanstalk은 AWS CloudFormation을 사용하여 환경의 리소스를 시작하고 구성 변경 사항을 전파합니다. 리소스는 AWS CloudFormation 콘솔에서 볼 수 있는 템플릿에서 정의됩니다.

  • 도메인 이름(Domain name) - subdomain.region.elasticbeanstalk.com 형식으로 웹 앱으로 라우팅되는 도메인 이름입니다.

이러한 모든 리소스는 Elastic Beanstalk에서 관리합니다. 사용자가 환경을 종료하면 Elastic Beanstalk는 환경에 있는 모든 리소스를 종료합니다. 시작된 RDS DB 인스턴스는 환경 외부에 있기 때문에 사용자가 수명 주기를 관리해야 합니다.

참고

Elastic Beanstalk에서 생성하는 Amazon S3 버킷은 환경 간에 공유되며 환경을 종료해도 삭제되지 않습니다. 자세한 내용은 Amazon S3에서 Elastic Beanstalk 사용을(를) 참조하세요.

보안 설정 및 환경 속성 구성

실행 중인 환경에 DB 인스턴스의 보안 그룹을 추가합니다. 이 절차로 인해 Elastic Beanstalk는 추가 보안 그룹이 연결된 상태에서 모든 인스턴스를 환경에 다시 프로비저닝합니다.

환경에 보안 그룹을 추가하려면
  • 다음 중 하나를 수행하세요.

    • Elastic Beanstalk 콘솔을 사용하여 보안 그룹을 추가하려면

      1. Elastic Beanstalk 콘솔을 연 다음 리전(Regions) 목록에서 해당 AWS 리전을 선택합니다.

      2. 탐색 창에서 환경을 선택한 다음 목록에서 환경의 이름을 선택합니다.

        참고

        환경이 많은 경우 검색 창을 사용하여 환경 목록을 필터링합니다.

      3. 탐색 창에서 구성을 선택합니다.

      4. [인스턴스] 구성 범주에서 [편집]을 선택합니다.

      5. EC2 보안 그룹(EC2 security groups)에서, Elastic Beanstalk가 생성하는 인스턴스 보안 그룹 외에도, 인스턴스에 연결할 보안 그룹을 선택합니다.

      6. 페이지 하단에서 적용(Apply)을 선택합니다.

      7. 경고를 읽은 후 확인을 선택합니다.

    • 구성 파일을 이용하여 보안 그룹을 추가하려면 securitygroup-addexisting.config 예제 파일을 사용합니다.

그런 다음 환경 속성을 사용하여 연결 정보를 환경에 전달합니다. 샘플 애플리케이션은 환경에서 데이터베이스를 프로비저닝할 때 Elastic Beanstalk가 구성하는 속성과 일치하는 기본 속성 집합을 사용합니다.

Amazon RDS DB 인스턴스의 환경 속성을 구성하려면
  1. Elastic Beanstalk 콘솔을 연 다음 리전(Regions) 목록에서 해당 AWS 리전을 선택합니다.

  2. 탐색 창에서 환경을 선택한 다음 목록에서 환경의 이름을 선택합니다.

    참고

    환경이 많은 경우 검색 창을 사용하여 환경 목록을 필터링합니다.

  3. 탐색 창에서 구성을 선택합니다.

  4. 소프트웨어 구성 범주에서 편집을 선택합니다.

  5. 환경 속성 단원에서 애플리케이션이 연결 문자열을 구성하기 위해 읽는 변수를 정의합니다. 통합된 RDS DB 인스턴스가 있는 환경과의 호환성을 위해 다음과 같은 이름과 값을 사용합니다. RDS 콘솔에서 암호를 제외한 모든 값을 찾을 수 있습니다.

    속성 이름 설명 속성 값

    RDS_HOSTNAME

    DB 인스턴스의 호스트 이름입니다.

    Amazon RDS 콘솔의 연결 및 보안 탭에 있는 엔드포인트입니다.

    RDS_PORT

    DB 인스턴스가 연결을 허용하는 포트입니다. 기본값은 DB 엔진마다 다릅니다.

    Amazon RDS 콘솔의 연결 및 보안 탭에 있는 포트입니다.

    RDS_DB_NAME

    데이터베이스 이름 ebdb입니다.

    Amazon RDS 콘솔의 구성 탭에 있는 DB 이름입니다.

    RDS_USERNAME

    데이터베이스에 대해 구성된 사용자 이름입니다.

    Amazon RDS 콘솔의 구성 탭에 있는 마스터 사용자 이름입니다.

    RDS_PASSWORD

    데이터베이스에 대해 구성된 암호입니다.

    Amazon RDS 콘솔에서는 참조용으로 사용할 수 없습니다.

    
        RDS 속성이 추가된 환경 속성 구성 섹션
  6. 페이지 하단에서 적용(Apply)을 선택합니다.

Drupal을 설치한 후 인스턴스를 SSH와 연결해 일부 구성 세부 정보를 가져와야 합니다. 환경 인스턴스에 SSH 키를 할당합니다.

SSH 구성
  1. 앞서 키 페어를 생성하지 않은 경우, Amazon EC2 콘솔의 키 페어 페이지를 열고, 다음 지침에 따라 키 페어를 생성합니다.

  2. Elastic Beanstalk 콘솔을 연 다음 리전(Regions) 목록에서 해당 AWS 리전을 선택합니다.

  3. 탐색 창에서 환경을 선택한 다음 목록에서 환경의 이름을 선택합니다.

    참고

    환경이 많은 경우 검색 창을 사용하여 환경 목록을 필터링합니다.

  4. 탐색 창에서 구성을 선택합니다.

  5. [보안] 아래의 [편집]을 선택합니다.

  6. EC2 키 페어에서 키 페어를 선택합니다.

  7. 페이지 하단에서 적용(Apply)을 선택합니다.

애플리케이션 구성 및 배포

Elastic Beanstalk에 대한 Drupal 프로젝트를 생성하려면 Drupal 소스 코드를 다운로드하여 GitHub의 aws-samples/eb-php-drupal 리포지토리에 있는 파일과 결합합니다.

Drupal 프로젝트 생성
  1. www.drupal.org/download에서 Drupal을 다운로드하려면 다음 명령을 실행합니다. 다운로드에 대한 자세한 내용은 Drupal 웹 사이트를 참조하세요.

    Elastic Beanstalk 환경의 플랫폼에서 PHP 7.4 이전 버전을 사용하는 경우 이 자습서에서는 Drupal 버전 8.9.13을 다운로드하는 것이 좋습니다. 다음 명령을 실행하면 다운로드할 수 있습니다.

    ~$ curl https://ftp.drupal.org/files/projects/drupal-8.9.13.tar.gz -o drupal.tar.gz

    플랫폼이 PHP 8.0 이상의 버전을 사용하는 경우, Drupal 9.1.5를 다운로드하는 것이 좋습니다. 이 명령을 실행하면 다운로드할 수 있습니다.

    ~$ curl https://ftp.drupal.org/files/projects/drupal-9.1.5.tar.gz -o drupal.tar.gz

    Drupal 릴리스 및 지원되는 PHP 버전에 대한 자세한 내용은 공식 Drupal 설명서에서 PHP 요구 사항을 참조하세요. Drupal이 권장하는 핵심 버전은 Drupal 웹 사이트에 나와 있습니다.

  2. 다음 명령을 사용하여 샘플 리포지토리에서 구성 파일을 다운로드합니다.

    ~$ wget https://github.com/aws-samples/eb-php-drupal/releases/download/v1.1/eb-php-drupal-v1.zip
  3. Drupal의 압축을 해제하고 폴더 이름을 변경합니다.

    Drupal 8.9.13을 다운로드한 경우:

    ~$ tar -xvf drupal.tar.gz ~$ mv drupal-8.9.13 drupal-beanstalk ~$ cd drupal-beanstalk

    Drupal 9.1.5를 다운로드한 경우:

    ~$ tar -xvf drupal.tar.gz ~$ mv drupal-9.1.5 drupal-beanstalk ~$ cd drupal-beanstalk
  4. Drupal 설치 파일 위에 구성 파일의 압축을 해제합니다.

    ~/drupal-beanstalk$ unzip ../eb-php-drupal-v1.zip creating: .ebextensions/ inflating: .ebextensions/dev.config inflating: .ebextensions/drupal.config inflating: .ebextensions/efs-create.config inflating: .ebextensions/efs-filesystem.template inflating: .ebextensions/efs-mount.config inflating: .ebextensions/loadbalancer-sg.config inflating: LICENSE inflating: README.md inflating: beanstalk-settings.php

다음과 같이 drupal-beanstalk 폴더의 구조가 정확한지 확인합니다.

drupal-beanstalk$ tree -aL 1 . ├── autoload.php ├── beanstalk-settings.php ├── composer.json ├── composer.lock ├── core ├── .csslintrc ├── .ebextensions ├── .ebextensions ├── .editorconfig ├── .eslintignore ├── .eslintrc.json ├── example.gitignore ├── .gitattributes ├── .htaccess ├── .ht.router.php ├── index.php ├── LICENSE ├── LICENSE.txt ├── modules ├── profiles ├── README.md ├── README.txt ├── robots.txt ├── sites ├── themes ├── update.php ├── vendor └── web.config

프로젝트 리포지토리의 beanstalk-settings.php 파일은 데이터베이스 연결을 구성하기 위해 이전 단계에서 정의한 환경 변수를 사용합니다. .ebextensions 폴더에는 Elastic Beanstalk 환경 내에 추가 리소스를 생성하는 구성 파일이 포함되어 있습니다.

사용자 계정에서 작업을 할 수 있도록 구성 파일을 수정해야 합니다. 파일의 자리 표시자 값을 적절한 ID로 바꾸고 소스 번들을 생성합니다.

구성 파일 업데이트 및 소스 번들 생성.
  1. 다음과 같이 구성 파일을 수정합니다.

    • .ebextensions/dev.config - Drupal이 설치되는 동안 특정 IP 주소만 해당 환경에 액세스할 수 있도록 제한하여 환경을 보호합니다. 파일 상단 근처에 있는 자리 표시자 IP 주소를 퍼블릭 IP 주소로 바꾸십시오.

    • .ebextensions/efs-create.config - VPC의 각 가용 영역/서브넷에서 EFS 파일 시스템과 탑재 지점을 생성합니다. Amazon VPC 콘솔에서 기본 VPC와 서브넷 ID를 식별합니다.

  2. 사용자 프로젝터 폴더의 파일을 포함하는 소스 번들을 만듭니다. 다음 명령은 drupal-beanstalk.zip이라는 이름의 소스 번들을 생성합니다. 많은 공간을 차지하고 애플리케이션을 Elastic Beanstalk에 배포하는 데 불필요한 vendor 폴더의 파일들은 제외됩니다.

    ~/eb-drupal$ zip ../drupal-beanstalk.zip -r * .[^.]* -x "vendor/*"

Elastic Beanstalk에 소스 번들을 업로드하여 Drupal을 환경에 배포합니다.

소스 번들을 배포하려면
  1. Elastic Beanstalk 콘솔을 연 다음 리전(Regions) 목록에서 해당 AWS 리전을 선택합니다.

  2. 탐색 창에서 환경을 선택한 다음 목록에서 환경의 이름을 선택합니다.

    참고

    환경이 많은 경우 검색 창을 사용하여 환경 목록을 필터링합니다.

  3. 환경 개요 페이지에서 [업로드 및 배포]를 선택합니다.

  4. 화면에 표시되는 대화 상자를 사용하여 소스 번들을 업로드합니다.

  5. 배포(Deploy)를 선택합니다.

  6. 배포가 완료되면 사이트 URL을 선택하여 새 탭에서 웹 사이트를 열 수 있습니다.

Drupal 설치

Drupal 설치를 완료하려면
  1. Elastic Beanstalk 콘솔을 연 다음 리전(Regions) 목록에서 해당 AWS 리전을 선택합니다.

  2. 탐색 창에서 환경을 선택한 다음 목록에서 환경의 이름을 선택합니다.

    참고

    환경이 많은 경우 검색 창을 사용하여 환경 목록을 필터링합니다.

  3. 환경 URL을 선택하여 브라우저에서 사이트를 엽니다. 아직 사이트가 구성되지 않았기 때문에 Drupal 설치 마법사로 리디렉션됩니다.

  4. 다음 데이터베이스 설정을 사용하여 표준 설치를 수행합니다.

    • 데이터베이스 이름(Database name) - Amazon RDS 콘솔에 표시되는 DB 이름(DB Name)입니다.

    • 데이터베이스 사용자 이름 및 암호(Database username and password) - 데이터베이스를 생성할 때 입력한 마스터 사용자 이름(Master Username)마스터 암호(Master Password) 값입니다.

    • 고급 옵션(Advanced Options) > 호스트(Host) - Amazon RDS 콘솔에 표시되는 DB 인스턴스의 엔드포인트(Endpoint)입니다.

설치를 완료하는 데 약 일 분 정도 걸릴 수 있습니다.

Drupal 구성 업데이트 및 액세스 제한 제거

Drupal 설치 프로세스 동안 인스턴스의 settings.php 폴더에 sites/default이라는 이름의 파일이 생성됩니다. 이후 배포에서 사이트를 다시 설정하지 않으려면 원본 코드에 이 파일이 있어야 합니다. 그러나 현재 파일에는 원본으로 커밋하면 안 되는 암호가 포함되어 있습니다. 애플리케이션 인스턴스를 연결해 설정 파일에서 정보를 가져옵니다.

SSH로 애플리케이션 인스턴스를 연결
  1. Amazon EC2 콘솔의 인스턴스 페이지(instances page)를 엽니다.

  2. 애플리케이션 인스턴스를 선택합니다. Elastic Beanstalk 환경 이름을 가지고 있습니다.

  3. 연결(Connect)을 선택합니다.

  4. 다음 지침에 따라 SSH로 인스턴스를 연결합니다. 명령은 다음과 비슷합니다.

    $ ssh -i ~/.ssh/mykey ec2-user@ec2-00-55-33-222.us-west-2.compute.amazonaws.com

설정 파일의 마지막 줄에서 동기화 디렉터리 ID를 가져옵니다.

[ec2-user ~]$ tail -n 1 /var/app/current/sites/default/settings.php $config_directories['sync'] = 'sites/default/files/config_4ccfX2sPQm79p1mk5IbUq9S_FokcENO4mxyC-L18-4g_xKj_7j9ydn31kDOYOgnzMu071Tvc4Q/sync';

파일에는 현재 사이트의 해시 키가 포함되어 있습니다. 그러나 현재 값을 무시하고 고유 값을 사용할 수 있습니다.

환경 속성에 동기화 디렉터리 경로와 해시 키를 할당합니다. 프로젝트 리포지토리의 사용자 지정 설정 파일이 이 속성을 읽어 배포 동안 사이트를 구성합니다(앞서 설정한 데이터베이스 연결 속성에 추가해).

Drupal 구성 속성
  • SYNC_DIR - 동기화 디렉터리 경로입니다.

  • HASH_SALT - 환경 속성 요구 사항을 준수하는 모든 문자열 값입니다.

Elastic Beanstalk 콘솔에서 환경 속성을 구성하려면
  1. Elastic Beanstalk 콘솔을 연 다음 리전(Regions) 목록에서 해당 AWS 리전을 선택합니다.

  2. 탐색 창에서 환경을 선택한 다음 목록에서 환경의 이름을 선택합니다.

    참고

    환경이 많은 경우 검색 창을 사용하여 환경 목록을 필터링합니다.

  3. 탐색 창에서 구성을 선택합니다.

  4. 소프트웨어 구성 범주에서 편집을 선택합니다.

  5. 환경 속성에 키 값 페어를 입력합니다.

    
        소프트웨어 수정 구성 페이지의 환경 속성 섹션
  6. 페이지 하단에서 적용(Apply)을 선택합니다.

마지막으로 샘플 프로젝트에는 보안 그룹을 생성하여 해당 환경의 로드 밸런서에 할당하고, loadbalancer-sg.config에 구성된 IP 주소를 사용하여 네트워크에서 포트 80으로 HTTP 액세스하지 못하도록 제한하는 구성 파일(dev.config)이 포함되어 있습니다. 그렇지 않으면 사용자가 Drupal을 설치하고 관리자 계정을 구성하기 전에 제3자가 사이트에 연결을 할 수도 있습니다.

Drupal 구성 업데이트 및 액세스 제약 제거
  1. 프로젝트 디렉터리의 .ebextensions/loadbalancer-sg.config 파일을 삭제합니다.

    ~/drupal-beanstalk$ rm .ebextensions/loadbalancer-sg.config
  2. 사용자 지정 settings.php 파일을 사이트 폴더로 복사합니다.

    ~/drupal-beanstalk$ cp beanstalk-settings.php sites/default/settings.php
  3. 소스 번들을 생성합니다.

    ~/eb-drupal$ zip ../drupal-beanstalk-v2.zip -r * .[^.]* -x "vendor/*"

Elastic Beanstalk에 소스 번들을 업로드하여 Drupal을 환경에 배포합니다.

소스 번들을 배포하려면
  1. Elastic Beanstalk 콘솔을 연 다음 리전(Regions) 목록에서 해당 AWS 리전을 선택합니다.

  2. 탐색 창에서 환경을 선택한 다음 목록에서 환경의 이름을 선택합니다.

    참고

    환경이 많은 경우 검색 창을 사용하여 환경 목록을 필터링합니다.

  3. 환경 개요 페이지에서 [업로드 및 배포]를 선택합니다.

  4. 화면에 표시되는 대화 상자를 사용하여 소스 번들을 업로드합니다.

  5. 배포(Deploy)를 선택합니다.

  6. 배포가 완료되면 사이트 URL을 선택하여 새 탭에서 웹 사이트를 열 수 있습니다.

Auto Scaling 그룹 구성

마지막으로, 최소 인스턴스 개수를 좀 더 늘린 상태에서 환경의 Auto Scaling 그룹을 구성합니다. 사용자 환경의 웹 서버가 단일 장애 지점이 되지 않도록 방지하고 사이트의 서비스를 중지하지 않고 변경 사항을 배포할 수 있도록 항상 두 개 이상의 인스턴스를 실행합니다.

고가용성을 위해 환경의 Auto Scaling 그룹을 구성하려면
  1. Elastic Beanstalk 콘솔을 연 다음 리전(Regions) 목록에서 해당 AWS 리전을 선택합니다.

  2. 탐색 창에서 환경을 선택한 다음 목록에서 환경의 이름을 선택합니다.

    참고

    환경이 많은 경우 검색 창을 사용하여 환경 목록을 필터링합니다.

  3. 탐색 창에서 구성을 선택합니다.

  4. [용량] 구성 범주에서 [편집]을 선택합니다.

  5. Auto Scaling 그룹 섹션에서 최소 인스턴스2로 설정합니다.

  6. 페이지 하단에서 적용(Apply)을 선택합니다.

여러 인스턴스에서 콘텐츠 업로드를 지원하기 위해 샘플 프로젝트는 Amazon Elastic File System을 사용해 공유 파일 시스템을 생성합니다. 사이트에 게시물을 생성하고, 공유 파일 시스템에 저장할 콘텐츠를 업로드합니다. 포스트를 보고 두 인스턴스를 히트하기 위해 페이지를 여러 번 새로 고치고, 공유 파일 시스템이 작동하는지 확인합니다.

정리

Elastic Beanstalk 작업을 완료하면 환경을 종료할 수 있습니다. Elastic Beanstalk는 Amazon EC2 인스턴스, 데이터베이스 인스턴스, 로드 밸런서, 보안 그룹, 경보 등 환경과 연결된 모든 AWS 리소스를 종료합니다.

Elastic Beanstalk 환경을 종료하려면
  1. Elastic Beanstalk 콘솔을 연 다음 리전(Regions) 목록에서 해당 AWS 리전을 선택합니다.

  2. 탐색 창에서 환경을 선택한 다음 목록에서 환경의 이름을 선택합니다.

    참고

    환경이 많은 경우 검색 창을 사용하여 환경 목록을 필터링합니다.

  3. 작업(Actions)을 선택한 후 환경 종료(Terminate Environment)를 선택합니다.

  4. 화면에 표시되는 대화 상자를 사용하여 환경 종료를 확인합니다.

Elastic Beanstalk로 언제든지 애플리케이션을 위한 새로운 환경을 쉽게 생성할 수 있습니다.

또한 Elastic Beanstalk 환경 외부에서 생성한 데이터베이스 리소스를 종료할 수 있습니다. Amazon RDS DB 인스턴스를 종료하면 스냅샷을 생성하고 나중에 이 데이터를 다른 인스턴스로 복원할 수 있습니다.

RDS DB 인스턴스를 종료하려면
  1. Amazon RDS 콘솔을 엽니다.

  2. 데이터베이스를 선택합니다.

  3. DB 인스턴스를 선택합니다.

  4. [ Actions]를 선택한 후 [Delete]를 선택합니다.

  5. 스냅샷을 만들지 선택한 후 삭제를 선택합니다.

다음 단계

애플리케이션을 계속 개발하다 보면 .zip 파일을 수동으로 생성하여 이를 Elastic Beanstalk 콘솔에 업로드하지 않고도 환경을 관리하고 애플리케이션을 배포할 수 있는 방법이 필요할 것입니다. Elastic Beanstalk 명령줄 인터페이스(EB CLI)는 명령줄에서 애플리케이션을 만들고 구성하고 Elastic Beanstalk 환경에 배포하기 위한 사용하기 쉬운 명령을 제공합니다.

샘플 애플리케이션은 구성 파일을 사용하여 PHP 설정을 구성하고 데이터베이스에 테이블을 만듭니다(아직 존재하지 않는 경우). 구성 파일을 통해 환경이 생성되는 동안 인스턴스의 보안 그룹을 구성하여 구성 업데이트에 드는 시간 소모를 줄일 수 있습니다. 자세한 정보는 구성 파일(.ebextensions)을 사용하여 고급 환경 사용자 지정 섹션을 참조하세요.

개발 및 테스트를 위해 환경에 관리형 DB 인스턴스를 직접 추가하는 Elastic Beanstalk 기능을 사용할 수도 있습니다. 환경 내부에서 데이터베이스를 설정하는 지침은 Elastic Beanstalk 환경에 데이터베이스 추가 단원을 참조하세요.

고성능 데이터베이스가 필요한 경우 Amazon Aurora를 사용합니다. Amazon Aurora는 저렴한 비용으로 데이터베이스 기능을 제공하는 MySQL과 호환되는 상용 데이터베이스 엔진입니다. 애플리케이션을 다른 데이터베이스에 연결하려면, 보안 그룹 구성 단계와 RDS 관련 환경 속성 업데이트를 반복합니다.

마지막으로, 프로덕션 환경에서 애플리케이션을 사용하려면 환경에 대한 사용자 지정 도메인 이름을 구성하고 보안 연결을 위해 HTTPS를 활성화할 수 있습니다.