메뉴
AWS Elastic Beanstalk
개발자 안내서 (API Version 2010-12-01)

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

이 자습서에서는 AWS Elastic Beanstalk 외부에서 RDS DB 인스턴스를 시작하는 절차 및 연결을 위해 WordPress 웹 사이트를 실행하는 고가용성 환경을 구성하는 절차를 살펴봅니다. Elastic Beanstalk 외부에서 DB 인스턴스를 실행하면 데이터베이스가 해당 환경의 수명 주기와 분리되며, 따라서 여러 환경의 동일한 데이터베이스에 연결하거나 데이터베이스를 서로 바꾸거나 데이터베이스에 영향을 주지 않고 블루/그린 배포를 수행할 수 있습니다.

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. 탐색 창에서 [Instances]를 선택합니다.

  3. Launch DB Instance를 선택합니다.

  4. [DB Engine]과 미리 설정된 구성을 선택합니다.

  5. [Specify DB Details] 아래에서 [DB Instance Class]를 선택합니다. 고가용성을 위해 [Multi-AZ Deployment]를 [Yes]로 설정합니다.

  6. [Settings] 아래에서 [DB Instance Identifier], [Master Username], [Master Password](및 [Confirm Password])에 값을 입력합니다. 나중을 위해 입력한 값을 적어 둡니다.

  7. Next를 선택합니다.

  8. [Network and Security] 설정에서 다음을 선택합니다.

    • VPC - Default VPC

    • Subnet Group - default

    • 공개 액세스 - No

    • 가용 영역 - No Preference

    • VPC 보안 그룹 - Default VPC Security Group

  9. [Database Name]에 ebdb를 입력한 후 나머지 옵션의 기본 설정을 확인합니다. 다음 옵션의 값을 적어 둡니다.

    • Database Name

    • Database Port

  10. Launch DB Instance를 선택합니다.

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

RDS 인스턴스의 보안 그룹에서 수신 규칙을 수정하려면

  1. Amazon RDS 콘솔을 엽니다.

  2. [ Instances]를 선택합니다.

  3. DB 인스턴스의 항목 옆에 있는 화살표를 선택하여 보기를 확장합니다.

  4. [Details] 탭을 선택합니다.

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

    참고

    [Details] 탭이 열려 있는 동안, 나중에 사용할 수 있도록 이 페이지에 표시된 [Endpoint]와 보안 그룹 이름을 적어 둡니다.

    보안 그룹 이름은 괄호 앞에 [Security Groups]에 표시된 링크의 첫 번째 값입니다. 괄호 안의 두 번째 값은 보안 그룹 ID입니다.

  6. 보안 그룹 세부 정보에서 [Inbound] 탭을 선택합니다.

  7. [Edit]를 선택합니다.

  8. Add Rule을 선택합니다.

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

  10. [Source]에서 [Custom]을 선택한 다음 보안 그룹의 그룹 ID를 입력합니다. 이렇게 하면 보안 그룹의 리소스가 동일한 그룹 내의 다른 리소스에서 데이터베이스 포트의 트래픽을 수신할 수 있습니다.

  11. Save를 선택합니다.

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

WordPress 다운로드

AWS Elastic Beanstalk을 사용하여 WordPress 배포를 준비하려면, WordPress 파일을 컴퓨터에 복사하고 일부 구성 정보를 제공해야 합니다. AWS Elastic Beanstalk은 ZIP 또는 WAR 파일 형식의 소스 번들만 지원합니다.

