AWS DynamoDB cross region replication 중, replication connection 의 상태가 bootstrap failed 로 실패됩니다.


AWS tokyo region 에서 dynamodb 를 이용하여 유저 타임라인을 가용중입니다.

원래 테이블의 스펙은 다음과 같습니다.

  • Storage size (in bytes) 37.31 GB
  • Item count 287,797,377

replication 을 하려는 이유는 다음 두 가지입니다.

  • dynamodb 특성 상 내부적으로 생성된 파티션이 다시 줄어들지는 않습니다.
    초기 구현에 문제가 있어 운영중에 테이블의 데이터를 압축했습니다.
    100G 까지 늘어난 적이 있습니다. (총 10개 파티션)
    10개 파티셔닝으로 인해 현재는 4개 파티션만 운영해도 되는데, 비용 낭비가 있어 이를 줄이려 합니다.
  • 최근 AWS seoul region 이 생겨났습니다.
    향후 region 을 seoul 로 옮기는 것도 검토중입니다.

replication 의 상세 작업은 다음과 같습니다.

  • 증감분을 포함하여 동일 region에 복사합니다.
  • 복사가 완료되면 origin table 과 replication table 을 뒤바꿀 것입니다.

아래 AWS 문서를 참고했습니다.
http://docs.aws.amazon.com/ko_kr/amazondynamodb/latest/developerguide/Streams.CrossRegionRepl.Walkthrough.Step2.html

문제는 cloudformation 을 이용하여
elastic beanstalk 과 ECS 를 자동으로 실행하고 replication group 을 만들고 복사를 진행하면
약 1일 정도 뒤에 ECS 컨테이너가 죽어있게 됩니다.
오류 코드는 BOOTSTAP_FAILED 입니다.

해당 오류 코드와 관련한 문서는 다음과 같습니다.
http://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/Streams.CrossRegionRepl.Troubleshooting.html
해당 오류가 발생하면 cloudformation 에서 update stack으로 설정 변경 후 재기동하라는데 마찬가지 결과만 나옵니다.

다만 의심이 가는 부분은
ECS 의 service 에 할당된 cluster가 1개 뿐이고 늘어나지 않는것.
ECS 로 생성되는 instance type 을 변경해도 task 에 정의된 CPU&memory 설정은 고정되어 있는 것.
이 정도입니다.

강제로 해당 설정을 변경하기도 해 보았으나 결과는 항상 동일했습니다.
현재는 cloudformation 의 update stack 이 아닌,
replication group 을 만드는 콘솔에서 group 을 삭제 후 다시 생성하고 있는데 제대로 처리가 되고 있는건지 모르겠습니다.

고수님들 조언 부탁드립니다.


조회수 561


2 답변


저도 궁금해서 AWS 한국 사용자 그룹이라는 곳에 질문을 올려 봤는데요. 다음과 같은 답변이 있더라구요.

한글로 된 기술문서에 나와있는거 같습니다. 생성 중 상태로 고착된 복제 그룹(BOOTSTRAP_FAILED)로 검색하면 나오네요. Note 부분에서 좀 더 자세한 내용이 있는데요, 파티션에 따라서 인스턴스 유형을 조절해야 한다고 나와있네요.

서울 리전에서 ECS를 아직 지원하지 않아서 생기는 문제 아닐까요?

참고가 되시면 좋겠네요.

  • 2016년 02월 12일에 작성됨
    루비와 파이썬을 좋아합니다. 새로운 언어를 배우는것도 좋아해요. 모바일 게임도 조금 만들어 봤습니다.

  • 해당 문서를 확인해보았습니다. 제가 작성한 문서의 한글버전 (질문 작성 이후에 번역이 완료된 것 같습니다.) 입니다. 내용은 크게 다른 것은 없고 그렇게 EcsInstanceType 을 변경하거나, 수를 조정해도 결과는 항상 같습니다. 다만 그렇게 뜬 Ecs Instance 에 할당된 task 정의가 항상 고정인데 여기에는 CPU 나 메모리 크기 제한 역시 고정이라는 의미가 포함됩니다. 이를 cloudformation stack 에서 변경할 수는 없는건지요?    Aiden Moon   2016.2.15 18:18     
  • ㅎㅎ 감사합니다. 페이스북 그룹에 제가 답글 달았어요.    Aiden Moon   2016.2.15 18:30     

자문자답 하나. 기록을 위해 남깁니다.

위의 오류와는 비슷하면서도 별개지만, CloudFormation Stack 에서의 template 가 업데이트되면서 버그가 발생하는 것 같습니다.

제가 문의를 한 것은 BOOTSTRAP_FAILED 상태가 하루 정도 지나고 나타난다는 것이었는데
언제부터인가 시작하자마자 BOOTSTRAP_FAILED 가 나타나고 있습니다. 이는 CloudFormation 으로 생성된 beanstalk application 이 활성화되면
자신을 띄운 CloudFormation 에 특정 상태값을 보내는데
이 때 ListStackResources 라는 권한이 없어서 오류가 발생합니다.

이 때에는 해당하는 IAM role 을 찾아 cloudformation:ListStackResources 권한을 부여해주면 됩니다.


로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close