2013-01-17 1 views
15

를 사용하여 RDS 데이터베이스 인스턴스를 생성 할 때 초기 SQL을 실행할 수있는 방법이 있나요 :이를 사용하여 내가 Cloudformation를 사용하여 RDS 인스턴스를 생성하고 cloudformation

 
"Resources": { 
     "myDB": { 
      "Type": "AWS::RDS::DBInstance", 
      "Properties": { 
       "AllocatedStorage": "5", 
       "DBInstanceClass": "db.m1.small", 
       "Engine": "MySQL", 
       "EngineVersion": "5.5", 
       "DBName": "mydb", 
       "MasterUsername": { 
        "Ref": "DBUser" 
       }, 
       "MasterUserPassword": { 
        "Ref": "DBPassword" 
       }, 
       "DBParameterGroupName": { 
        "Ref": "myRDSParamGroup" 
       } 
      } 
     }, 

및 모든 작동합니다. 하지만, 데이터베이스를 만들 때 초기 SQL을 실행해야합니다. 내 앱 스키마를 설정해야합니다. 내 현재 접근법은 앱을 자체 마이그레이션하는 것이지만 클라우드 정보 정의에서 수행하고 싶습니다. 이것이 가능한가?

답변

6

아니요, 불가능합니다. 그러나 EC2 인스턴스를 RDS 인스턴스에 연결하여이를 수행 할 수 있습니다. 아마도 S3에 .sql 파일을 저장하고 EC2 인스턴스의 cloud-init 스크립트를 사용하여 파일을 다운로드하고 실행하십시오.

+3

오늘 람다 함수 + CustomResource를 사용하면 EC2 인스턴스보다 훨씬 더 의미가 있습니다. –

+1

@OdedNiv 정확히 똑같은 작업을하려고합니다. 람다 함수와 커스텀 리소스를 공유 하시겠습니까? –

+0

@RishiGoel 나와 함께 할 사람이 없지만 Lambda는 매우 간단하며 문서는 매우 간단합니다. 내가 곧 여기를 게시 할 것입니다. –

4

CloudFormation 사용자 지정 리소스를 만들 수도 있습니다. SNS here을 사용하여 빌드하는 방법에 대한 좋은 토론이 있습니다. 람다 (Lambda)를 사용하여 빌드하는 것도 가능합니다. 사용자 정의 리소스는 본질적으로 단순한 RPC이므로 스키마를 사용하여 데이터베이스를 초기화하는 것은 어렵지 않습니다.

+1

init에 데이터베이스 스키마/데이터를 로딩하는 것을 담당 할 beanstalk/EC2 리소스를 피하고 싶습니다. 데이터베이스 초기화 스키마/데이터가 우려를 분리하는 또 다른 방법으로 관리되고 응용 프로그램 중심 응용 프로그램과 프로비저닝 구성 요소를 섞지 마십시오. RDS 데이터베이스에 SQL 스크립트를 가져오고 스키마/데이터를 삽입하는 사용자 지정 클라우드 생성 리소스가 좋고 어쩌면 람다를 사용한 다음이 추가 사용자 지정 리소스를 한 번 삭제하는 방법을 찾아야합니다. 이런 고전적인 요구 사항을 수행하는 표준 방법을 찾으면 멋지겠습니까? init DB –

+0

당신이 말하는 모든 것에 동의합니다 - 스키마는 배포 문제입니다. '표준'이 존재하지 않는 이유 중 하나가 액세스 제한 때문일 수 있습니다. 데이터베이스를 초기화하는 사용자 정의 리소스의 경우 쓰기 권한이 있어야하며 이는 바람직하지 않습니다. 그래도 나는 비슷한 문제에 직면하고있다. 커스텀 리소스를 구축하게된다면, 나는 당신이 유용 할 것이라는 희망으로 되돌아와 내가했던 것을 공유 할 것이다. – sigpwned

+0

솔루션을 찾았습니까? 나는 같은 문제에 직면하고있다. 난 쓸만한 플레이 북을 사용하려고 생각하고 있었지만 cloudformation 영역에서 할 수있는 적절한 해결책이 있는지 궁금하다. – Eitan

1

CloudFormation은 아직 해결 방법이 없지만 곧 Database Migration Service 지원을 추가 할 예정입니다.

한편, CodePipeline을 사용하는 경우 훌륭한 솔루션이 있습니다. 마이그레이션을 실행하기 위해 람다 함수를 호출하는 마이그레이션 단계를 만듭니다. 익숙하지 않은 사람들에게 도움이 될 수있는 CodePipeline에서 Lambda를 호출 한 것에 대해 this guide을 우연히 발견했습니다.

관련 문제