WordPress를 다운로드하고 소스 번들을 생성하려면

  1. http://wordpress.org/download/를 엽니다.

  2. 최신 릴리스를 다운로드합니다.

  3. 다운로드한 WordPress 파일을 로컬 컴퓨터의 폴더에 압축 해제하며, 이 과정에서 wordpress-beanstalk으로 이름을 바꿔야 합니다.

  4. 다음 리포지토리에 구성 파일을 다운로드합니다.

    https://github.com/awslabs/eb-php-wordpress/releases/download/v1.0/eb-php-wordpress-v1.zip
  5. 구성 파일을 wordpress-beanstalk 폴더로 압축 해제합니다.

  6. wordpress-beanstalk 폴더의 구조가 정확한지 확인합니다.

    ├── .ebextensions ├── wp-admin │ ├── css │ ├── images │ ├── includes │ ├── js │ ├── maint │ ├── network │ └── user ├── wp-content │ ├── plugins │ └── themes ├── wp-includes │ ├── certificates │ ├── css │ ├── customize │ ├── fonts │ ├── ID3 │ ├── images │ ├── js │ ├── pomo │ ├── random_compat │ ├── Requests │ ├── rest-api │ ├── SimplePie │ ├── Text │ ├── theme-compat │ └── widgets
  7. 기본 VPC 및 서브넷의 ID, 퍼블릭 IP 주소를 사용하여 .ebextensions 폴더에서 구성 파일을 수정합니다.

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

    .ebextensions/dev.config 파일은 해당 환경의 IP 주소에 대한 액세스를 제한하여 WordPress가 설치되는 동안 보호합니다. 파일 상단 근처에 있는 자리 표시자 IP 주소를 퍼블릭 IP 주소로 바꾸십시오.

  9. 운영 체제에 따라 다음 방법 중 하나를 사용하여 wordpress-beanstalk 폴더(상위 디렉터리 아님)의 파일 및 폴더에서 ZIP 파일을 만듭니다.

  10. Windows - Windows 탐색기에서, 파일 및 폴더를 선택하고, 마우스 오른쪽 버튼을 누른 다음, Send to, Compressed (zipped) Folder를 선택합니다. 파일 이름을 wordpress-x.y.z.zip으로 지정하고, 여기서 x.y.z는 WordPress 버전입니다.

    --또는--

    Mac OS X 및 Linux - 다음 명령을 사용하며, 여기서 x.y.z는 WordPress 버전입니다.

    zip -r ../wordpress-x.y.z.zip .

Elastic Beanstalk 환경 시작

AWS Management Console을 사용하여 Elastic Beanstalk 환경을 시작합니다.

  1. 미리 구성된 다음 링크를 사용하여 Elastic Beanstalk 콘솔을 엽니다. console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=wordpress-beanstalk&environmentType=LoadBalanced

  2. [Platform]에서 [PHP]를 선택합니다.

  3. [App code]에서 [Upload your code]를 선택합니다.

  4. [Upload]를 선택하고 WordPress 파일에 대해 생성된 ZIP 파일을 탐색합니다.

  5. [Upload]를 선택하여 애플리케이션 코드를 선택합니다.

  6. Configure more options를 선택합니다.

  7. [Configuration presets]에서 [Custom configuration] 구성을 선택합니다.

  8. [Change platform configuration]을 선택하고 드롭다운 메뉴에서 [64bit Amazon Linux 2016.09 v2.3.1 running PHP 5.6]을 선택한 후 [Save]를 선택합니다.

  9. 모든 옵션을 검토하고 해당 옵션이 적절하면 [Create app]을 선택합니다.

환경을 생성하는 데 약 5분이 걸립니다.

보안 그룹 및 환경 설정 구성

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

환경에 보안 그룹을 추가하려면

  1. Elastic Beanstalk 콘솔을 엽니다.

  2. 해당 환경의 관리 페이지로 이동합니다.

  3. [Configuration]을 선택합니다.

  4. [Instances] 섹션에서 설정 아이콘( 편집 )을 선택합니다.

  5. [EC2 security groups]에서 자동 생성된 보안 그룹의 이름 뒤에 쉼표를 입력하고 RDS DB 인스턴스의 보안 그룹 이름을 입력합니다. 이는 앞에서 보안 그룹을 구성하는 중에 적어둔 이름입니다.

  6. Apply를 선택합니다.

  7. 경고를 읽은 후 [Save]를 선택합니다.

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

