[server] 기존 RDS 인스턴스를 Elastic Beanstalk 환경에 연결하는 방법은 무엇입니까?

Elastic Beanstalk 환경을 생성하기 전에 RDS 인스턴스를 생성했습니다. 두 사람은 아무런 문제없이 함께 일하고 있지만 서로 연결하고 RDS_*환경 변수 를 통해 RDS 매개 변수에 액세스 할 수 있기를 바랍니다 .

Elastic Beanstalk 구성 페이지에는 다음이 표시됩니다.

데이터베이스가 없습니다.  새 RDS 데이터베이스를 만들거나 기존 데이터베이스를 사용할 수 있습니다.

첫 번째 링크는 RDS 인스턴스를 현재 위치에 작성하고 현재 환경에 링크하지만 두 번째 링크는 이 문서 페이지로 리디렉션됩니다 . 불행히도 새 RDS 인스턴스를 만드는 방법 만 설명하고 기존 인스턴스를 연결하는 방법은 설명하지 않습니다.

기존 RDS 인스턴스를 Elastic Beanstalk 환경에 어떻게 연결합니까?



답변

“선택된”답변은 정확하지만, EB와 RDS를 함께 사용하는 대부분의 사람들이 아직 모르는 경우에도 동일한 요구 사항을 가져야하므로 추가 정보를 추가하고 싶었습니다.

첫 번째 질문 : 왜 RDS 인스턴스가 EB 환경 외부에 존재하기를 원하십니까?
답변 : RDS 인스턴스의 수명이 EB 환경의 수명과 연결되지 않도록합니다. 즉, 환경을 제거 할 때 환경을 사용하여 DB를 삭제하고 싶지 않습니다. RDS 인스턴스를 실제로 환경에 연결하려는 이유는 거의 없습니다.

EB와 독립적으로 RDS를 설정하는 문제는 RDS_ * 변수가 자동으로 채워지지 않으므로 값을 검색하여 웹 콘솔 또는 .ebextensions를 통해 값을 채워야한다는 것입니다. 그러나 보안 허점이 될 수 있으므로 코드에 자격 증명을 추가하지 않는 것이 좋습니다.

그러나 다음 문제는 프로그래밍 방식으로 환경 (예 : 청록색 제로 다운 타임 배포)을 만들려면 매번 민감한 RDS 값 (예 : 비밀번호)을 채우는 방법에 대한 솔루션이 필요하다는 것입니다. 불행히도이를 위해서는 AWS 스택을 추가로 드롭 다운하고 CloudFormation 템플릿을 사용해야합니다.

이상적인 솔루션은 EB를 개선하여 질문에 언급 된 “기존 데이터베이스 사용”링크를 사용하면 실제로 기존 RDS 데이터베이스를 수동으로 연결 한 다음 RDS_ * 환경 변수를 도움이되지 않는 문서로 리디렉션하지 않고 자동으로 다시 채울 수 있습니다. . AWS Support는이 기능 요청이 기능 요청으로 제기되었지만 당연히 정해진 시간이 없다고 밝혔다.


답변

AWS 지원의 답변 :

기존 데이터베이스를 EB 환경에 연결하려면 관리 콘솔을 통해 스냅 샷을 생성 한 다음 데이터 계층에서 “새 RDS 데이터베이스 생성”을 선택해야합니다. RDS 인스턴스가 Beanstalk 환경의 기본 Cloudformation 스택에 연결되는 방식으로 인해 스냅 샷에서 새 인스턴스를 시작하지 않고 실행중인 RDS 인스턴스를 기존 EB 환경에 연결하는 방법이 없습니다. 현재 RDS 인스턴스의 스냅 샷을 생성하는 경우 원하는 경우 EB에서 새로 시작할 수 있습니다.

RDS 인스턴스가 환경 외부에 존재하게하려면 EB 콘솔을 통해 환경 변수로 연결 매개 변수를 제공하면됩니다 (구성-> 웹 계층-> 소프트웨어 구성). 그런 다음 PHP를 통해 환경 변수를 읽을 수 있습니다 .


답변

