기존 버킷과 새 버킷에 동일한 CDN을 사용하는 경우 다시 베이킹할 필요가 없을 수 있지만, 그 타이밍을 정확히 맞추기는 다소 까다로워 보입니다(데이터가 새 버킷에 들어가기 전까지는 CDN 오리진을 변경할 수 없지만, 동기화 과정에서 기존 버킷에 아무것도 업로드되지 않도록 어떻게 보장해야 할까요?)–가능하다고만 언급해 두는 것이 좋을 수도 있습니다.
라파엘, 안녕. 거의 다 끝났어. 현재 이 가이드에서 저는 aws cli와 gsutil을 사용해 기존 버킷에서 로컬로, 그리고 로컬에서 새 버킷으로 동기화하도록 안내하고 있어 (해당 도구를 링크하고, 버킷 이름을 플레이스홀더로 채운 커맨드라인 명령만 제공하고 있지). 그다음 DbHelper를 사용해 테이블을 업데이트해. 중간 크기의 사이트인 내 경우 꽤 빠르게 실행돼. 정말 좋아.
지금 겪는 문제는 기존 설정에 s3_cdn_url이 없어서 해당 이미지들이 게시물에서 여전히 버킷(CDN이 아닌)에 직접 링크되어 있다는 거야. Rebaking(재처리)으로는 해결되지 않아. 새로 업로드된 이미지는 CDN에 올바르게 링크되긴 해. DISCOURSE_S3_ENDPOINT: ''를 설정해서 이 문제를 해결할 수는 없어. 아무런 효과가 없거든. 그래서 데이터베이스를 복원한 후 SiteSetting을 지워야 했어. 그 자체로는 큰 문제가 아니지만, 그걸 알아내려면 여러 번 재빌드를 해야 해서 좀 골치 아팠어.
기존 설정에는 S3 CDN이 정의되어 있지 않았어. 버킷 URL/호스트명이 포함된 1250개의 게시물을 모두 rebake하면 이 문제를 해결할 수 있지만, 그러면 해당 이미지들이 모두 다운로드되고 최적화(최적화 작업)가 수행돼 (기존 서버는 2.7.0.beta5를 실행 중이라 최근 재최적화가 이미 일부 완료되어 있을 줄 알았거든). 이 작업으로 내 가엾은 2GB 서버(Postgres와 redis는 RDS와 elasticache 사용)가 꽤 오랫동안 높은 부하(평균 부하 10~20)를 겪어. 어차피 이 사이트에는 더 큰 EC2 인스턴스가 필요할 수도 있지만, 이 rebake 작업이 서버를 완전히 무너뜨리는(UX에서 500 에러 발생) 점은 좀 의외였어.
대신 해당 게시물들의 cooked 필드에서 버킷 호스트명을 CDN URL로 대체하는 방식으로 처리하는 게 나을까?
@pfaffman 여기까지 이끌어 주셔서 감사합니다.
하지만 제 문제는 마지막 2단계에서 더 복잡해졌습니다.
현재 문제: 일부 이미지가 누락되어 해당 위치에 작은 아이콘만 표시됩니다. 마우스를 올렸을 때 ‘olds3bucket’ 주소가 표시되지만, 클릭하면 전체 크기로 정상적으로 표시되며 URL 바에는 ‘news3bucket’ 경로가 표시됩니다.
주로 기존 버킷의 데이터를 새 버킷으로 동기화하라고 하셨는데, 이는 이미 성공적으로 수행했습니다.
그 후 Discourse 웹 UI에 새 버킷 설정을 입력해야 하는데, 저는 이미 1년 동안 이를 사용하고 있습니다.
이제 기존 버킷 URL을 새 버킷으로 'remap’하라고 하시고, 그 후 rebake를 하라고 합니다. 바로 여기에 문제가 있습니다. 이 작업을 수행하면 (또는 ‘remap’ 단계를 먼저 수행하든 하지 않든, 'rebake’를 하거나, 게시글 설정 메뉴에서 'Rebuild Html’을 실행하든), 아이콘만 표시되던 제 이미지들이 완전히 사라집니다. 해당 위치에는 'white-space’만 표시됩니다. 그래서 즉시 되돌리거나 복원합니다.