Amazon RDS DB 인스턴스의 환경 속성을 구성하려면

  1. Elastic Beanstalk 콘솔을 엽니다.

  2. 해당 환경의 관리 페이지로 이동합니다.

  3. [Configuration]을 선택합니다.

  4. [Software] 구성 카드에서 [Modify]를 선택합니다.

  5. [Environment Properties] 섹션에서 애플리케이션이 연결 문자열을 구성하기 위해 읽는 변수를 정의합니다. 통합된 RDS DB 인스턴스가 있는 환경과의 호환성을 위해 다음을 사용합니다.

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

      Amazon RDS 콘솔 레이블 – 호스트 이름은 [Endpoint]입니다.

    • RDS_PORT – DB 인스턴스가 연결을 허용하는 포트입니다. 기본값은 DB 엔진에 따라 다릅니다.

      Amazon RDS 콘솔 레이블 – Port

    • RDS_DB_NAME – 데이터베이스 이름(ebdb)입니다.

      Amazon RDS 콘솔 레이블 – [DB Name]

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

      Amazon RDS 콘솔 레이블 – [Username]

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

    속성을 추가하려면 더하기 기호(+)를 선택합니다.

  6. Apply를 선택합니다.

WordPress 설치

WordPress 설치를 완료하려면

  1. Elastic Beanstalk 콘솔을 엽니다.

  2. 해당 환경의 관리 페이지로 이동합니다.

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

  4. 표준 설치를 수행합니다. wp-config.php 파일이 이미 소스 코드에 있으며 환경에서 데이터베이스 연결 정보를 읽도록 구성되었기 때문에, 연결을 구성하라는 메시지가 표시되지 않습니다.

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

키와 솔트 업데이트

WordPress 구성 파일 wp-config.php는 환경 속성에서 키와 솔트에 대한 값을 읽습니다. 현재 이 속성은 .ebextensions 폴더의 wordpress.config 파일에 의해 모두 test 로 설정되어 있습니다.

해시 솔트는 어떤 값이어도 상관없으나 소스 제어에 저장할 순 없습니다. Elastic Beanstalk 콘솔을 사용하여 이 속성을 환경에 바로 설정합니다.

환경 속성을 추가하려면

  1. Elastic Beanstalk 콘솔을 엽니다.

  2. 해당 환경의 관리 페이지로 이동합니다.

  3. 탐색 창에서 [Configuration]를 선택합니다.

  4. Software Configuration에서 기어 모양 아이콘을 선택합니다.

  5. Environment Properties에 다음 인증 설정을 정의합니다.

    • AUTH_KEY - 선택한 AUTH_KEY 값.

    • SECURE_AUTH_KEY - 선택한 SECURE_AUTH_KEY 값.

    • LOGGED_IN_KEY - 선택한 LOGGED_IN_KEY 값.

    • NONCE_KEY - 선택한 NONCE_KEY 값.

    • AUTH_SALT - 선택한 AUTH_SALT 값.

    • SECURE_AUTH_SALT - 선택한 SECURE_AUTH_SALT 값.

    • LOGGED_IN_SALT - 선택한 LOGGED_IN_SALT 값.

    • NONCE_SALT - 선택한 NONCE_SALT 값.

    환경에 속성을 바로 설정하게 되면 wordpress.config에 값을 재정의합니다.

환경 업데이트

이 자습서에서는 보안 그룹을 생성하여 해당 환경의 로드 밸런서에 할당하고, dev.config에 구성된 IP 주소를 사용하여 네트워크에서 포트 80으로 HTTP 액세스하지 못하도록 제한하는 구성 파일(loadbalancer-sg.config)에 대해 다룹니다. 이렇게 하면 WordPress 설치를 완료하고 관리자 계정을 구성하기 전에 제3자가 사이트에 침입할 가능성이 차단됩니다. 다음 단계에 따라 로드 밸런서 구성에서 이 제한 조건을 삭제하고 인터넷 사이트를 열 수 있습니다.