최근에이 작업이 필요했고 AWS CLI / EB CLI를 사용하여 단계를 자동화하고 싶었습니다. 어쨌든 다음은 기본적으로 내가 수행 한 단계입니다 (이미 RDS 인스턴스를 생성했다고 가정).

  1. VDS 기본 그룹이 아닌 RDS 인스턴스에 대해 다른 보안 그룹 설정이 있는지 확인하십시오. 이를 위해 aws ec2 create-security-group(AWS CLI)를 사용하고 (AWS CLI)를 사용하여 RDS 인스턴스와 연결할 수 aws rds modify-db-instance있습니다.
  2. Beanstalk 애플리케이션을 초기화하십시오 (저는 eb init(EB CLI)를 사용했습니다).
  3. RDS 데이터베이스 (DB 이름, 호스트 이름, 포트 등)에서 관련 구성 데이터를 읽습니다. 나는 그것을 위해 사용 aws rds describe-db-instances했다.
  4. 해당 데이터 RDS_*를 사용하여 환경을 만들 때 (또는 나중에 환경을 배포 할 때) EB 인스턴스 에서 환경 변수를 설정하십시오 . eb create/ eb deploy(EB CLI)를 사용 하여이 작업을 수행 할 수 있습니다 . 처음에 환경을 만들면 RDS 데이터베이스에 액세스하기위한 보안 그룹이 올바르게 설정되지 않아 환경이 저하됩니다.
  5. EB 구성에서 관련 보안 그룹을 가져옵니다. 자동 확장 그룹 및 탄력적로드 밸런서에 필요한 그룹이 필요합니다. 이를 위해 aws elasticbeanstalk describe-configuration-settings(AWS CLI)를 사용할 수 있습니다 .
  6. 1 단계에서 설정 한 보안 그룹에 대해 데이터베이스로의 인바운드 트래픽에 대해 자동 확장 그룹에 권한을 부여하십시오 aws ec2 authorize-security-group-ingress. DB 보안 그룹이 아닌 VPC 보안 그룹을 사용 하는 (AWS CLI)를 사용했습니다. 해당 지역에서 지원되는 경우 DB 보안 그룹을 사용하여 동일하게 달성 할 수 있습니다. 인바운드 트래픽 규칙을 설정할 때 데이터베이스 엔진에 올바른 프로토콜 및 포트를 사용해야합니다.
  7. 탄력적로드 밸런서 그룹을 RDS 인스턴스의 보안 그룹에 추가합니다 aws rds modify-db-instance((AWS CLI) 사용).
  8. Elastic Beanstalk 애플리케이션을 재부팅하거나 재배치합니다 (예 : eb deploy(EB CLI) 사용). 배포시 마이그레이션을 실행하기 때문에 재배치해야했습니다.

그것은 대부분입니다. 이제 호스트 이름과 DB 자격 증명을 동일하게 유지하면 EB 인스턴스를 관리하지 않고도 RDS 인스턴스를 확장 / 축소 할 수 있습니다. 해당 접근 방식으로 블루 / 그린 배포를 수행 할 수도 있습니다 (그러나 보안 그룹 액세스를 취소하려면 몇 가지 추가 단계를 수행해야 할 수도 있음).


답변

구성별로 기존 보안 그룹을 EB EC2 인스턴스에 추가하는 가장 쉬운 방법은 https://github.com/awsdocs/elastic-beanstalk-samples/blob/master/configuration-files/aws-provided/에 설명 된 간단한 파일을 사용하는 것입니다. security-configuration / securitygroup-addexisting.config

예를 들면 다음과 같습니다.

$ cat .ebextensions/securitygroup-addexisting.config
option_settings:
  - namespace: aws:autoscaling:launchconfiguration
    option_name: SecurityGroups
    value: rds-launch-wizard-1


답변

나는 같은 문제에 직면하고 다음 단계를 사용하여 수정했습니다.

1) EC2 인스턴스로 이동하여 보안 그룹 예 “sg-121212121212″를 확인하십시오.

2) RDS 보안 그룹으로 이동 ad = nd 인바운드 트래픽

3) 규칙을 편집하여 모든 트래픽을 선택하고 새 ebs 보안 그룹 “sg-121212121212″를 추가하십시오.

도움이 되길 바랍니다.


답변

Elastic에서 RDS를 생성합니다. 새로운 올바른 보안 그룹이 추가됩니다. 기존 RDS의 보안 그룹을 수정합니다. 웹 구성 및 모든 작업에서 올바른 연결 문자열을 설정하십시오 …


답변