제한을 제거하고 환경을 업데이트하려면

  1. 로컬 컴퓨터에서 wordpress-beanstalk 폴더의 .ebextensions/loadbalancer-sg-config 파일을 삭제합니다.

  2. 운영 체제에 따라 다음 방법 중 하나를 사용하여 wordpress-beanstalk 폴더(상위 디렉터리 아님)의 파일 및 폴더에서 ZIP 파일을 만듭니다.

  3. Windows - Windows 탐색기에서, 파일 및 폴더를 선택하고, 마우스 오른쪽 버튼을 누른 다음, Send to, Compressed (zipped) Folder를 선택합니다. 다음 형식을 사용하여 파일 이름을 지정하며, 여기서 x.y.z는 WordPress 버전입니다.

    wordpress-x.y.z-v2.zip

    --또는--

    Mac OS X 및 Linux - 다음 명령을 사용하며, 여기서 x.y.z는 WordPress 버전입니다.

    zip -r ../wordpress-x.y.z-v2.zip .
  4. Elastic Beanstalk 콘솔을 엽니다.

  5. 해당 환경의 관리 페이지로 이동합니다.

  6. [Upload and Deploy]를 선택합니다.

  7. [Choose File]을 선택하고 WordPress 파일에 대해 생성된 ZIP 파일을 탐색합니다.

  8. 이전 버전과 업데이트된 버전을 구별하는 [Version label]을 입력합니다.

  9. [Deploy]를 선택합니다.

Autoscaling 구성

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

고가용성을 위해 환경의 Auto Scaling 그룹을 구성하려면

  1. Elastic Beanstalk 콘솔을 엽니다.

  2. 해당 환경의 관리 페이지로 이동합니다.

  3. [Configuration]을 선택합니다.

  4. [Scaling] 섹션에서 설정 아이콘( 편집 )을 선택합니다.

  5. [Auto Scaling] 아래에서 [Minimum instance count]를 2로, [Maximum instance count]를 2보다 큰 값으로 설정합니다.

  6. Apply를 선택합니다.

복습

환경을 시작하면 다음 리소스가 만들어집니다.

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

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

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

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

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

  • Auto Scaling 그룹 – 인스턴스가 종료되거나 사용할 수 없게 되면 인스턴스를 교체하도록 구성된 Auto Scaling 그룹입니다.

  • Amazon S3 버킷 – Elastic Beanstalk 사용 시 생성된 소스 코드, 로그 및 기타 결과물의 스토리지 위치입니다.

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

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

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

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

참고

Elastic Beanstalk가 만드는 S3 버킷은 환경 간에 공유되며, 환경 종료 중에 삭제되지 않습니다. 자세한 내용은 Amazon Simple Storage Service에서 Elastic Beanstalk 사용 단원을 참조하십시오.

정리

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

Elastic Beanstalk 환경을 종료하려면

  1. Elastic Beanstalk 콘솔을 엽니다.

  2. 해당 환경의 관리 페이지로 이동합니다.

  3. [Actions]를 선택한 후 [Terminate Environment]를 선택합니다.

  4. [Confirm Termination] 대화 상자에 환경 이름을 입력한 후 [Terminate]를 선택합니다.

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

RDS DB 인스턴스를 종료하려면

  1. Amazon RDS 콘솔을 엽니다.

  2. [ Instances]를 선택합니다.

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

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

  5. 스냅샷을 만들지 선택한 후 [Delete]를 선택합니다.

DynamoDB 테이블을 삭제하려면

  1. DynamoDB 콘솔에서 테이블 페이지를 엽니다.

  2. 테이블을 선택합니다.

  3. [Actions]를 선택한 후 [Delete table]을 선택합니다.

  4. [Delete]를 선택합니다.

다음 단계

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

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

개발 및 테스트를 위해 환경에 관리형 DB 인스턴스를 바로 추가하는 Elastic Beanstalk의 기능을 사용할 수 있습니다. 환경 내부에서 데이터베이스를 설정하는 지침은 Elastic Beanstalk 환경에 데이터베이스 추가을 참조하십시오.

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

프로덕션 환경에서 애플리케이션을 사용하려는 경우, 환경에 대한 사용자 지정 도메인 이름을 구성합니다.

보안 연결을 위해 HTTPS를 활성화하려는 경우를 대비해 WordPress 플러그인을 지원합니다. Really Simple SSL 플러그인이 한 가지 예입니다.